MC_PHOTONKTSPLITTINGS.cc
Go to the documentation of this file.
00001 // -*- C++ -*- 00002 #include "Rivet/Analyses/MC_JetSplittings.hh" 00003 #include "Rivet/Projections/LeadingParticlesFinalState.hh" 00004 #include "Rivet/Projections/VetoedFinalState.hh" 00005 #include "Rivet/Projections/FastJets.hh" 00006 00007 namespace Rivet { 00008 00009 00010 /// @brief MC validation analysis for photon + jets events 00011 class MC_PHOTONKTSPLITTINGS : public MC_JetSplittings { 00012 public: 00013 00014 /// Default constructor 00015 MC_PHOTONKTSPLITTINGS() 00016 : MC_JetSplittings("MC_PHOTONKTSPLITTINGS", 4, "Jets") 00017 { } 00018 00019 00020 /// @name Analysis methods 00021 //@{ 00022 00023 /// Book histograms 00024 void init() { 00025 // General FS 00026 FinalState fs(-5.0, 5.0); 00027 addProjection(fs, "FS"); 00028 00029 // Get leading photon 00030 LeadingParticlesFinalState photonfs(FinalState(-1.0, 1.0, 30.0*GeV)); 00031 photonfs.addParticleId(PID::PHOTON); 00032 addProjection(photonfs, "LeadingPhoton"); 00033 00034 // FS for jets excludes the leading photon 00035 VetoedFinalState vfs(fs); 00036 vfs.addVetoOnThisFinalState(photonfs); 00037 addProjection(vfs, "JetFS"); 00038 FastJets jetpro(vfs, FastJets::KT, 0.6); 00039 addProjection(jetpro, "Jets"); 00040 00041 MC_JetSplittings::init(); 00042 } 00043 00044 00045 /// Do the analysis 00046 void analyze(const Event& e) { 00047 // Get the photon 00048 const Particles photons = applyProjection<FinalState>(e, "LeadingPhoton").particles(); 00049 if (photons.size() != 1) { 00050 vetoEvent; 00051 } 00052 const FourMomentum photon = photons.front().momentum(); 00053 00054 // Get all charged particles 00055 const FinalState& fs = applyProjection<FinalState>(e, "JetFS"); 00056 if (fs.empty()) { 00057 vetoEvent; 00058 } 00059 00060 // Isolate photon by ensuring that a 0.4 cone around it contains less than 7% of the photon's energy 00061 const double egamma = photon.E(); 00062 double econe = 0.0; 00063 foreach (const Particle& p, fs.particles()) { 00064 if (deltaR(photon, p.momentum()) < 0.4) { 00065 econe += p.momentum().E(); 00066 // Veto as soon as E_cone gets larger 00067 if (econe/egamma > 0.07) { 00068 vetoEvent; 00069 } 00070 } 00071 } 00072 00073 MC_JetSplittings::analyze(e); 00074 } 00075 00076 00077 // Finalize 00078 void finalize() { 00079 MC_JetSplittings::finalize(); 00080 } 00081 00082 //@} 00083 00084 }; 00085 00086 00087 00088 // The hook for the plugin system 00089 DECLARE_RIVET_PLUGIN(MC_PHOTONKTSPLITTINGS); 00090 00091 } Generated on Tue May 13 2014 11:38:28 for The Rivet MC analysis system by ![]() |