Decoding a reco_tf

Last update: 06 Jul 2021 [History] [Edit]

Now that we have our reco_tf command, we want to know a little bit more about it! Perhaps obviously, each argument serves a specific function. Remember that our full command looks like:

Reco_tf.py \
--digiSteeringConf 'StandardInTimeOnlyTruth'\
--conditionsTag 'default:OFLCOND-MC16-SDR-13' \
--geometryVersion 'default:ATLAS-R2-2016-00-01-00'\
--pileupFinalBunch '6' \
--numberOfHighPtMinBias '0.312197744' \
--numberOfLowPtMinBias '59.68780226' \
--steering 'doRDO_TRIG' \
--triggerConfig 'RDOtoRDOTrigger=MCRECO:DBF:TRIGGERDBMC:2094,36,102'\
--autoConfiguration 'everything' \
--preInclude 'HITtoRDO:Digitization/ForceUseOfPileUpTools.py,SimulationJobOptions/preInclude.PileUpBunchTrainsMC15_2015_25ns_Config1.py,RunDependentSimData/configLumi_user.py' 'RDOtoRDOTrigger:RecExPers/RecoOutputMetadataList_jobOptions.py' \
--postExec 'all:CfgMgr.MessageSvc().setError+=["HepMcParticleLink"]' 'ESDtoAOD:fixedAttrib=[s if "CONTAINER_SPLITLEVEL = \\'99\\'" not in s else "" for s in svcMgr.AthenaPoolCnvSvc.PoolAttributes];svcMgr.AthenaPoolCnvSvc.PoolAttributes=fixedAttrib;xAODMaker__xAODTruthCnvAlg("GEN_AOD2xAOD",WriteInTimePileUpTruth=True)' 'RAWtoESD:xAODMaker__xAODTruthCnvAlg("GEN_AOD2xAOD",WriteInTimePileUpTruth=True)' 'ESDtoDPD:xAODMaker__xAODTruthCnvAlg("GEN_AOD2xAOD",WriteInTimePileUpTruth=True)' \
--postInclude 'default:PyJobTransforms/UseFrontier.py' \
--preExec 'all:rec.Commissioning.set_Value_and_Lock(True);from AthenaCommon.BeamFlags import jobproperties;jobproperties.Beam.numberOfCollisions.set_Value_and_Lock(20.0);from LArROD.LArRODFlags import larRODFlags;larRODFlags.NumberOfCollisions.set_Value_and_Lock(20);larRODFlags.nSamples.set_Value_and_Lock(4);larRODFlags.doOFCPileupOptimization.set_Value_and_Lock(True);larRODFlags.firstSample.set_Value_and_Lock(0);larRODFlags.useHighestGainAutoCorr.set_Value_and_Lock(True)' 'ESDtoAOD:TriggerFlags.AODEDMSet="AODFULL"' 'HITtoRDO:userRunLumiOverride={"run":284500, "lb":1, "starttstamp":1445203790, "mu":60.0}'\
--numberOfCavernBkg '0'

Don’t worry if your output doesn’t have the arguments arranged in this exact order – these are reorganized here for instructional clarity. Taking a look line by line, first we have

 --digiSteeringConf 'StandardInTimeOnlyTruth'\

This specifies the digitization steering configuration, which specifies which truth strategy to apply. This is only meaningful for cases with pileup. Next we have

--conditionsTag 'default:OFLCOND-MC16-SDR-13' \
--geometryVersion 'default:ATLAS-R2-2016-00-01-00'\

These straightforward arguments specify the database tag for the general run conditions and the ATLAS Detector geometry version used. Then we have

--pileupFinalBunch '6' \
--numberOfHighPtMinBias '0.312197744' \
--numberOfLowPtMinBias '59.68780226' \

This defines (together with other configurations, e.g the digi steering) the number of pp interactions per bunch crossing, and the number of low and high pT minimum bias events to be overlaid.

--steering 'doRDO_TRIG' \
--triggerConfig 'RDOtoRDOTrigger=MCRECO:DBF:TRIGGERDBMC:2094,36,102'\

These set up the conditions and configurations for running the trigger.

--autoConfiguration 'everything' \

Magic! ✨

--preInclude '...' \
--postExec '...' \
--postInclude '...' \
--preExec '...' \

The remaining lines are the preExec, postExec, preInclude, and postInclude, which are lines of python that configure the job, like the lines we added previously in the standalone job option. The prefixes pre/post determine at which stage of the job these are added to the configuration, e.g before or after the inclusion of RecExCommon/RecExCommon_topOptios.py Unfortunately it’s not always obvious in which stage you need to put your additions – sometimes this is a process of trial and error! Generally, “flags” are set in PreInclude or PreExec while changing properties of already created reco tools are done in PostExec or PostInclude.

Note that the configurations in these stages are split by the various reconstruction steps:

--postExec 'all:CfgMgr.MessageSvc().setError+=["HepMcParticleLink"]' 'ESDtoAOD:fixedAttrib=[s if "CONTAINER_SPLITLEVEL = \\'99\\'" not in s else "" for s in svcMgr.AthenaPoolCnvSvc.PoolAttributes];svcMgr.AthenaPoolCnvSvc.PoolAttributes=fixedAttrib;xAODMaker__xAODTruthCnvAlg("GEN_AOD2xAOD",WriteInTimePileUpTruth=True)' 'RAWtoESD:xAODMaker__xAODTruthCnvAlg("GEN_AOD2xAOD",WriteInTimePileUpTruth=True)' 'ESDtoDPD:xAODMaker__xAODTruthCnvAlg("GEN_AOD2xAOD",WriteInTimePileUpTruth=True)'

RAWtoESD is where the main reconstruction actually happens – it initially writes to an intermediate ESD file. (Warning: this is generally very large!) ESDtoAOD further refines into an AOD file. Derivation steps are ESDtoDPD and AODtoDPD and produce the IDTRKVALID DAOD format, differing in which format they run from. RAWtoALL specifies a configuration for the full reconstruction chain.

That’s it! In the following sections we will additionally specify the inputs and outputs and then run an example.

Next