1 |
mangano |
1.1 |
from FWCore.ParameterSet import Config as cms
|
2 |
|
|
|
3 |
|
|
## Common pre-filter sequence
|
4 |
|
|
oneGoodVertexFilter = cms.EDFilter("VertexSelector",
|
5 |
|
|
src = cms.InputTag("offlinePrimaryVertices"),
|
6 |
|
|
cut = cms.string("!isFake && ndof >= 4 && abs(z) <= 15 && position.Rho <= 2"),
|
7 |
|
|
filter = cms.bool(True), # otherwise it won't filter the events, just produce an empty vertex collection.
|
8 |
|
|
)
|
9 |
|
|
noScraping = cms.EDFilter("FilterOutScraping",
|
10 |
|
|
applyfilter = cms.untracked.bool(True),
|
11 |
|
|
debugOn = cms.untracked.bool(False), ## Or 'True' to get some per-event info
|
12 |
|
|
numtrack = cms.untracked.uint32(10),
|
13 |
|
|
thresh = cms.untracked.double(0.25)
|
14 |
|
|
)
|
15 |
|
|
earlyDataPreFilter = cms.Sequence(oneGoodVertexFilter * noScraping)
|
16 |
|
|
|
17 |
|
|
### Define basic "good" electrons and muons
|
18 |
|
|
## ---------------------------------
|
19 |
|
|
|
20 |
|
|
from EGamma.ECGelec.stdPreselectionSelector_cfi import *
|
21 |
|
|
from EGamma.ECGelec.spikeRemovalSelector_cfi import *
|
22 |
|
|
spikeRemovalSelector.src = cms.InputTag("stdardPreselectionSelector")
|
23 |
merkelp |
1.4 |
from RecoEgamma.ElectronIdentification.electronIdCutBasedClassBasedExt_cfi import *
|
24 |
|
|
import RecoEgamma.ElectronIdentification.electronIdCutBasedClassBasedExt_cfi
|
25 |
|
|
eidClassLoose = RecoEgamma.ElectronIdentification.electronIdCutBasedClassBasedExt_cfi.eidCutBasedClassBasedExt.clone()
|
26 |
|
|
eidClassLoose.electronQuality.string = 'Eff95Cuts'
|
27 |
|
|
eidClassLoose.src = "overlapElectronResolver"
|
28 |
|
|
eidClassMedium = RecoEgamma.ElectronIdentification.electronIdCutBasedClassBasedExt_cfi.eidCutBasedClassBasedExt.clone()
|
29 |
|
|
eidClassMedium.electronQuality.string = 'Eff90Cuts'
|
30 |
|
|
eidClassMedium.src = "overlapElectronResolver"
|
31 |
mangano |
1.1 |
|
32 |
|
|
ELECTRON_BASE_CUT=("(pt > 5 &&" +
|
33 |
|
|
" fbrem > -0.1 &&" +
|
34 |
|
|
" eSeedClusterOverPout > 0.5 &&"+
|
35 |
|
|
" hcalOverEcal < 0.1 &&" +
|
36 |
|
|
" abs(deltaPhiSuperClusterTrackAtVtx) < 0.1 &&" +
|
37 |
|
|
" abs(deltaEtaSuperClusterTrackAtVtx) < 0.015 &&" +
|
38 |
|
|
" (( isEB && sigmaIetaIeta < 0.025 && sigmaIetaIeta > 0.005) ||" +
|
39 |
|
|
" (!isEB && sigmaIetaIeta < 0.065 && sigmaIetaIeta > 0.015)) )");
|
40 |
|
|
|
41 |
|
|
|
42 |
|
|
goodElectrons = cms.EDFilter("GsfElectronRefSelector",
|
43 |
|
|
src = cms.InputTag("spikeRemovalSelector"),
|
44 |
|
|
cut = cms.string(ELECTRON_BASE_CUT),
|
45 |
|
|
)
|
46 |
|
|
|
47 |
|
|
TM_ARBITRATION = "numberOfMatches('SegmentAndTrackArbitration')>0";
|
48 |
|
|
MUON_BASE_CUT="(isGlobalMuon || (isTrackerMuon && "+TM_ARBITRATION+"))"
|
49 |
|
|
goodMuons = cms.EDFilter("MuonRefSelector",
|
50 |
|
|
src = cms.InputTag("muons"),
|
51 |
|
|
cut = cms.string(MUON_BASE_CUT),
|
52 |
|
|
)
|
53 |
|
|
|
54 |
mangano |
1.2 |
## Very loosely isolated leptons (e.g. for Ws)
|
55 |
mangano |
1.1 |
## ---------------------------------
|
56 |
mangano |
1.2 |
isolatedGoodMuons = cms.EDFilter("MuonRefSelector",
|
57 |
mangano |
1.1 |
src = cms.InputTag("muons"),
|
58 |
mangano |
1.2 |
cut = cms.string(MUON_BASE_CUT + " && ( isolationR03.hadEt + isolationR03.emEt < 10 ) && (isolationR03.emVetoEt + isolationR03.hadVetoEt < 15) && ( isolationR03.sumPt < 10 )"),
|
59 |
mangano |
1.1 |
)
|
60 |
mangano |
1.2 |
isolatedGoodElectrons = cms.EDFilter("GsfElectronRefSelector",
|
61 |
mangano |
1.1 |
src = cms.InputTag("spikeRemovalSelector"),
|
62 |
mangano |
1.2 |
cut = cms.string(ELECTRON_BASE_CUT + "&& ( dr03EcalRecHitSumEt + dr03HcalTowerSumEt + dr03TkSumPt < 15 )"),
|
63 |
mangano |
1.1 |
)
|
64 |
|
|
|
65 |
mangano |
1.2 |
## High energy single objects
|
66 |
mangano |
1.1 |
## ---------------------------------
|
67 |
mangano |
1.2 |
highEnergyMuons = cms.EDFilter("MuonRefSelector",
|
68 |
mangano |
1.1 |
src = cms.InputTag("muons"),
|
69 |
mangano |
1.2 |
cut = cms.string(isolatedGoodMuons.cut.value() + " && (pt > 35)"),
|
70 |
mangano |
1.1 |
)
|
71 |
mangano |
1.2 |
highEnergyElectrons = cms.EDFilter("GsfElectronRefSelector",
|
72 |
mangano |
1.1 |
src = cms.InputTag("spikeRemovalSelector"),
|
73 |
mangano |
1.2 |
cut = cms.string(isolatedGoodElectrons.cut.value() + "&& (pt > 35)"),
|
74 |
mangano |
1.1 |
)
|
75 |
|
|
|
76 |
mangano |
1.2 |
|
77 |
mangano |
1.1 |
singleLeptons = cms.Sequence(
|
78 |
merkelp |
1.4 |
goodMuons +
|
79 |
|
|
stdardPreselectionSelector*spikeRemovalSelector*eidClassMedium*goodElectrons +
|
80 |
|
|
highEnergyMuons +
|
81 |
|
|
highEnergyElectrons +
|
82 |
|
|
isolatedGoodMuons +
|
83 |
|
|
isolatedGoodElectrons
|
84 |
mangano |
1.1 |
)
|
85 |
|
|
|
86 |
|
|
## Di-objects
|
87 |
|
|
## ---------------------------------
|
88 |
|
|
DILEPTON_MASS = "(mass > 10) && "
|
89 |
merkelp |
1.4 |
DILEPTON_PT = " daughter(0).pt > 3 && daughter(1).pt > 5 && max( daughter(0).pt, daughter(1).pt ) >= 15"
|
90 |
mangano |
1.1 |
## For muons, require at least one of the two to be global. we don't check the charge in the inclusive selection
|
91 |
|
|
ONE_GLOBAL_MU = " && (daughter(0).isGlobalMuon || daughter(1).isGlobalMuon)"
|
92 |
|
|
diMuons = cms.EDProducer("CandViewShallowCloneCombiner",
|
93 |
|
|
decay = cms.string("goodMuons goodMuons"),
|
94 |
|
|
checkCharge = cms.bool(False), # can be changed to goodElectrons@+ goodElectrons@- to keep only OS
|
95 |
|
|
cut = cms.string(DILEPTON_MASS + DILEPTON_PT + ONE_GLOBAL_MU),
|
96 |
|
|
)
|
97 |
mangano |
1.2 |
## As a reference, we make also a small skim arond the J/Psi and Upsilon , to see if it works
|
98 |
mangano |
1.1 |
diMuonsJPsi = cms.EDProducer("CandViewShallowCloneCombiner",
|
99 |
|
|
decay = cms.string("goodMuons@+ goodMuons@-"),
|
100 |
|
|
cut = cms.string("(2.6 < mass < 3.6) && daughter(0).isGlobalMuon && daughter(1).isGlobalMuon"),
|
101 |
|
|
)
|
102 |
mangano |
1.2 |
|
103 |
|
|
diMuonsUpsilon = cms.EDProducer("CandViewShallowCloneCombiner",
|
104 |
|
|
decay = cms.string("goodMuons@+ goodMuons@-"),
|
105 |
|
|
cut = cms.string("(8.0 < mass < 11.5)" + ONE_GLOBAL_MU),
|
106 |
|
|
)
|
107 |
|
|
|
108 |
mangano |
1.1 |
## and one at very high mass, where the Z should dominate
|
109 |
|
|
diMuonsZ = cms.EDProducer("CandViewShallowCloneCombiner",
|
110 |
merkelp |
1.4 |
decay = cms.string("isolatedGoodMuons@+ isolatedGoodMuons@-"),
|
111 |
mangano |
1.1 |
cut = cms.string("(mass > 60) && " + DILEPTON_PT + ONE_GLOBAL_MU),
|
112 |
|
|
)
|
113 |
|
|
|
114 |
|
|
## For electrons, we don't enforce the opposite sign
|
115 |
|
|
diElectrons = cms.EDProducer("CandViewShallowCloneCombiner",
|
116 |
mangano |
1.2 |
decay = cms.string("isolatedGoodElectrons isolatedGoodElectrons"), # no sign specified: allow also the SS electrons in.
|
117 |
mangano |
1.1 |
checkCharge = cms.bool(False), # can be changed to goodElectrons@+ goodElectrons@- to keep only OS
|
118 |
|
|
cut = cms.string(DILEPTON_MASS + DILEPTON_PT),
|
119 |
|
|
)
|
120 |
mangano |
1.2 |
## As a reference, we make also a small skim arond the J/Psi and Upsilon, to see if it works
|
121 |
mangano |
1.1 |
diElectronsJPsi = cms.EDProducer("CandViewShallowCloneCombiner",
|
122 |
|
|
decay = cms.string("goodElectrons goodElectrons"), # no sign specified: allow also the SS electrons in.
|
123 |
|
|
checkCharge = cms.bool(False), # can be changed to goodElectrons@+ goodElectrons@- to keep only OS
|
124 |
|
|
cut = cms.string("(2.6 < mass < 3.6) && daughter(0).pt > 3 && daughter(1).pt > 3"),
|
125 |
|
|
)
|
126 |
mangano |
1.2 |
|
127 |
|
|
diElectronsUpsilon = cms.EDProducer("CandViewShallowCloneCombiner",
|
128 |
|
|
decay = cms.string("goodElectrons goodElectrons"), # no sign specified: allow also the SS electrons in.
|
129 |
|
|
checkCharge = cms.bool(False), # can be changed to goodElectrons@+ goodElectrons@- to keep only OS
|
130 |
|
|
cut = cms.string("(8.0 < mass < 11.5) && daughter(0).pt > 3 && daughter(1).pt > 3"),
|
131 |
|
|
)
|
132 |
|
|
|
133 |
mangano |
1.1 |
## and one at very high mass, where the Z should dominate
|
134 |
|
|
diElectronsZ = cms.EDProducer("CandViewShallowCloneCombiner",
|
135 |
merkelp |
1.4 |
decay = cms.string("isolatedGoodElectrons@+ isolatedGoodElectrons@-"), # no sign specified: allow also the SS electrons in.
|
136 |
mangano |
1.1 |
checkCharge = cms.bool(False), # can be changed to goodElectrons@+ goodElectrons@- to keep only OS
|
137 |
|
|
cut = cms.string("(mass > 60) && " + DILEPTON_PT),
|
138 |
|
|
)
|
139 |
|
|
|
140 |
|
|
## Then we make a E+Mu skim
|
141 |
|
|
crossLeptons = cms.EDProducer("CandViewShallowCloneCombiner",
|
142 |
merkelp |
1.4 |
decay = cms.string("isolatedGoodMuons isolatedGoodElectrons"), # no sign specified: allow also the SS pairs in.
|
143 |
mangano |
1.1 |
checkCharge = cms.bool(False),
|
144 |
mangano |
1.2 |
# cut = cms.string(DILEPTON_MASS + DILEPTON_PT + ONE_GLOBAL_MU),
|
145 |
|
|
#the cut on the mass should be lowered as soon as we integrate a tighter lepton ID
|
146 |
|
|
cut = cms.string("(mass > 20) && " + DILEPTON_PT + ONE_GLOBAL_MU),
|
147 |
|
|
|
148 |
mangano |
1.1 |
)
|
149 |
|
|
|
150 |
|
|
diLeptons = cms.Sequence(
|
151 |
merkelp |
1.4 |
diMuons + diMuonsJPsi + diMuonsUpsilon + diMuonsZ +
|
152 |
|
|
diElectrons + diElectronsJPsi + diElectronsUpsilon + diElectronsZ +
|
153 |
mangano |
1.1 |
crossLeptons
|
154 |
|
|
)
|
155 |
|
|
|
156 |
|
|
## Isolated lepton plus MET, aka W candidate
|
157 |
|
|
## ---------------------------------
|
158 |
merkelp |
1.4 |
W_MU_PT = 15; W_EL_PT = 15; W_PF_MET = 15; W_TC_MET = 15; MT_CUT = 45
|
159 |
mangano |
1.1 |
## Note: the 'mt()' method doesn't compute the transverse mass correctly, so we have to do it by hand.
|
160 |
|
|
MT="sqrt(2*daughter(0).pt*daughter(1).pt*(1 - cos(daughter(0).phi - daughter(1).phi)))"
|
161 |
|
|
recoWMNfromPf = cms.EDProducer("CandViewShallowCloneCombiner",
|
162 |
|
|
decay = cms.string("isolatedGoodMuons@+ pfMet"),
|
163 |
|
|
cut = cms.string(("daughter(0).pt > %f && daughter(1).pt > %f && "+MT+" > %f") % (W_MU_PT, W_PF_MET, MT_CUT)),
|
164 |
|
|
)
|
165 |
|
|
recoWMNfromTc = cms.EDProducer("CandViewShallowCloneCombiner",
|
166 |
|
|
decay = cms.string("isolatedGoodMuons@+ tcMet"),
|
167 |
|
|
cut = cms.string(("daughter(0).pt > %f && daughter(1).pt > %f && "+MT+" > %f") % (W_MU_PT, W_TC_MET, MT_CUT)),
|
168 |
|
|
)
|
169 |
|
|
recoWENfromPf = cms.EDProducer("CandViewShallowCloneCombiner",
|
170 |
|
|
decay = cms.string("isolatedGoodElectrons@+ pfMet"),
|
171 |
|
|
cut = cms.string(("daughter(0).pt > %f && daughter(1).pt > %f && "+MT+" > %f") % (W_EL_PT, W_PF_MET, MT_CUT)),
|
172 |
|
|
)
|
173 |
|
|
recoWENfromTc = cms.EDProducer("CandViewShallowCloneCombiner",
|
174 |
|
|
decay = cms.string("isolatedGoodElectrons@+ tcMet"),
|
175 |
|
|
cut = cms.string(("daughter(0).pt > %f && daughter(1).pt > %f && "+MT+" > %f") % (W_EL_PT, W_TC_MET, MT_CUT)),
|
176 |
|
|
)
|
177 |
|
|
recoWs = cms.Sequence(
|
178 |
|
|
recoWMNfromPf + recoWMNfromTc +
|
179 |
|
|
recoWENfromPf + recoWENfromTc
|
180 |
|
|
)
|
181 |
|
|
|
182 |
|
|
## Tri and 4-objects
|
183 |
|
|
## ---------------------------------
|
184 |
|
|
triLeptons = cms.EDProducer("CandViewShallowCloneCombiner",
|
185 |
|
|
decay = cms.string("L L L"),
|
186 |
|
|
checkCharge = cms.bool(False),
|
187 |
|
|
cut = cms.string("mass > 10 && min(min(daughter(0).pt,daughter(1).pt),daughter(2).pt) > 2 && max(max(daughter(0).pt,daughter(1).pt),daughter(2).pt) >= 5"),
|
188 |
|
|
)
|
189 |
merkelp |
1.4 |
triLeptonsMuMuMu = triLeptons.clone(decay = "isolatedGoodMuons isolatedGoodMuons isolatedGoodMuons")
|
190 |
|
|
triLeptonsMuMuEl = triLeptons.clone(decay = "isolatedGoodMuons isolatedGoodMuons isolatedGoodElectrons")
|
191 |
|
|
triLeptonsMuElEl = triLeptons.clone(decay = "isolatedGoodMuons isolatedGoodElectrons isolatedGoodElectrons")
|
192 |
mangano |
1.2 |
triLeptonsElElEl = triLeptons.clone(decay = "isolatedGoodElectrons isolatedGoodElectrons isolatedGoodElectrons")
|
193 |
mangano |
1.1 |
|
194 |
merkelp |
1.4 |
quadLeptons4Mu = crossLeptons.clone(decay = "diMuonsZ diMuonsZ")
|
195 |
|
|
quadLeptons2Mu2El = crossLeptons.clone(decay = "diMuonsZ diElectronsZ")
|
196 |
|
|
quadLeptons4El = crossLeptons.clone(decay = "diElectronsZ diElectronsZ")
|
197 |
mangano |
1.1 |
|
198 |
|
|
multiLeptons = cms.Sequence(
|
199 |
|
|
triLeptonsMuMuMu + triLeptonsMuMuEl + triLeptonsMuElEl + triLeptonsElElEl +
|
200 |
|
|
quadLeptons4Mu + quadLeptons2Mu2El + quadLeptons4El
|
201 |
|
|
)
|
202 |
|
|
|
203 |
|
|
earlyDataInterestingEvents = cms.Sequence(
|
204 |
|
|
earlyDataPreFilter +
|
205 |
|
|
singleLeptons +
|
206 |
|
|
diLeptons +
|
207 |
|
|
recoWs +
|
208 |
|
|
multiLeptons
|
209 |
|
|
)
|
210 |
|
|
|
211 |
|
|
|