Exemple #1
0
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)
Exemple #2
0
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)
Exemple #4
0
  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)