ATLAS_2010_S8919674.cc

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 #include "Rivet/Analysis.hh"
00003 #include "Rivet/RivetAIDA.hh"
00004 #include "Rivet/Tools/Logging.hh"
00005 #include "Rivet/Projections/IdentifiedFinalState.hh"
00006 #include "Rivet/Projections/VetoedFinalState.hh"
00007 #include "Rivet/Projections/MissingMomentum.hh"
00008 #include "Rivet/Projections/FastJets.hh"
00009 #include "Rivet/Projections/ClusteredPhotons.hh"
00010 #include "Rivet/Projections/LeadingParticlesFinalState.hh"
00011 
00012 namespace Rivet {
00013 
00014 
00015   class ATLAS_2010_S8919674 : public Analysis {
00016   public:
00017 
00018     /// @name Constructors etc.
00019     //@{
00020 
00021     /// Constructor
00022     ATLAS_2010_S8919674()
00023       : Analysis("ATLAS_2010_S8919674")
00024     {    }
00025 
00026     //@}
00027 
00028 
00029   public:
00030 
00031     /// @name Analysis methods
00032     //@{
00033 
00034     /// Book histograms and initialise projections before the run
00035     void init() {
00036 
00037       /// Initialise and register projections (selections on the final state)
00038       // projection to find the electrons
00039       std::vector<std::pair<double, double> > eta_e;
00040       eta_e.push_back(make_pair(-2.47,-1.52));
00041       eta_e.push_back(make_pair(-1.37,1.37));
00042       eta_e.push_back(make_pair(1.52,2.47));
00043       IdentifiedFinalState elecs(eta_e, 20.0*GeV);
00044       elecs.acceptIdPair(ELECTRON);
00045       addProjection(elecs, "elecs");
00046       // projection for finding the photons which have to be clustered into
00047       // the lepton later
00048       ClusteredPhotons cphotons_e(FinalState(), elecs, 0.1);
00049       addProjection(cphotons_e, "cphotons_e");
00050 
00051       // projection to find the muons
00052       std::vector<std::pair<double, double> > eta_m;
00053       eta_m.push_back(make_pair(-2.4,2.4));
00054       IdentifiedFinalState muons(eta_m, 20.0*GeV);
00055       muons.acceptIdPair(MUON);
00056       addProjection(muons, "muons");
00057       // projection for finding the photons which have to be clustered into
00058       // the lepton later
00059       ClusteredPhotons cphotons_m(FinalState(), muons, 0.1);
00060       addProjection(cphotons_m, "cphotons_m");
00061 
00062       // Leading neutrinos for Etmiss
00063       FinalState fs;
00064       LeadingParticlesFinalState muon_neutrino(fs);
00065       muon_neutrino.addParticleIdPair(NU_MU);
00066       addProjection(muon_neutrino, "muon_neutrino");
00067       LeadingParticlesFinalState elec_neutrino(fs);
00068       elec_neutrino.addParticleIdPair(NU_E);
00069       addProjection(elec_neutrino, "elec_neutrino");
00070 
00071       // Input for the jets: No neutrinos, no muons, and no electron which
00072       // passed the electron cuts ("elecs" finalstate from above)
00073       VetoedFinalState veto;
00074       veto.addVetoOnThisFinalState(elecs);
00075       veto.addVetoPairId(MUON);
00076       veto.vetoNeutrinos();
00077       FastJets jets(veto, FastJets::ANTIKT, 0.4);
00078       addProjection(jets, "jets");
00079 
00080 
00081 
00082       /// book histograms
00083       _h_el_njet_inclusive = bookHistogram1D(1,1,1);
00084       _h_mu_njet_inclusive = bookHistogram1D(2,1,1);
00085 
00086       _h_el_pT_jet1 = bookHistogram1D(5,1,1);
00087       _h_mu_pT_jet1 = bookHistogram1D(6,1,1);
00088 
00089       _h_el_pT_jet2 = bookHistogram1D(7,1,1);
00090       _h_mu_pT_jet2 = bookHistogram1D(8,1,1);
00091     }
00092 
00093 
00094     /// Perform the per-event analysis
00095     void analyze(const Event& event) {
00096       const double weight = event.weight();
00097 
00098       const FinalState& elecs = applyProjection<FinalState>(event, "elecs");
00099       ParticleVector elec_neutrino=applyProjection<FinalState>(event, "elec_neutrino").particles();
00100       if (elecs.size()==1 && elec_neutrino.size()>0) {
00101         FourMomentum lepton=elecs.particles()[0].momentum();
00102         foreach (const Particle& photon,
00103                  applyProjection<FinalState>(event, "cphotons_e").particles()) {
00104           lepton+=photon.momentum();
00105         }
00106         FourMomentum p_miss = elec_neutrino[0].momentum();
00107         double mT=sqrt(2.0*lepton.pT()*p_miss.Et()*(1.0-cos(lepton.phi()-p_miss.phi())));
00108         if (p_miss.Et()>25.0*GeV && mT>40.0*GeV) {
00109           Jets jets;
00110           foreach (const Jet& jet, applyProjection<FastJets>(event, "jets").jetsByPt(20.0*GeV)) {
00111             if (fabs(jet.eta())<2.8 && deltaR(lepton, jet.momentum())>0.5) {
00112               jets.push_back(jet);
00113             }
00114           }
00115 
00116           _h_el_njet_inclusive->fill(0, weight);
00117           if (jets.size()>=1) {
00118             _h_el_njet_inclusive->fill(1, weight);
00119             _h_el_pT_jet1->fill(jets[0].momentum().pT(), weight);
00120           }
00121           if (jets.size()>=2) {
00122             _h_el_njet_inclusive->fill(2, weight);
00123             _h_el_pT_jet2->fill(jets[1].momentum().pT(), weight);
00124           }
00125           if (jets.size()>=3) {
00126             _h_el_njet_inclusive->fill(3, weight);
00127           }
00128         }
00129       }
00130 
00131       const FinalState& muons = applyProjection<FinalState>(event, "muons");
00132       ParticleVector muon_neutrino=applyProjection<FinalState>(event, "muon_neutrino").particles();
00133       if (muons.size()==1 && muon_neutrino.size()>0) {
00134         FourMomentum lepton=muons.particles()[0].momentum();
00135         foreach (const Particle& photon,
00136                  applyProjection<FinalState>(event, "cphotons_m").particles()) {
00137           lepton+=photon.momentum();
00138         }
00139         FourMomentum p_miss = muon_neutrino[0].momentum();
00140         double mT=sqrt(2.0*lepton.pT()*p_miss.Et()*(1.0-cos(lepton.phi()-p_miss.phi())));
00141         if (p_miss.Et()>25.0*GeV && mT>40.0*GeV) {
00142           Jets jets;
00143           foreach (const Jet& jet, applyProjection<FastJets>(event, "jets").jetsByPt(20.0*GeV)) {
00144             if (fabs(jet.eta())<2.8 && deltaR(lepton, jet.momentum())>0.5) {
00145               jets.push_back(jet);
00146             }
00147           }
00148 
00149           _h_mu_njet_inclusive->fill(0, weight);
00150           if (jets.size()>=1) {
00151             _h_mu_njet_inclusive->fill(1, weight);
00152             _h_mu_pT_jet1->fill(jets[0].momentum().pT(), weight);
00153           }
00154           if (jets.size()>=2) {
00155             _h_mu_njet_inclusive->fill(2, weight);
00156             _h_mu_pT_jet2->fill(jets[1].momentum().pT(), weight);
00157           }
00158           if (jets.size()>=3) {
00159             _h_mu_njet_inclusive->fill(3, weight);
00160           }
00161           if (jets.size()>=4) {
00162             _h_mu_njet_inclusive->fill(4, weight);
00163           }
00164         }
00165       }
00166 
00167     }
00168 
00169 
00170     /// Normalise histograms etc., after the run
00171     void finalize() {
00172       double normfac=crossSection()/sumOfWeights();
00173       scale(_h_el_njet_inclusive, normfac);
00174       scale(_h_mu_njet_inclusive, normfac);
00175       scale(_h_el_pT_jet1, normfac);
00176       scale(_h_mu_pT_jet1, normfac);
00177       scale(_h_el_pT_jet2, normfac);
00178       scale(_h_mu_pT_jet2, normfac);
00179     }
00180 
00181     //@}
00182 
00183 
00184   private:
00185 
00186     /// @name Histograms
00187     //@{
00188 
00189     AIDA::IHistogram1D * _h_el_njet_inclusive;
00190     AIDA::IHistogram1D * _h_mu_njet_inclusive;
00191     AIDA::IHistogram1D * _h_el_pT_jet1;
00192     AIDA::IHistogram1D * _h_mu_pT_jet1;
00193     AIDA::IHistogram1D * _h_el_pT_jet2;
00194     AIDA::IHistogram1D * _h_mu_pT_jet2;
00195     //@}
00196 
00197   };
00198 
00199 
00200 
00201   // The hook for the plugin system
00202   DECLARE_RIVET_PLUGIN(ATLAS_2010_S8919674);
00203 
00204 }