Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
import FWCore.ParameterSet.Config as cms
### HLT filter
import copy
from HLTrigger.HLTfilters.hltHighLevel_cfi import *
from PhysicsTools.PatAlgos.producersLayer1.genericParticleProducer_cfi import patGenericParticles


PbPbZMuHLTFilter = copy.deepcopy(hltHighLevel)
PbPbZMuHLTFilter.throw = cms.bool(False)
PbPbZMuHLTFilter.HLTPaths = ["HLT_HIL2SingleMu*","HLT_HIL3SingleMu*"]

# selection of valid vertex
primaryVertexFilterForPbPbZMuSkim = cms.EDFilter("VertexSelector",
    src = cms.InputTag("offlinePrimaryVertices"),
    cut = cms.string("!isFake && abs(z) <= 25 && position.Rho <= 2"), 
    filter = cms.bool(True),
    )

### Z -> MuMu candidates
# Get muons of needed quality for Zs

###create a track collection with generic kinematic cuts
looseMuonsForPbPbZMuSkim = cms.EDFilter("TrackSelector",
                             src = cms.InputTag("generalTracks"),
                             cut = cms.string('pt > 10 && abs(eta)<2.4 && (charge!=0)'),
                             filter = cms.bool(True)                                
                             )



###cloning the previous collection into a collection of candidates
concreteLooseMuonsForPbPbZMuSkim = cms.EDProducer("ConcreteChargedCandidateProducer",
                                              src = cms.InputTag("looseMuonsForPbPbZMuSkim"),
                                              particleType = cms.string("mu+") # the sign is dummy
                                              )



###create iso deposits
tkIsoDepositTkForPbPbZMuSkim = cms.EDProducer("CandIsoDepositProducer",
                                src = cms.InputTag("ConcretelooseMuonsForPbPbZMuSkim"),
                                MultipleDepositsFlag = cms.bool(False),
                                trackType = cms.string('track'),
                                ExtractorPSet = cms.PSet(
        #MIsoTrackExtractorBlock
        Diff_z = cms.double(0.2),
        inputTrackCollection = cms.InputTag("generalTracks"),
        BeamSpotLabel = cms.InputTag("offlineBeamSpot"),
        ComponentName = cms.string('TrackExtractor'),
        DR_Max = cms.double(0.5),
        Diff_r = cms.double(0.1),
        Chi2Prob_Min = cms.double(-1.0),
        DR_Veto = cms.double(0.01),
        NHits_Min = cms.uint32(0),
        Chi2Ndof_Max = cms.double(1e+64),
        Pt_Min = cms.double(-1.0),
        DepositLabel = cms.untracked.string('tracker'),
        BeamlineOption = cms.string('BeamSpotFromEvent')
        )
                                )

###adding isodeposits to candidate collection
allPatTracksForPbPbZMuSkim = patGenericParticles.clone(
    src = cms.InputTag("ConcretelooseMuonsForPbPbZMuSkim"),
    # isolation configurables
    userIsolation = cms.PSet(
      tracker = cms.PSet(
        veto = cms.double(0.015),
        src = cms.InputTag("tkIsoDepositTkForPbPbZMuSkim"),
        deltaR = cms.double(0.3),
        #threshold = cms.double(1.5)
      ),
      ),
    isoDeposits = cms.PSet(
        tracker = cms.InputTag("tkIsoDepositTkForPbPbZMuSkim"),
        ),
    )




###create the "probe collection" of isolated tracks 
looseIsoMuonsForPbPbZMuSkim = cms.EDFilter("PATGenericParticleSelector",  
                             src = cms.InputTag("allPatTracksForPbPbZMuSkim"), 
                             cut = cms.string("(userIsolation('pat::TrackIso')/pt)<0.4"),
                             filter = cms.bool(True)
                             )



###create the "tag collection" of muon candidate, no dB cut applied 


tightMuonsForPbPbZMuSkim = cms.EDFilter("MuonSelector",
    src = cms.InputTag("muons"),
    cut = cms.string("(isGlobalMuon) && pt > 15. && (abs(eta)<2.4) && (isPFMuon>0) && (globalTrack().normalizedChi2() < 10) && (globalTrack().hitPattern().numberOfValidMuonHits()>0) && (numberOfMatchedStations() > 1) && (innerTrack().hitPattern().numberOfValidPixelHits() > 0) && (innerTrack().hitPattern().trackerLayersWithMeasurement() > 5)"),
    filter = cms.bool(True)
    )




# build Z-> MuMu candidates
dimuonsForPbPbZMuSkim = cms.EDProducer("CandViewShallowCloneCombiner",
                         checkCharge = cms.bool(False),
                         cut = cms.string('(mass > 60)'),       
                         decay = cms.string("tightMuonsForPbPbZMuSkim concreteLooseMuonsForPbPbZMuSkim")
                         )                                    


# Z filter
dimuonsFilterForPbPbZMuSkim = cms.EDFilter("CandViewCountFilter",
                             src = cms.InputTag("dimuonsForPbPbZMuSkim"),
                             minNumber = cms.uint32(1)
                             )



diMuonSelSeqForPbPbZMuSkim = cms.Sequence(
                            PbPbZMuHLTFilter *
                            primaryVertexFilterForPbPbZMuSkim *
                            looseMuonsForPbPbZMuSkim *
                            concreteLooseMuonsForPbPbZMuSkim *
                            #tkIsoDepositTkForPbPbZMuSkim *
                            #allPatTracksForPbPbZMuSkim *
                            #looseIsoMuonsForPbPbZMuSkim * 
                            tightMuonsForPbPbZMuSkim *
                            dimuonsForPbPbZMuSkim *
                            dimuonsFilterForPbPbZMuSkim 
)