Rivet analyses referenceATLAS_2012_I1180197Search for supersymmetry at 7 TeV in final states with jets, missing transverse momentum and isolated leptons with the ATLAS detector.Experiment: ATLAS (LHC) Inspire ID: 1180197 Status: UNVALIDATED Authors:
Beam energies: (3500.0, 3500.0) GeV Run details:
One and two lepton search for supersymmmetric particles by ATLAS at 7 TeV. Event counts in the signal regions are implemented as one-bin histograms. Histograms for effective mass are implemented for the two signal hard lepton signal regions and the ratio of missing transverse energy to effective mass for the soft lepton region. Only the one lepton plots are currently implemented as taken from the CONF note. Source code: ATLAS_2012_I1180197.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/VetoedFinalState.hh"
8#include "Rivet/Projections/FastJets.hh"
9
10namespace Rivet {
11
12
13 class ATLAS_2012_I1180197 : public Analysis {
14 public:
15
16 /// Constructor
17 ATLAS_2012_I1180197()
18 : Analysis("ATLAS_2012_I1180197")
19 { }
20
21
22 /// @name Analysis methods
23 /// @{
24
25 /// Book histograms and initialize projections before the run
26 void init() {
27
28 // projection to find the electrons
29 IdentifiedFinalState elecs(Cuts::abseta < 2.47 && Cuts::pT > 7*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 > 6*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.9), "vfs");
48
49 // Book histograms
50 book(_count_1l_3jet_all_channel ,"count_1l_3jet_all_channel", 1, 0., 1.);
51 book(_count_1l_3jet_e_channel ,"count_1l_3jet_e_channel" , 1, 0., 1.);
52 book(_count_1l_3jet_mu_channel ,"count_1l_3jet_mu_channel" , 1, 0., 1.);
53 book(_count_1l_4jet_all_channel ,"count_1l_4jet_all_channel", 1, 0., 1.);
54 book(_count_1l_4jet_e_channel ,"count_1l_4jet_e_channel" , 1, 0., 1.);
55 book(_count_1l_4jet_mu_channel ,"count_1l_4jet_mu_channel" , 1, 0., 1.);
56 book(_count_1l_soft_all_channel ,"count_1l_soft_all_channel", 1, 0., 1.);
57 book(_count_1l_soft_e_channel ,"count_1l_soft_e_channel" , 1, 0., 1.);
58 book(_count_1l_soft_mu_channel ,"count_1l_soft_mu_channel" , 1, 0., 1.);
59
60 book(_count_2l_2jet_all_channel ,"count_2l_2jet_all_channel" , 1, 0., 1.);
61 book(_count_2l_2jet_ee_channel ,"count_2l_2jet_ee_channel" , 1, 0., 1.);
62 book(_count_2l_2jet_emu_channel ,"count_2l_2jet_emu_channel" , 1, 0., 1.);
63 book(_count_2l_2jet_mumu_channel ,"count_2l_2jet_mumu_channel", 1, 0., 1.);
64 book(_count_2l_4jet_all_channel ,"count_2l_4jet_all_channel" , 1, 0., 1.);
65 book(_count_2l_4jet_ee_channel ,"count_2l_4jet_ee_channel" , 1, 0., 1.);
66 book(_count_2l_4jet_emu_channel ,"count_2l_4jet_emu_channel" , 1, 0., 1.);
67 book(_count_2l_4jet_mumu_channel ,"count_2l_4jet_mumu_channel", 1, 0., 1.);
68 book(_hist_1l_m_eff_3jet ,"hist_1l_m_eff_3jet" , 6, 400., 1600.);
69 book(_hist_1l_m_eff_4jet ,"hist_1l_m_eff_4jet" , 4, 800., 1600.);
70 book(_hist_1l_eTmiss_m_eff_soft ,"hist_1l_eTmiss_m_eff_soft", 6, 0.1 , 0.7 );
71 book(_hist_2l_m_eff_2jet ,"hist_2l_m_eff_2jet" , 5, 700., 1700.);
72 book(_hist_2l_m_eff_4jet ,"hist_2l_m_eff_4jet" , 5, 600., 1600.);
73 }
74
75
76 /// Perform the per-event analysis
77 void analyze(const Event& event) {
78
79 // get the candiate jets
80 Jets cand_jets = apply<FastJets>(event, "AntiKtJets04").jetsByPt(Cuts::pT > 20*GeV && Cuts::abseta < 4.5);
81 // charged tracks for isolation
82 Particles chg_tracks = apply<ChargedFinalState>(event, "cfs").particles();
83 // find the electrons
84 Particles cand_soft_e,cand_hard_e;
85 for( const Particle & e : apply<IdentifiedFinalState>(event, "elecs").particlesByPt()) {
86 double pT = e.pT();
87 double eta = e.eta();
88 // remove any leptons within 0.4 of any candidate jets
89 bool e_near_jet = false;
90 for ( const Jet& jet : cand_jets ) {
91 double dR = deltaR(e.momentum(),jet.momentum());
92 if ( inRange(dR, 0.2, 0.4) ) {
93 e_near_jet = true;
94 break;
95 }
96 }
97 if ( e_near_jet ) continue;
98 // soft selection
99 if (pT > 7*GeV && !(fabs(eta) > 1.37 && fabs(eta) < 1.52)) {
100 cand_soft_e.push_back(e);
101 }
102 // hard selection
103 if (pT > 10*GeV) cand_hard_e.push_back(e);
104 }
105 Particles cand_soft_mu,cand_hard_mu;
106 for (const Particle& mu : apply<IdentifiedFinalState>(event, "muons").particlesByPt()) {
107 double pT = mu.pT();
108 double eta = mu.eta();
109 // remove any leptons within 0.4 of any candidate jets
110 bool mu_near_jet = false;
111 for ( const Jet& jet : cand_jets ) {
112 if ( deltaR(mu.momentum(),jet.momentum()) < 0.4 ) {
113 mu_near_jet = true;
114 break;
115 }
116 }
117 if ( mu_near_jet ) continue;
118 // soft selection
119 if (pT > 6*GeV && !inRange(fabs(eta), 1.37, 1.52)) {
120 cand_soft_mu.push_back(mu);
121 }
122 // hard selection
123 if (pT > 10*GeV) cand_hard_mu.push_back(mu);
124 }
125 // pTcone around muon track (hard)
126 Particles recon_hard_mu;
127 for ( const Particle & mu : cand_hard_mu ) {
128 double pTinCone = -mu.pT();
129 for ( const Particle & track : chg_tracks ) {
130 if ( deltaR(mu.momentum(),track.momentum()) < 0.2 )
131 pTinCone += track.pT();
132 }
133 if ( pTinCone < 1.8*GeV ) recon_hard_mu.push_back(mu);
134 }
135 // pTcone around muon track (soft)
136 Particles recon_soft_mu;
137 for ( const Particle & mu : cand_soft_mu ) {
138 double pTinCone = -mu.pT();
139 if(-pTinCone>20.) continue;
140 for ( const Particle & track : chg_tracks ) {
141 if ( deltaR(mu.momentum(),track.momentum()) < 0.2 )
142 pTinCone += track.pT();
143 }
144 if ( pTinCone < 1.8*GeV ) recon_soft_mu.push_back(mu);
145 }
146 // pTcone around electron track (hard)
147 Particles recon_hard_e;
148 for ( const Particle & e : cand_hard_e ) {
149 double pTinCone = -e.pT();
150 for ( const Particle & track : chg_tracks ) {
151 if ( deltaR(e.momentum(),track.momentum()) < 0.2 )
152 pTinCone += track.pT();
153 }
154 if ( pTinCone < 0.1 * e.pT() ) recon_hard_e.push_back(e);
155 }
156 // pTcone around electron track (soft)
157 Particles recon_soft_e;
158 for ( const Particle & e : cand_soft_e ) {
159 double pTinCone = -e.pT();
160 if(-pTinCone>25.) continue;
161 for ( const Particle & track : chg_tracks ) {
162 if ( deltaR(e.momentum(),track.momentum()) < 0.2 )
163 pTinCone += track.pT();
164 }
165 if ( pTinCone < 0.1 * e.pT() ) recon_soft_e.push_back(e);
166 }
167
168 // pTmiss
169 FourMomentum pTmiss;
170 for ( const Particle & p :
171 apply<VisibleFinalState>(event, "vfs").particles() ) {
172 pTmiss -= p.momentum();
173 }
174 double eTmiss = pTmiss.pT();
175
176 // hard lepton selection
177 if( ! recon_hard_e.empty() || !recon_hard_mu.empty() ) {
178 // discard jets that overlap with electrons
179 Jets recon_jets;
180 for ( const Jet& jet : cand_jets ) {
181 if(jet.abseta()>2.5||
182 jet.pT() < 25*GeV) continue;
183 bool away_from_e = true;
184 for ( const Particle & e : cand_hard_e ) {
185 if ( deltaR(e.momentum(),jet.momentum()) < 0.2 ) {
186 away_from_e = false;
187 break;
188 }
189 }
190 if ( away_from_e ) recon_jets.push_back( jet );
191 }
192 // both selections require at least 2 jets
193 // meff calculation
194 double HT=0.;
195 for( const Jet & jet : recon_jets) {
196 HT += jet.pT();
197 }
198 double m_eff_inc = HT+eTmiss;
199 unsigned int njet = recon_jets.size();
200 // 1 lepton only
201 if( recon_hard_e.size() + recon_hard_mu.size() == 1 && njet >=3 ) {
202 // get the lepton
203 Particle lepton = recon_hard_e.empty() ?
204 recon_hard_mu[0] : recon_hard_e[0];
205 // lepton variables
206 double pT = lepton.pT();
207 double mT = 2.*(pT*eTmiss -
208 lepton.px()*pTmiss.px() -
209 lepton.py()*pTmiss.py());
210 mT = sqrt(mT);
211 HT += pT;
212 m_eff_inc += pT;
213 // apply the cuts on the leptons and min no. of jets
214 if( ( ( lepton.abspid() == PID::ELECTRON && pT > 25. ) ||
215 ( lepton.abspid() == PID::MUON && pT > 20. ) ) &&
216 mT > 100. && eTmiss > 250. ) {
217 double m_eff = pT+eTmiss;
218 for (size_t ix = 0; ix < 3; ++ix)
219 m_eff += recon_jets[ix].pT();
220 // 3 jet channel
221 if ( (njet == 3 || recon_jets[3].pT() < 80*GeV ) &&
222 recon_jets[0].pT() > 100*GeV ) {
223 if (eTmiss/m_eff > 0.3) {
224 if (m_eff_inc > 1200*GeV) {
225 _count_1l_3jet_all_channel->fill(0.5);
226 if (lepton.abspid() == PID::ELECTRON )
227 _count_1l_3jet_e_channel->fill(0.5);
228 else
229 _count_1l_3jet_mu_channel->fill(0.5);
230 }
231 _hist_1l_m_eff_3jet->fill(min(1599., m_eff_inc));
232 }
233 }
234 // 4 jet channel
235 else if (njet >=4 && recon_jets[3].pT() > 80*GeV) {
236 m_eff += recon_jets[3].pT();
237 if (eTmiss/m_eff>0.2) {
238 if (m_eff_inc > 800*GeV) {
239 _count_1l_4jet_all_channel->fill(0.5);
240 if(lepton.abspid() == PID::ELECTRON )
241 _count_1l_4jet_e_channel->fill(0.5);
242 else
243 _count_1l_4jet_mu_channel->fill(0.5);
244 }
245 _hist_1l_m_eff_4jet->fill(min(1599., m_eff_inc));
246 }
247 }
248 }
249 }
250 // multi lepton
251 else if( recon_hard_e.size() + recon_hard_mu.size() >= 2 && njet >=2 ) {
252 // get all the leptons and sort them by pT
253 Particles leptons(recon_hard_e.begin(),recon_hard_e.end());
254 leptons.insert(leptons.begin(),recon_hard_mu.begin(),recon_hard_mu.end());
255 std::sort(leptons.begin(), leptons.end(), cmpMomByPt);
256 double m_eff(0.0);
257 for (size_t ix = 0; ix < leptons.size(); ++ix)
258 m_eff += leptons[ix].pT();
259 m_eff_inc += m_eff;
260 m_eff += eTmiss;
261 for (size_t ix = 0; ix < (size_t) min(4, int(recon_jets.size())); ++ix)
262 m_eff += recon_jets[ix].pT();
263 // require opposite sign leptons
264 if (leptons[0].pid()*leptons[1].pid()<0) {
265 // 2 jet
266 if (recon_jets[1].pT()>200 &&
267 ( njet<4 || (njet>=4 && recon_jets[3].pT() < 50*GeV)) && eTmiss > 300*GeV) {
268 _count_2l_2jet_all_channel->fill(0.5);
269 if (leptons[0].abspid() == PID::ELECTRON && leptons[1].abspid() == PID::ELECTRON )
270 _count_2l_2jet_ee_channel->fill(0.5);
271 else if (leptons[0].abspid() == PID::MUON && leptons[1].abspid() == PID::MUON )
272 _count_2l_2jet_mumu_channel->fill(0.5);
273 else
274 _count_2l_2jet_emu_channel->fill(0.5);
275 _hist_2l_m_eff_2jet->fill(min(1699., m_eff_inc));
276 }
277 // 4 jet
278 else if (njet >= 4 && recon_jets[3].pT() > 50*GeV &&
279 eTmiss > 100*GeV && eTmiss/m_eff > 0.2) {
280 if ( m_eff_inc > 650*GeV ) {
281 _count_2l_4jet_all_channel->fill(0.5);
282 if (leptons[0].abspid() == PID::ELECTRON && leptons[1].abspid() == PID::ELECTRON )
283 _count_2l_4jet_ee_channel->fill(0.5);
284 else if (leptons[0].abspid() == PID::MUON && leptons[1].abspid() == PID::MUON )
285 _count_2l_4jet_mumu_channel->fill(0.5);
286 else
287 _count_2l_4jet_emu_channel->fill(0.5);
288 }
289 _hist_2l_m_eff_4jet->fill(min(1599., m_eff_inc));
290 }
291 }
292 }
293 }
294 // soft lepton selection
295 if ( recon_soft_e.size() + recon_soft_mu.size() == 1 ) {
296 // discard jets that overlap with electrons
297 Jets recon_jets;
298 for ( const Jet& jet : cand_jets ) {
299 if (jet.abseta() > 2.5 || jet.pT() < 25*GeV) continue;
300 bool away_from_e = true;
301 for ( const Particle & e : cand_soft_e ) {
302 if ( deltaR(e.momentum(), jet.momentum()) < 0.2 ) {
303 away_from_e = false;
304 break;
305 }
306 }
307 if ( away_from_e ) recon_jets.push_back( jet );
308 }
309 // meff calculation
310 double HT=0.;
311 for (const Jet & jet : recon_jets) {
312 HT += jet.pT();
313 }
314 double m_eff_inc = HT+eTmiss;
315 // get the lepton
316 Particle lepton = recon_soft_e.empty() ?
317 recon_soft_mu[0] : recon_soft_e[0];
318 // lepton variables
319 double pT = lepton.pT();
320 double mT = 2.*(pT*eTmiss -
321 lepton.px()*pTmiss.px() -
322 lepton.py()*pTmiss.py());
323 mT = sqrt(mT);
324 m_eff_inc += pT;
325 double m_eff = pT+eTmiss;
326 // apply final cuts
327 if (recon_jets.size() >= 2 && recon_jets[0].pT()>130*GeV && mT > 100*GeV && eTmiss > 250*GeV) {
328 for (size_t ix = 0; ix < 2; ++ix)
329 m_eff += recon_jets[0].pT();
330 if (eTmiss/m_eff > 0.3) {
331 _count_1l_soft_all_channel->fill(0.5);
332 if (lepton.abspid() == PID::ELECTRON )
333 _count_1l_soft_e_channel->fill(0.5);
334 else
335 _count_1l_soft_mu_channel->fill(0.5);
336 }
337 _hist_1l_eTmiss_m_eff_soft->fill( eTmiss/m_eff_inc);
338 }
339 }
340 }
341
342
343 void finalize() {
344
345 double norm = 4.7* crossSection()/sumOfWeights()/femtobarn;
346 scale(_count_1l_3jet_all_channel ,norm);
347 scale(_count_1l_3jet_e_channel ,norm);
348 scale(_count_1l_3jet_mu_channel ,norm);
349 scale(_count_1l_4jet_all_channel ,norm);
350 scale(_count_1l_4jet_e_channel ,norm);
351 scale(_count_1l_4jet_mu_channel ,norm);
352 scale(_count_1l_soft_all_channel ,norm);
353 scale(_count_1l_soft_e_channel ,norm);
354 scale(_count_1l_soft_mu_channel ,norm);
355 scale(_count_2l_2jet_all_channel ,norm);
356 scale(_count_2l_2jet_ee_channel ,norm);
357 scale(_count_2l_2jet_emu_channel ,norm);
358 scale(_count_2l_2jet_mumu_channel ,norm);
359 scale(_count_2l_4jet_all_channel ,norm);
360 scale(_count_2l_4jet_ee_channel ,norm);
361 scale(_count_2l_4jet_emu_channel ,norm);
362 scale(_count_2l_4jet_mumu_channel ,norm);
363
364 scale(_hist_1l_m_eff_3jet ,200.*norm);
365 scale(_hist_1l_m_eff_4jet ,200.*norm);
366 scale(_hist_1l_eTmiss_m_eff_soft ,0.1*norm);
367 scale(_hist_2l_m_eff_2jet ,200.*norm);
368 scale(_hist_2l_m_eff_4jet ,200.*norm);
369
370 }
371
372 private:
373
374 /// @name Histos
375 /// @{
376 Histo1DPtr _count_1l_3jet_all_channel;
377 Histo1DPtr _count_1l_3jet_e_channel;
378 Histo1DPtr _count_1l_3jet_mu_channel;
379 Histo1DPtr _count_1l_4jet_all_channel;
380 Histo1DPtr _count_1l_4jet_e_channel;
381 Histo1DPtr _count_1l_4jet_mu_channel;
382 Histo1DPtr _count_1l_soft_all_channel;
383 Histo1DPtr _count_1l_soft_e_channel;
384 Histo1DPtr _count_1l_soft_mu_channel;
385 Histo1DPtr _count_2l_2jet_all_channel;
386 Histo1DPtr _count_2l_2jet_ee_channel;
387 Histo1DPtr _count_2l_2jet_emu_channel;
388 Histo1DPtr _count_2l_2jet_mumu_channel;
389 Histo1DPtr _count_2l_4jet_all_channel;
390 Histo1DPtr _count_2l_4jet_ee_channel;
391 Histo1DPtr _count_2l_4jet_emu_channel;
392 Histo1DPtr _count_2l_4jet_mumu_channel;
393 Histo1DPtr _hist_1l_m_eff_3jet;
394 Histo1DPtr _hist_1l_m_eff_4jet;
395 Histo1DPtr _hist_1l_eTmiss_m_eff_soft;
396 Histo1DPtr _hist_2l_m_eff_2jet;
397 Histo1DPtr _hist_2l_m_eff_4jet;
398 /// @}
399
400 };
401
402 RIVET_DECLARE_PLUGIN(ATLAS_2012_I1180197);
403
404}
|