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#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}