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"]
73 phirange = FPGATrackSimDataPrepConfig.getPhiRange(flags)
74 if flags.Trigger.FPGATrackSim.GenScan.useLayerRadiiFile:
75 phicenter = (phirange[0]+phirange[1])/2.0
76 BinDesc.PhiOffset = -1.0*phicenter
78 BinDesc.region = flags.Trigger.FPGATrackSim.region
81 step1 = CompFactory.FPGATrackSimBinStep(
"PhiBinning")
82 step1.OutputLevel=flags.Trigger.FPGATrackSim.loglevel
83 step1.parBins = [1,1,cutset[
"parBins"][2],cutset[
"parBins"][3],cutset[
"parBins"][4]]
84 step2 = CompFactory.FPGATrackSimBinStep(
"FullBinning")
85 step2.OutputLevel=flags.Trigger.FPGATrackSim.loglevel
86 step2.parBins = cutset[
"parBins"]
87 binsteps = [step1,step2]
89 log.fatal(
"Unknown Binning Setup: ",cutset[
"parSet"])
91 BinTool.BinDesc = BinDesc
92 BinTool.Steps = binsteps
96 BinTool.d0FractionalPadding =0.05
97 BinTool.z0FractionalPadding =0.05
98 BinTool.etaFractionalPadding =0.05
99 BinTool.phiFractionalPadding =0.05
100 BinTool.qOverPtFractionalPadding =0.05
101 BinTool.parMin = cutset[
"parMin"]
102 BinTool.parMax = cutset[
"parMax"]
103 BinnnedHits.BinTool = BinTool
105 result.setPrivateTools(BinnnedHits)
112 Monitor = CompFactory.FPGATrackSimLayerStudyTool(
"BinMonitoring")
113 Monitor.THistSvc = CompFactory.THistSvc()
114 Monitor.OutputLevel=flags.Trigger.FPGATrackSim.loglevel
115 Monitor.phiScale = 10.0
116 Monitor.etaScale = 100.0
117 Monitor.drScale = 20.0
118 Monitor.plotAllBins =
False
120 Monitor.D0Pad=
getPadding(flags.Trigger.FPGATrackSim.region)[
"d0"]
121 Monitor.EtaPad=
getPadding(flags.Trigger.FPGATrackSim.region)[
"eta"]
122 Monitor.QPtPad=
getPadding(flags.Trigger.FPGATrackSim.region)[
"qpt"]
123 Monitor.PhiPad=
getPadding(flags.Trigger.FPGATrackSim.region)[
"phi"]
124 Monitor.Z0Pad=
getPadding(flags.Trigger.FPGATrackSim.region)[
"z0"]
126 result.setPrivateTools(Monitor)
130 from AthenaConfiguration.ComponentFactory
import CompFactory
131 flags = FPGATrackSimAnalysisConfig.prepareFlagsForFPGATrackSimLogicalHitsProcessAlg(flags)
133 if not flags.Trigger.FPGATrackSim.wrapperFileName:
134 from InDetConfig.InDetPrepRawDataFormationConfig
import AthenaTrkClusterizationCfg
137 reg = flags.Trigger.FPGATrackSim.region
139 monitor_tool = CompFactory.FPGATrackSimLayerStudyTool(
140 f
"BinMonitoring_reg{reg}",
141 LayerStudyTreeName=FPGATrackSimDataPrepConfig.nameWithRegionSuffix(flags,
"LayerStudy"),
142 TruthTreeName=FPGATrackSimDataPrepConfig.nameWithRegionSuffix(flags,
"TruthTree"),
145 theFPGATrackSimLayerStudyAlg = CompFactory.FPGATrackSimLayerStudyAlg(name=f
"FPGATrackSimLayerStudyAlg_reg{reg}")
148 theFPGATrackSimLayerStudyAlg.BinMonitoringTool = monitor_tool
149 theFPGATrackSimLayerStudyAlg.threshold = flags.Trigger.FPGATrackSim.ActiveConfig.threshold[0]
150 theFPGATrackSimLayerStudyAlg.stage = flags.Trigger.FPGATrackSim.layerStudyStage
151 theFPGATrackSimLayerStudyAlg.eventSelector = result.getPrimaryAndMerge(FPGATrackSimDataPrepConfig.FPGATrackSimEventSelectionSvcCfg(flags))
152 theFPGATrackSimLayerStudyAlg.FPGATrackSimMapping = result.getPrimaryAndMerge(FPGATrackSimDataPrepConfig.FPGATrackSimMappingCfg(flags))
154 result.addEventAlgo(theFPGATrackSimLayerStudyAlg)
158 if __name__ ==
"__main__":
160 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
161 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
168 FinalProtoTrackChainxAODTracksKey=
"FPGA"
169 flags.Detector.EnableCalo =
False
172 flags.Tracking.ITkMainPass.doAthenaToActsSpacePoint=
True
173 flags.Tracking.ITkMainPass.doAthenaToActsCluster=
True
174 from ActsConfig.ActsCIFlags
import actsLegacyWorkflowFlags
176 flags.Acts.doRotCorrection =
False
179 flags.Concurrency.NumThreads=1
181 flags.Scheduler.ShowDataDeps=
True
182 flags.Scheduler.CheckDependencies=
True
183 flags.Debug.DumpEvtStore=
False
190 if isinstance(flags.Trigger.FPGATrackSim.wrapperFileName, str):
191 log.info(
"wrapperFile is string, converting to list")
192 flags.Trigger.FPGATrackSim.wrapperFileName = [flags.Trigger.FPGATrackSim.wrapperFileName]
193 flags.Input.Files =
lambda f: [f.Trigger.FPGATrackSim.wrapperFileName]
195 from FPGATrackSimConfTools.FPGATrackSimAnalysisConfig
import ConfigureMultiRegionFlags
200 flags.Trigger.FPGATrackSim.loadRegionMap =
False
201 flags.Trigger.FPGATrackSim.loadRadii =
False
205 flags.Trigger.FPGATrackSim.FakeNNonnxFile1st =
""
206 flags.Trigger.FPGATrackSim.FakeNNonnxFile2nd =
""
207 flags.Trigger.FPGATrackSim.ParamNNonnxFile1st =
""
208 flags.Trigger.FPGATrackSim.ParamNNonnxFile2nd =
""
209 flags.Trigger.FPGATrackSim.ExtensionNNVolonnxFile =
""
210 flags.Trigger.FPGATrackSim.ExtensionNNHitonnxFile =
""
214 flags = flags.cloneAndReplace(
"Tracking.ActiveConfig",
"Tracking.MainPass")
218 if flags.Trigger.FPGATrackSim.writeAdditionalOutputData:
219 acc.addService(CompFactory.THistSvc(Output = [
"EXPERT DATAFILE='monitoring.root', OPT='RECREATE'"]))
223 if (flags.Trigger.FPGATrackSim.Hough.genScan):
224 acc.addService(CompFactory.THistSvc(Output = [
"GENSCAN DATAFILE='genscan.root', OPT='RECREATE'"]))
226 if not flags.Trigger.FPGATrackSim.wrapperFileName:
227 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
231 from xAODTruthCnv.xAODTruthCnvConfig
import GEN_AOD2xAODCfg
234 from JetRecConfig.JetRecoSteering
import addTruthPileupJetsToOutputCfg
237 if flags.Detector.EnableCalo:
238 from CaloRec.CaloRecoConfig
import CaloRecoCfg
241 if flags.Tracking.recoChain:
242 from InDetConfig.TrackRecoConfig
import InDetTrackRecoCfg
246 from FPGATrackSimConfTools.FPGATrackSimMultiRegionConfig
import FPGATrackSimRunLayerStudyOnManyRegions
250 acc.merge(FPGATrackSimDataPrepConfig.FPGATrackSimDataPrepAlgCfg(flags))
252 acc.store(
open(
'AnalysisConfig.pkl',
'wb'))
253 acc.foreach_component(
"*FPGATrackSim*").OutputLevel=flags.Trigger.FPGATrackSim.loglevel
254 if flags.Trigger.FPGATrackSim.msgLimit!=-1:
255 acc.getService(
"MessageSvc").debugLimit = flags.Trigger.FPGATrackSim.msgLimit
256 acc.getService(
"MessageSvc").infoLimit = flags.Trigger.FPGATrackSim.msgLimit
258 statusCode = acc.run(flags.Exec.MaxEvents)
259 assert statusCode.isSuccess()
is True,
"Application execution did not succeed"