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"]
74 BinDesc.region = flags.Trigger.FPGATrackSim.region
77 BinDesc.D0Pad=
getPadding(flags.Trigger.FPGATrackSim.region)[
"d0"]
78 BinDesc.EtaPad=
getPadding(flags.Trigger.FPGATrackSim.region)[
"eta"]
79 BinDesc.QPtPad=
getPadding(flags.Trigger.FPGATrackSim.region)[
"qpt"]
80 BinDesc.PhiPad=
getPadding(flags.Trigger.FPGATrackSim.region)[
"phi"]
81 BinDesc.Z0Pad=
getPadding(flags.Trigger.FPGATrackSim.region)[
"z0"]
82 BinDesc.fieldCorrection=
True
83 BinDesc.fieldCorRegion=flags.Trigger.FPGATrackSim.region
86 step1 = CompFactory.FPGATrackSimBinStep(
"PhiBinning")
87 step1.OutputLevel=flags.Trigger.FPGATrackSim.loglevel
88 step1.parBins = [1,1,cutset[
"parBins"][2],cutset[
"parBins"][3],cutset[
"parBins"][4]]
89 step2 = CompFactory.FPGATrackSimBinStep(
"FullBinning")
90 step2.OutputLevel=flags.Trigger.FPGATrackSim.loglevel
91 step2.parBins = cutset[
"parBins"]
92 binsteps = [step1,step2]
94 log.fatal(
"Unknown Binning Setup: ",cutset[
"parSet"])
96 BinTool.BinDesc = BinDesc
97 BinTool.Steps = binsteps
101 BinTool.d0FractionalPadding =0.05
102 BinTool.z0FractionalPadding =0.05
103 BinTool.etaFractionalPadding =0.05
104 BinTool.phiFractionalPadding =0.05
105 BinTool.qOverPtFractionalPadding =0.05
106 BinTool.parMin = cutset[
"parMin"]
107 BinTool.parMax = cutset[
"parMax"]
108 BinnnedHits.BinTool = BinTool
110 result.setPrivateTools(BinnnedHits)
117 Monitor = CompFactory.FPGATrackSimLayerStudyTool(
"BinMonitoring")
118 Monitor.THistSvc = CompFactory.THistSvc()
119 Monitor.OutputLevel=flags.Trigger.FPGATrackSim.loglevel
120 Monitor.phiScale = 10.0
121 Monitor.etaScale = 100.0
122 Monitor.drScale = 20.0
123 Monitor.plotAllBins =
False
125 Monitor.D0Pad=
getPadding(flags.Trigger.FPGATrackSim.region)[
"d0"]
126 Monitor.EtaPad=
getPadding(flags.Trigger.FPGATrackSim.region)[
"eta"]
127 Monitor.QPtPad=
getPadding(flags.Trigger.FPGATrackSim.region)[
"qpt"]
128 Monitor.PhiPad=
getPadding(flags.Trigger.FPGATrackSim.region)[
"phi"]
129 Monitor.Z0Pad=
getPadding(flags.Trigger.FPGATrackSim.region)[
"z0"]
131 result.setPrivateTools(Monitor)
135 from AthenaConfiguration.ComponentFactory
import CompFactory
136 flags = FPGATrackSimAnalysisConfig.prepareFlagsForFPGATrackSimLogicalHitsProcessAlg(flags)
138 if not flags.Trigger.FPGATrackSim.wrapperFileName:
139 from InDetConfig.InDetPrepRawDataFormationConfig
import AthenaTrkClusterizationCfg
142 reg = flags.Trigger.FPGATrackSim.region
144 monitor_tool = CompFactory.FPGATrackSimLayerStudyTool(
145 f
"BinMonitoring_reg{reg}",
146 LayerStudyTreeName=FPGATrackSimDataPrepConfig.nameWithRegionSuffix(flags,
"LayerStudy"),
147 TruthTreeName=FPGATrackSimDataPrepConfig.nameWithRegionSuffix(flags,
"TruthTree"),
150 theFPGATrackSimLayerStudyAlg = CompFactory.FPGATrackSimLayerStudyAlg(name=f
"FPGATrackSimLayerStudyAlg_reg{reg}")
153 theFPGATrackSimLayerStudyAlg.BinMonitoringTool = monitor_tool
154 theFPGATrackSimLayerStudyAlg.threshold = flags.Trigger.FPGATrackSim.ActiveConfig.threshold[0]
155 theFPGATrackSimLayerStudyAlg.stage = flags.Trigger.FPGATrackSim.layerStudyStage
156 theFPGATrackSimLayerStudyAlg.eventSelector = result.getPrimaryAndMerge(FPGATrackSimDataPrepConfig.FPGATrackSimEventSelectionSvcCfg(flags))
157 theFPGATrackSimLayerStudyAlg.FPGATrackSimMapping = result.getPrimaryAndMerge(FPGATrackSimDataPrepConfig.FPGATrackSimMappingCfg(flags))
159 result.addEventAlgo(theFPGATrackSimLayerStudyAlg)
163 if __name__ ==
"__main__":
165 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
166 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
173 FinalProtoTrackChainxAODTracksKey=
"FPGA"
174 flags.Detector.EnableCalo =
False
177 flags.Tracking.ITkMainPass.doAthenaToActsSpacePoint=
True
178 flags.Tracking.ITkMainPass.doAthenaToActsCluster=
True
179 from ActsConfig.ActsCIFlags
import actsLegacyWorkflowFlags
181 flags.Acts.doRotCorrection =
False
184 flags.Concurrency.NumThreads=1
186 flags.Scheduler.ShowDataDeps=
True
187 flags.Scheduler.CheckDependencies=
True
188 flags.Debug.DumpEvtStore=
False
195 if isinstance(flags.Trigger.FPGATrackSim.wrapperFileName, str):
196 log.info(
"wrapperFile is string, converting to list")
197 flags.Trigger.FPGATrackSim.wrapperFileName = [flags.Trigger.FPGATrackSim.wrapperFileName]
198 flags.Input.Files =
lambda f: [f.Trigger.FPGATrackSim.wrapperFileName]
200 from FPGATrackSimConfTools.FPGATrackSimAnalysisConfig
import ConfigureMultiRegionFlags
205 flags.Trigger.FPGATrackSim.loadRegionMap =
False
206 flags.Trigger.FPGATrackSim.loadRadii =
False
210 flags.Trigger.FPGATrackSim.FakeNNonnxFile1st =
""
211 flags.Trigger.FPGATrackSim.FakeNNonnxFile2nd =
""
212 flags.Trigger.FPGATrackSim.ParamNNonnxFile1st =
""
213 flags.Trigger.FPGATrackSim.ParamNNonnxFile2nd =
""
214 flags.Trigger.FPGATrackSim.ExtensionNNVolonnxFile =
""
215 flags.Trigger.FPGATrackSim.ExtensionNNHitonnxFile =
""
219 flags = flags.cloneAndReplace(
"Tracking.ActiveConfig",
"Tracking.MainPass")
223 if flags.Trigger.FPGATrackSim.writeAdditionalOutputData:
224 acc.addService(CompFactory.THistSvc(Output = [
"EXPERT DATAFILE='monitoring.root', OPT='RECREATE'"]))
228 if (flags.Trigger.FPGATrackSim.Hough.genScan):
229 acc.addService(CompFactory.THistSvc(Output = [
"GENSCAN DATAFILE='genscan.root', OPT='RECREATE'"]))
231 if not flags.Trigger.FPGATrackSim.wrapperFileName:
232 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
236 from xAODTruthCnv.xAODTruthCnvConfig
import GEN_AOD2xAODCfg
239 from JetRecConfig.JetRecoSteering
import addTruthPileupJetsToOutputCfg
242 if flags.Detector.EnableCalo:
243 from CaloRec.CaloRecoConfig
import CaloRecoCfg
246 if flags.Tracking.recoChain:
247 from InDetConfig.TrackRecoConfig
import InDetTrackRecoCfg
251 from FPGATrackSimConfTools.FPGATrackSimMultiRegionConfig
import FPGATrackSimRunLayerStudyOnManyRegions
255 acc.merge(FPGATrackSimDataPrepConfig.FPGATrackSimDataPrepAlgCfg(flags))
257 acc.store(
open(
'AnalysisConfig.pkl',
'wb'))
258 acc.foreach_component(
"*FPGATrackSim*").OutputLevel=flags.Trigger.FPGATrackSim.loglevel
259 if flags.Trigger.FPGATrackSim.msgLimit!=-1:
260 acc.getService(
"MessageSvc").debugLimit = flags.Trigger.FPGATrackSim.msgLimit
261 acc.getService(
"MessageSvc").infoLimit = flags.Trigger.FPGATrackSim.msgLimit
263 statusCode = acc.run(flags.Exec.MaxEvents)
264 assert statusCode.isSuccess()
is True,
"Application execution did not succeed"