예제 #1
0
 def MakeVeloTracks(self,prefilter):
     
     if self.__confdict__["DoVeloDecoding"]:
         from DAQSys.Decoders import DecoderDB
         from DAQSys.DecoderClass import decodersForBank
         decs=[]
         vdec=DecoderDB["DecodeVeloRawBuffer/createBothVeloClusters"]
         vdec.Active=True
         DecoderDB["DecodeVeloRawBuffer/createVeloClusters"].Active=False
         DecoderDB["DecodeVeloRawBuffer/createVeloLiteClusters"].Active=False
         decs=decs+[vdec]
         VeloDecoding = GaudiSequencer("RecoDecodingSeq")
         VeloDecoding.Members += [d.setup() for d in decs ]
     
     MyFastVeloTracking = FastVeloTracking("For%sFastVelo"%self.name,OutputTracksName=self.VeloTrackOutputLocation)
     MyFastVeloTracking.OnlyForward = True
     MyFastVeloTracking.ResetUsedFlags = True
     ### prepare for fitting
     preve = TrackStateInitAlg("For%sInitSeedFit"%self.name,TrackLocation = self.VeloTrackOutputLocation)
     preve.StateInitTool.VeloFitterName = "FastVeloFitLHCbIDs"
     copyVelo = TrackContainerCopy( "For%sCopyVelo"%self.name )
     copyVelo.inputLocations = [self.VeloTrackOutputLocation]
     copyVelo.outputLocation = self.FittedVeloTrackOutputLocation
     
     ### fitting
     if self.__confdict__["VeloFitter"] == "ForwardStraightLine":
         MyVeloFit = ConfiguredForwardStraightLineEventFitter(Name="For%sVeloRefitterAlg"%self.name,
                                                              TracksInContainer=self.FittedVeloTrackOutputLocation)
     elif self.__confdict__["VeloFitter"] == "SimplifiedGeometry":
         MyVeloFit = ConfiguredEventFitter(Name="For%sVeloRefitterAlg"%self.name,
                                           TracksInContainer=self.FittedVeloTrackOutputLocation,
                                           SimplifiedGeometry = True)
     else:
         MyVeloFit = ConfiguredEventFitter(Name="For%sVeloRefitterAlg"%self.name,
                                           TracksInContainer=self.FittedVeloTrackOutputLocation)
         
     #### making the proto particles
     MakeVeloProtos = ChargedProtoParticleMaker('For%sVeloProtoMaker'%self.name)
     MakeVeloProtos.Inputs=[self.FittedVeloTrackOutputLocation]
     MakeVeloProtos.Output = self.VeloProtoOutputLocation
     MakeVeloProtos.addTool( DelegatingTrackSelector, name="TrackSelector" )
     MakeVeloProtos.TrackSelector.TrackTypes = [ "Velo" ]
 
     #### the full sequence
     makeparts = GaudiSequencer('For%sMakeVeloTracksGS'%self.name)
     if self.__confdict__["DoVeloDecoding"]:
         makeparts.Members += [ VeloDecoding ] 
     makeparts.Members += [ MyFastVeloTracking ] 
     makeparts.Members += [ preve ] 
     makeparts.Members += [ copyVelo ] 
     makeparts.Members += [ MyVeloFit ] 
     makeparts.Members += [ MakeVeloProtos ] 
 
     #### some python magic to maek this appear like a "Selection"
     return GSWrapper(name="For%sWrappedVeloTrackingFor"%self.name,
                      sequencer=makeparts,
                      output=self.VeloProtoOutputLocation,
                      requiredSelections =  prefilter)
예제 #2
0
    def applyConf(self):

        MSRossiAndGreisen = False
        # For Run 2, we want the new multiple scattering
        if (self.getProp("DataType") in self.Run2DataTypes):
            MSRossiAndGreisen = True

        muonTrackFit = ConfiguredEventFitter(
            'MuonTrackFitter',
            'Rec/Track/Muon',
            MSRossiAndGreisen=MSRossiAndGreisen)
        muonTrackFit.Fitter.addTool(TrackKalmanFilter, 'NodeFitter')
        muonTrackFit.Fitter.addTool(MeasurementProvider, name='MeasProvider')
        muonTrackFit.Fitter.MeasProvider.IgnoreVelo = True
        muonTrackFit.Fitter.MeasProvider.IgnoreTT = True
        muonTrackFit.Fitter.MeasProvider.IgnoreIT = True
        muonTrackFit.Fitter.MeasProvider.IgnoreOT = True
        muonTrackFit.Fitter.MeasProvider.IgnoreMuon = False
        muonTrackFit.Fitter.MeasProvider.MuonProvider.clusterize = True  #=======
        #muonTrackFit.Fitter.MeasProvider.MuonProvider.OutputLevel    = DEBUG #=======
        muonTrackFit.Fitter.ErrorX = 1000
        muonTrackFit.Fitter.ErrorY = 1000
        muonTrackFit.Fitter.ErrorTx = 0.7
        muonTrackFit.Fitter.ErrorTy = 0.7
        muonTrackFit.Fitter.NumberFitIterations = 4
        muonTrackFit.Fitter.MaxNumberOutliers = 0  #2
        muonTrackFit.OutputLevel = self.getProp("OutputLevel")

        muonMoniSeq = self.getProp("Sequencer")

        monalig = MuonTrackAligMonitor("MuonTrackAligMonitor",
                                       HistoTopDir="Muon/",
                                       HistoLevel=self.getProp("Histograms"))
        monalig.OutputLevel = self.getProp("OutputLevel")
        #monalig.IsLongTrackState = True
        monalig.LongToMuonMatch = True
        monalig.pCut = 6  # =========
        monalig.chi2nCut = 3
        monalig.chi2matchCut = 10
        monalig.IsCosmics = False

        # For Run 2, we want the new multiple scattering
        if (self.getProp("DataType") in self.Run2DataTypes):
            from Configurables import TrackMasterExtrapolator, DetailedMaterialLocator, StateThickMSCorrectionTool
            monalig.addTool(TrackMasterExtrapolator, name="Extrapolator")
            monalig.Extrapolator.addTool(DetailedMaterialLocator,
                                         name="MaterialLocator")
            monalig.Extrapolator.MaterialLocator.addTool(
                StateThickMSCorrectionTool, "StateMSCorrectionTool")
            monalig.Extrapolator.MaterialLocator.StateMSCorrectionTool.UseRossiAndGreisen = True

        muonMoniSeq.Members += [muonTrackFit, monalig]
예제 #3
0
    def algorithm(self):
        Name = self._name
        inputTrackLocation = self._inputLocation
        from Configurables import GaudiSequencer, HltTrackConverter, TrackContainerCopy, Escher
        from Configurables import TrackContainerCopy, TrackSelector
        trackRefitSeq = GaudiSequencer(
            self.name() + "Seq")  # GaudiSequencer("TrackRefitSeq")

        # create a track list for tracks with velo hits
        velotrackselector = TrackContainerCopy(
            "GoodLongRefittedVeloTracks",
            inputLocations=["Rec/Track/Best"],
            outputLocation="Rec/Track/GoodLongRefittedVeloTracks",
            Selector=TrackSelector())
        velotrackselector.Selector.MinNVeloRHits = 7
        velotrackselector.Selector.MinNVeloPhiHits = 6
        # refit the tracks in that list
        from TrackFitter.ConfiguredFitters import *
        velotrackrefitter = ConfiguredEventFitter(
            Name="TracksWithVeloHitsFitter",
            TracksInContainer="Rec/Track/GoodLongRefittedVeloTracks",
            FieldOff=True)
        velotrackrefitter.Fitter.MeasProvider.IgnoreIT = True
        velotrackrefitter.Fitter.MeasProvider.IgnoreOT = True
        velotrackrefitter.Fitter.MeasProvider.IgnoreTT = True
        velotrackrefitter.Fitter.MeasProvider.IgnoreMuon = True
        velotrackrefitter.Fitter.MakeNodes = True
        velotrackrefitter.Fitter.MakeMeasurements = True

        trackRefitSeq.Members += [velotrackselector, velotrackrefitter]
        return trackRefitSeq
예제 #4
0
def configuredFitAndHitAdderSequence(Name, InputLocation, OutputLocation):
    from TrackFitter.ConfiguredFitters import ConfiguredEventFitter
    from Configurables import (TrackHitAdder, TrackContainerCopy,
                               TrackSelector, GaudiSequencer,
                               TrackStateInitAlg)
    # create the sequence
    if isinstance(Name, GaudiSequencer):
        seq = Sequence
        Name = seq.name()
        Name.replace('Sequence', '')
        Name.replace('Seq', '')
    else:
        seq = GaudiSequencer(Name + 'Seq')

    # I am lazy: use the DOD to get the decoded clusters
    #importOption( "$STDOPTS/DecodeRawEvent.py" )
    # now setup the fitters
    seq.Members += [
        TrackStateInitAlg(Name + 'FitInit', TrackLocation=InputLocation),
        ConfiguredEventFitter(Name + 'FitBeforeHitAdder',
                              TracksInContainer=InputLocation),
        TrackHitAdder(Name + 'HitAdder', TrackLocation=InputLocation),
        ConfiguredEventFitter(Name + 'FitAfterHitAdder',
                              TracksInContainer=InputLocation)
    ]
    tracksel = TrackContainerCopy(Name + 'CopyAndSelect',
                                  inputLocations=[InputLocation],
                                  outputLocation=OutputLocation,
                                  Selector=TrackSelector())
    # also apply a selection
    tracksel.Selector.MaxChi2Cut = 5
    tracksel.Selector.MaxChi2PerDoFMatch = 5
    tracksel.Selector.MaxChi2PerDoFVelo = 5
    tracksel.Selector.MaxChi2PerDoFDownstream = 5
    seq.Members.append(tracksel)
    return seq
    matching.TTracksLocation = 'Rec/Track/Best'  # Best container + chisquare < 5
    matching.MuonTracksLocation = 'Rec/Track/SelectedMuon'  # MuonNNet
    matching.TracksOutputLocation = 'Rec/Track/Best/TMuon'
    matching.addTool(TrackMasterExtrapolator, name='Extrapolator')
    matching.Extrapolator.ApplyMultScattCorr = True
    matching.Extrapolator.ApplyEnergyLossCorr = False
    matching.Extrapolator.ApplyElectronEnergyLossCorr = False
    matching.addTool(TrackChi2Calculator, name='Chi2Calculator')
    matching.MatchChi2Cut = 10.0  #
    matching.WriteNtuple = OTMuon_ntuple

    # Fit TMuon tracks

    #tmuonfit = ConfiguredFastEventFitter( 'TMuonFit', TracksInContainer = 'Rec/Track/Best/TMuon') # contains Best+Muon
    tmuonfit = ConfiguredEventFitter(
        'TMuonFit',
        TracksInContainer='Rec/Track/Best/TMuon')  # contains Best+Muon
    tmuonfit.OutputLevel = outputlevel
    tmuonfit.Fitter.MakeNodes = True
    tmuonfit.Fitter.MakeMeasurements = True
    tmuonfit.Fitter.addTool(TrackKalmanFilter, 'NodeFitter')
    tmuonfit.Fitter.ErrorX = 1000
    tmuonfit.Fitter.ErrorY = 10000
    tmuonfit.Fitter.NumberFitIterations = 5
    tmuonfit.Fitter.MaxDeltaChiSqConverged = 0.1
    tmuonfit.Fitter.MaxNumberOutliers = 0
    tmuonfit.Fitter.addTool(MeasurementProvider(), name='MeasProvider')
    tmuonfit.Fitter.MeasProvider.MuonProvider.clusterize = True
    tmuonfit.Fitter.MeasProvider.MuonProvider.OutputLevel = outputlevel
    tmuonfit.Fitter.MeasProvider.IgnoreMuon = False
예제 #6
0
    def algorithm(self):
        from Configurables import TrackSys
        TrackSys().GlobalCuts = {
            'Velo': 4000,
            'OT': 8000
        }  #### to remove busy events
        Name = self._name
        inputTrackLocation = self._inputLocation
        from Configurables import GaudiSequencer, HltTrackConverter, TrackContainerCopy, Escher
        from TAlignment.Utils import configuredFitAndHitAdderSequence
        seq = GaudiSequencer(self.name() + "Seq")
        ## Here starts Stefania's code ========================
        from Configurables import MuonNNetRec, MuonPadRec, MuonClusterRec

        muonTrackTool = MuonNNetRec(
            name="MuonNNetRec",
            AssumeCosmics=False,
            PhysicsTiming=False,
            AssumePhysics=
            True,  ## assume that tracks come from IP (only forward)
            AddXTalk=True,
            XtalkRadius=1.5,
            SkipStation=0,
            #DecodingTool = "MuonMonHitDecode", # default is "MuonHitDecode"
            ClusterTool="MuonClusterRec"  # default is "MuonFakeClustering"
            #OutputLevel   = 2
        )

        clusterTool = MuonClusterRec(name="MuonClusterRec",
                                     OutputLevel=5,
                                     MaxPadsPerStation=500)  #default 1500
        padRecTool = MuonPadRec(name="PadRecTool", OutputLevel=5)

        from Configurables import MakeMuonTracks
        copy = MakeMuonTracks(name='MakeMuonTracks',
                              OutputLevel=5,
                              SkipBigClusters=True)
        copy.addTool(muonTrackTool, name='MuonRecTool')
        # ------------------------------------------------------------------
        seq.Members += [copy]  # Copy MuonTracks to LHCb tracks
        # ------------------------------------------------------------------
        from TrackFitter.ConfiguredFitters import ConfiguredForwardStraightLineEventFitter  #, ConfiguredStraightLineFitter
        from Configurables import MeasurementProvider, TrackKalmanFilter

        muonTrackFit = ConfiguredForwardStraightLineEventFitter(
            "MuonTrackFit", TracksInContainer="Rec/Track/Muon")
        #muonTrackFit =  ConfiguredStraightLineFitter( 'MuonTrackFit' , TracksInContainer = 'Rec/Track/Muon' )

        muonTrackFit.Fitter.OutputLevel = 5
        muonTrackFit.Fitter.addTool(TrackKalmanFilter, 'NodeFitter')
        muonTrackFit.Fitter.addTool(MeasurementProvider, name='MeasProvider')

        muonTrackFit.Fitter.MeasProvider.MuonProvider.clusterize = True  #default False
        muonTrackFit.Fitter.MeasProvider.MuonProvider.OutputLevel = 5
        muonTrackFit.Fitter.ErrorX = 1000
        muonTrackFit.Fitter.ErrorY = 10000
        muonTrackFit.Fitter.MaxNumberOutliers = 0
        # ------------------------------------------------------------------
        seq.Members += [muonTrackFit]
        # ------------------------------------------------------------------
        from Configurables import TAlignment, GetElementsToBeAligned
        from Configurables import TrackFilterAlg
        trackFilterAlg = TrackFilterAlg(
            name="FilterTracks",
            OutputLevel=5,
            TracksInputContainer="Rec/Track/Muon",  # MuonTrackRec
            TracksOutputContainer="Rec/Track/SelectedMuon",  # Filtered tracks
            MuonFilter=True,  ###------------------------------ MUONTRACKSELECTOR
            MuonPcut=6000.,  ## 6 GeV
            MuonChisquareCut=5,
            inCaloAcceptance=True,
            noOverlap=False,
            #TheRegion       = 10
            minHitStation=3)  # >3

        ####???????
        trackFilterAlg.addTool(GetElementsToBeAligned(
            OutputLevel=5, Elements=TAlignment().ElementsToAlign),
                               name="GetElementsToBeAligned")
        # ------------------------------------------------------------------
        seq.Members += [trackFilterAlg]
        # ------------------------------------------------------------------
        from Configurables import TrackMuonMatching, TrackMasterExtrapolator, TrackChi2Calculator
        #, TrajOTCosmicsProjector, TrajOTProjector, TrackProjectorSelector
        matching = TrackMuonMatching(
            name="TrackMuonMatching",
            AllCombinations=False,  # default true
            MatchAtFirstMuonHit=True,  # default false
            FullDetail=True,  #????
            OutputLevel=5,
            TTracksLocation=inputTrackLocation,  # Best container + chisquare < 5
            MuonTracksLocation='Rec/Track/SelectedMuon',  # MuonNNet
            TracksOutputLocation='Rec/Track/Best/TMuon',
            MatchChi2Cut=20.0,
            WriteNtuple=False)
        matching.addTool(TrackMasterExtrapolator, name='Extrapolator')
        matching.Extrapolator.ApplyMultScattCorr = True
        matching.Extrapolator.ApplyEnergyLossCorr = False
        matching.Extrapolator.ApplyElectronEnergyLossCorr = False
        matching.addTool(TrackChi2Calculator, name='Chi2Calculator')
        # ------------------------------------------------------------------
        seq.Members += [matching]  # Track-Muon  Matching
        # ------------------------------------------------------------------

        from TrackFitter.ConfiguredFitters import ConfiguredEventFitter
        #tmuonfit = ConfiguredFastEventFitter( 'TMuonFit', TracksInContainer = 'Rec/Track/Best/TMuon') # contains Best+Muon
        tmuonfit = ConfiguredEventFitter(
            "TMuonFit",
            TracksInContainer='Rec/Track/Best/TMuon')  # contains Best+Muon

        tmuonfit.Fitter.MakeNodes = True
        tmuonfit.Fitter.MakeMeasurements = True
        tmuonfit.Fitter.addTool(TrackKalmanFilter, 'NodeFitter')
        tmuonfit.Fitter.ErrorX = 1000
        tmuonfit.Fitter.ErrorY = 10000
        tmuonfit.Fitter.NumberFitIterations = 5
        tmuonfit.Fitter.MaxDeltaChiSqConverged = 0.1
        tmuonfit.Fitter.MaxNumberOutliers = 0
        tmuonfit.Fitter.addTool(MeasurementProvider(), name='MeasProvider')
        tmuonfit.Fitter.MeasProvider.MuonProvider.clusterize = True
        #tmuonfit.Fitter.MeasProvider.MuonProvider.OutputLevel   = 2
        tmuonfit.Fitter.MeasProvider.IgnoreMuon = False
        # ------------------------------------------------------------------
        seq.Members += [tmuonfit]  # Fit TMuon tracks
        # ------------------------------------------------------------------
        from Configurables import TrackSelector, TrackContainerCopy
        tmuonselectoralg = TrackContainerCopy(
            name="TmuonSelection",
            inputLocations=['Rec/Track/Best/TMuon'],
            outputLocation=self.location())
        tmuonselectoralg.addTool(TrackSelector, name="Selector")
        tmuonselectoralg.Selector.MaxChi2Cut = 10
        #tmuonselectoralg.Selector.OutputLevel = 2
        # ------------------------------------------------------------------
        seq.Members += [tmuonselectoralg]  # selects good TMuon tracks
        # ------------------------------------------------------------------

        return seq