ATLAS Offline Software
FPGATrackSimDataPrepConfig.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2 
3 from AthenaConfiguration.ComponentFactory import CompFactory
4 from AthenaCommon.Logging import AthenaLogger
5 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
6 from math import pi
7 
8 def getRegionNumber(nPiOver16Min, minAbsEta, isPositiveEta, verbosePrint=True):
9  binSizePhi = pi/16
10  binSizeEta = 0.2
11  region = nPiOver16Min
12  if (nPiOver16Min >= 32 or nPiOver16Min < 0):
13  print("You are asking for nPiOver16 = ",nPiOver16Min," but we only have 32 phi bins! Returning -1")
14  return -1
15  if (minAbsEta > 3.8 or minAbsEta < 0):
16  print("You are asking for minAbsEta = ",minAbsEta," but we only have 20 abs eta bins! Returning -1")
17  return -1
18  if not (isPositiveEta == 0 or isPositiveEta == 1):
19  print("You are asking for isPositiveEta = ",isPositiveEta, " but this should only be 0 or 1! Returning -1")
20  return -1
21 
22  etanum = round(minAbsEta / binSizeEta)
23  mineta = binSizeEta*etanum
24  maxeta = binSizeEta*(etanum+1)
25  if (not isPositiveEta):
26  mineta = -binSizeEta*(etanum+1)
27  maxeta = -binSizeEta*etanum
28 
29  region = region | ((isPositiveEta & 0x1) << 5)
30  region = region | (etanum << 6)
31  if (verbosePrint):
32  print("I am returning the region number for minphi =",nPiOver16Min, "*pi/16, which is equal to",binSizePhi*nPiOver16Min)
33  print(" and maxphi =",nPiOver16Min+1, "*pi/16, which is equal to",binSizePhi*(nPiOver16Min+1))
34  print(" and mineta =",mineta, "and max eta =", maxeta)
35 
36  return region
37 
38 
39 def getBaseName(flags):
40  if (flags.Trigger.FPGATrackSim.oldRegionDefs):
41  if (not (flags.Trigger.FPGATrackSim.baseName == '')):
42  return flags.Trigger.FPGATrackSim.baseName
43  elif (flags.Trigger.FPGATrackSim.region == 0):
44  return 'eta0103phi0305'
45  elif (flags.Trigger.FPGATrackSim.region == 1):
46  return 'eta0709phi0305'
47  elif (flags.Trigger.FPGATrackSim.region == 2):
48  return 'eta1214phi0305'
49  elif (flags.Trigger.FPGATrackSim.region == 3):
50  return 'eta2022phi0305'
51  elif (flags.Trigger.FPGATrackSim.region == 4):
52  return 'eta3234phi0305'
53  elif (flags.Trigger.FPGATrackSim.region == 5):
54  return 'eta0103phi1113'
55  elif (flags.Trigger.FPGATrackSim.region == 6):
56  return 'eta0103phi1921'
57  elif (flags.Trigger.FPGATrackSim.region == 7):
58  return 'eta0103phi3436'
59  else:
60  return 'default'
61  else:
62  if (flags.Trigger.FPGATrackSim.region >= 1280 or flags.Trigger.FPGATrackSim.region < 0): return 'default'
63  else:
64  return str(flags.Trigger.FPGATrackSim.region)
65 
66 def getPhiRange(flags):
67  if (flags.Trigger.FPGATrackSim.oldRegionDefs):
68  if (not (flags.Trigger.FPGATrackSim.baseName == '')):
69  return [0.3,0.5]
70  elif (flags.Trigger.FPGATrackSim.region == 0):
71  return [0.3,0.5]
72  elif (flags.Trigger.FPGATrackSim.region == 1):
73  return [0.3,0.5]
74  elif (flags.Trigger.FPGATrackSim.region == 2):
75  return [0.3,0.5]
76  elif (flags.Trigger.FPGATrackSim.region == 3):
77  return [0.3,0.5]
78  elif (flags.Trigger.FPGATrackSim.region == 4):
79  return [0.3,0.5]
80  elif (flags.Trigger.FPGATrackSim.region == 5):
81  return [1.1,1.3]
82  elif (flags.Trigger.FPGATrackSim.region == 6):
83  return [1.9,2.1]
84  elif (flags.Trigger.FPGATrackSim.region == 7):
85  return [3.4,3.6]
86  else:
87  return [0.3,0.5]
88  else:
89  binSize = pi/16
90  phiBin=flags.Trigger.FPGATrackSim.region & 0x1f
91  if (flags.Trigger.FPGATrackSim.region >= 1280 or flags.Trigger.FPGATrackSim.region < 0): return [binSize*2,binSize*3]
92  else:
93  return [binSize*phiBin,binSize*(phiBin+1)]
94 
95 def getEtaRange(flags):
96  if (flags.Trigger.FPGATrackSim.oldRegionDefs):
97  if (not (flags.Trigger.FPGATrackSim.baseName == '')):
98  return [0.1,0.3]
99  elif (flags.Trigger.FPGATrackSim.region == 0):
100  return [0.1,0.3]
101  elif (flags.Trigger.FPGATrackSim.region == 1):
102  return [0.7,0.9]
103  elif (flags.Trigger.FPGATrackSim.region == 2):
104  return [1.2,1.4]
105  elif (flags.Trigger.FPGATrackSim.region == 3):
106  return [2.0,2.2]
107  elif (flags.Trigger.FPGATrackSim.region == 4):
108  return [3.2,3.4]
109  elif (flags.Trigger.FPGATrackSim.region == 5):
110  return [0.1,0.3]
111  elif (flags.Trigger.FPGATrackSim.region == 6):
112  return [0.1,0.3]
113  elif (flags.Trigger.FPGATrackSim.region == 7):
114  return [0.1,0.3]
115  else:
116  return [0.3,0.5]
117  else:
118  if (flags.Trigger.FPGATrackSim.region >= 1280 or flags.Trigger.FPGATrackSim.region < 0): return [0.2,0.4]
119  else:
120  binSize = 0.2
121  side = (flags.Trigger.FPGATrackSim.region >> 5) & 0x1
122  etaBin = (flags.Trigger.FPGATrackSim.region >> 6) & 0x1f
123  if (side): return [binSize*etaBin,binSize*(etaBin+1)]
124  else: return [-binSize*(etaBin+1),-binSize*etaBin]
125 
126 
127 
129  result=ComponentAccumulator()
130  FPGATrackSimRawLogic = CompFactory.FPGATrackSimRawToLogicalHitsTool()
131  FPGATrackSimRawLogic.SaveOptional = 2
132  if (flags.Trigger.FPGATrackSim.ActiveConfig.sampleType == 'skipTruth'):
133  FPGATrackSimRawLogic.SaveOptional = 1
134  FPGATrackSimRawLogic.TowersToMap = [0] # TODO TODO why is this hardcoded?
135  FPGATrackSimRawLogic.FPGATrackSimEventSelectionSvc = result.getPrimaryAndMerge(FPGATrackSimEventSelectionCfg(flags))
136  FPGATrackSimRawLogic.FPGATrackSimMappingSvc = result.getPrimaryAndMerge(FPGATrackSimMappingCfg(flags))
137  result.addPublicTool(FPGATrackSimRawLogic, primary=True)
138  return result
139 
141  result=ComponentAccumulator()
142  SpacePointTool = CompFactory.FPGATrackSimSpacePointsTool()
143  SpacePointTool.Filtering = flags.Trigger.FPGATrackSim.ActiveConfig.spacePointFiltering
144  SpacePointTool.FilteringClosePoints = False
145  SpacePointTool.PhiWindow = 0.004
146  SpacePointTool.Duplication = True
147  result.addPublicTool(SpacePointTool, primary=True)
148  return result
149 
150 
152  newFlags = flags.cloneAndReplace("Trigger.FPGATrackSim.ActiveConfig", "Trigger.FPGATrackSim." + flags.Trigger.FPGATrackSim.algoTag)
153  return newFlags
154 
155 
157  result=ComponentAccumulator()
158  FPGATrackSimWriteOutput = CompFactory.FPGATrackSimOutputHeaderTool("FPGATrackSimWriteOutputDataPrep")
159  FPGATrackSimWriteOutput.InFileName = ["test.root"]
160  FPGATrackSimWriteOutput.OutputTreeName = "FPGATrackSimDataPrepTree"
161  # RECREATE means that that this tool opens the file.
162  # HEADER would mean that something else (e.g. THistSvc) opens it and we just add the object.
163  FPGATrackSimWriteOutput.RWstatus = "HEADER"
164  FPGATrackSimWriteOutput.THistSvc = CompFactory.THistSvc()
165  result.addPublicTool(FPGATrackSimWriteOutput, primary=True)
166  return result
167 
168 def FPGAConversionAlgCfg(inputFlags, name = 'FPGAConversionAlg', stage = '', **kwargs):
169 
170  flags = prepareFlagsForFPGATrackSimDataPrepAlg(inputFlags)
171 
172  result=ComponentAccumulator()
173  from StripGeoModelXml.ITkStripGeoModelConfig import ITkStripReadoutGeometryCfg
174  result.merge(ITkStripReadoutGeometryCfg(flags))
175 
176  kwargs.setdefault("FPGATrackSimClusterKey", "FPGAClusters_1st")
177  kwargs.setdefault("FPGATrackSimHitKey", "FPGAHits%s" %(stage))
178  kwargs.setdefault("FPGATrackSimHitInRoadsKey", "FPGAHitsInRoads%s" %(stage))
179  kwargs.setdefault("FPGATrackSimRoadKey", "FPGARoads%s" %(stage))
180  kwargs.setdefault("FPGATrackSimTrackKey", "FPGATracks%s" %(stage))
181  kwargs.setdefault("xAODPixelClusterFromFPGAClusterKey", "xAODPixelClusters%sFromFPGACluster" %(stage))
182  kwargs.setdefault("xAODStripClusterFromFPGAClusterKey", "xAODStripClusters%sFromFPGACluster" %(stage))
183  kwargs.setdefault("xAODStripSpacePointFromFPGAKey", "xAODStripSpacePoints%sFromFPGA" %(stage))
184  kwargs.setdefault("xAODPixelSpacePointFromFPGAKey", "xAODPixelSpacePoints%sFromFPGA" %(stage))
185  kwargs.setdefault("xAODPixelClusterFromFPGAHitKey", "xAODPixelClusters%sFromFPGAHit" %(stage))
186  kwargs.setdefault("xAODStripClusterFromFPGAHitKey", "xAODStripClusters%sFromFPGAHit" %(stage))
187  kwargs.setdefault("ActsProtoTrackFromFPGARoadKey", "ActsProtoTracks%sFromFPGARoad" %(stage))
188  kwargs.setdefault("ActsProtoTrackFromFPGATrackKey", "ActsProtoTracks%sFromFPGATrack" %(stage))
189  kwargs.setdefault("doHits", True)
190  kwargs.setdefault("doClusters", True)
191  kwargs.setdefault("doActsTrk", False)
192  kwargs.setdefault("useRoads", False)
193  kwargs.setdefault("ClusterConverter", result.popToolsAndMerge(FPGAClusterConverterCfg(flags)))
194  kwargs.setdefault("ActsTrkConverter", result.popToolsAndMerge(FPGAActsTrkConverterCfg(flags)))
195 
196  result.addEventAlgo(CompFactory.FPGAConversionAlgorithm(name, **kwargs))
197 
198  return result
199 
201  result=ComponentAccumulator()
202  from SiLorentzAngleTool.ITkStripLorentzAngleConfig import ITkStripLorentzAngleToolCfg
203  FPGAClusterConverter = CompFactory.FPGAClusterConverter(LorentzAngleTool=result.popToolsAndMerge(ITkStripLorentzAngleToolCfg(flags)))
204  result.setPrivateTools(FPGAClusterConverter)
205 
206  return result
207 
209  result=ComponentAccumulator()
210  FPGAActsTrkConverter = CompFactory.FPGAActsTrkConverter()
211  result.setPrivateTools(FPGAActsTrkConverter)
212 
213  return result
214 
215 
216 def WriteToAOD(flags, stage = '',finalTrackParticles = ''): # store xAOD containers in AOD file
217  result = ComponentAccumulator()
218  from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
219  from OutputStreamAthenaPool.OutputStreamConfig import outputStreamName
220  from AthenaConfiguration.Enums import MetadataCategory
221 
222  result.merge( SetupMetaDataForStreamCfg( flags,"AOD",
223  createMetadata=[
224  MetadataCategory.ByteStreamMetaData,
225  MetadataCategory.LumiBlockMetaData,
226  MetadataCategory.TruthMetaData,
227  MetadataCategory.IOVMetaData,],)
228  )
229  log.info("AOD ItemList: %s", result.getEventAlgo(outputStreamName("AOD")).ItemList)
230  log.info("AOD MetadataItemList: %s", result.getEventAlgo(outputStreamName("AOD")).MetadataItemList)
231  log.info("---------- Configured AOD writing")
232 
233  from OutputStreamAthenaPool.OutputStreamConfig import addToAOD
234  toAOD = []
235  toAOD = [f"xAOD::TrackParticleContainer#{finalTrackParticles}",f"xAOD::TrackParticleAuxContainer#{finalTrackParticles}Aux."]
236  if flags.Trigger.FPGATrackSim.writeAdditionalOutputData:
237  toAOD += [f"xAOD::PixelClusterContainer#xAODPixelClusters{stage}FromFPGACluster",f"xAOD::PixelClusterAuxContainer#xAODPixelClusters{stage}FromFPGAClusterAux.",
238  f"xAOD::StripClusterContainer#xAODStripClusters{stage}FromFPGACluster",f"xAOD::StripClusterAuxContainer#xAODStripClusters{stage}FromFPGAClusterAux.",
239  f"xAOD::SpacePointContainer#xAODPixelSpacePoints{stage}FromFPGA",f"xAOD::SpacePointAuxContainer#xAODPixelSpacePoints{stage}FromFPGAAux.-measurements",
240  f"xAOD::SpacePointContainer#xAODStripSpacePoints{stage}FromFPGA",f"xAOD::SpacePointAuxContainer#xAODStripSpacePoints{stage}FromFPGAAux.-measurements.-sctSpacePointLink",
241  ]
242 
243  result.merge(addToAOD(flags, toAOD))
244 
245  return result
246 
247 
249  result=ComponentAccumulator()
250  eventSelector = CompFactory.FPGATrackSimEventSelectionSvc()
251  eventSelector.regions = flags.Trigger.FPGATrackSim.slicesFile
252  eventSelector.regionID = flags.Trigger.FPGATrackSim.region
253  eventSelector.sampleType = flags.Trigger.FPGATrackSim.sampleType
254  eventSelector.skipRegionCheck = flags.Trigger.FPGATrackSim.pipeline.startswith('F-1') # if set to True, it will essentially run for the whole detector
255  eventSelector.withPU = False
256  eventSelector.oldRegionDefs = flags.Trigger.FPGATrackSim.oldRegionDefs
257 
258 
259  eventSelector.mind0 = flags.Trigger.FPGATrackSim.d0min
260  eventSelector.maxd0 = flags.Trigger.FPGATrackSim.d0max
261  eventSelector.minz0 = flags.Trigger.FPGATrackSim.z0min
262  eventSelector.maxz0 = flags.Trigger.FPGATrackSim.z0max
263  eventSelector.minqOverPt = flags.Trigger.FPGATrackSim.qOverPtmin
264  eventSelector.maxqOverPt = flags.Trigger.FPGATrackSim.qOverPtmax
265 
266  result.addService(eventSelector, create=True, primary=True)
267  return result
268 
270  result=ComponentAccumulator()
271 
272  mappingSvc = CompFactory.FPGATrackSimMappingSvc()
273  mappingSvc.mappingType = "FILE"
274  mappingSvc.rmap = flags.Trigger.FPGATrackSim.mapsDir+"/"+getBaseName(flags)+".rmap" # we need more configurability here i.e. file choice should depend on some flag
275  mappingSvc.subrmap = flags.Trigger.FPGATrackSim.mapsDir+"/"+getBaseName(flags)+".subrmap" # presumably also here we want to be able to change the slices definition file
276  mappingSvc.pmap = flags.Trigger.FPGATrackSim.mapsDir+"/"+getBaseName(flags)+".pmap"
277  mappingSvc.modulemap = flags.Trigger.FPGATrackSim.mapsDir+"/moduleidmap"
278  mappingSvc.radiiFile = flags.Trigger.FPGATrackSim.mapsDir + "/"+getBaseName(flags)+"_radii.txt"
279  mappingSvc.FakeNNonnx = flags.Trigger.FPGATrackSim.FakeNNonnxFile
280  mappingSvc.ParamNNonnx = flags.Trigger.FPGATrackSim.ParamNNonnxFile
281  mappingSvc.ExtensionNNVolonnx = flags.Trigger.FPGATrackSim.ExtensionNNVolonnxFile
282  mappingSvc.ExtensionNNHitonnx = flags.Trigger.FPGATrackSim.ExtensionNNHitonnxFile
283  mappingSvc.layerOverride = []
284  mappingSvc.OutputLevel=2
285  result.addService(mappingSvc, create=True, primary=True)
286  return result
287 
288 
290  result=ComponentAccumulator()
291  InputTool = CompFactory.FPGATrackSimInputHeaderTool(name="FPGATrackSimReadInput",
292  InFileName = flags.Trigger.FPGATrackSim.wrapperFileName)
293  result.addPublicTool(InputTool, primary=True)
294  return result
295 
297  result=ComponentAccumulator()
298  InputTool2 = CompFactory.FPGATrackSimReadRawRandomHitsTool(name="FPGATrackSimReadInput2", InFileName = flags.Trigger.FPGATrackSim.wrapperFileName2)
299  result.addPublicTool(InputTool2, primary=True)
300  return result
301 
303  result=ComponentAccumulator()
304  HitFilteringTool = CompFactory.FPGATrackSimHitFilteringTool()
305  HitFilteringTool.barrelStubDphiCut = 3.0
306  HitFilteringTool.doRandomRemoval = False
307  HitFilteringTool.doStubs = False
308  HitFilteringTool.endcapStubDphiCut = 1.5
309  HitFilteringTool.pixelClusRmFrac = 0
310  HitFilteringTool.pixelHitRmFrac = 0
311  HitFilteringTool.stripClusRmFrac = 0
312  HitFilteringTool.stripHitRmFrac = 0
313  HitFilteringTool.useNstrips = False
314  result.addPublicTool(HitFilteringTool, primary=True)
315  return result
316 
317 
318 
320 
321  flags = prepareFlagsForFPGATrackSimDataPrepAlg(inputFlags)
322 
323  result=ComponentAccumulator()
324 
325  theFPGATrackSimDataPrepAlg=CompFactory.FPGATrackSimDataPrepAlg()
326  theFPGATrackSimDataPrepAlg.HitFiltering = flags.Trigger.FPGATrackSim.ActiveConfig.hitFiltering
327  theFPGATrackSimDataPrepAlg.writeOutputData = flags.Trigger.FPGATrackSim.writeAdditionalOutputData
328  theFPGATrackSimDataPrepAlg.Clustering = flags.Trigger.FPGATrackSim.clustering
329  theFPGATrackSimDataPrepAlg.eventSelector = result.getPrimaryAndMerge(FPGATrackSimEventSelectionCfg(flags))
330  theFPGATrackSimDataPrepAlg.useInternalTruthTracks = flags.Trigger.FPGATrackSim.useFPGATruthTrackMatching
331 
332  FPGATrackSimMaping = result.getPrimaryAndMerge(FPGATrackSimMappingCfg(flags))
333  theFPGATrackSimDataPrepAlg.FPGATrackSimMapping = FPGATrackSimMaping
334 
335  theFPGATrackSimDataPrepAlg.RawToLogicalHitsTool = result.getPrimaryAndMerge(FPGATrackSimRawLogicCfg(flags))
336 
337  if flags.Trigger.FPGATrackSim.wrapperFileName and flags.Trigger.FPGATrackSim.wrapperFileName is not None:
338  theFPGATrackSimDataPrepAlg.InputTool = result.getPrimaryAndMerge(FPGATrackSimReadInputCfg(flags))
339  if flags.Trigger.FPGATrackSim.wrapperFileName2 and flags.Trigger.FPGATrackSim.wrapperFileName2 is not None:
340  theFPGATrackSimDataPrepAlg.InputTool2 = result.getPrimaryAndMerge(FPGATrackSimReadInput2Cfg(flags))
341  theFPGATrackSimDataPrepAlg.SecondInputToolN = flags.Trigger.FPGATrackSim.secondInputToolN
342  theFPGATrackSimDataPrepAlg.SGInputTool = ""
343  else:
344  from ActsConfig.ActsGeometryConfig import ActsTrackingGeometryToolCfg
345  result.popToolsAndMerge(ActsTrackingGeometryToolCfg(flags))
346  theFPGATrackSimDataPrepAlg.InputTool = ""
347  theFPGATrackSimDataPrepAlg.InputTool2 = ""
348  from FPGATrackSimSGInput.FPGATrackSimSGInputConfig import FPGATrackSimSGInputToolCfg
349  theFPGATrackSimDataPrepAlg.SGInputTool = result.getPrimaryAndMerge(FPGATrackSimSGInputToolCfg(flags))
350 
351  theFPGATrackSimDataPrepAlg.SpacePointTool = result.getPrimaryAndMerge(FPGATrackSimSpacePointsToolCfg(flags))
352 
353  theFPGATrackSimDataPrepAlg.HitFilteringTool = result.getPrimaryAndMerge(FPGATrackSimHitFilteringToolCfg(flags))
354 
355  theFPGATrackSimDataPrepAlg.ClusteringTool = CompFactory.FPGATrackSimClusteringTool()
356  theFPGATrackSimDataPrepAlg.OutputTool = result.getPrimaryAndMerge(FPGATrackSimDataPrepOutputCfg(flags))
357 
358  # Create SPRoadFilterTool if spacepoints are turned on. TODO: make things configurable?
359  if flags.Trigger.FPGATrackSim.spacePoints:
360  theFPGATrackSimDataPrepAlg.Spacepoints = True
361 
362  from FPGATrackSimAlgorithms.FPGATrackSimAlgorithmConfig import FPGATrackSimLogicalHitsProcessAlgMonitoringCfg
363  theFPGATrackSimDataPrepAlg.MonTool = result.getPrimaryAndMerge(FPGATrackSimLogicalHitsProcessAlgMonitoringCfg(flags))
364 
365  result.addEventAlgo(theFPGATrackSimDataPrepAlg)
366 
367  return result
368 
369 
370 log = AthenaLogger(__name__)
371 
372 def FPGATrackSimDataPrepConnectToFastTracking(flagsIn,FinalTracks="F100-",**kwargs):
373 
374  flags = flagsIn.clone()
375 
376  # configure FastTracking based on C-100 flags
377  from ActsConfig.ActsCIFlags import actsFastWorkflowFlags
378  actsFastWorkflowFlags(flags)
379 
380  flags.Tracking.ActiveConfig.extension=FinalTracks
381  flags.Tracking.writeExtendedSi_PRDInfo=True
382  flags.lock()
383  flags.dump()
384  flags = flags.cloneAndReplace("Tracking.ActiveConfig", "Tracking.ITkMainPass") # TODO: Check if it's really necessary
385  prefix=flags.Tracking.ActiveConfig.extension # prefix for the name of final tracks (this is what IDTPM reads)
386 
387  result = ComponentAccumulator()
388 
389  from ActsConfig.ActsUtilities import extractChildKwargs
390 
391 
394  kwargs.setdefault('PixelSeedingAlg.InputSpacePoints',['ITkPixelSpacePoints'])
395  kwargs.setdefault('StripSeedingAlg.InputSpacePoints',['ITkStripSpacePoints']) # possibly will never be used but in case it's needed, the strip SP conversion should be enabled for this container to be available in F100 (off by default)
396 
397  # -- Track Finding args --
398  kwargs.setdefault('TrackFindingAlg.UncalibratedMeasurementContainerKeys',['ITkPixelClusters','ITkStripClusters'])
399 
400  # -- Truth Matching args --
401  kwargs.setdefault('PixelClusterToTruthAssociationAlg.Measurements','ITkPixelClusters')
402  kwargs.setdefault('StripClusterToTruthAssociationAlg.Measurements','ITkStripClusters')
403  print (kwargs)
404 
405 
407  from ActsConfig.ActsSeedingConfig import ActsSeedingCfg
408  result.merge(ActsSeedingCfg(flags, **kwargs))
409 
410  # ACTS Track Finding
411  from ActsConfig.ActsTrackFindingConfig import ActsTrackFindingCfg,ActsAmbiguityResolutionCfg
412  result.merge(ActsTrackFindingCfg(flags,**extractChildKwargs(prefix='TrackFindingAlg.', **kwargs)))
413 
414  # if ambiguity is enabled for FastTracking run here as well
415  if flags.Acts.doAmbiguityResolution:
416  result.merge(ActsAmbiguityResolutionCfg(flags,**extractChildKwargs(prefix='AmbiguityResolutionAlg.',**kwargs)))
417 
418  # modify the tracks' name (not the final one) accordingly in case ambiguity resolution runs
419  acts_tracks=f"{prefix}Tracks" if not flags.Acts.doAmbiguityResolution else f"{prefix}ResolvedTracks"
420 
421 
423  from ActsConfig.ActsTruthConfig import ActsTruthParticleHitCountAlgCfg, ActsPixelClusterToTruthAssociationAlgCfg,ActsStripClusterToTruthAssociationAlgCfg
424  result.merge(ActsPixelClusterToTruthAssociationAlgCfg(flags,
425  name=f"{prefix}PixelClusterToTruthAssociationAlg",
426  InputTruthParticleLinks="xAODTruthLinks",
427  AssociationMapOut=f"{prefix}ITkPixelClustersToTruthParticles",
428  Measurements=kwargs.get('PixelClusterToTruthAssociationAlg.Measurements')))
429 
430  result.merge(ActsStripClusterToTruthAssociationAlgCfg(flags,
431  name=f"{prefix}StripClusterToTruthAssociationAlg",
432  InputTruthParticleLinks="xAODTruthLinks",
433  AssociationMapOut=f"{prefix}ITkStripClustersToTruthParticles",
434  Measurements=kwargs.get('StripClusterToTruthAssociationAlg.Measurements')))
435 
436  result.merge(ActsTruthParticleHitCountAlgCfg(flags,
437  name=f"{prefix}TruthParticleHitCountAlg",
438  PixelClustersToTruthAssociationMap=f"{prefix}ITkPixelClustersToTruthParticles",
439  StripClustersToTruthAssociationMap=f"{prefix}ITkStripClustersToTruthParticles",
440  TruthParticleHitCountsOut=f"{prefix}TruthParticleHitCounts"))
441 
442  from ActsConfig.ActsTruthConfig import ActsTrackToTruthAssociationAlgCfg, ActsTrackFindingValidationAlgCfg
443  result.merge(ActsTrackToTruthAssociationAlgCfg(flags,
444  name=f"{prefix}TrackToTruthAssociationAlg",
445  PixelClustersToTruthAssociationMap=f"{prefix}ITkPixelClustersToTruthParticles",
446  StripClustersToTruthAssociationMap=f"{prefix}ITkStripClustersToTruthParticles",
447  ACTSTracksLocation=acts_tracks,
448  AssociationMapOut=f"{acts_tracks}ToTruthParticleAssociation"))
449 
450  result.merge(ActsTrackFindingValidationAlgCfg(flags,
451  name=f"{prefix}TrackFindingValidationAlg",
452  TrackToTruthAssociationMap=f"{acts_tracks}ToTruthParticleAssociation",
453  TruthParticleHitCounts=f"{prefix}TruthParticleHitCounts"
454  ))
455 
456 
458  from ActsConfig.ActsTrackFindingConfig import ActsTrackToTrackParticleCnvAlgCfg
459  result.merge(ActsTrackToTrackParticleCnvAlgCfg(flags, name=f"{prefix}TrackToTrackParticleCnvAlg",
460  ACTSTracksLocation=[acts_tracks],
461  TrackParticlesOutKey=f"{prefix}TrackParticles"))
462 
463  from ActsConfig.ActsTruthConfig import ActsTrackParticleTruthDecorationAlgCfg
464  result.merge(ActsTrackParticleTruthDecorationAlgCfg(flags, name=f"{prefix}TrackParticleTruthDecorationAlg",
465  TrackToTruthAssociationMaps=[f"{acts_tracks}ToTruthParticleAssociation"],
466  TrackParticleContainerName=f"{FinalTracks}TrackParticles",
467  TruthParticleHitCounts=f"{prefix}TruthParticleHitCounts",
468  ComputeTrackRecoEfficiency=True))
469 
470  if flags.Tracking.writeExtendedSi_PRDInfo:
471  from InDetConfig.InDetPrepRawDataToxAODConfig import ITkActsPrepDataToxAODCfg
472  result.merge(ITkActsPrepDataToxAODCfg(flags))
473 
474  return result
475 
477  from AthenaConfiguration.AllConfigFlags import initConfigFlags
478  from AthenaConfiguration.MainServicesConfig import MainServicesCfg
479 
480  FinalDataPrepTrackChainxAODTracksKeyPrefix="FPGA"
481 
482  flags = initConfigFlags()
483  from InDetConfig.ConfigurationHelpers import OnlyTrackingPreInclude
485 
486 
487 
488  # ensure that the offline xAOD/ACTS SP and cluster containers are available for DataPrep and FastTrack
489  flags.Tracking.ITkMainPass.doAthenaToActsCluster=True
490  flags.Tracking.ITkMainPass.doAthenaSpacePoint=True
491  flags.Tracking.ITkMainPass.doAthenaToActsSpacePoint=True
492 
493 
494  flags.Concurrency.NumThreads=1
495  flags.Scheduler.ShowDataDeps=False
496  flags.Scheduler.CheckDependencies=True
497  flags.Debug.DumpEvtStore=False # Set to Truth to enable Event Store printouts
498  # flags.Exec.DebugStage="exec" # useful option to debug the execution of the job - we want it commented out for production
499  flags.fillFromArgs()
500  if isinstance(flags.Trigger.FPGATrackSim.wrapperFileName, str):
501  log.info("wrapperFile is string, converting to list")
502  flags.Trigger.FPGATrackSim.wrapperFileName = [flags.Trigger.FPGATrackSim.wrapperFileName]
503  flags.Input.Files = lambda f: [f.Trigger.FPGATrackSim.wrapperFileName]
504 
505  flags.lock()
506  flags = flags.cloneAndReplace("Tracking.ActiveConfig", "Tracking.ITkMainPass", keepOriginal=True)
507  flags.dump()
508 
509  acc=MainServicesCfg(flags)
510  if flags.Trigger.FPGATrackSim.writeAdditionalOutputData:
511  acc.addService(CompFactory.THistSvc(Output = [f"EXPERT DATAFILE='{flags.Trigger.FPGATrackSim.outputMonitorFile}', OPT='RECREATE'"]))
512  acc.addService(CompFactory.THistSvc(Output = ["FPGATRACKSIMOUTPUT DATAFILE='dataprep.root', OPT='RECREATE'"]))
513 
514 
515  if not flags.Trigger.FPGATrackSim.wrapperFileName:
516  from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
517  acc.merge(PoolReadCfg(flags))
518 
519  if flags.Input.isMC:
520  from xAODTruthCnv.xAODTruthCnvConfig import GEN_AOD2xAODCfg
521  acc.merge(GEN_AOD2xAODCfg(flags))
522 
523  from JetRecConfig.JetRecoSteering import addTruthPileupJetsToOutputCfg # TO DO: check if this is indeed necessary for pileup samples
524  acc.merge(addTruthPileupJetsToOutputCfg(flags))
525 
526  if flags.Detector.EnableCalo:
527  from CaloRec.CaloRecoConfig import CaloRecoCfg
528  acc.merge(CaloRecoCfg(flags))
529 
530  if not flags.Reco.EnableTrackOverlay:
531  from InDetConfig.TrackRecoConfig import InDetTrackRecoCfg
532  acc.merge(InDetTrackRecoCfg(flags))
533  from InDetConfig.InDetPrepRawDataToxAODConfig import TruthParticleIndexDecoratorAlgCfg
534  acc.merge( TruthParticleIndexDecoratorAlgCfg(flags) )
535 
536 
537  # Use the imported configuration function for the data prep algorithm.
538  acc.merge(FPGATrackSimDataPrepAlgCfg(flags))
539 
540  if flags.Trigger.FPGATrackSim.doEDMConversion:
541  acc.merge(FPGAConversionAlgCfg(flags, name = 'FPGAConversionAlg', stage = '_1st', doActsTrk=False, doSP = True))
542 
543  if flags.Trigger.FPGATrackSim.connectToToITkTracking:
544 
545  # Run ACTS Fast Tracking on offline objects (starting from seeding)
546  acc.merge(FPGATrackSimDataPrepConnectToFastTracking(flags, FinalTracks="ActsFast"))
547 
548  # Run ACTS Fast Tracking for FPGA clusters (starting from seeding)
549  acc.merge(FPGATrackSimDataPrepConnectToFastTracking(flags, FinalTracks=FinalDataPrepTrackChainxAODTracksKeyPrefix,
550  **{'PixelSeedingAlg.InputSpacePoints' : ['xAODPixelSpacePoints_1stFromFPGA'],
551  'StripSeedingAlg.InputSpacePoints' : ['xAODStripSpacePoints_1stFromFPGA'],
552  'TrackFindingAlg.UncalibratedMeasurementContainerKeys' : ["xAODPixelClusters_1stFromFPGACluster","xAODStripClusters_1stFromFPGACluster"],
553  'PixelClusterToTruthAssociationAlg.Measurements' : 'xAODPixelClusters_1stFromFPGACluster',
554  'StripClusterToTruthAssociationAlg.Measurements' : 'xAODStripClusters_1stFromFPGACluster'}))
555 
556  if flags.Trigger.FPGATrackSim.writeToAOD:
557  acc.merge(WriteToAOD(flags, stage = '_1st',))
558  if flags.Trigger.FPGATrackSim.spacePoints : acc.merge(WriteToAOD(flags,
559  stage = '_1st',
560  finalTrackParticles=f"{FinalDataPrepTrackChainxAODTracksKeyPrefix}TrackParticles"))
561 
562  # Printout for various FPGA-related objects
563  from FPGATrackSimReporting.FPGATrackSimReportingConfig import FPGATrackSimReportingCfg
564  acc.merge(FPGATrackSimReportingCfg(flags,
565  perEventReports = (flags.Trigger.FPGATrackSim.sampleType != 'skipTruth'),
566  isDataPrep=True))
567 
568  acc.store(open('AnalysisConfig.pkl','wb'))
569 
570  statusCode = acc.run(flags.Exec.MaxEvents)
571  assert statusCode.isSuccess() is True, "Application execution did not succeed"
572 
573 
574 if __name__ == "__main__":
python.InDetPrepRawDataToxAODConfig.ITkActsPrepDataToxAODCfg
ComponentAccumulator ITkActsPrepDataToxAODCfg(flags)
Definition: InDetPrepRawDataToxAODConfig.py:46
AthenaPoolExample_WriteCond.outputStreamName
string outputStreamName
Definition: AthenaPoolExample_WriteCond.py:21
python.FPGATrackSimDataPrepConfig.WriteToAOD
def WriteToAOD(flags, stage='', finalTrackParticles='')
Definition: FPGATrackSimDataPrepConfig.py:216
python.FPGATrackSimDataPrepConfig.FPGATrackSimDataPrepAlgCfg
def FPGATrackSimDataPrepAlgCfg(inputFlags)
Definition: FPGATrackSimDataPrepConfig.py:319
python.CaloRecoConfig.CaloRecoCfg
def CaloRecoCfg(flags, clustersname=None)
Definition: CaloRecoConfig.py:9
python.ITkStripLorentzAngleConfig.ITkStripLorentzAngleToolCfg
def ITkStripLorentzAngleToolCfg(flags, name="ITkStripLorentzAngleTool", **kwargs)
Definition: ITkStripLorentzAngleConfig.py:10
ActsTrackFindingConfig.ActsTrackFindingCfg
ComponentAccumulator ActsTrackFindingCfg(flags, **kwargs)
Definition: ActsTrackFindingConfig.py:205
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:302
ActsUtilities.extractChildKwargs
dict extractChildKwargs(*str prefix, **dict kwargs)
Definition: ActsUtilities.py:3
python.FPGATrackSimDataPrepConfig.getEtaRange
def getEtaRange(flags)
Definition: FPGATrackSimDataPrepConfig.py:95
python.FPGATrackSimDataPrepConfig.FPGAConversionAlgCfg
def FPGAConversionAlgCfg(inputFlags, name='FPGAConversionAlg', stage='', **kwargs)
Definition: FPGATrackSimDataPrepConfig.py:168
python.FPGATrackSimDataPrepConfig.FPGATrackSimReadInput2Cfg
def FPGATrackSimReadInput2Cfg(flags)
Definition: FPGATrackSimDataPrepConfig.py:296
xAODTruthCnvConfig.GEN_AOD2xAODCfg
def GEN_AOD2xAODCfg(flags, name="GEN_AOD2xAOD", **kwargs)
Definition: xAODTruthCnvConfig.py:20
MuonGM::round
float round(const float toRound, const unsigned int decimals)
Definition: Mdt.cxx:27
ITkStripGeoModelConfig.ITkStripReadoutGeometryCfg
def ITkStripReadoutGeometryCfg(flags)
Definition: ITkStripGeoModelConfig.py:43
ActsTruthConfig.ActsTruthParticleHitCountAlgCfg
ComponentAccumulator ActsTruthParticleHitCountAlgCfg(flags, str name='ActsTruthParticleHitCountAlg', **dict kwargs)
Definition: ActsTruthConfig.py:69
ActsTruthConfig.ActsTrackToTruthAssociationAlgCfg
ComponentAccumulator ActsTrackToTruthAssociationAlgCfg(flags, str name='ActsTracksToTruthAssociationAlg', **dict kwargs)
Definition: ActsTruthConfig.py:50
python.InDetPrepRawDataToxAODConfig.TruthParticleIndexDecoratorAlgCfg
def TruthParticleIndexDecoratorAlgCfg(flags, name='TruthParticleIndexDecoratorAlg', **kwargs)
Definition: InDetPrepRawDataToxAODConfig.py:6
python.FPGATrackSimDataPrepConfig.FPGATrackSimSpacePointsToolCfg
def FPGATrackSimSpacePointsToolCfg(flags)
Definition: FPGATrackSimDataPrepConfig.py:140
python.FPGATrackSimDataPrepConfig.FPGAClusterConverterCfg
def FPGAClusterConverterCfg(flags)
Definition: FPGATrackSimDataPrepConfig.py:200
ActsTruthConfig.ActsPixelClusterToTruthAssociationAlgCfg
ComponentAccumulator ActsPixelClusterToTruthAssociationAlgCfg(flags, str name='ActsPixelClusterToTruthAssociationAlg', **dict kwargs)
Definition: ActsTruthConfig.py:20
python.FPGATrackSimDataPrepConfig.FPGATrackSimEventSelectionCfg
def FPGATrackSimEventSelectionCfg(flags)
Definition: FPGATrackSimDataPrepConfig.py:248
ActsTruthConfig.ActsTrackFindingValidationAlgCfg
ComponentAccumulator ActsTrackFindingValidationAlgCfg(flags, str name='ActsTracksValidationAlg', **dict kwargs)
Definition: ActsTruthConfig.py:141
python.FPGATrackSimDataPrepConfig.getBaseName
def getBaseName(flags)
Definition: FPGATrackSimDataPrepConfig.py:39
python.ConfigurationHelpers.OnlyTrackingPreInclude
def OnlyTrackingPreInclude(flags)
Definition: InnerDetector/InDetConfig/python/ConfigurationHelpers.py:6
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:260
python.FPGATrackSimDataPrepConfig.FPGATrackSimMappingCfg
def FPGATrackSimMappingCfg(flags)
Definition: FPGATrackSimDataPrepConfig.py:269
FPGATrackSimSGInputConfig.FPGATrackSimSGInputToolCfg
def FPGATrackSimSGInputToolCfg(flags)
Definition: FPGATrackSimSGInputConfig.py:8
ActsCIFlags.actsFastWorkflowFlags
None actsFastWorkflowFlags(flags)
Definition: ActsCIFlags.py:11
ActsGeometryConfig.ActsTrackingGeometryToolCfg
ComponentAccumulator ActsTrackingGeometryToolCfg(flags, str name="ActsTrackingGeometryTool")
Definition: ActsGeometryConfig.py:114
ActsTrackFindingConfig.ActsAmbiguityResolutionCfg
ComponentAccumulator ActsAmbiguityResolutionCfg(flags, **kwargs)
Definition: ActsTrackFindingConfig.py:351
print
void print(char *figname, TCanvas *c1)
Definition: TRTCalib_StrawStatusPlots.cxx:25
python.FPGATrackSimDataPrepConfig.FPGATrackSimHitFilteringToolCfg
def FPGATrackSimHitFilteringToolCfg(flags)
Definition: FPGATrackSimDataPrepConfig.py:302
python.JetRecoSteering.addTruthPileupJetsToOutputCfg
def addTruthPileupJetsToOutputCfg(flags, toAOD=True, toESD=True)
Definition: JetRecoSteering.py:7
python.FPGATrackSimDataPrepConfig.getRegionNumber
def getRegionNumber(nPiOver16Min, minAbsEta, isPositiveEta, verbosePrint=True)
Definition: FPGATrackSimDataPrepConfig.py:8
python.FPGATrackSimDataPrepConfig.FPGATrackSimReadInputCfg
def FPGATrackSimReadInputCfg(flags)
Definition: FPGATrackSimDataPrepConfig.py:289
python.FPGATrackSimDataPrepConfig.FPGATrackSimDataPrepConnectToFastTracking
def FPGATrackSimDataPrepConnectToFastTracking(flagsIn, FinalTracks="F100-", **kwargs)
Definition: FPGATrackSimDataPrepConfig.py:372
FPGATrackSimAlgorithmConfig.FPGATrackSimLogicalHitsProcessAlgMonitoringCfg
def FPGATrackSimLogicalHitsProcessAlgMonitoringCfg(flags)
Definition: FPGATrackSimAlgorithmConfig.py:246
python.TrackRecoConfig.InDetTrackRecoCfg
def InDetTrackRecoCfg(flags)
Main ID tracking config #####################.
Definition: TrackRecoConfig.py:804
Trk::open
@ open
Definition: BinningType.h:40
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
ActsSeedingConfig.ActsSeedingCfg
ComponentAccumulator ActsSeedingCfg(flags, **kwargs)
Definition: ActsSeedingConfig.py:398
python.OutputStreamConfig.addToAOD
def addToAOD(flags, itemOrList, **kwargs)
Definition: OutputStreamConfig.py:142
python.FPGATrackSimDataPrepConfig.runDataPrepChain
def runDataPrepChain()
Definition: FPGATrackSimDataPrepConfig.py:476
python.FPGATrackSimDataPrepConfig.FPGATrackSimRawLogicCfg
def FPGATrackSimRawLogicCfg(flags)
Definition: FPGATrackSimDataPrepConfig.py:128
str
Definition: BTagTrackIpAccessor.cxx:11
DataPrepConfig.FPGATrackSimReportingCfg
def FPGATrackSimReportingCfg(flags, name='FPGATrackSimReportingAlg', **kwargs)
Definition: DataPrepConfig.py:6
python.FPGATrackSimDataPrepConfig.FPGATrackSimDataPrepOutputCfg
def FPGATrackSimDataPrepOutputCfg(flags)
Definition: FPGATrackSimDataPrepConfig.py:156
python.FPGATrackSimDataPrepConfig.FPGAActsTrkConverterCfg
def FPGAActsTrkConverterCfg(flags)
Definition: FPGATrackSimDataPrepConfig.py:208
python.FPGATrackSimDataPrepConfig.getPhiRange
def getPhiRange(flags)
Definition: FPGATrackSimDataPrepConfig.py:66
InfileMetaDataConfig.SetupMetaDataForStreamCfg
def SetupMetaDataForStreamCfg(flags, streamName="", AcceptAlgs=None, createMetadata=None, propagateMetadataFromInput=True, *args, **kwargs)
Definition: InfileMetaDataConfig.py:222
python.PoolReadConfig.PoolReadCfg
def PoolReadCfg(flags)
Definition: PoolReadConfig.py:69
python.FPGATrackSimDataPrepConfig.prepareFlagsForFPGATrackSimDataPrepAlg
def prepareFlagsForFPGATrackSimDataPrepAlg(flags)
Definition: FPGATrackSimDataPrepConfig.py:151
ActsTruthConfig.ActsTrackParticleTruthDecorationAlgCfg
ComponentAccumulator ActsTrackParticleTruthDecorationAlgCfg(flags, str name='ActsTrackParticleTruthDecorationAlg', **dict kwargs)
Definition: ActsTruthConfig.py:116
ActsTruthConfig.ActsStripClusterToTruthAssociationAlgCfg
ComponentAccumulator ActsStripClusterToTruthAssociationAlgCfg(flags, str name='ActsStripClusterToTruthAssociationAlg', **dict kwargs)
Definition: ActsTruthConfig.py:35
ActsTrackFindingConfig.ActsTrackToTrackParticleCnvAlgCfg
ComponentAccumulator ActsTrackToTrackParticleCnvAlgCfg(flags, str name="ActsTrackToTrackParticleCnvAlg", **kwargs)
Definition: ActsTrackFindingConfig.py:396