Skip to content
Snippets Groups Projects
Commit d430c07f authored by lintao@ihep.ac.cn's avatar lintao@ihep.ac.cn
Browse files

WIP: update.

parent 49d5eb94
No related branches found
No related tags found
No related merge requests found
......@@ -53,6 +53,21 @@
<div class="reveal">
<div class="slides">
---
type: slide
slideOptions:
transition: slide
# theme: white
controls: true
showSlideNumber: 'all'
navigationMode: 'linear'
center: false
# disableLayout: true
---
# Tutorial on CEPCSW simulation
Author: Tao Lin
......@@ -65,7 +80,7 @@ Indico: https://indico.ihep.ac.cn/event/12341/other-view?view=standard
* As Users
* Run a simple simulation job in CEPCSW
* Understand and Customize the simulation job
* Understand and Customize the simulation
* Analyze the simulation output
* As Developers
* Understand the simulation framework
......@@ -77,33 +92,197 @@ Indico: https://indico.ihep.ac.cn/event/12341/other-view?view=standard
## Run simulation in CEPCSW
* The simulation is run by following command:
```bash
./run.sh Examples/options/tut_detsim.py
$ ./run.sh Examples/options/tut_detsim.py
```
* The job option: `Examples/options/tut_detsim.py`. <!-- .element: style="color:yellow; " -->
* :writing_hand: copy the job option into your current directory. Edit your job option in the later exercises.
```bash
$ cp Examples/options/tut_detsim.py my_detsim.py
```
* Here, `run.sh` is a common wrapper, which will invoke the Gaudi framework.
* The job option `Examples/options/tut_detsim.py` is to run the simulation.
---
### What's inside the job option?
* Random Number Service
* Use `Seeds` option to control the random number sequences.
* Event Data Service
* Event Data Service and PODIO writer
* Geometry Service
* Different detector options could be loaded here via `compact` option.
* Physics Generator or Particle Gun
* Detector simulation framework
* Physics generator algorithm
* Detector simulation algorithm
---
#### Save detector response into ROOT file
```python
from Configurables import PodioOutput
out = PodioOutput("outputalg")
out.filename = "test-detsim10-seed42.root"
out.outputCommands = ["keep *"]
```
* The EDM4hep format is used in the detector response.
* All the collections created in simulation will be saved.
* :writing_hand: modify the output file name.
---
## Customize the primary particles
#### Random Number
```python
from Configurables import RndmGenSvc, HepRndm__Engine_CLHEP__RanluxEngine_
# rndmengine = HepRndm__Engine_CLHEP__RanluxEngine_() # The default engine in Gaudi
rndmengine = HepRndm__Engine_CLHEP__HepJamesRandom_() # The default engine in Geant4
rndmengine.SetSingleton = True
rndmengine.Seeds = [42]
```
* Seed is used to initialize the state of the random number engine.
* If two job set the same seed, the outputs will be same.
* :writing_hand: modify the seed and see the difference.
---
#### Geometry / Detector Description
```python
geometry_option = "CepC_v4-onlyVXD.xml"
geometry_path = os.path.join(os.getenv("DETCEPCV4ROOT"),
"compact", geometry_option)
from Configurables import GeoSvc
geosvc = GeoSvc("GeoSvc")
geosvc.compact = geometry_path
```
* The compact file is in XML format, which describes the detector.
* :writing_hand: change the geometry path and run simulation again.
```
geometry_path = "Detector/DetEcalMatrix/compact/det.xml"
```
---
#### Customize primary particles
##### Particle Gun
```python
gun = GtGunTool("GtGunTool")
gun.Particles = ["pi+", "pi-"]
gun.EnergyMins = [100., 100] # GeV
gun.EnergyMaxs = [100., 100] # GeV
gun.ThetaMins = [0, 0] # deg
gun.ThetaMaxs = [180., 180] # deg
gun.PhiMins = [0., 0.] # deg
gun.PhiMaxs = [360., 360.] # deg
```
* Particle name can be found in [`$ROOTSYS/etc/pdg_table.txt`](https://github.com/root-project/root/blob/master/etc/pdg_table.txt)
* :writing_hand: change the particles, energies and directions.
----
##### event generators
```python
stdheprdr = StdHepRdr("StdHepRdr")
stdheprdr.Input = "/cefs/data/stdhep/CEPC250/2fermions/E250.Pbhabha.e0.p0.whizard195/bhabha.e0.p0.00001.stdhep"
genalg = GenAlgo("GenAlgo")
genalg.GenTools = ["StdHepRdr"]
```
* There are several readers to read the output of event generators in different formats
* StdHep: `StdHepRdr`, lcio: `SLCIORdr`, HepMC: `HepMCRdr`.
* :writing_hand: use the different readers to load different samples.
* [The existing samples could be found here.](http://cepcsoft.ihep.ac.cn/guides/Generation/docs/ExistingSamples/)
---
#### Customize Geant4 using [built-in commands](http://geant4-userdoc.web.cern.ch/geant4-userdoc/UsersGuides/ForApplicationDeveloper/html/Control/AllResources/Control/UIcommands/_.html)
##### :writing_hand: Turn on the verbose during tracking
```python
detsimalg.RunCmds = [
"/tracking/verbose 1",
]
# Or
detsimalg.RunMacs = [
"run.mac",
]
```
```bash
# Below is the content of run.mac
/tracking/verbose 1
```
* Each step will be print out. Remeber to redirect the output to a file.
```bash
$ ./run.sh tut_detsim.py >& mylog
```
----
##### Geant4 tracking output
```
*********************************************************************************************************
* G4Track Information: Particle = gamma, Track ID = 1, Parent ID = 0
*********************************************************************************************************
Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName
0 0 0 0 1e+05 0 0 0 pWorld initStep
1 1.03e+03 1.8e+04 1.1e-12 0 0 1.8e+04 1.8e+04 pWorld conv
*********************************************************************************************************
* G4Track Information: Particle = e+, Track ID = 4, Parent ID = 1
*********************************************************************************************************
Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName
0 1.03e+03 1.8e+04 1.1e-12 2.91e+04 0 0 0 pWorld initStep
1 1.04e+03 1.8e+04 -0.00523 2.91e+04 0.0117 54.9 54.9 pWorld eIoni
2 1.04e+03 1.81e+04 -0.00912 2.91e+04 0.00604 38.7 93.6 pWorld eIoni
3 1.06e+03 1.84e+04 -0.0404 2.91e+04 0.0634 321 415 pWorld eIoni
4 1.06e+03 1.84e+04 -0.0416 2.91e+04 0.00234 13.1 428 pWorld eIoni
```
<!-- .element: style="color:yellow; font-size:small" -->
* From this output, you can see the current track and its stepping information.
* Particle name, current track ID, parent track ID
* Step position, deposit energy
----
##### :writing_hand: Visualize using Geant4
* Enable following command in your job option:
```python
detsimalg.VisMacs = ["Examples/options/vis.mac"]
```
* :warning: If your X Server supports the G4 OpenGL, the detector will be shown.
* Try [Xming X Server](https://sourceforge.net/projects/xming/) in Windows.
* :notebook: [Visualization in Geant4 Documentation](http://geant4-userdoc.web.cern.ch/geant4-userdoc/UsersGuides/ForApplicationDeveloper/html/Visualization/visualization.html)
* G4 UI commands during visualization
```
/vis/scene/add/axes 0 0 0 3 m
/vis/scene/add/magneticField
```
----
##### Snapshot: The Qt based Geant4 visualization
![G4Vis](https://jupyter.ihep.ac.cn/uploads/upload_819bd0ffe56fcc8708004cead7c6a3c4.png =600x500)
:writing_hand: Play with Geant4 Visualization
<!-- .element: style="color:yellow" -->
---
## Analyze the simulation output
---
## CEPCSW Simulation Framework
......@@ -117,7 +296,6 @@ Indico: https://indico.ihep.ac.cn/event/12341/other-view?view=standard
## Simulate a simple detector
</div>
</div>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment