Rivet analyses referenceATLAS_2012_CONF_2012_105Search for supersymmetry with 2 same-sign leptons, jets and missing transverse energyExperiment: ATLAS (LHC) Status: OBSOLETE Authors:
Beam energies: (4000.0, 4000.0) GeV Run details:
Results of the search for the production of supersymmetric particles decaying into final states with missing transverse momentum and two isolated same-sign leptons, electrons or muons. The analysis uses a data sample collected during the first half of 2012 that corresponds to a total integrated luminosity o1 $5.8\,\text{fb}^{-1}$ of $\sqrt{s} = 8$\,TeV proton-proton collisions recorded with the ATLAS detector at the Large Hadron Collider. Opposite-sign and same-sign dilepton events are studied separately. Source code: ATLAS_2012_CONF_2012_105.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_CONF_2012_105 : public Analysis {
14 public:
15
16 /// Constructor
17 ATLAS_2012_CONF_2012_105()
18 : Analysis("ATLAS_2012_CONF_2012_105")
19 { }
20
21
22 /// @name Analysis methods
23 /// @{
24
25 /// Book histograms and initialise projections before the run
26 void init() {
27
28 // projection to find the electrons
29 IdentifiedFinalState elecs(Cuts::abseta < 2.47 && Cuts::pT > 20*GeV);
30 elecs.acceptIdPair(PID::ELECTRON);
31 declare(elecs, "elecs");
32
33 // projection to find the muons
34 IdentifiedFinalState muons(Cuts::abseta < 2.4 && Cuts::pT > 20*GeV);
35 muons.acceptIdPair(PID::MUON);
36 declare(muons, "muons");
37
38 // jet finder
39 VetoedFinalState vfs;
40 vfs.addVetoPairId(PID::MUON);
41 declare(FastJets(vfs, JetAlg::ANTIKT, 0.4), "AntiKtJets04");
42
43 // all tracks (to do deltaR with leptons)
44 declare(ChargedFinalState(Cuts::abseta < 3 && Cuts::pT > 0.5*GeV), "cfs");
45
46 // for pTmiss
47 declare(VisibleFinalState(Cuts::abseta < 4.5), "vfs");
48
49 // book histograms
50
51 // counts in signal regions
52 book(_count_ee ,"count_ee" , 1, 0., 1.);
53 book(_count_emu ,"count_emu" , 1, 0., 1.);
54 book(_count_mumu ,"count_mumu", 1, 0., 1.);
55 book(_count_ll ,"count_ll" , 1, 0., 1.);
56
57 // histograms from paper
58 book(_hist_eTmiss_ee ,"eTmiss_ee" , 8, 0., 400.);
59 book(_hist_eTmiss_emu ,"eTmiss_emu" , 8, 0., 400.);
60 book(_hist_eTmiss_mumu ,"eTmiss_mumu", 8, 0., 400.);
61 book(_hist_eTmiss_ll ,"eTmiss_ll" , 8, 0., 400.);
62 }
63
64 /// Perform the event analysis
65 void analyze(const Event& event) {
66
67 // get the jet candidates
68 Jets cand_jets = apply<FastJets>(event, "AntiKtJets04").jetsByPt(Cuts::abseta < 2.8 && Cuts::pT > 20*GeV);
69
70 // electron candidates
71 Particles cand_e = apply<IdentifiedFinalState>(event, "elecs").particlesByPt();
72
73 // Discard jets that overlap with electrons
74 Jets recon_jets;
75 for ( const Jet& jet : cand_jets ) {
76 bool away_from_e = true;
77 for ( const Particle & e : cand_e ) {
78 if ( deltaR(e.momentum(),jet.momentum()) <= 0.2 ) {
79 away_from_e = false;
80 break;
81 }
82 }
83 if ( away_from_e ) recon_jets.push_back( jet );
84 }
85 // get the charged tracks for isolation
86 Particles chg_tracks =
87 apply<ChargedFinalState>(event, "cfs").particles();
88
89 // Reconstructed electrons
90 Particles recon_leptons;
91 for ( const Particle & e : cand_e ) {
92 // check not near a jet
93 bool e_near_jet = false;
94 for ( const Jet& jet : recon_jets ) {
95 if ( deltaR(e.momentum(),jet.momentum()) < 0.4 ) {
96 e_near_jet = true;
97 break;
98 }
99 }
100 if ( e_near_jet ) continue;
101 // check the isolation
102 double pTinCone = -e.pT();
103 for ( const Particle & track : chg_tracks ) {
104 if ( deltaR(e.momentum(),track.momentum()) < 0.2 )
105 pTinCone += track.pT();
106 }
107 if ( pTinCone < 0.1*e.perp() )
108 recon_leptons.push_back(e);
109 }
110
111 // Reconstructed Muons
112 Particles cand_mu =
113 apply<IdentifiedFinalState>(event,"muons").particlesByPt();
114 for ( const Particle & mu : cand_mu ) {
115 // check not near a jet
116 bool mu_near_jet = false;
117 for ( const Jet& jet : recon_jets ) {
118 if ( deltaR(mu.momentum(),jet.momentum()) < 0.4 ) {
119 mu_near_jet = true;
120 break;
121 }
122 }
123 if ( mu_near_jet ) continue;
124 // isolation
125 double pTinCone = -mu.pT();
126 for ( const Particle & track : chg_tracks ) {
127 if ( deltaR(mu.momentum(),track.momentum()) < 0.2 )
128 pTinCone += track.pT();
129 }
130 if ( pTinCone < 1.8*GeV )
131 recon_leptons.push_back(mu);
132 }
133
134 // pTmiss
135 Particles vfs_particles
136 = apply<VisibleFinalState>(event, "vfs").particles();
137 FourMomentum pTmiss;
138 for ( const Particle & p : vfs_particles ) {
139 pTmiss -= p.momentum();
140 }
141 double eTmiss = pTmiss.pT();
142
143 // Exactly two leptons for each event
144 if ( recon_leptons.size() != 2) vetoEvent;
145 // ensure 1st hardest
146 if(recon_leptons[0].perp()<recon_leptons[1].perp())
147 std::swap(recon_leptons[0],recon_leptons[1]);
148 // only keep same sign
149 if(recon_leptons[0].pid()*recon_leptons[1].pid()<0)
150 vetoEvent;
151 // at least 4 jets pt>50
152 if(recon_jets.size()<4||recon_jets[3].perp()<50.)
153 vetoEvent;
154
155 if(recon_leptons[0].pid()!=recon_leptons[1].pid())
156 _hist_eTmiss_emu ->fill(eTmiss);
157 else if(recon_leptons[0].abspid()==PID::ELECTRON)
158 _hist_eTmiss_ee ->fill(eTmiss);
159 else if(recon_leptons[0].abspid()==PID::MUON)
160 _hist_eTmiss_mumu->fill(eTmiss);
161 _hist_eTmiss_ll->fill(eTmiss);
162
163 if(eTmiss>150.) {
164 if(recon_leptons[0].pid()!=recon_leptons[1].pid())
165 _count_emu ->fill(0.5);
166 else if(recon_leptons[0].abspid()==PID::ELECTRON)
167 _count_ee ->fill(0.5);
168 else if(recon_leptons[0].abspid()==PID::MUON)
169 _count_mumu->fill(0.5);
170 _count_ll->fill(0.5);
171 }
172
173 }
174
175 /// @}
176
177
178 void finalize() {
179
180 double norm = crossSection()/femtobarn*5.8/sumOfWeights();
181 // event counts
182 scale(_count_ee ,norm);
183 scale(_count_emu ,norm);
184 scale(_count_mumu,norm);
185 scale(_count_ll ,norm);
186 // histograms
187 scale(_hist_eTmiss_ee ,norm*50.);
188 scale(_hist_eTmiss_emu ,norm*50.);
189 scale(_hist_eTmiss_mumu,norm*50.);
190 scale(_hist_eTmiss_ll ,norm*50.);
191
192 }
193
194 private:
195
196 /// @name Histograms
197 /// @{
198 Histo1DPtr _count_ee ;
199 Histo1DPtr _count_emu ;
200 Histo1DPtr _count_mumu;
201 Histo1DPtr _count_ll ;
202
203 Histo1DPtr _hist_eTmiss_ee;
204 Histo1DPtr _hist_eTmiss_emu;
205 Histo1DPtr _hist_eTmiss_mumu;
206 Histo1DPtr _hist_eTmiss_ll;
207 /// @}
208 };
209
210 RIVET_DECLARE_PLUGIN(ATLAS_2012_CONF_2012_105);
211
212}
|