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