diff --git a/InnerDetector/InDetExample/InDetRecExample/python/TrackingCommon.py b/InnerDetector/InDetExample/InDetRecExample/python/TrackingCommon.py index 26f6a5b5c483f06578c5e00fdfc3171a1792850b..9e51a95f7036244662b70554598ab0189b48298b 100644 --- a/InnerDetector/InDetExample/InDetRecExample/python/TrackingCommon.py +++ b/InnerDetector/InDetExample/InDetRecExample/python/TrackingCommon.py @@ -1460,33 +1460,51 @@ def getSolenoidalIntersector(name="SolenoidalIntersector", **kwargs) : from TrkExSolenoidalIntersector.TrkExSolenoidalIntersectorConf import Trk__SolenoidalIntersector return Trk__SolenoidalIntersector(the_name, **setDefaults(kwargs, SolenoidParameterizationKey = 'SolenoidParametrization')) -def hasSplitProb(key) : - # @TODO find better solution, - import re - pat=re.compile('.*Dense.*') - from AthenaCommon.AppMgr import ToolSvc - for a_tool in ToolSvc.getChildren() : - if pat.match( a_tool.getFullName() ) != None : - print ('DEBUG split prob probabily set by %s' % a_tool.getFullName() ) - return True +def searchProb(prob_val) : + def iterateComp() : + from AthenaCommon.AppMgr import ToolSvc + from AthenaCommon.Configurable import ConfigurableAlgTool + + for a_tool in ToolSvc.getChildren() : + yield a_tool + from AthenaCommon.AlgSequence import AlgSequence + topSequence = AlgSequence() + for an_alg in topSequence.getChildren() : + yield an_alg + for name,prop in an_alg.getProperties().items() : + if isinstance(prop,ConfigurableAlgTool) and not prop.isInToolSvc() : + yield prop + + for a_comp in iterateComp() : + for name,prop in a_comp.getProperties().items() : + if isinstance(prop ,str) and prop == prob_val : + return True + return False +def hasSplitProb(key) : + # @TODO find better solution than searching through a huge number of properties from RecExConfig.AutoConfiguration import IsInInputFile if IsInInputFile('Trk::ClusterSplitProbabilityContainer',key) : - print ('DEBUG split prob %s in inputfile ' % key ) return True - print ('DEBUG split prob is not set.' ) + if searchProb(key) : + return True return False def combinedClusterSplitProbName() : - # precisely mimics the configuration in InDetRec_jobOptions - # chaings in InDetRec_jobOptions to the ClusterSplitProbContainer also have to be implemented here - # @TODO find a better way to provide the final name of ClusterSplitProbContainer used for the combined InDetTrackParticles - ClusterSplitProbContainer='' - from AthenaCommon.BeamFlags import jobproperties - from InDetRecExample.InDetJobProperties import InDetFlags + # precisely mimics the configuration in InDetRec_jobOptions + # chaings in InDetRec_jobOptions to the ClusterSplitProbContainer also have to be implemented here + # To synchronise with InDetRec_jobOptions the logic can be extracted with + # grep "CombinedInDetClusterSplitProbContainer\|ClusterSplitProbContainer\|[[:space:]]\(el\|\)if\([[:space:]]\|(\)\|[[:space:]]else[[:space:]]*:\|ConfiguredNewTrackingCuts" + # InnerDetector/InDetExample/InDetRecExample/share/InDetRec_jobOptions.py + # @TODO find a better way to provide the final name of ClusterSplitProbContainer used for the combined InDetTrackParticles + from AthenaCommon.BeamFlags import jobproperties + from InDetRecExample.InDetJobProperties import InDetFlags + CombinedInDetClusterSplitProbContainer = '' + ClusterSplitProbContainer='' + if InDetFlags.Enabled(): + from InDetRecExample.ConfiguredNewTrackingCuts import ConfiguredNewTrackingCuts if ('InDetNewTrackingCuts' not in dir()): - from InDetRecExample.ConfiguredNewTrackingCuts import ConfiguredNewTrackingCuts if InDetFlags.doDBMstandalone(): InDetNewTrackingCuts = ConfiguredNewTrackingCuts("DBM") elif InDetFlags.doVtxLumi(): @@ -1509,22 +1527,27 @@ def combinedClusterSplitProbName() : InDetNewTrackingCuts = ConfiguredNewTrackingCuts("R3LargeD0") else: InDetNewTrackingCuts = ConfiguredNewTrackingCuts("Offline") - if InDetFlags.doTrackSegmentsPixel(): if ('InDetNewTrackingCutsPixel' not in dir()): InDetNewTrackingCutsPixel = ConfiguredNewTrackingCuts("Pixel") ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCutsPixel.extension() + # @TODO CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainer if InDetFlags.doTrackSegmentsSCT(): if ('InDetNewTrackingCutsSCT' not in dir()): InDetNewTrackingCutsSCT = ConfiguredNewTrackingCuts("SCT") ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCutsSCT.extension() + # @TODO CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainer if InDetFlags.doTRTPhaseCalculation() and not jobproperties.Beam.beamType()=="collisions" and InDetFlags.doNewTracking(): - ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCuts.extension() - if InDetFlags.doNewTracking() and ( not InDetFlags.doTRTPhaseCalculation() or jobproperties.Beam.beamType()=="collisions"): - ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCuts.extension() + ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCuts.extension() + CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainer + if InDetFlags.doNewTracking() and (not InDetFlags.doTRTPhaseCalculation() or jobproperties.Beam.beamType()=="collisions"): + ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCuts.extension() + CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainer if InDetFlags.doBackTracking(): ClusterSplitProbContainer = 'InDetTRT_SeededAmbiguityProcessorSplitProb'+InDetNewTrackingCuts.extension() - if (InDetFlags.doLargeD0() or InDetFlags.doR3LargeD0() or InDetFlags.doLowPtLargeD0() ) and InDetFlags.doDVRetracking(): + CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainer + ClusterSplitProbContainerLargeD0='' + if InDetFlags.doLargeD0() or InDetFlags.doR3LargeD0() or InDetFlags.doLowPtLargeD0(): if ('InDetNewTrackingCutsLargeD0' not in dir()): if InDetFlags.doLowPtLargeD0(): InDetNewTrackingCutsLargeD0 = ConfiguredNewTrackingCuts("LowPtLargeD0") @@ -1532,40 +1555,52 @@ def combinedClusterSplitProbName() : InDetNewTrackingCutsLargeD0 = ConfiguredNewTrackingCuts("R3LargeD0") else: InDetNewTrackingCutsLargeD0 = ConfiguredNewTrackingCuts("LargeD0") - ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCutsLargeD0.extension() + ClusterSplitProbContainerLargeD0 = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCutsLargeD0.extension() + if not InDetFlags.storeSeparateLargeD0Container(): + ClusterSplitProbContainer = ClusterSplitProbContainerLargeD0 + CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainerLargeD0 if InDetFlags.doLowPt(): if ('InDetNewTrackingCutsLowPt' not in dir()): InDetNewTrackingCutsLowPt = ConfiguredNewTrackingCuts("LowPt") ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCutsLowPt.extension() + CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainer if InDetFlags.doVeryLowPt(): if ('InDetNewTrackingCutsVeryLowPt' not in dir()): InDetNewTrackingCutsVeryLowPt = ConfiguredNewTrackingCuts("VeryLowPt") ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCutsVeryLowPt.extension() + CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainer + if InDetFlags.doTRTStandalone(): + CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainer if InDetFlags.doForwardTracks() and InDetFlags.doSLHC(): if InDetFlags.doSLHCVeryForward(): if ('InDetNewTrackingCutsForwardTracks' not in dir()): - from InDetRecExample.ConfiguredNewTrackingCuts import ConfiguredNewTrackingCuts InDetNewTrackingCutsForwardTracks = ConfiguredNewTrackingCuts("VeryForwardSLHCTracks") ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCutsForwardTracks.extension() + CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainer else: if ('InDetNewTrackingCutsForwardTracks' not in dir()): - from InDetRecExample.ConfiguredNewTrackingCuts import ConfiguredNewTrackingCuts InDetNewTrackingCutsForwardTracks = ConfiguredNewTrackingCuts("ForwardSLHCTracks") ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCutsForwardTracks.extension() + CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainer if InDetFlags.doSLHCConversionFinding() and InDetFlags.doSLHC(): if ('InDetNewTrackingCutsSLHCConversionFinding' not in dir()): - from InDetRecExample.ConfiguredNewTrackingCuts import ConfiguredNewTrackingCuts InDetNewTrackingCutsSLHCConversionFinding = ConfiguredNewTrackingCuts("SLHCConversionFinding") - ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCutsForwardTracks.extension() - if InDetFlags.doBeamGas() and jobproperties.Beam.beamType() == "singlebeam": + ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCutsSLHCConversionFinding.extension() + CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainer + if InDetFlags.doBeamGas(): if ('InDetNewTrackingCutsBeamGas' not in dir()): - from InDetRecExample.ConfiguredNewTrackingCuts import ConfiguredNewTrackingCuts InDetNewTrackingCutsBeamGas = ConfiguredNewTrackingCuts("BeamGas") ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCutsBeamGas.extension() - if InDetFlags.doCosmics() and InDetFlags.doNewTracking() : - ClusterSplitProbContainer = '' # @TODO correct ? - - return ClusterSplitProbContainer if hasSplitProb(ClusterSplitProbContainer) else '' + if jobproperties.Beam.beamType() == "singlebeam": + CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainer + if InDetFlags.doCosmics() and InDetFlags.doNewTracking() : # @TODO should also consider: and len(InputCombinedInDetTracks) > 1: + CombinedInDetClusterSplitProbContainer = '' # @TODO really no split prob container ? + if InDetFlags.doNewTrackingPattern() or InDetFlags.doBeamHalo(): + if InDetFlags.useExistingTracksAsInput(): + pass # CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainer # @TODO handle cluster splitting probability ? + if InDetFlags.doDBMstandalone(): + CombinedInDetClusterSplitProbContainer='' + return CombinedInDetClusterSplitProbContainer if hasSplitProb(CombinedInDetClusterSplitProbContainer) else '' def pixelClusterSplitProbName() : ClusterSplitProbContainer=combinedClusterSplitProbName()