During development, a system running ATLAS Software has to be tested and validated. There are some standard tests that almost don’t need any input data, stress the system and — if they run properly — are a (very) good indicator that everything is set up correctly. I talk about the so-called JobTransforms. By combining these JobTransforms, the so-called Full Chain can be run — a convenient test. In this blog post I summarize what’s behind the Full Chain and provide a shell script to easily run it.
What is “The Full Chain”?
The so-called JobTransforms are python scripts that are used to run production tasks. They take an input file, a set of parameters and “transform” the input into one or more output files. Combined in the correct order, they build up The Full Chain. I will summarize the elements of the chain now:
- Step 1) Event generation: a virtual particle gets created with a specific energy and direction.
Input: particle definition file. Output: EVGEN file.
- Step 2) Simulation: the interaction between this particle and the detector is simulated.
Input: EVGEN file. Output: HITS file.
- Step 3) Digitization: the ATLAS detector output is calculated.
Input: HITS file. Output: RDO file.
- Step 4) Reconstruction: times and voltages are reconstructed into tracks and energy deposits.
Input: RDO file. Output: ESD file.
- Step 5) Conversion: only keep the most important data from the last step.
Input: ESD file. Output: AOD file.
How to realize “The Full Chain”
As you know, the input of step 1 is a small user-given file defining particle parameters. This file on my webserver describes a single pion with specific energy and direction. The content basically is the following:
# Single pi+ in log(E) between 200 MeV and 2 TeV from AthenaCommon.AlgSequence import AlgSequence topAlg = AlgSequence("TopAlg") from ParticleGenerator.ParticleGeneratorConf import ParticleGenerator topAlg += ParticleGenerator() ParticleGenerator = topAlg.ParticleGenerator # For DEBUG output from ParticleGenerator. ParticleGenerator.OutputLevel = 2 ParticleGenerator.orders = [ "PDGcode: constant 211", "e: log 200. 2000000.", "eta: flat -5.5 5.5", "phi: flat -3.14159 3.14159" ] from EvgenJobOptions.SingleEvgenConfig import evgenConfig
At this point it’s not important to understand each line of this file. It works ;)
The following shellscript downloads this file and initializes The Full Chain for exactly one event of this particle. During execution, it measures timings.
wget http://gehrcke.de/gsoc/singlepart_singlepi mv singlepart_singlepi CSC.007410.singlepart_singlepi+_logE.py echo -e "\nread CSC file, generate 1 single pion.. create EVGEN file..-> evgen.log" time csc_evgen_trf.py 007410 1 1 765432 CSC.007410.singlepart_singlepi+_logE.py EVGEN_007410_00001.pool.root > evgen.log echo -e "\nread EVGEN file.. simulate.. create HITS file..-> simul.log" time csc_simul_trf.py EVGEN_007410_00001.pool.root HITS_007410_00001.pool.root NONE 1 0 452368 "ATLAS-CSC-02-00-00" 0 0 "QGSP_BERT" CalHits.py > simul.log echo -e "\nread HITS file.. digitize.. produce RDO file..-> digi.log" time csc_digi_trf.py HITS_007410_00001.pool.root RDO_007410_00001.pool.root 1 0 "ATLAS-CSC-02-00-00" 740581234 29402491 'NONE' 'NONE' CalHits.py 'NONE' 'AtRndmGenSvc' 'QGSP_EMV' 'NONE' > digi.log echo -e "\nread RDO file.. reconstruct.. produce ESD file..-> recoESD.log" time csc_recoESD_trf.py RDO_007410_00001.pool.root ESD_007410_00001.pool.root 'NONE' 1 0 "ATLAS-CSC-02-00-00" 'NONE' > recoESD.log echo -e "\nread ESD file.. convert.. produce AOD file..-> recoAOD.log" time csc_recoAOD_trf.py ESD_007410_00001.pool.root AOD_007410_00001.pool.root 1 0 "ATLAS-CSC-02-00-00" 'NONE' > recoAOD.log
You can download the script here.
After setting up the runtime environment for your ATLAS Software installation, you can simply download and execute this script. It should work! I tested it with ATLAS Software 15.2.0, as you can see in this blog post: CernVM: local ATLAS Software — the clean solution