Download as pdf or txt
Download as pdf or txt
You are on page 1of 39

GemSim software

Software Session

Rémi Eté

CERN, Geneva

4 September 2012

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 1 / 39


Outline

1 GemSim Software

2 Geant4

3 GemSim Architecture

4 Modules

5 Extras

6 Run the application

7 Conclusion

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 2 / 39


GemSim Software
What is it ?

Topic
• Software using Geant4 toolkit
• Written in C++
• Simulation for Gem based detector (single, double, triple)
• Macroscopic studies (no ionization)
• (will) Produce input file for Garfield
• Multiplateform software (Linux , Mac OS X , Windows)

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 3 / 39


GemSim Software
Needed Packages

Mandotory Packages
• Geant4 4.2.p2 (dev version)
→ Sucessfuly compiled and run with Geant4 9.5.p1
• log4cplus
→ Logging library for debug
• ROOT
→ Analysis framework and analysis libraries. Used to generate ROOT output file

More Packages...
• Doxygen
→ Generate a html documentation for classes.
• svn (SubVersion)
→ Versioning software. Checkout for only-reader user and commits for writer user

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 4 / 39


Geant4
What is it ?

• Toolkit for simulation of the passage of particles through the matter written in C++.
Made of libraries (.a and .so) you can link to your application.

• Define materials (NIST), processes , cross sections, geometry, user actions ,


particles, ...

• Simulation at macroscopic level. Used to track a scattered particle through a


detector. Ionization not well done.

• In our case for GemSim, we can not simulate the avanlanche process in GEM
detector. Work forwarded to Garfield !

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 5 / 39


Geant4
Sequential run

Runs
Run #1
Run #2 1 Run = Ne Number of Event

Run #Nr

Events
Event #1
1 Event = Nt Number of Tracks
Event #2

Event #Ne
Tracks
Stack New track 1 Track = Ns
Track #1
Track #2
Number of …
Steps Track #Nt

Track treated
Steps Step #1
Step #2

Track Trash
Track Priority Step#Ns
deleted
changed

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 6 / 39


Geant4
Mandatory classes

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 7 / 39


GemSim Architecture
Modules

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 8 / 39


Geometry
Topic

• Provide a generic module for geometry definition

• Define different types of geometry

• Uses abstraction to provide a geometry interface (AbstractGeometry )

• Uses a factory design pattern

• Uses a messenger as a UI

• Detector type can be set via the UI (steering file)

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 9 / 39


Geometry
Working Principle

GemGeometryConstruction
geometryModel = "Model_1" ;
GeometryFactory::GetGometryModel(geometryModel) ;

Ask for a
geometry type

GeometryFactory
AbstractModel *geomModel == NULL ;
if(model == "Model_1")
geomModel = new Model_1() ;
if(model == "Model_2")
geomModel = new Model_2() ;

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 10 / 39


Geometry
Class Diagram

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 11 / 39


Geometry
Example

steering file
## gemsim.steer steering file ##
/GemSim/detector/geometryModel RoughGemGeometry

terminal
$ ./gemsim gemsim.steer

Output :

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 12 / 39


Geometry
Extend it !

Example : New geometry class called "MyGeom"

You have to :
• Create the class MyGeom which inherits from AbstractGeometry
• Implement the pure virtual methods Build() and PlaceGeometry()
• Add a few lines in the GeometryFactory class to provide a geometry getter

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 13 / 39


Primaries
Topic

Topic
• Define the primary action for a run
• Uses a messenger as UI
• Differents settings can be done with the UI (mac file)

Class Diagram

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 14 / 39


Primaries
Example

Mac file
## gemsim.mac mac file ##
...
Gemsim/primaries/particleName mu- # default is gamma
GemSim/primaries/kineticEnergy 150 GeV # default is 1 GeV
...

Terminal
$ ./gemsim -m gemsim.mac

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 15 / 39


Physics Lists
Topic

• Provide a generic module for physics lists definition

• Uses abstraction to provide a geometry interface (G4VUserPhysicsList)

• Uses a factory design pattern

• Uses a messenger as a UI

• Physics list can be set via the UI (steering file)

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 16 / 39


Physics Lists
Class Diagram

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 17 / 39


Physics Lists
Example

steering file
## gemsim.steer steering file ##
...
Gemsim/PhysicsList/name gemsim # default is QGSP_FTFP_BERT
...

Terminal
$ ./gemsim gemsim.steer

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 18 / 39


Physics Lists
Extend it !

• GemPhysicsList class already created but not well implemented...

• Define specific particles in ConstructParticle() method.

• Define specific processes in ConstrcutProcess() method.

• Set the specific cuts in SetCuts() method.

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 19 / 39


User Interface
Topic

• Intermediate objects between the user and the program


• Provide a controlled access to the software
• Can change the default behavior the software
• Provides a set of commands
• Two types of file :
• steering file (.steer) : sets information at Pre_Init state like the geometry model or the
physics list to be used.
• mac file (.mac) : sets different types of information available whatever the Geant4
machine state

Execution example
$ ./gemsim gemsim.steer # only steering file
$ ./gemsim -m gemsim.mac # only mac file
$ ./gemsim -m gemsim.mac gemsim.steer # both

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 20 / 39


User Interface
Messengers

Messengers are classes which define directories and commands for the user.

A messenger is attached to another class on which it acts.

A messenger has 2 methods which has to be defined by the developer :


• SetNewValue(G4UIcommand *command, G4String newValue) : Set a new value
for a given command
• GetCurrentValue(G4UIcommand *command) : Get the current value for a given
command

Directories and commands definition declared in constructor.

For different type of command and how to define directories and commands, see
Geant4 developer’s manual !

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 21 / 39


User Interface
Example : Geometry model setting complete sequence

## steering file ## Steering file


...
/GemSim/detector/geometryModel GE1_1Station
...

GemDetectorMessenger
GemDetectorMessenger ::GemDetectorMessenger () {
detectorDir = new G4UIdirectory("/GemSim/detector/") ;
...
geometryModelCmd = new G4UIcmdWithAString("/GemSim/detector/geometryModel", this) ;
...
}

void GemDetectorMessenger ::
SetNewValue(G4UIcommand *command, G4String newValue) {
...
if(command == geometryModelCmd)
gemDetectorConstruction->SetGeometryModel(newValue) ;

}

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 22 / 39


User Interface
Example : Geometry model setting complete sequence

GemDetectorConstruction
G4VPhysicalVolume *GemDetectorConstruction ::Construct() {

AbstractGeometry* geometry = GeometryFactory::GetGeometryModel(model) ;
geometry->Build() ;
geometry->PlaceGeometry(rotationMatrix,translationVector,worldVolume) ;
...
}

GeometryFactory
GeometryFactory::GetGeometryModel(string model) {
AbstractGeometry *geometry = NULL ;
if(model == "GE1_1Station")
geometry = new GE1_1Station() ;

return geometry ;
}

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 23 / 39


User Interface
Messengers in GemSim

Here the list of messengers in use in GemSim :


• ControlMessenger attached to Control
• GemDetectorMessenger attached to GemDetectorConstruction
• GemEventMessenger attached to GemEventAction
• GemRunMessenger attached to GemRunAction
• GemStackingMessenger attached to GemStackingAction
• GemTrackingMessenger attached to GemTrackingAction
• GemPhysicsListMessenger attached to PhysicsListFactory
• GemPrimaryGeneratorMessenger attached to GemPrimaryGeneratorAction

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 24 / 39


Analysis
Topic

• Aims to store analysis variables at different execution level (Run, Event , ...)

• Define an interface for different type of Analysis

• A singleton design pattern is used for each analysis implementation

• A factory design pattern is used to provide an analysis pointer and store them

• Output file is written in root file with a given architecture :


• One output file is written.
• For each analysis type a TTree is created named by the analysis type.
• For a given analysis, each analysis variable is "branched" (TBranch)

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 25 / 39


Analysis
Class Diagram

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 26 / 39


Analysis
Example : Tracking analysis

GemTrackingAction :
GemTrackingAction : :GemTrackingAction() {
analysis = AnalysisFactory : :GetAnalysis("TrackingAnalysis") ;
}

void GemTrackingAction : :PostUserTrackingAction(const G4Track *aTrack) {


int id = aTrack->GetTrackID() ;
double trackLength = aTrack->GetTrackLength() ;
analysis->ClearAnalysisVariables() ; // initialize the analysis storage
analysis->PushBackAnalysisVariable("trackLength",trackLength) ;
analysis->PushBackAnalysisVariable("trackID",id) ;
analysis->AppendAnalysisVariables() ; // Store them all
}

Root output file :


GemSimAnalysis.root
→ TTree : TrackingAnalysis
→ TBranch : trackLength
→ TBranch : trackID

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 27 / 39


Extras
Logger

log4cplus package for debugging and logging.


Thread-Safe logger.
Simple to use.

Example :
using namespace log4cplus ;
Logger logFile = Logger : :getInstance("Logger") ;
LOG4CPLUS_TRACE(logFile,"This is a trace message") ;
LOG4CPLUS_DEBUG(logFile,"This is a debug message") ;
LOG4CPLUS_INFO (logFile,"This is an info message") ;
LOG4CPLUS_WARN (logFile,"This is a warning message") ;
LOG4CPLUS_ERROR(logFile,"This is an error message") ;
LOG4CPLUS_FATAL(logFile,"This is an fatal message") ;

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 28 / 39


Extras
Logger

Output in /path/to/gemsim/log/logfile.log
13 :19 :24 TRACE Logger - This is a trace message [main.cc :100]
13 :20 :44 DEBUG Logger - This is a debug message [main.cc :101]
13 :20 :53 INFO Logger - This is an info message [main.cc :102]
13 :21 :29 WARN Logger - This is a warning message [main.cc :103]
13 :22 :05 ERROR Logger - This is an error message [main.cc :104]
14 :23 :08 FATAL Logger - This is an fatal message [main.cc :105]

Remark : The logging usage is not well developed.


Many classes don’t have logFile instance in the prototype.

Developers : Please, USE THE LOGGING LIBRARIES TO DEBUG THE


SOFTWARE ! !

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 29 / 39


Extras
Code Documentation

Doxygen can build a html documentation from c++ (and lot of languages) files.

A documented class :
/* ! // ! symbol for doxygen
* class description
* This is an example of class to
* understand how the doxygen doc is generated
*/

class MyClass {
public :
/// method documentation
void aDocumentedMethod() ;
// comment
void aMethodWithoutDocumentation() ;
private :
/// attribute documentation
double aDocumentedAttribute ;
};

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 30 / 39


Extras
Code Documentation

To generate the documentation (for GemSim only) :

Terminal
$ make doc

To modify doxygen settings or to understand how it works for GemSim, read DoxyFile
in the main directory.
For more information : www.doxygen.org/

Developers : Please, DOCUMENT CLASSES AND PIECES OF CODE ! !.


Doxygen documentation is really useful for users if it’s complete...

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 31 / 39


Extras
Code Conventions

• Class name and methods with an upper case for the first letter. "MyClass" is good
but not "anotherclass".
• Attributes and instance of objects with an lower case for the first letter.
"anAttribute" is good but not "AnAttribute".
• For each new word in the class name an upper case for the first letter. "Myobject"
is not good but "MyObject" is.
• The first accolade ’{’ for a scope is on the same line as the method :
"void MyMethod() { " is good but ,
"void MyMethod()
{" is not.
• Private scope before public scope in class prototype.
• Split the different header types. See e.g. gemsim.cc
• Avoid hardcoded things. Use abstraction and interfaces for devinitions and
messengers for settings.
• Give a name for variable and methods which makes sense. If the method compute
the χ2 of a function then avoid ’DoIt()’. Choose ’ComputeChi2()’ instead ...
• And finally, please, document the code... :-)
Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 32 / 39
Run the application
Principle

Two ways to run the application :


1 Batch mode :
Give a mac file in argument with ’-m’ option.
$ ./gemsim -m myMacFile.mac
2 Via the Geant4 User Interface (UI) : $ ./gemsim
After this, Geant4 is waiting for a command (Idle>)

Mac file contains a set of G4 (GemSim) commands to be executed.


• Tip :
Prepare your set of commands before in the mac file if there’s a lot. Otherwise use
the UI.
• Remark :
The UI mode allows you to open a window and visualize the detector.
Batch will close the application at the end of the run.
Steering file contains Pre_Init state commands like detector geometry, physics list
name, ROOT file name...

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 33 / 39


Run the application
Example 1 : Photon sensitivity

steeringfile.steer
## steeringfile.steer file. ##
## Set up the application with Pre_Init commands ##
/GemSim/PhysicsList/name QGSP_FTFP_BERT # is the default one ...
/GemSim/detector/geometryModel RoughGemGeometry # is the default one ...

macfile.mac
## macfile.mac file ##
## Run geant and gemsim commands ##
/GemSim/primaries/particleName gamma # is the default one ...
/GemSim/primaries/kineticEnergy 1 MeV # default is 1 GeV
/run/beamOn 100000 # Generate 1 run with 100000 Events

Terminal
$ ./gemsim -m macfile.mac steeringfile.steer

ROOT output
$ root -l GemSimAnalysis.root
$ root[0] new TBrowser

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 34 / 39


Run the application
Example 2 : Muons

steeringfile.steer
## steeringfile.steer file. ##
## Set up the application with Pre_Init commands ##
/GemSim/PhysicsList/name QGSP_FTFP_BERT # is the default one ...
/GemSim/detector/geometryModel RoughGemGeometry # is the default one ...

macfile.mac
## macfile.mac file ##
## Run geant and gemsim commands ##
/GemSim/primaries/particleName mu- # default is gamma
/GemSim/primaries/kineticEnergy 150 MeV # default is 1 GeV
/run/beamOn 100000 # Generate 1 run with 100000 Events

Terminal
$ ./gemsim -m macfile.mac steeringfile.steer

ROOT output
$ root -l GemSimAnalysis.root
$ root[0] new TBrowser

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 35 / 39


Run the application
Example 3 : Visualization

steeringfile.steer
## steeringfile.steer file. ##
/GemSim/PhysicsList/name QGSP_FTFP_BERT # is the default one ...
/GemSim/detector/geometryModel RoughGemGeometry # is the default one ...

macfile.mac
## macfile.mac file ##
/GemSim/primaries/particleName mu- # default is gamma
/GemSim/primaries/kineticEnergy 150 MeV # default is 1 GeV
/vis/open OGLI # open a vis window with OpenGL ...
/vis/drawVolume # ... and draw the detector
/vis/scene/add/axes 0 0 0 1 m # draw the cartesian axes at the origin
/vis/viewer/set/viewpointThetaPhi 45 45 # rotate the camera at angles 45°/45°
/vis/scene/add/hits # show hits at run time
/vis/scene/add/trajectories # show trajectories at run time

Terminal
$ ./gemsim steeringfile.steer
Idle> /control/execute macfile.mac
Idle> /run/beamOn

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 36 / 39


Conclusion

• GemSim is wimulation software


for GEM based detector
Sensibilite au photons
• Still in development and validation 0.05

with data 0.045

0.04
• Many efforts had been done to
0.035

Ratio de sensibitlite
avoid hardcoding and provide
0.03
generic modules
0.025

• Allows simulation and estimation 0.02

of background particles like 0.015

photons or neutrons 0.01

• Provide output for Garfield 0.005

simulation (to be well done...) 10-1 1 10 102 10


3
104
Energie [MeV]
• Estimation of background photon
sensitivity ∼ 1%

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 37 / 39


References

Basic information for G4 : http ://geant4.cern.ch/


Geant4 code documentation : http ://www.lcsim.org/software/geant4/doxygen/html/
ROOT : http ://root.cern.ch/drupal/
Log4cplus libraries : http ://log4cplus.sourceforge.net/
Doxygen : www.doxygen.org/
Subversion at CERN : http ://svn.web.cern.ch/svn/
Class diagram realised with BOUML.
GEM geometry :
https ://twiki.cern.ch/twiki/pub/MPGD/CmsGEMCollaboration/GEM_technical_proposal.pdf
Design Patterns : "Design Patterns explained : a new perspective on object oriented design". A.
Shalloway, J. R. Trott.

Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 38 / 39


A 500 TEV GEANTINO ! ! ! ! !
Rémi Eté (CERN, Geneva) GemSim software 4 September 2012 39 / 39

You might also like