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"