2 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
3 from AthenaConfiguration.ComponentFactory
import CompFactory
4 from AthenaCommon.Logging
import logging
7 import AthenaCommon.Utils.unixtools
as unixtools
10 from FPGATrackSimConfTools.FPGATrackSimAnalysisConfig
import ConfigureMultiRegionFlags
11 from FPGATrackSimConfTools.FPGATrackSimSecondStageConfig
import getPadding
13 log = logging.getLogger (
'FPGATrackSim')
16 from FPGATrackSimConfTools
import FPGATrackSimDataPrepConfig
17 from FPGATrackSimConfTools
import FPGATrackSimAnalysisConfig
22 log.info(
"Setting binning parameters")
27 if flags.Trigger.FPGATrackSim.GenScan.initialLayerStudy:
28 cutset = {
"rin": flags.Trigger.FPGATrackSim.GenScan.rin,
29 "rout": flags.Trigger.FPGATrackSim.GenScan.rout,
30 "parBins": flags.Trigger.FPGATrackSim.GenScan.parBins,
31 "parMin": flags.Trigger.FPGATrackSim.GenScan.parMin,
32 "parMax": flags.Trigger.FPGATrackSim.GenScan.parMax,
33 "parSet": flags.Trigger.FPGATrackSim.GenScan.parSet
35 log.info(
"Running initial layer study, taking FPGATrackSimBinning cuts from flags")
37 elif flags.Trigger.FPGATrackSim.GenScan.layerStudyCutFile:
38 if flags.Trigger.FPGATrackSim.oldRegionDefs:
39 cutset = importlib.import_module(flags.Trigger.FPGATrackSim.GenScan.layerStudyCutFile).cuts[flags.Trigger.FPGATrackSim.region]
43 relpath = os.path.join(flags.Trigger.FPGATrackSim.mapsDir, flags.Trigger.FPGATrackSim.GenScan.layerStudyCutFile +
".py")
44 abspath = unixtools.find_datafile(relpath, pathlist=os.getenv(
"CALIBPATH").
split(
":"))
45 spec=importlib.util.spec_from_file_location(
"FPGATrackSimGenScanCuts", abspath)
47 log.fatal(
"Failed to load cuts file")
48 cutmodule = importlib.util.module_from_spec(spec)
49 spec.loader.exec_module(cutmodule)
50 cutset=cutmodule.cuts[flags.Trigger.FPGATrackSim.region]
51 log.info(
"Running layer study using configured cuts file")
54 log.fatal(
"Must either set initialLayerStudy=True or set layerStudyCutFile to the name of a cut file!")
57 BinnnedHits = CompFactory.FPGATrackSimBinnedHits(
"BinnedHits_LayerStudy")
58 BinnnedHits.OutputLevel=flags.Trigger.FPGATrackSim.loglevel
59 BinnnedHits.FPGATrackSimEventSelectionSvc = result.getPrimaryAndMerge(FPGATrackSimDataPrepConfig.FPGATrackSimEventSelectionSvcCfg(flags))
62 BinTool = CompFactory.FPGATrackSimBinTool(
"BinTool_LayerStudy")
63 BinTool.OutputLevel=flags.Trigger.FPGATrackSim.loglevel
68 if (cutset[
"parSet"]==
"PhiSlicedKeyLyrPars"):
69 BinDesc = CompFactory.FPGATrackSimKeyLayerBinDesc(
"KeyLayerBinDescLayerStudy")
70 BinDesc.OutputLevel=flags.Trigger.FPGATrackSim.loglevel
71 BinDesc.rin=cutset[
"rin"]
72 BinDesc.rout=cutset[
"rout"]
76 BinDesc.D0Pad=
getPadding(flags.Trigger.FPGATrackSim.region)[
"d0"]
77 BinDesc.EtaPad=
getPadding(flags.Trigger.FPGATrackSim.region)[
"eta"]
78 BinDesc.QPtPad=
getPadding(flags.Trigger.FPGATrackSim.region)[
"qpt"]
79 BinDesc.PhiPad=
getPadding(flags.Trigger.FPGATrackSim.region)[
"phi"]
80 BinDesc.Z0Pad=
getPadding(flags.Trigger.FPGATrackSim.region)[
"z0"]
81 BinDesc.fieldCorrection=
True
82 BinDesc.fieldCorRegion=flags.Trigger.FPGATrackSim.region
85 step1 = CompFactory.FPGATrackSimBinStep(
"PhiBinning")
86 step1.OutputLevel=flags.Trigger.FPGATrackSim.loglevel
87 step1.parBins = [1,1,cutset[
"parBins"][2],cutset[
"parBins"][3],cutset[
"parBins"][4]]
88 step2 = CompFactory.FPGATrackSimBinStep(
"FullBinning")
89 step2.OutputLevel=flags.Trigger.FPGATrackSim.loglevel
90 step2.parBins = cutset[
"parBins"]
91 binsteps = [step1,step2]
93 log.fatal(
"Unknown Binning Setup: ",cutset[
"parSet"])
95 BinTool.BinDesc = BinDesc
96 BinTool.Steps = binsteps
100 BinTool.d0FractionalPadding =0.05
101 BinTool.z0FractionalPadding =0.05
102 BinTool.etaFractionalPadding =0.05
103 BinTool.phiFractionalPadding =0.05
104 BinTool.qOverPtFractionalPadding =0.05
105 BinTool.parMin = cutset[
"parMin"]
106 BinTool.parMax = cutset[
"parMax"]
107 BinnnedHits.BinTool = BinTool
109 result.setPrivateTools(BinnnedHits)
116 Monitor = CompFactory.FPGATrackSimLayerStudyTool(
"BinMonitoring")
117 Monitor.THistSvc = CompFactory.THistSvc()
118 Monitor.OutputLevel=flags.Trigger.FPGATrackSim.loglevel
119 Monitor.phiScale = 10.0
120 Monitor.etaScale = 100.0
121 Monitor.drScale = 20.0
122 Monitor.plotAllBins =
False
124 Monitor.D0Pad=
getPadding(flags.Trigger.FPGATrackSim.region)[
"d0"]
125 Monitor.EtaPad=
getPadding(flags.Trigger.FPGATrackSim.region)[
"eta"]
126 Monitor.QPtPad=
getPadding(flags.Trigger.FPGATrackSim.region)[
"qpt"]
127 Monitor.PhiPad=
getPadding(flags.Trigger.FPGATrackSim.region)[
"phi"]
128 Monitor.Z0Pad=
getPadding(flags.Trigger.FPGATrackSim.region)[
"z0"]
130 result.setPrivateTools(Monitor)
135 flags = FPGATrackSimAnalysisConfig.prepareFlagsForFPGATrackSimLogicalHitsProcessAlg(inputFlags)
138 if not flags.Trigger.FPGATrackSim.wrapperFileName:
139 from InDetConfig.InDetPrepRawDataFormationConfig
import AthenaTrkClusterizationCfg
142 theFPGATrackSimLayerStudyAlg = CompFactory.FPGATrackSimLayerStudyAlg()
144 theFPGATrackSimLayerStudyAlg.threshold = flags.Trigger.FPGATrackSim.ActiveConfig.threshold[0]
145 theFPGATrackSimLayerStudyAlg.stage = flags.Trigger.FPGATrackSim.layerStudyStage
147 theFPGATrackSimLayerStudyAlg.eventSelector = result.getPrimaryAndMerge(FPGATrackSimDataPrepConfig.FPGATrackSimEventSelectionSvcCfg(flags))
148 theFPGATrackSimLayerStudyAlg.FPGATrackSimMapping = result.getPrimaryAndMerge(FPGATrackSimDataPrepConfig.FPGATrackSimMappingCfg(flags))
153 result.addEventAlgo(theFPGATrackSimLayerStudyAlg)
157 if __name__ ==
"__main__":
159 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
160 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
167 FinalProtoTrackChainxAODTracksKey=
"FPGA"
168 flags.Detector.EnableCalo =
False
171 flags.Tracking.ITkMainPass.doAthenaToActsSpacePoint=
True
172 flags.Tracking.ITkMainPass.doAthenaToActsCluster=
True
173 from ActsConfig.ActsCIFlags
import actsLegacyWorkflowFlags
175 flags.Acts.doRotCorrection =
False
178 flags.Concurrency.NumThreads=1
180 flags.Scheduler.ShowDataDeps=
True
181 flags.Scheduler.CheckDependencies=
True
182 flags.Debug.DumpEvtStore=
False
189 if isinstance(flags.Trigger.FPGATrackSim.wrapperFileName, str):
190 log.info(
"wrapperFile is string, converting to list")
191 flags.Trigger.FPGATrackSim.wrapperFileName = [flags.Trigger.FPGATrackSim.wrapperFileName]
192 flags.Input.Files =
lambda f: [f.Trigger.FPGATrackSim.wrapperFileName]
194 from FPGATrackSimConfTools.FPGATrackSimAnalysisConfig
import ConfigureMultiRegionFlags
199 flags = flags.cloneAndReplace(
"Tracking.ActiveConfig",
"Tracking.MainPass")
203 if flags.Trigger.FPGATrackSim.writeAdditionalOutputData:
204 acc.addService(CompFactory.THistSvc(Output = [
"EXPERT DATAFILE='monitoring.root', OPT='RECREATE'"]))
208 if (flags.Trigger.FPGATrackSim.Hough.genScan):
209 acc.addService(CompFactory.THistSvc(Output = [
"GENSCAN DATAFILE='genscan.root', OPT='RECREATE'"]))
211 if not flags.Trigger.FPGATrackSim.wrapperFileName:
212 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
216 from xAODTruthCnv.xAODTruthCnvConfig
import GEN_AOD2xAODCfg
219 from JetRecConfig.JetRecoSteering
import addTruthPileupJetsToOutputCfg
222 if flags.Detector.EnableCalo:
223 from CaloRec.CaloRecoConfig
import CaloRecoCfg
226 if flags.Tracking.recoChain:
227 from InDetConfig.TrackRecoConfig
import InDetTrackRecoCfg
231 acc.merge(FPGATrackSimDataPrepConfig.FPGATrackSimDataPrepAlgCfg(flags))
235 acc.store(
open(
'AnalysisConfig.pkl',
'wb'))
236 acc.foreach_component(
"*FPGATrackSim*").OutputLevel=flags.Trigger.FPGATrackSim.loglevel
237 if flags.Trigger.FPGATrackSim.msgLimit!=-1:
238 acc.getService(
"MessageSvc").debugLimit = flags.Trigger.FPGATrackSim.msgLimit
239 acc.getService(
"MessageSvc").infoLimit = flags.Trigger.FPGATrackSim.msgLimit
241 statusCode = acc.run(flags.Exec.MaxEvents)
242 assert statusCode.isSuccess()
is True,
"Application execution did not succeed"