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(Cuts::abseta < 1.81 && Cuts::pT > 25*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(Cuts::abseta < 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.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.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].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 } Generated on Thu Mar 10 2016 08:29:47 for The Rivet MC analysis system by ![]() |