Rivet analyses referenceATLAS_2012_I943401Search for supersymmetry with 2 leptons and missing transverse energyExperiment: ATLAS (LHC) Inspire ID: 943401 Status: VALIDATED Authors:
Beam energies: (3500.0, 3500.0) GeV Run details:
Results of three searches for the production of supersymmetric particles decaying into final states with missing transverse momentum and exactly two isolated leptons, electrons or muons. The analysis uses a data sample collected during the first half of 2011 that corresponds to a total integrated luminosity of 1 $\text{fb}^{-1}$ of $\sqrt{s} = 7$\,TeV proton-proton collisions recorded with the ATLAS detector at the Large Hadron Collider. Opposite-sign and same-sign dilepton events are studied separately. Additionally, in opposite- sign events, a search is made for an excess of same-flavour over different-flavour lepton pairs. Source code: ATLAS_2012_I943401.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FinalState.hh"
4#include "Rivet/Projections/ChargedFinalState.hh"
5#include "Rivet/Projections/VisibleFinalState.hh"
6#include "Rivet/Projections/IdentifiedFinalState.hh"
7#include "Rivet/Projections/FastJets.hh"
8#include "Rivet/Projections/VetoedFinalState.hh"
9
10namespace Rivet {
11
12
13 class ATLAS_2012_I943401 : public Analysis {
14 public:
15
16 /// @name Constructors etc.
17 /// @{
18
19 /// Constructor
20
21 ATLAS_2012_I943401()
22 : Analysis("ATLAS_2012_I943401")
23 { }
24
25 /// @}
26
27
28 public:
29
30 /// @name Analysis methods
31 /// @{
32
33 /// Book histograms and initialise projections before the run
34 void init() {
35
36 // projection to find the electrons
37 IdentifiedFinalState elecs(Cuts::abseta < 2.47 && Cuts::pT > 20*GeV);
38 elecs.acceptIdPair(PID::ELECTRON);
39 declare(elecs, "elecs");
40
41 // projection to find the muons
42 IdentifiedFinalState muons(Cuts::abseta < 2.4 && Cuts::pT > 10*GeV);
43 muons.acceptIdPair(PID::MUON);
44 declare(muons, "muons");
45
46 // jet finder
47 VetoedFinalState vfs;
48 vfs.addVetoPairId(PID::MUON);
49 declare(FastJets(vfs, JetAlg::ANTIKT, 0.4), "AntiKtJets04");
50
51 // all tracks (to do deltaR with leptons)
52 declare(ChargedFinalState(Cuts::abseta < 3 && Cuts::pT > 0.5*GeV), "cfs");
53
54 // for pTmiss
55 declare(VisibleFinalState(Cuts::abseta < 4.5), "vfs");
56
57 // book histograms
58
59 // counts in signal regions
60 book(_count_OS_SR1 ,"count_OS_SR1", 1, 0., 1.);
61 book(_count_OS_SR2 ,"count_OS_SR2", 1, 0., 1.);
62 book(_count_OS_SR3 ,"count_OS_SR3", 1, 0., 1.);
63 book(_count_SS_SR1 ,"count_SS_SR1", 1, 0., 1.);
64 book(_count_SS_SR2 ,"count_SS_SR2", 1, 0., 1.);
65 book(_count_FS_SR1 ,"count_FS_SR1", 1, 0., 1.);
66 book(_count_FS_SR2 ,"count_FS_SR2", 1, 0., 1.);
67 book(_count_FS_SR3 ,"count_FS_SR3", 1, 0., 1.);
68
69 // histograms from paper
70
71 book(_hist_mll_SS_D , 1,1,1);
72 book(_hist_mll_SS_B , 1,1,2);
73 book(_hist_eTmiss_SS_D , 2,1,1);
74 book(_hist_eTmiss_SS_B , 2,1,2);
75 book(_hist_mll_SS_2Jet_D , 3,1,1);
76 book(_hist_mll_SS_2Jet_B , 3,1,2);
77 book(_hist_njet_SS_D , 5,1,1);
78 book(_hist_njet_SS_B , 5,1,2);
79 book(_hist_pT_j1_SS_D , 6,1,1);
80 book(_hist_pT_j1_SS_B , 6,1,2);
81 book(_hist_pT_j2_SS_D , 7,1,1);
82 book(_hist_pT_j2_SS_B , 7,1,2);
83 book(_hist_pT_l1_SS_D , 8,1,1);
84 book(_hist_pT_l1_SS_B , 8,1,2);
85 book(_hist_pT_l2_SS_D , 9,1,1);
86 book(_hist_pT_l2_SS_B , 9,1,2);
87 book(_hist_mll_OS_D ,10,1,1);
88 book(_hist_mll_OS_B ,10,1,2);
89 book(_hist_eTmiss_OS_D ,11,1,1);
90 book(_hist_eTmiss_OS_B ,11,1,2);
91 book(_hist_eTmiss_3Jet_OS_D ,12,1,1);
92 book(_hist_eTmiss_3Jet_OS_B ,12,1,2);
93 book(_hist_eTmiss_4Jet_OS_D ,13,1,1);
94 book(_hist_eTmiss_4Jet_OS_B ,13,1,2);
95 book(_hist_njet_OS_D ,14,1,1);
96 book(_hist_njet_OS_B ,14,1,2);
97 book(_hist_pT_j1_OS_D ,15,1,1);
98 book(_hist_pT_j1_OS_B ,15,1,2);
99 book(_hist_pT_j2_OS_D ,16,1,1);
100 book(_hist_pT_j2_OS_B ,16,1,2);
101 book(_hist_pT_l1_OS_D ,17,1,1);
102 book(_hist_pT_l1_OS_B ,17,1,2);
103 book(_hist_pT_l2_OS_D ,18,1,1);
104 book(_hist_pT_l2_OS_B ,18,1,2);
105 //????
106 // <dataPointSet name="d04-x01-y01" dimension="2" path="/REF/ATLAS_2011_I943401" title="EVENTS/10 GEV" >
107 // <dataPointSet name="d04-x01-y02" dimension="2" path="/REF/ATLAS_2011_I943401" title="EVENTS/10 GEV" >
108 }
109
110 /// Perform the event analysis
111 void analyze(const Event& event) {
112 // get the jet candidates
113 Jets cand_jets = apply<FastJets>(event, "AntiKtJets04").jetsByPt(Cuts::pT > 20*GeV && Cuts::abseta < 2.8);
114
115 // electron candidates
116 Particles cand_e = apply<IdentifiedFinalState>(event, "elecs").particlesByPt();
117
118 // Discard jets that overlap with electrons
119 Jets recon_jets;
120 for ( const Jet& jet : cand_jets ) {
121 bool away_from_e = true;
122 for ( const Particle& e : cand_e ) {
123 if ( deltaR(e.momentum(),jet.momentum()) <= 0.2 ) {
124 away_from_e = false;
125 break;
126 }
127 }
128 if ( away_from_e ) recon_jets.push_back( jet );
129 }
130 // get the charged tracks for isolation
131 Particles chg_tracks =
132 apply<ChargedFinalState>(event, "cfs").particles();
133
134 // Reconstructed electrons
135 Particles recon_e;
136 for ( const Particle& e : cand_e ) {
137 // check not near a jet
138 bool e_near_jet = false;
139 for ( const Jet& jet : recon_jets ) {
140 if ( deltaR(e.momentum(),jet.momentum()) < 0.4 ) {
141 e_near_jet = true;
142 break;
143 }
144 }
145 if ( e_near_jet ) continue;
146 // check the isolation
147 double pTinCone = -e.pT();
148 for ( const Particle& track : chg_tracks ) {
149 if ( deltaR(e.momentum(),track.momentum()) < 0.2 )
150 pTinCone += track.pT();
151 }
152 if ( pTinCone < 0.1*e.perp() )
153 recon_e.push_back(e);
154 }
155
156 // Reconstructed Muons
157 Particles recon_mu;
158 Particles cand_mu =
159 apply<IdentifiedFinalState>(event,"muons").particlesByPt();
160 for ( const Particle& mu : cand_mu ) {
161 // check not near a jet
162 bool mu_near_jet = false;
163 for ( const Jet& jet : recon_jets ) {
164 if ( deltaR(mu.momentum(),jet.momentum()) < 0.4 ) {
165 mu_near_jet = true;
166 break;
167 }
168 }
169 if ( mu_near_jet ) continue;
170 // isolation
171 double pTinCone = -mu.pT();
172 for ( const Particle& track : chg_tracks ) {
173 if ( deltaR(mu.momentum(),track.momentum()) < 0.2 )
174 pTinCone += track.pT();
175 }
176 if ( pTinCone < 1.8*GeV )
177 recon_mu.push_back(mu);
178 }
179
180 // pTmiss
181 Particles vfs_particles
182 = apply<VisibleFinalState>(event, "vfs").particles();
183 FourMomentum pTmiss;
184 for ( const Particle& p : vfs_particles ) {
185 pTmiss -= p.momentum();
186 }
187 double eTmiss = pTmiss.pT();
188
189 // ATLAS calo problem
190 if(rand()/static_cast<double>(RAND_MAX)<=0.42) {
191 for ( const Particle& e : recon_e ) {
192 double eta = e.eta();
193 double phi = e.azimuthalAngle(MINUSPI_PLUSPI);
194 if (inRange(eta, -0.1, 1.5) && inRange(phi, -0.9, -0.5)) vetoEvent;
195 }
196 for ( const Jet& jet : recon_jets ) {
197 double eta = jet.rapidity();
198 double phi = jet.azimuthalAngle(MINUSPI_PLUSPI);
199 if (jet.pT() > 40*GeV && inRange(eta, -0.1, 1.5) && inRange(phi, -0.9, -0.5)) vetoEvent;
200 }
201 }
202
203 // Exactly two leptons for each event
204 if ( recon_mu.size() + recon_e.size() != 2) vetoEvent;
205 // two electrons highest pT > 25
206 Particles recon_leptons;
207 if (recon_e.size()==2 && recon_e[0].pT()>25*GeV) {
208 recon_leptons = recon_e;
209 }
210 // two muons highest pT > 20
211 else if (recon_mu.size()==2 && recon_mu[0].pT() > 20*GeV) {
212 recon_leptons = recon_mu;
213 } else if (recon_e.size()==1 && recon_mu.size()==1 &&
214 (recon_e[0].pT() > 25*GeV || recon_mu[0].pT() > 20*GeV )) {
215 if (recon_mu[0].pT() < recon_e[0].pT()) {
216 recon_leptons.push_back(recon_e [0]);
217 recon_leptons.push_back(recon_mu[0]);
218 } else {
219 recon_leptons.push_back(recon_mu[0]);
220 recon_leptons.push_back(recon_e [0]);
221 }
222 }
223 // fails trigger
224 else vetoEvent;
225
226 double mll = (recon_leptons[0].momentum()+recon_leptons[1].momentum()).mass();
227 // lepton pair mass > 12.
228 if (mll < 12*GeV) vetoEvent;
229
230 // same sign or opposite sign event
231 int sign = recon_leptons[0].pid()*recon_leptons[1].pid();
232
233 // same sign leptons
234 if(sign>0) {
235 _hist_mll_SS_D ->fill(mll );
236 _hist_mll_SS_B ->fill(mll );
237 _hist_eTmiss_SS_D->fill(eTmiss);
238 _hist_eTmiss_SS_B->fill(eTmiss);
239 if(recon_jets.size()>=2) {
240 _hist_mll_SS_2Jet_D ->fill(mll );
241 _hist_mll_SS_2Jet_B ->fill(mll );
242 }
243 _hist_njet_SS_D ->fill(recon_jets.size());
244 _hist_njet_SS_B ->fill(recon_jets.size());
245 if(!recon_jets.empty()) {
246 _hist_pT_j1_SS_D->fill(recon_jets[0].perp());
247 _hist_pT_j1_SS_B->fill(recon_jets[0].perp());
248 }
249 if(recon_jets.size()>2) {
250 _hist_pT_j2_SS_D->fill(recon_jets[1].perp());
251 _hist_pT_j2_SS_B->fill(recon_jets[1].perp());
252 }
253 _hist_pT_l1_SS_D->fill(recon_leptons[0].perp());
254 _hist_pT_l1_SS_B->fill(recon_leptons[0].perp());
255 _hist_pT_l2_SS_D->fill(recon_leptons[1].perp());
256 _hist_pT_l2_SS_B->fill(recon_leptons[1].perp());
257 // SS-SR1
258 if(eTmiss>100.) {
259 _count_SS_SR1->fill(0.5);
260 }
261 // SS-SR2
262 if(eTmiss>80. && recon_jets.size()>=2 &&
263 recon_jets[1].perp()>50.) {
264 _count_SS_SR2->fill(0.5);
265 }
266 }
267 // opposite sign
268 else {
269 _hist_mll_OS_D->fill(mll );
270 _hist_mll_OS_B->fill(mll );
271 _hist_eTmiss_OS_D->fill(eTmiss);
272 _hist_eTmiss_OS_B->fill(eTmiss);
273 if(recon_jets.size()>=3){
274 _hist_eTmiss_3Jet_OS_D->fill(eTmiss);
275 _hist_eTmiss_3Jet_OS_B->fill(eTmiss);
276 }
277 if(recon_jets.size()>=4){
278 _hist_eTmiss_4Jet_OS_D->fill(eTmiss);
279 _hist_eTmiss_4Jet_OS_B->fill(eTmiss);
280 }
281 _hist_njet_OS_D->fill(recon_jets.size());
282 _hist_njet_OS_B->fill(recon_jets.size());
283 if(!recon_jets.empty()) {
284 _hist_pT_j1_OS_D->fill(recon_jets[0].perp());
285 _hist_pT_j1_OS_B->fill(recon_jets[0].perp());
286 }
287 if(recon_jets.size()>2) {
288 _hist_pT_j2_OS_D->fill(recon_jets[1].perp());
289 _hist_pT_j2_OS_B->fill(recon_jets[1].perp());
290 }
291 _hist_pT_l1_OS_D->fill(recon_leptons[0].perp());
292 _hist_pT_l1_OS_B->fill(recon_leptons[0].perp());
293 _hist_pT_l2_OS_D->fill(recon_leptons[1].perp());
294 _hist_pT_l2_OS_B->fill(recon_leptons[1].perp());
295 // different signal regions
296 // OS-SR1
297 if(eTmiss>250.) {
298 _count_OS_SR1->fill(0.5);
299 }
300 // OS-SR2
301 if(eTmiss>220. && recon_jets.size()>=3 &&
302 recon_jets[0].perp()>80. &&
303 recon_jets[2].perp()>40.) {
304 _count_OS_SR2->fill(0.5);
305 }
306 // OS-SR3
307 if(eTmiss>100. && recon_jets.size()>=4 &&
308 recon_jets[0].perp()>100. &&
309 recon_jets[3].perp()>70.) {
310 _count_OS_SR3->fill(0.5);
311 }
312 // same flavour analysis
313 static const double beta = 0.75;
314 static const double tau_e = 0.96;
315 static const double tau_mu = 0.816;
316 double fs_weight = 1.0;
317 if (recon_leptons[0].abspid() == PID::ELECTRON && recon_leptons[1].abspid() == PID::ELECTRON) {
318 fs_weight /= beta*(1.-sqr(1.-tau_e));
319 } else if (recon_leptons[0].abspid() == PID::MUON && recon_leptons[1].abspid()==PID::MUON) {
320 fs_weight *= beta/(1.-sqr(1.-tau_mu));
321 } else {
322 fs_weight /= -(1.-(1.-tau_e)*(1.-tau_mu));
323 }
324 // FS-SR1
325 if(eTmiss>80.&& (mll<80.||mll>100.)) {
326 _count_FS_SR1->fill(0.5,fs_weight);
327 }
328 // FS-SR2
329 if(eTmiss>80.&&recon_jets.size()>=2) {
330 _count_FS_SR2->fill(0.5,fs_weight);
331 }
332 // FS-SR3
333 if(eTmiss>250.) {
334 _count_FS_SR3->fill(0.5,fs_weight);
335 }
336 }
337 }
338
339 /// @}
340
341
342 void finalize() {
343
344 double norm = crossSection()/femtobarn*1.04/sumOfWeights();
345 // event counts
346 scale(_count_OS_SR1,norm);
347 scale(_count_OS_SR2,norm);
348 scale(_count_OS_SR3,norm);
349 scale(_count_SS_SR1,norm);
350 scale(_count_SS_SR2,norm);
351 scale(_count_FS_SR1,norm);
352 scale(_count_FS_SR2,norm);
353 scale(_count_FS_SR3,norm);
354 // histograms
355 scale(_hist_mll_SS_D ,norm*20.);
356 scale(_hist_mll_SS_B ,norm*20.);
357 scale(_hist_eTmiss_SS_D ,norm*20.);
358 scale(_hist_eTmiss_SS_B ,norm*20.);
359 scale(_hist_mll_SS_2Jet_D,norm*50.);
360 scale(_hist_mll_SS_2Jet_B,norm*50.);
361 scale(_hist_njet_SS_D ,norm );
362 scale(_hist_njet_SS_B ,norm );
363 scale(_hist_pT_j1_SS_D ,norm*20.);
364 scale(_hist_pT_j1_SS_B ,norm*20.);
365 scale(_hist_pT_j2_SS_D ,norm*20.);
366 scale(_hist_pT_j2_SS_B ,norm*20.);
367 scale(_hist_pT_l1_SS_D ,norm*5. );
368 scale(_hist_pT_l1_SS_B ,norm*5. );
369 scale(_hist_pT_l2_SS_D ,norm*5. );
370 scale(_hist_pT_l2_SS_B ,norm*5. );
371
372 scale(_hist_mll_OS_D ,norm*10.);
373 scale(_hist_mll_OS_B ,norm*10.);
374 scale(_hist_eTmiss_OS_D ,norm*10.);
375 scale(_hist_eTmiss_OS_B ,norm*10.);
376 scale(_hist_eTmiss_3Jet_OS_D,norm*10.);
377 scale(_hist_eTmiss_3Jet_OS_B,norm*10.);
378 scale(_hist_eTmiss_4Jet_OS_D,norm*10.);
379 scale(_hist_eTmiss_4Jet_OS_B,norm*10.);
380 scale(_hist_njet_OS_D ,norm );
381 scale(_hist_njet_OS_B ,norm );
382 scale(_hist_pT_j1_OS_D ,norm*20.);
383 scale(_hist_pT_j1_OS_B ,norm*20.);
384 scale(_hist_pT_j2_OS_D ,norm*20.);
385 scale(_hist_pT_j2_OS_B ,norm*20.);
386 scale(_hist_pT_l1_OS_D ,norm*20.);
387 scale(_hist_pT_l1_OS_B ,norm*20.);
388 scale(_hist_pT_l2_OS_D ,norm*20.);
389 scale(_hist_pT_l2_OS_B ,norm*20.);
390 }
391
392 private:
393
394 /// @name Histograms
395 /// @{
396 Histo1DPtr _count_OS_SR1;
397 Histo1DPtr _count_OS_SR2;
398 Histo1DPtr _count_OS_SR3;
399 Histo1DPtr _count_SS_SR1;
400 Histo1DPtr _count_SS_SR2;
401 Histo1DPtr _count_FS_SR1;
402 Histo1DPtr _count_FS_SR2;
403 Histo1DPtr _count_FS_SR3;
404
405 Histo1DPtr _hist_mll_SS_D;
406 Histo1DPtr _hist_mll_SS_B;
407 Histo1DPtr _hist_eTmiss_SS_D;
408 Histo1DPtr _hist_eTmiss_SS_B;
409 Histo1DPtr _hist_mll_SS_2Jet_D;
410 Histo1DPtr _hist_mll_SS_2Jet_B;
411 Histo1DPtr _hist_njet_SS_D;
412 Histo1DPtr _hist_njet_SS_B;
413 Histo1DPtr _hist_pT_j1_SS_D;
414 Histo1DPtr _hist_pT_j1_SS_B;
415 Histo1DPtr _hist_pT_j2_SS_D;
416 Histo1DPtr _hist_pT_j2_SS_B;
417 Histo1DPtr _hist_pT_l1_SS_D;
418 Histo1DPtr _hist_pT_l1_SS_B;
419 Histo1DPtr _hist_pT_l2_SS_D;
420 Histo1DPtr _hist_pT_l2_SS_B;
421
422 Histo1DPtr _hist_mll_OS_D;
423 Histo1DPtr _hist_mll_OS_B;
424 Histo1DPtr _hist_eTmiss_OS_D;
425 Histo1DPtr _hist_eTmiss_OS_B;
426 Histo1DPtr _hist_eTmiss_3Jet_OS_D;
427 Histo1DPtr _hist_eTmiss_3Jet_OS_B;
428 Histo1DPtr _hist_eTmiss_4Jet_OS_D;
429 Histo1DPtr _hist_eTmiss_4Jet_OS_B;
430 Histo1DPtr _hist_njet_OS_D ;
431 Histo1DPtr _hist_njet_OS_B ;
432 Histo1DPtr _hist_pT_j1_OS_D;
433 Histo1DPtr _hist_pT_j1_OS_B;
434 Histo1DPtr _hist_pT_j2_OS_D;
435 Histo1DPtr _hist_pT_j2_OS_B;
436 Histo1DPtr _hist_pT_l1_OS_D;
437 Histo1DPtr _hist_pT_l1_OS_B;
438 Histo1DPtr _hist_pT_l2_OS_D;
439 Histo1DPtr _hist_pT_l2_OS_B;
440 /// @}
441 };
442
443 RIVET_DECLARE_PLUGIN(ATLAS_2012_I943401);
444
445}
|