rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ATLAS_2012_I943401

Search for supersymmetry with 2 leptons and missing transverse energy
Experiment: ATLAS (LHC)
Inspire ID: 943401
Status: VALIDATED
Authors:
  • Peter Richardson
References: Beams: p+ p+
Beam energies: (3500.0, 3500.0) GeV
Run details:
  • BSM signal events at 7000 GeV.

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}