rivet is hosted by Hepforge, IPPP Durham
ATLAS_2012_I946427.cc
Go to the documentation of this file.
00001 // -*- C++ -*-
00002 #include "Rivet/Analysis.hh"
00003 #include "Rivet/Tools/BinnedHistogram.hh"
00004 #include "Rivet/Projections/FinalState.hh"
00005 #include "Rivet/Projections/ChargedFinalState.hh"
00006 #include "Rivet/Projections/VisibleFinalState.hh"
00007 #include "Rivet/Projections/VetoedFinalState.hh"
00008 #include "Rivet/Projections/IdentifiedFinalState.hh"
00009 #include "Rivet/Projections/FastJets.hh"
00010 
00011 namespace Rivet {
00012 
00013 
00014   /// @author Peter Richardson
00015   class ATLAS_2012_I946427 : public Analysis {
00016   public:
00017 
00018     /// @name Constructors etc.
00019     //@{
00020 
00021     /// Constructor
00022     ATLAS_2012_I946427()
00023       : Analysis("ATLAS_2012_I946427")
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       // photons
00038       IdentifiedFinalState photonfs(-1.81, 1.81, 25.0*GeV);
00039       photonfs.acceptId(PID::PHOTON);
00040       addProjection(photonfs, "Photon");
00041 
00042       //
00043       FinalState fs;
00044       addProjection(fs, "FS");
00045 
00046       // Used for pTmiss
00047       addProjection(VisibleFinalState(-4.9,4.9),"vfs");
00048 
00049       // Book histograms
00050       _count_SR = bookHisto1D("count_SR", 1, 0., 1.);
00051 
00052       _hist_ET_photon = bookHisto1D("hist_ET_photon", 48 , 20., 500.);
00053       _hist_met       = bookHisto1D("hist_met"      , 100,  0., 500.);
00054 
00055     }
00056 
00057 
00058     /// Perform the per-event analysis
00059     void analyze(const Event& event) {
00060 
00061       const double weight = event.weight();
00062 
00063       // require at least 2 photons in final state
00064       Particles photons =
00065         applyProjection<IdentifiedFinalState>(event, "Photon").particlesByPt();
00066       if (photons.size() < 2) {
00067         vetoEvent;
00068       }
00069 
00070       // Loop over photons and fill vector of isolated ones
00071       Particles fs = applyProjection<FinalState>(event, "FS").particles();
00072       Particles isolated_photons;
00073       foreach (const Particle& photon, photons) {
00074         // remove photons in crack
00075         double eta_P = photon.eta();
00076         if (fabs(eta_P)>=1.37 && fabs(eta_P)<1.52) continue;
00077 
00078         double phi_P = photon.momentum().phi();
00079 
00080         FourMomentum mom_in_EtCone = -photon.momentum();
00081         foreach (const Particle& p, fs) {
00082           // check if it's in the cone of .2
00083           if (deltaR(eta_P, phi_P, p.eta(),
00084                      p.momentum().phi()) >= 0.2) continue;
00085           mom_in_EtCone += p.momentum();
00086         }
00087         // apply isolation
00088         if(mom_in_EtCone.Et()>5.) continue;
00089 
00090         // add photon to list of isolated ones
00091         isolated_photons.push_back(photon);
00092       }
00093 
00094       // need two isolated photons
00095       if(isolated_photons.size() < 2 ) {
00096         vetoEvent;
00097       }
00098 
00099       // pTmiss
00100       Particles vfs_particles =
00101         applyProjection<VisibleFinalState>(event, "vfs").particles();
00102       FourMomentum pTmiss;
00103       foreach ( const Particle & p, vfs_particles ) {
00104         pTmiss -= p.momentum();
00105       }
00106       double eTmiss = pTmiss.pT();
00107 
00108       _hist_ET_photon->fill(isolated_photons[0].momentum().Et(),weight);
00109       _hist_met      ->fill(eTmiss                             ,weight);
00110 
00111       if(eTmiss>125.) _count_SR->fill(0.5,weight);
00112     }
00113 
00114 
00115     void finalize() {
00116 
00117       double norm = crossSection()/femtobarn*1.07/sumOfWeights();
00118       // these are number of events at 1.07fb^-1 per 10 GeV
00119       scale( _hist_ET_photon, 10. * norm );
00120       // these are number of events at 1.07fb^-1 per  5 GeV
00121       scale( _hist_met, 5. * norm );
00122       // these are number of events at 1.07fb^-1
00123       scale(_count_SR,norm);
00124     }
00125 
00126     //@}
00127 
00128 
00129   private:
00130 
00131     Histo1DPtr _count_SR;
00132     Histo1DPtr _hist_ET_photon;
00133     Histo1DPtr _hist_met;
00134 
00135   };
00136 
00137 
00138   // This global object acts as a hook for the plugin system
00139   DECLARE_RIVET_PLUGIN(ATLAS_2012_I946427);
00140 
00141 }