def InDetGlobalChi2FitterBase(name='GlobalChi2FitterBase', **kwargs): from TrkDetDescrSvc.AtlasTrackingGeometrySvc import AtlasTrackingGeometrySvc from InDetRecExample.TrackingCommon import setDefaults from AthenaCommon.AppMgr import ToolSvc from InDetRecExample.InDetJobProperties import InDetFlags import InDetRecExample.TrackingCommon as TrackingCommon kwargs = setDefaults( kwargs, ExtrapolationTool=TrackingCommon.getInDetExtrapolator(), NavigatorTool=TrackingCommon.getInDetNavigator(), PropagatorTool=TrackingCommon.getInDetPropagator(), MultipleScatteringTool=TrackingCommon. getInDetMultipleScatteringUpdator(), MeasurementUpdateTool=ToolSvc.InDetUpdator, TrackingGeometrySvc=AtlasTrackingGeometrySvc, MaterialUpdateTool=TrackingCommon.getInDetMaterialEffectsUpdator(), StraightLine=not InDetFlags.solenoidOn(), OutlierCut=4, SignedDriftRadius=True, ReintegrateOutliers=True, RecalibrateSilicon=True, RecalibrateTRT=True, TRTTubeHitCut= 1.75, # use tighter hit classification, old: TrackingCommon.default_ScaleHitUncertainty MaxIterations=40, Acceleration=True, RecalculateDerivatives=InDetFlags.doMinBias() or InDetFlags.doCosmics() or InDetFlags.doBeamHalo(), TRTExtensionCuts=True, TrackChi2PerNDFCut=7) from TrkGlobalChi2Fitter.TrkGlobalChi2FitterConf import Trk__GlobalChi2Fitter return Trk__GlobalChi2Fitter(name, **kwargs)
def InDetGlobalChi2Fitter(name='InDetGlobalChi2Fitter', **kwargs): split_cluster_map_extension = kwargs.pop('SplitClusterMapExtension', '') from InDetRecExample import TrackingCommon as TrackingCommon if 'RotCreatorTool' not in kwargs: kwargs = setDefaults( kwargs, RotCreatorTool=TrackingCommon.getInDetRotCreator( nameSuffix=split_cluster_map_extension, SplitClusterMapExtension=split_cluster_map_extension)) from InDetRecExample.InDetJobProperties import InDetFlags use_broad_cluster_any = InDetFlags.useBroadClusterErrors() and ( not InDetFlags.doDBMstandalone()) if 'BroadRotCreatorTool' not in kwargs and not InDetFlags.doRefit(): kwargs = setDefaults( kwargs, BroadRotCreatorTool=TrackingCommon.getInDetBroadRotCreator( nameSuffix=split_cluster_map_extension, SplitClusterMapExtension=split_cluster_map_extension)) if InDetFlags.doDBMstandalone(): kwargs = setDefaults(kwargs, StraightLine=True, OutlierCut=5, RecalibrateTRT=False, TRTExtensionCuts=False, TrackChi2PerNDFCut=20) if InDetFlags.doRefit() or use_broad_cluster_any is True: kwargs = setDefaults(kwargs, RecalibrateSilicon=False) if InDetFlags.doRefit(): kwargs = setDefaults(kwargs, BroadRotCreatorTool=None, ReintegrateOutliers=False, RecalibrateTRT=False) if InDetFlags.doRobustReco(): kwargs = setDefaults( kwargs, # BroadRotCreatorTool = None OutlierCut=10.0, TrackChi2PerNDFCut=20) if InDetFlags.doRobustReco() or InDetFlags.doCosmics(): kwargs = setDefaults(kwargs, MaxOutliers=99) if InDetFlags.doCosmics() or InDetFlags.doBeamHalo(): kwargs = setDefaults(kwargs, Acceleration=False) if InDetFlags.materialInteractions() and not InDetFlags.solenoidOn(): kwargs = setDefaults(kwargs, Momentum=1000. * Units.MeV) return InDetGlobalChi2FitterBase(name, **kwargs)
# NewTracking collection keys InputCombinedInDetTracks = [] # CTBTracking collection keys InputCTBTrackCollections = [] # ------------------------------------------------------------ # # ----------- Merge track collections # # ------------------------------------------------------------ # always merge track collections. even if only one collection ran! # (this is because the track merger fills the prd association tool!) # *ME* fix, only merge if more than 1 track collection if InDetFlags.doNewTrackingPattern() or InDetFlags.doBeamHalo(): from TrkTrackCollectionMerger.TrkTrackCollectionMergerConf import Trk__TrackCollectionMerger TrkTrackCollectionMerger = Trk__TrackCollectionMerger( name="InDetTrackCollectionMerger", TracksLocation=InputCombinedInDetTracks, OutputTracksLocation=InDetKeys.UnslimmedTracks(), AssoTool=InDetPrdAssociationTool, SummaryTool=InDetTrackSummaryToolSharedHits) topSequence += TrkTrackCollectionMerger if (InDetFlags.doPrintConfigurables()): print TrkTrackCollectionMerger # --- Delete unmerged tracks (Si, back-tracking, TRT) from InDetRecExample.ConfiguredInDetSGDeletion import InDetSGDeletionAlg if not InDetFlags.doMonitoringAlignment(): InDetSGDeletionAlg(key=InputCombinedInDetTracks)
def __init__ (self, nameExt = "", doStat = True, doClusVal = True, NewTrackingCuts = None, TrackCollectionKeys=[] , TrackCollectionTruthKeys=[], rmin = 0., rmax = 20., McEventCollectionKey = "TruthEvent"): from InDetRecExample.InDetJobProperties import InDetFlags from InDetRecExample.InDetKeys import InDetKeys # # get ToolSvc and topSequence # from AthenaCommon.AppMgr import ToolSvc from AthenaCommon.AlgSequence import AlgSequence topSequence = AlgSequence() # ------------------------------------------------------------ # # ------------- Do we do statistics for tracks ? # # ------------------------------------------------------------ # if doStat: # # --- load statistics alg # from InDetRecExample.TrackingCommon import getInDetPRDtoTrackMapToolGangedPixels from InDetRecStatistics.InDetRecStatisticsConf import InDet__InDetRecStatisticsAlg do_shared_hits=True InDetRecStatistics = InDet__InDetRecStatisticsAlg (name = "InDetRecStatistics"+nameExt, TrackCollectionKeys = TrackCollectionKeys, TrackTruthCollectionKeys = TrackCollectionTruthKeys if InDetFlags.doTruth() else [], McTrackCollectionKey = McEventCollectionKey if InDetFlags.doTruth() else "", PrintSecondary = True, TruthToTrackTool = (InDetTruthToTrack if InDetFlags.doTruth() else None), UseTrackSummary = True, AssociationTool = getInDetPRDtoTrackMapToolGangedPixels() \ if do_shared_hits else "", DoSharedHits = do_shared_hits, SummaryTool = InDetTrackSummaryToolSharedHits, # this is a bug !!! DoTruth = InDetFlags.doTruth(), # maxEta = NewTrackingCuts.maxEta(), # minPt = 2. * NewTrackingCuts.minPT(), fakeTrackCut = 0.8, # ME: adapt cuts fakeTrackCut2 = 0.5, # ME: adapt cuts matchTrackCut = 0.5, # ME: adapt cuts # maxEta = 2.5, # ME: full coverage ends here maxEta = NewTrackingCuts.maxEta(), minPt = 1.*GeV, # ME: let's restrict to higher pt maxRStartPrimary = 25.0, # ME: allows for IBL maxRStartSecondary = 560.0, # ME: exit of SCT (we have TRT only) maxZStartPrimary = 320.0, # ME: is in the beam pipe anyway maxZStartSecondary = 1500.0, # ME: enough forward hits minREndPrimary = 400.0, # ME: between SCT 2 and 3 minREndSecondary = 1000.0, # ME: leaves in R minZEndPrimary = 2300.0, # ME: 2 disks in the forward minZEndSecondary = 2700.0) # ME: or leaves in z if InDetFlags.doDBMstandalone() or nameExt=="DBM" or nameExt=="PUDBM": InDetRecStatistics.minPt = .0*GeV InDetRecStatistics.maxEta = 9999. InDetRecStatistics.maxRStartPrimary = 9999999. InDetRecStatistics.maxRStartSecondary = 9999999. InDetRecStatistics.maxZStartPrimary = 9999999. InDetRecStatistics.maxZStartSecondary = 9999999. InDetRecStatistics.minREndPrimary = 0. InDetRecStatistics.minREndSecondary = 0. InDetRecStatistics.minZEndPrimary = 0. InDetRecStatistics.minZEndSecondary = 0. elif (InDetFlags.doCosmics() or InDetFlags.doBeamHalo()): # change cuts for cosmics InDetRecStatistics.minPt = .0*GeV InDetRecStatistics.maxEta = 9999. InDetRecStatistics.maxEtaEndcap = 9999. InDetRecStatistics.maxRStartPrimary = 9999999. InDetRecStatistics.maxRStartSecondary = 9999999. InDetRecStatistics.maxZStartPrimary = 9999999. InDetRecStatistics.maxZStartSecondary = 9999999. InDetRecStatistics.minREndPrimary = 0. InDetRecStatistics.minREndSecondary = 0. InDetRecStatistics.minZEndPrimary = 0. InDetRecStatistics.minZEndSecondary = 0. topSequence += InDetRecStatistics if (InDetFlags.doPrintConfigurables()): printfunc (InDetRecStatistics) # # --- load cluster validation alg # if doClusVal: from InDetTrackClusterAssValidation.InDetTrackClusterAssValidationConf import InDet__TrackClusterAssValidation InDetTrackClusterAssValidation = InDet__TrackClusterAssValidation(name = "InDetTrackClusterAssValidation"+nameExt, TracksLocation = TrackCollectionKeys , SpacePointsPixelName = InDetKeys.PixelSpacePoints() , SpacePointsSCTName = InDetKeys.SCT_SpacePoints() , SpacePointsOverlapName = InDetKeys.OverlapSpacePoints() , MomentumCut = 2. * NewTrackingCuts.minPT() , RapidityCut = NewTrackingCuts.maxEta() , RadiusMin = rmin , RadiusMax = rmax , MinNumberClusters = NewTrackingCuts.minClusters() , MinNumberClustersTRT = 0 , MinNumberSpacePoints = 3 , usePixel = DetFlags.haveRIO.pixel_on() , useSCT = DetFlags.haveRIO.SCT_on() , useTRT = DetFlags.haveRIO.TRT_on() ) if InDetFlags.doDBMstandalone() or nameExt=="DBM" or nameExt=="PUDBM": InDetTrackClusterAssValidation.MomentumCut = 0 InDetTrackClusterAssValidation.RadiusMax = 9999999.0 # InDetTrackClusterAssValidation.RapidityCut = 9999.9 InDetTrackClusterAssValidation.MinNumberClustersTRT = 0 InDetTrackClusterAssValidation.MinNumberClusters = 0 InDetTrackClusterAssValidation.MinNumberSpacePoints = 0 elif InDetFlags.doCosmics() or InDetFlags.doBeamHalo(): InDetTrackClusterAssValidation.MomentumCut = NewTrackingCuts.minPT() InDetTrackClusterAssValidation.RadiusMax = 9999999.0 InDetTrackClusterAssValidation.RapidityCut = 9999.9 InDetTrackClusterAssValidation.MinNumberClustersTRT = 0 InDetTrackClusterAssValidation.MinNumberClusters = 8 #InDetTrackClusterAssValidation.MinNumberClustersTRT = 0 InDetTrackClusterAssValidation.MinNumberSpacePoints = 4 if InDetFlags.doBeamHalo(): InDetTrackClusterAssValidation.MomentumCut = 0 topSequence += InDetTrackClusterAssValidation if (InDetFlags.doPrintConfigurables()): printfunc (InDetTrackClusterAssValidation)