00001
00002 #include "Rivet/Analysis.hh"
00003 #include "Rivet/Tools/BinnedHistogram.hh"
00004 #include "Rivet/RivetAIDA.hh"
00005 #include "Rivet/Tools/Logging.hh"
00006 #include "Rivet/Projections/FinalState.hh"
00007 #include "Rivet/Projections/ChargedFinalState.hh"
00008 #include "Rivet/Projections/VisibleFinalState.hh"
00009 #include "Rivet/Projections/IdentifiedFinalState.hh"
00010 #include "Rivet/Projections/FastJets.hh"
00011
00012 namespace Rivet {
00013
00014
00015
00016 class ATLAS_2011_S9212183 : public Analysis {
00017 public:
00018
00019
00020
00021
00022
00023 ATLAS_2011_S9212183()
00024 : Analysis("ATLAS_2011_S9212183")
00025 { }
00026
00027
00028
00029
00030 public:
00031
00032
00033
00034
00035
00036 void init() {
00037
00038
00039 std::vector<std::pair<double, double> > eta_e;
00040 eta_e.push_back(make_pair(-2.47,2.47));
00041 IdentifiedFinalState elecs(eta_e, 20.0*GeV);
00042 elecs.acceptIdPair(ELECTRON);
00043 addProjection(elecs, "elecs");
00044
00045
00046 std::vector<std::pair<double, double> > eta_m;
00047 eta_m.push_back(make_pair(-2.4,2.4));
00048 IdentifiedFinalState muons(eta_m, 10.0*GeV);
00049 muons.acceptIdPair(MUON);
00050 addProjection(muons, "muons");
00051
00052
00053 addProjection(FastJets(FinalState(), FastJets::ANTIKT, 0.4), "AntiKtJets04");
00054
00055
00056 addProjection(ChargedFinalState(-3.0,3.0),"cfs");
00057
00058
00059 addProjection(VisibleFinalState(-4.5,4.5),"vfs");
00060
00061
00062
00063 _count_2j = bookHistogram1D("count_2j", 1, 0., 1.);
00064 _count_3j = bookHistogram1D("count_3j", 1, 0., 1.);
00065 _count_4j5 = bookHistogram1D("count_4j5", 1, 0., 1.);
00066 _count_4j10 = bookHistogram1D("count_4j10", 1, 0., 1.);
00067 _count_HM = bookHistogram1D("count_HM", 1, 0., 1.);
00068
00069 _hist_meff_2j = bookHistogram1D("m_eff_2j", 30, 0., 3000.);
00070 _hist_meff_3j = bookHistogram1D("m_eff_3j", 30, 0., 3000.);
00071 _hist_meff_4j = bookHistogram1D("m_eff_4j", 30, 0., 3000.);
00072 _hist_meff_HM = bookHistogram1D("m_eff_HM", 20, 0., 3000.);
00073
00074 _hist_eTmiss = bookHistogram1D("Et_miss", 20, 0., 1000.);
00075 }
00076
00077
00078
00079 void analyze(const Event& event) {
00080 const double weight = event.weight();
00081
00082 Jets cand_jets;
00083 const Jets jets = applyProjection<FastJets>(event, "AntiKtJets04").jetsByPt(20.0*GeV);
00084 foreach (const Jet& jet, jets) {
00085 if ( fabs( jet.momentum().eta() ) < 4.9 ) {
00086 cand_jets.push_back(jet);
00087 }
00088 }
00089
00090 const ParticleVector cand_e = applyProjection<IdentifiedFinalState>(event, "elecs").particlesByPt();
00091
00092
00093
00094 ParticleVector cand_mu;
00095 const ParticleVector chg_tracks = applyProjection<ChargedFinalState>(event, "cfs").particles();
00096 const ParticleVector muons = applyProjection<IdentifiedFinalState>(event, "muons").particlesByPt();
00097 foreach (const Particle& mu, muons) {
00098 double pTinCone = -mu.momentum().pT();
00099 foreach (const Particle& track, chg_tracks) {
00100 if ( deltaR(mu.momentum(),track.momentum()) <= 0.2 ) {
00101 pTinCone += track.momentum().pT();
00102 }
00103 }
00104 if ( pTinCone < 1.8*GeV ) cand_mu.push_back(mu);
00105 }
00106
00107
00108 Jets cand_jets_2;
00109 foreach ( const Jet& jet, cand_jets ) {
00110 if ( fabs( jet.momentum().eta() ) >= 2.8 ) {
00111 cand_jets_2.push_back( jet );
00112 } else {
00113 bool away_from_e = true;
00114 foreach ( const Particle & e, cand_e ) {
00115 if ( deltaR(e.momentum(),jet.momentum()) <= 0.2 ) {
00116 away_from_e = false;
00117 break;
00118 }
00119 }
00120 if ( away_from_e ) cand_jets_2.push_back( jet );
00121 }
00122 }
00123
00124
00125 ParticleVector recon_e, recon_mu;
00126
00127 foreach ( const Particle & e, cand_e ) {
00128 bool away = true;
00129 foreach ( const Jet& jet, cand_jets_2 ) {
00130 if ( deltaR(e.momentum(),jet.momentum()) < 0.4 ) {
00131 away = false;
00132 break;
00133 }
00134 }
00135 if ( away ) recon_e.push_back( e );
00136 }
00137
00138 foreach ( const Particle & mu, cand_mu ) {
00139 bool away = true;
00140 foreach ( const Jet& jet, cand_jets_2 ) {
00141 if ( deltaR(mu.momentum(),jet.momentum()) < 0.4 ) {
00142 away = false;
00143 break;
00144 }
00145 }
00146 if ( away ) recon_mu.push_back( mu );
00147 }
00148
00149
00150
00151
00152
00153 ParticleVector vfs_particles = applyProjection<VisibleFinalState>(event, "vfs").particles();
00154 FourMomentum pTmiss;
00155 foreach ( const Particle & p, vfs_particles ) {
00156 pTmiss -= p.momentum();
00157 }
00158 foreach ( const Jet& jet, cand_jets_2 ) {
00159 if ( fabs( jet.momentum().eta() ) > 4.5 ) pTmiss -= jet.momentum();
00160 }
00161 double eTmiss = pTmiss.pT();
00162
00163
00164
00165 Jets recon_jets;
00166 foreach ( const Jet& jet, cand_jets_2 ) {
00167 if ( fabs( jet.momentum().eta() ) <= 2.8 ) recon_jets.push_back( jet );
00168 }
00169
00170
00171
00172
00173
00174 ParticleVector veto_mu;
00175 foreach ( const Particle & mu, cand_mu ) {
00176 if ( mu.momentum().pT() >= 20.0*GeV ) veto_mu.push_back(mu);
00177 }
00178
00179 if ( ! ( veto_mu.empty() && recon_e.empty() ) ) {
00180 MSG_DEBUG("Charged leptons left after selection");
00181 vetoEvent;
00182 }
00183
00184 if ( eTmiss <= 130 * GeV ) {
00185 MSG_DEBUG("Not enough eTmiss: " << eTmiss << " < 130");
00186 vetoEvent;
00187 }
00188
00189 if ( recon_jets.empty() || recon_jets[0].momentum().pT() <= 130.0 * GeV ) {
00190 MSG_DEBUG("No hard leading jet in " << recon_jets.size() << " jets");
00191 vetoEvent;
00192 }
00193
00194
00195
00196 int Njets = 0;
00197 double min_dPhi = 999.999;
00198 double pTmiss_phi = pTmiss.phi();
00199 foreach ( const Jet& jet, recon_jets ) {
00200 if ( jet.momentum().pT() > 40 * GeV ) {
00201 if ( Njets < 3 ) {
00202 min_dPhi = min( min_dPhi, deltaPhi( pTmiss_phi, jet.momentum().phi() ) );
00203 }
00204 ++Njets;
00205 }
00206 }
00207
00208 int NjetsHighMass = 0;
00209 foreach ( const Jet& jet, recon_jets ) {
00210 if ( jet.momentum().pT() > 80.0 * GeV ) {
00211 ++NjetsHighMass;
00212 }
00213 }
00214
00215 if ( Njets < 2 ) {
00216 MSG_DEBUG("Only " << Njets << " >40 GeV jets left");
00217 vetoEvent;
00218 }
00219
00220 if ( min_dPhi <= 0.4 ) {
00221 MSG_DEBUG("dPhi too small");
00222 vetoEvent;
00223 }
00224
00225
00226 double m_eff_2j = eTmiss + recon_jets[0].momentum().pT() + recon_jets[1].momentum().pT();
00227 double m_eff_3j = recon_jets.size() < 3 ? -999.0 : m_eff_2j + recon_jets[2].momentum().pT();
00228 double m_eff_4j = recon_jets.size() < 4 ? -999.0 : m_eff_3j + recon_jets[3].momentum().pT();
00229 double m_eff_HM = eTmiss;
00230 foreach ( const Jet& jet, recon_jets ) {
00231 if ( jet.momentum().pT() > 40.0 * GeV ) m_eff_HM += jet.momentum().pT();
00232 }
00233
00234 double et_meff_2j = eTmiss / m_eff_2j;
00235 double et_meff_3j = eTmiss / m_eff_3j;
00236 double et_meff_4j = eTmiss / m_eff_4j;
00237 double et_meff_HM = eTmiss / m_eff_HM;
00238
00239
00240
00241
00242 MSG_DEBUG( "Trying to fill "
00243 << Njets << ' '
00244 << m_eff_2j << ' '
00245 << et_meff_2j << ' '
00246 << m_eff_3j << ' '
00247 << et_meff_3j << ' '
00248 << m_eff_4j << ' '
00249 << et_meff_4j << ' '
00250 << m_eff_HM << ' '
00251 << et_meff_HM );
00252
00253
00254 _hist_eTmiss->fill(eTmiss, weight);
00255
00256
00257
00258 if ( et_meff_2j > 0.3 ) {
00259 _hist_meff_2j->fill(m_eff_2j, weight);
00260 if ( m_eff_2j > 1000 * GeV ) {
00261 MSG_DEBUG("Hits 2j");
00262 _count_2j->fill(0.5, weight);
00263 }
00264 }
00265
00266
00267
00268 if ( Njets >= 3 && et_meff_3j > 0.25 ) {
00269 _hist_meff_3j->fill(m_eff_3j, weight);
00270 if ( m_eff_3j > 1000 * GeV ) {
00271 MSG_DEBUG("Hits 3j");
00272 _count_3j->fill(0.5, weight);
00273 }
00274 }
00275
00276
00277
00278 if ( Njets >= 4 && et_meff_4j > 0.25 ) {
00279 _hist_meff_4j->fill(m_eff_4j, weight);
00280 if ( m_eff_4j > 500 * GeV ) {
00281 MSG_DEBUG("Hits 4j5");
00282 _count_4j5->fill(0.5, weight);
00283 }
00284 if ( m_eff_4j > 1000 * GeV ) {
00285 MSG_DEBUG("Hits 4j10");
00286 _count_4j10->fill(0.5, weight);
00287 }
00288 }
00289
00290
00291
00292 if ( NjetsHighMass >= 4 && et_meff_HM > 0.2 ) {
00293 _hist_meff_HM->fill(m_eff_HM, weight);
00294 if ( m_eff_HM > 1100 * GeV ) {
00295 MSG_DEBUG("Hits HM");
00296 _count_HM->fill(0.5, weight);
00297 }
00298 }
00299
00300 }
00301
00302
00303 void finalize() {
00304
00305
00306
00307 scale( _hist_meff_2j, 100. * 1040 * crossSection()/sumOfWeights() );
00308 scale( _hist_meff_3j, 100. * 1040 * crossSection()/sumOfWeights() );
00309 scale( _hist_meff_4j, 100. * 1040 * crossSection()/sumOfWeights() );
00310 scale( _hist_meff_HM, 150. * 1040 * crossSection()/sumOfWeights() );
00311 }
00312
00313
00314
00315
00316 private:
00317
00318 AIDA::IHistogram1D* _count_2j;
00319 AIDA::IHistogram1D* _count_3j;
00320 AIDA::IHistogram1D* _count_4j5;
00321 AIDA::IHistogram1D* _count_4j10;
00322 AIDA::IHistogram1D* _count_HM;
00323 AIDA::IHistogram1D* _hist_meff_2j;
00324 AIDA::IHistogram1D* _hist_meff_3j;
00325 AIDA::IHistogram1D* _hist_meff_4j;
00326 AIDA::IHistogram1D* _hist_meff_HM;
00327 AIDA::IHistogram1D* _hist_eTmiss;
00328
00329 };
00330
00331
00332
00333 DECLARE_RIVET_PLUGIN(ATLAS_2011_S9212183);
00334
00335 }