diff --git a/InnerDetector/InDetConfig/python/ITkConfigFlags.py b/InnerDetector/InDetConfig/python/ITkConfigFlags.py index 10c525b346bbc08f9ce4aa501e91d07cdb6f7120..352b6b8d41be015cdab50d065f8d259938b68513 100644 --- a/InnerDetector/InDetConfig/python/ITkConfigFlags.py +++ b/InnerDetector/InDetConfig/python/ITkConfigFlags.py @@ -61,6 +61,7 @@ def createITkConfigFlags(): itkcf.addFlag("ITk.Tracking.writeExtendedPRDInfo", False) # Turn running of doLowPt second pass on and off itkcf.addFlag("ITk.Tracking.doLowPt", False) + itkcf.addFlag("ITk.Tracking.useFTF", False) # Allows TrigFastTrackFinder to be run as an offline algorithm by replacing SiSPSeededTrackFinder # config flags for tracking geometry configuration diff --git a/InnerDetector/InDetConfig/python/ITkTrackRecoConfig.py b/InnerDetector/InDetConfig/python/ITkTrackRecoConfig.py index 155a27ef36a739fa9e07345c501041c62708a185..04aaad855f144aabdefedfd5d6ec0e371835bb1d 100644 --- a/InnerDetector/InDetConfig/python/ITkTrackRecoConfig.py +++ b/InnerDetector/InDetConfig/python/ITkTrackRecoConfig.py @@ -17,7 +17,10 @@ def CombinedTrackingPassFlagSets(flags): flags_set = [] # Primary Pass - if flags.ITk.Tracking.doFastTracking: + if flags.ITk.Tracking.useFTF: + flags = flags.cloneAndReplace("ITk.Tracking.ActiveConfig", + "ITk.Tracking.FTFPass") + elif flags.ITk.Tracking.doFastTracking: flags = flags.cloneAndReplace("ITk.Tracking.ActiveConfig", "ITk.Tracking.FastPass") else: diff --git a/InnerDetector/InDetConfig/python/ITkTrackingSiPatternConfig.py b/InnerDetector/InDetConfig/python/ITkTrackingSiPatternConfig.py index 7a34fea7ef293c452ddf7ccc22cbaec9ad6932ae..868264e5b8515afb5c8e244133186e1069b50529 100644 --- a/InnerDetector/InDetConfig/python/ITkTrackingSiPatternConfig.py +++ b/InnerDetector/InDetConfig/python/ITkTrackingSiPatternConfig.py @@ -24,55 +24,69 @@ def ITkTrackingSiPatternCfg(flags, flags.ITk.Tracking.ActiveConfig.extension, TracksName = list(InputCollections))) - # ------------------------------------------------------------ - # - # ----------- SiSPSeededTrackFinder - # - # ------------------------------------------------------------ + if flags.ITk.Tracking.useFTF: # Can use FastTrackFinder instead of SiSPSeededTrackFinder - # - # --- Deducing configuration from the flags - # - from ActsInterop.TrackingComponentConfigurer import ( - TrackingComponentConfigurer) - configuration_settings = TrackingComponentConfigurer(flags) + # ------------------------------------------------------------ + # + # ----------- FastTrackFinder + # + # ------------------------------------------------------------ - # Athena Track - if configuration_settings.doAthenaTrack: + from TrigFastTrackFinder.ITkFastTrackFinderStandaloneConfig import( + ITkFastTrackFinderStandaloneCfg) + acc.merge(ITkFastTrackFinderStandaloneCfg(flags, SiSPSeededTrackCollectionKey)) - from InDetConfig.SiSPSeededTrackFinderConfig import ( - ITkSiSPSeededTrackFinderCfg) - SiSPSeededTrackFinderCfg = ITkSiSPSeededTrackFinderCfg - if flags.ITk.Tracking.ActiveConfig.extension == "ConversionFinding": - from InDetConfig.SiSPSeededTrackFinderConfig import ITkSiSPSeededTrackFinderROIConvCfg - SiSPSeededTrackFinderCfg = ITkSiSPSeededTrackFinderROIConvCfg + else: - acc.merge(SiSPSeededTrackFinderCfg( - flags, - TracksLocation = SiSPSeededTrackCollectionKey)) + # ------------------------------------------------------------ + # + # ----------- SiSPSeededTrackFinder + # + # ------------------------------------------------------------ - # ACTS seed - if configuration_settings.doActsSeed: + # + # --- Deducing configuration from the flags + # + from ActsInterop.TrackingComponentConfigurer import ( + TrackingComponentConfigurer) + configuration_settings = TrackingComponentConfigurer(flags) - from ActsTrkSeeding.ActsTrkSeedingConfig import ( - ActsTrkSeedingCfg) - acc.merge(ActsTrkSeedingCfg(flags)) - - if flags.ITk.Tracking.ActiveConfig.extension == "ConversionFinding": - from AthenaCommon.Logging import logging - log = logging.getLogger( 'ITkTrackingSiPattern' ) - log.warning('ROI-based track-finding is not available yet in ACTS, so the default one is used') + # Athena Track + if configuration_settings.doAthenaTrack: - # ACTS track - if configuration_settings.doActsTrack: + from InDetConfig.SiSPSeededTrackFinderConfig import ( + ITkSiSPSeededTrackFinderCfg) + SiSPSeededTrackFinderCfg = ITkSiSPSeededTrackFinderCfg + if flags.ITk.Tracking.ActiveConfig.extension == "ConversionFinding": + from InDetConfig.SiSPSeededTrackFinderConfig import ITkSiSPSeededTrackFinderROIConvCfg + SiSPSeededTrackFinderCfg = ITkSiSPSeededTrackFinderROIConvCfg - from ActsTrkFinding.ActsTrkFindingConfig import ActsTrkFindingCfg - if configuration_settings.doAthenaTrack: - acc.merge(ActsTrkFindingCfg(flags)) - else: # send output TrackCollection to Athena ambiguity scorer etc - acc.merge(ActsTrkFindingCfg( + acc.merge(SiSPSeededTrackFinderCfg( flags, - TracksLocation=SiSPSeededTrackCollectionKey)) + TracksLocation = SiSPSeededTrackCollectionKey)) + + # ACTS seed + if configuration_settings.doActsSeed: + + from ActsTrkSeeding.ActsTrkSeedingConfig import ( + ActsTrkSeedingCfg) + acc.merge(ActsTrkSeedingCfg(flags)) + + if flags.ITk.Tracking.ActiveConfig.extension == "ConversionFinding": + from AthenaCommon.Logging import logging + log = logging.getLogger( 'ITkTrackingSiPattern' ) + log.warning('ROI-based track-finding is not available yet in ACTS, so the default one is used') + + # ACTS track + if configuration_settings.doActsTrack: + + from ActsTrkFinding.ActsTrkFindingConfig import ActsTrkFindingCfg + if configuration_settings.doAthenaTrack: + acc.merge(ActsTrkFindingCfg(flags)) + else: # send output TrackCollection to Athena ambiguity scorer etc + acc.merge(ActsTrkFindingCfg( + flags, + TracksLocation=SiSPSeededTrackCollectionKey)) from InDetConfig.ITkTrackTruthConfig import ITkTrackTruthCfg if flags.Tracking.doTruth: @@ -118,4 +132,3 @@ def ITkTrackingSiPatternCfg(flags, TracksTruth = ResolvedTrackCollectionKey+"TruthCollection")) return acc - diff --git a/InnerDetector/InDetConfig/python/TrackingPassFlags.py b/InnerDetector/InDetConfig/python/TrackingPassFlags.py index 1f536331e99449191e3a72790885349c8c77180f..9d850b021017c2e09fd73ec0e2c2f24035dd1f87 100644 --- a/InnerDetector/InDetConfig/python/TrackingPassFlags.py +++ b/InnerDetector/InDetConfig/python/TrackingPassFlags.py @@ -452,9 +452,10 @@ def createITkFastTrackingPassFlags(): ### ITk with FTF standalone mode #### def createITkFTFPassFlags(): - icf = createITkTrackingPassFlags() - - icf.extension = "_FTF" + icf = createITkFastTrackingPassFlags() + + icf.minPT = [0.9 * Units.GeV, 0.4 * Units.GeV, 0.4 * Units.GeV] + icf.minPTSeed = 0.9 * Units.GeV return icf diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/test/test_run4_mu100_FTF.sh b/InnerDetector/InDetValidation/InDetPhysValMonitoring/test/test_run4_mu100_FTF.sh index d4cbca51c0bb9f7a09f6b4e3cc58d3a2dcee6f9d..c8ba8cf49e56ef91574d90f2bf7c2ffc82d71b1a 100755 --- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/test/test_run4_mu100_FTF.sh +++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/test/test_run4_mu100_FTF.sh @@ -60,8 +60,7 @@ run "Reconstruction" \ --outputAODFile AOD.root \ --steering doRAWtoALL \ --preInclude InDetConfig.ConfigurationHelpers.OnlyTrackingPreInclude \ - --postInclude TrigFastTrackFinder.ITkFastTrackFinderStandaloneConfig.ITkFastTrackFinderStandaloneCfg \ - --preExec "ConfigFlags.ITk.Tracking.doFastTracking=True" + --preExec "ConfigFlags.ITk.Tracking.useFTF=True" run "IDPVM" \ runIDPVM.py \ @@ -69,8 +68,7 @@ run "IDPVM" \ --outputFile idpvm.root \ --doHitLevelPlots \ --doExpertPlots \ - --truthMinPt=1000 \ - --validateExtraTrackCollections {'TrigFastTrackFinder_FTF_','TrigFastTrackFinder_IDTrig_'} + --truthMinPt=1000 reco_rc=$? if [ $reco_rc != 0 ]; then diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/test/test_run4_ttbar_PU200_FTF.sh b/InnerDetector/InDetValidation/InDetPhysValMonitoring/test/test_run4_ttbar_PU200_FTF.sh index 05ebb1be7f8f3da3708ded84b4ea02c273cd6917..4a10d01a630c63065775d82220ee694575ddfb5c 100755 --- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/test/test_run4_ttbar_PU200_FTF.sh +++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/test/test_run4_ttbar_PU200_FTF.sh @@ -31,8 +31,7 @@ run "Reconstruction" \ --outputAODFile AOD.root \ --steering doRAWtoALL \ --preInclude InDetConfig.ConfigurationHelpers.OnlyTrackingPreInclude \ - --postInclude TrigFastTrackFinder.ITkFastTrackFinderStandaloneConfig.ITkFastTrackFinderStandaloneCfg \ - --preExec "ConfigFlags.ITk.Tracking.doFastTracking=True" + --preExec "ConfigFlags.ITk.Tracking.useFTF=True" run "IDPVM" \ @@ -42,7 +41,7 @@ run "IDPVM" \ --doHitLevelPlots \ --doExpertPlots \ --truthMinPt=1000 \ - --validateExtraTrackCollections {'TrigFastTrackFinder_FTF_','TrigFastTrackFinder_IDTrig_'} + --doMuonMatchedTracks reco_rc=$? if [ $reco_rc != 0 ]; then diff --git a/Trigger/TrigAlgorithms/TrigFastTrackFinder/python/ITkFastTrackFinderStandaloneConfig.py b/Trigger/TrigAlgorithms/TrigFastTrackFinder/python/ITkFastTrackFinderStandaloneConfig.py index c3876e3cc7478d1818594ac3a26918350f183108..5f1e326a3f114aae900c479d405bf7c83aec2428 100644 --- a/Trigger/TrigAlgorithms/TrigFastTrackFinder/python/ITkFastTrackFinderStandaloneConfig.py +++ b/Trigger/TrigAlgorithms/TrigFastTrackFinder/python/ITkFastTrackFinderStandaloneConfig.py @@ -2,27 +2,22 @@ from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator from AthenaConfiguration.ComponentFactory import CompFactory -def ITkFastTrackFinderStandaloneCfg(flags): +def ITkFastTrackFinderStandaloneCfg(flags, SiSPSeededTrackCollectionKey = None): acc = ComponentAccumulator() - newflags = flags.cloneAndReplace("ITk.Tracking.ActiveConfig", "ITk.Tracking.FTFPass") - - ResolvedTrackCollectionKey = 'TrigFastTrackFinder_IDTrig_Tracks' - SiSPSeededTrackCollectionKey = 'TrigFastTrackFinder_FTF_Tracks' - - from TrkConfig.TrkTrackSummaryToolConfig import ITkTrackSummaryToolCfg - ITkTrackSummaryTool = acc.popToolsAndMerge(ITkTrackSummaryToolCfg(newflags, name = "ITkTrackSummaryTool_FTF", doHolesInDet = False)) + from TrkConfig.TrkTrackSummaryToolConfig import ITkTrackSummaryToolNoHoleSearchCfg + ITkTrackSummaryTool = acc.popToolsAndMerge(ITkTrackSummaryToolNoHoleSearchCfg(flags)) acc.addPublicTool(ITkTrackSummaryTool) - + from InDetConfig.SiTrackMakerConfig import ITkSiTrackMaker_xkCfg - ITkSiTrackMakerTool = acc.popToolsAndMerge( ITkSiTrackMaker_xkCfg( newflags, name = "ITkTrigSiTrackMaker_FTF" ) ) + ITkSiTrackMakerTool = acc.popToolsAndMerge(ITkSiTrackMaker_xkCfg(flags)) acc.addPublicTool(ITkSiTrackMakerTool) acc.addPublicTool( CompFactory.TrigInDetTrackFitter( "TrigInDetTrackFitter" ) ) from RegionSelector.RegSelToolConfig import (regSelTool_ITkStrip_Cfg, regSelTool_ITkPixel_Cfg) - pixRegSelTool = acc.popToolsAndMerge( regSelTool_ITkPixel_Cfg( newflags) ) - sctRegSelTool = acc.popToolsAndMerge( regSelTool_ITkStrip_Cfg( newflags) ) + pixRegSelTool = acc.popToolsAndMerge( regSelTool_ITkPixel_Cfg(flags) ) + sctRegSelTool = acc.popToolsAndMerge( regSelTool_ITkStrip_Cfg(flags) ) acc.addPublicTool( CompFactory.TrigL2LayerNumberToolITk( name = "TrigL2LayerNumberTool_FTF",UseNewLayerScheme = True) ) @@ -38,7 +33,7 @@ def ITkFastTrackFinderStandaloneCfg(flags): from TrigFastTrackFinder.TrigFastTrackFinderConfig import TrigFastTrackFinderMonitoringArg from TriggerJobOpts.TriggerHistSvcConfig import TriggerHistSvcConfig - acc.merge(TriggerHistSvcConfig(newflags)) + acc.merge(TriggerHistSvcConfig(flags)) monTool = TrigFastTrackFinderMonitoringArg(flags, name = "FullScan", doResMon=False) ftf = CompFactory.TrigFastTrackFinder( name = "TrigFastTrackFinder_", @@ -52,90 +47,22 @@ def ITkFastTrackFinderStandaloneCfg(flags): SeedRadBinWidth = 10, TrackInitialD0Max = 20.0, TracksName = SiSPSeededTrackCollectionKey, - TripletDoPSS = False, Triplet_D0Max = 4, - Triplet_D0_PPS_Max = 1.7, Triplet_MaxBufferLength = 1, Triplet_MinPtFrac = 0.7, - Triplet_nMaxPhiSlice = 53, - doCloneRemoval = True, UseTrigSeedML = 1, doResMon = False, doSeedRedundancyCheck = True, - pTmin = 1000.0, + pTmin = flags.ITk.Tracking.ActiveConfig.minPT[0], useNewLayerNumberScheme = True, - UseEtaBinning = True, - MinHits = 5, - useGPU = False, - DoubletDR_Max = 270, + MinHits = 3, ITkMode = True, # Allows ftf to use the new TrigTrackSeedGenerator for ITk - StandaloneMode = True, + StandaloneMode = True, # Allows ftf to be run as an offline algorithm with reco_tf doTrackRefit = False, - MonTool = monTool) # Allows ftf to be run as an offline algorithm with reco_tf + FreeClustersCut = 1, + MonTool = monTool) acc.addEventAlgo( ftf, primary=True ) - - if newflags.Tracking.doTruth: - from InDetConfig.ITkTrackTruthConfig import ITkTrackTruthCfg - acc.merge(ITkTrackTruthCfg(newflags, - Tracks=SiSPSeededTrackCollectionKey, - DetailedTruth = SiSPSeededTrackCollectionKey+"DetailedTruth", - TracksTruth = SiSPSeededTrackCollectionKey+"TruthCollection")) - - from xAODTrackingCnv.xAODTrackingCnvConfig import ITkTrackParticleCnvAlgCfg - acc.merge(ITkTrackParticleCnvAlgCfg(newflags, - name = "ITkTrackParticleCnvAlg_FTF", - TrackContainerName = SiSPSeededTrackCollectionKey, - xAODTrackParticlesFromTracksContainerName = 'TrigFastTrackFinder_FTF_TrackParticles')) - - # ------------------------------------------------------------ - # - # ---------- Ambiguity solving - # - # ------------------------------------------------------------ - - from TrkConfig.TrkAmbiguitySolverConfig import ITkTrkAmbiguityScoreCfg - - acc.merge(ITkTrkAmbiguityScoreCfg( newflags, - name = "ITkTrkAmbiguityScore_FTF", - SiSPSeededTrackCollectionKey = SiSPSeededTrackCollectionKey)) - - from TrkConfig.TrkAmbiguitySolverConfig import ITkTrkAmbiguitySolverCfg - acc.merge(ITkTrkAmbiguitySolverCfg(newflags, - name = "ITkTrkAmbiguitySolver_FTF", - ResolvedTrackCollectionKey = ResolvedTrackCollectionKey)) - - # ------------------------------------------------------------ - # - # ---------- Selecting associated truth tracks - # - # ------------------------------------------------------------ - - if newflags.Tracking.doTruth: - from InDetConfig.ITkTrackTruthConfig import ITkTrackTruthCfg - acc.merge(ITkTrackTruthCfg(newflags, - Tracks=ResolvedTrackCollectionKey, - DetailedTruth = ResolvedTrackCollectionKey+"DetailedTruth", - TracksTruth = ResolvedTrackCollectionKey+"TruthCollection")) - - acc.merge(ITkTrackParticleCnvAlgCfg(newflags, - name = "ITkTrackParticleCnvAlg_IDTrig", - TrackContainerName = ResolvedTrackCollectionKey, - xAODTrackParticlesFromTracksContainerName = 'TrigFastTrackFinder_IDTrig_TrackParticles')) - - # ------------------------------------------------------------ - # - # ---------- Save tracks to AOD - # - # ------------------------------------------------------------ - - from OutputStreamAthenaPool.OutputStreamConfig import addToESD,addToAOD - toAOD = ["xAOD::TrackParticleContainer#TrigFastTrackFinder_FTF_TrackParticles"] - toAOD += ["xAOD::TrackParticleAuxContainer#TrigFastTrackFinder_FTF_TrackParticlesAux."] - toAOD += ["xAOD::TrackParticleContainer#TrigFastTrackFinder_IDTrig_TrackParticles"] - toAOD += ["xAOD::TrackParticleAuxContainer#TrigFastTrackFinder_IDTrig_TrackParticlesAux."] - acc.merge(addToAOD(newflags, toAOD)) - acc.merge(addToESD(newflags, toAOD)) return acc