CMS_2015_I1346843.cc
Go to the documentation of this file.
00001 // -*- C++ -*- 00002 #include "Rivet/Analysis.hh" 00003 #include "Rivet/Projections/FinalState.hh" 00004 #include "Rivet/Projections/ChargedLeptons.hh" 00005 #include "Rivet/Projections/NeutralFinalState.hh" 00006 #include "Rivet/Projections/IdentifiedFinalState.hh" 00007 00008 namespace Rivet { 00009 00010 00011 /// Differential cross-section of FSR photons in Z decays 00012 class CMS_2015_I1346843 : public Analysis { 00013 public: 00014 00015 /// Constructor 00016 DEFAULT_RIVET_ANALYSIS_CTOR(CMS_2015_I1346843); 00017 00018 /// Book histograms and initialise projections before the run 00019 void init() { 00020 00021 Cut c_photons = Cuts::pT >= 5.0*GeV && (Cuts::etaIn(-2.5, 1.4) || Cuts::etaIn(1.6, 2.5)); 00022 IdentifiedFinalState photons(c_photons); 00023 photons.acceptId(PID::PHOTON); 00024 declare(photons, "PHOTFS"); 00025 00026 Cut c_muons = Cuts::pT > 9*GeV && Cuts::abseta < 2.4; 00027 IdentifiedFinalState muons(c_muons); 00028 muons.acceptIdPair(PID::MUON); 00029 declare(muons, "MUFS"); 00030 00031 00032 _hist_pho_et = bookHisto1D(1, 1, 1); // photon transverse energy 00033 _hist_pho_et_wide = bookHisto1D(1, 2, 1); // photon transverse energy (0.5 < dr < 3.0) 00034 _hist_pho_et_close = bookHisto1D(1, 3, 1); // photon transverse energy (0.05 < dr < 0.5) 00035 _hist_pho_et_lqt = bookHisto1D(1, 4, 1); // photon transverse energy (q_T < 10) 00036 _hist_pho_et_hqt = bookHisto1D(1, 5, 1); // photon transverse energy (q_T > 50) 00037 _hist_pho_dr = bookHisto1D(2, 1, 1); // delta_R 00038 _hist_pho_dr_lqt = bookHisto1D(2, 2, 1); // delta_R (q_T < 10) 00039 _hist_pho_dr_hqt = bookHisto1D(2, 3, 1); // delta_R (q_T > 50) 00040 } 00041 00042 00043 // Perform the per-event analysis 00044 void analyze(const Event& event) { 00045 00046 const Particles muons = apply<IdentifiedFinalState>(event, "MUFS").particlesByPt(); 00047 00048 if (muons.size() < 2) vetoEvent; 00049 if (muons[0].pT()/GeV < 31) vetoEvent; 00050 if (muons[0].charge()*muons[1].charge() > 0) vetoEvent; 00051 const double mZ = (muons[0].momentum() + muons[1].momentum()).mass(); 00052 if (!inRange(mZ, 30*GeV, 87*GeV)) vetoEvent; 00053 00054 const Particles photons = apply<IdentifiedFinalState>(event, "PHOTFS").particlesByPt(); 00055 // We want the photon with the highest pT that does not come from a decay 00056 foreach(const Particle& p, photons) { 00057 if (p.fromDecay() || !p.isStable()) continue; 00058 00059 const double dR = std::min(deltaR(p, muons[0]), deltaR(p, muons[1]) ); 00060 if (!inRange(dR, 0.05, 3.0)) continue; 00061 00062 // Calculate the three-body (mu,mu,gamma) transverse momentum 00063 const double qT = (muons[0].mom() + muons[1].mom() + p.mom()).pT(); 00064 00065 // Fill the analysis histograms 00066 _hist_pho_et->fill(p.pT()/GeV, event.weight()); 00067 _hist_pho_dr->fill(dR, event.weight()); 00068 00069 (dR <= 0.5 ? _hist_pho_et_close : _hist_pho_et_wide)->fill(p.pT()/GeV, event.weight()); 00070 00071 if (qT / GeV < 10.) { 00072 _hist_pho_et_lqt->fill(p.pT()/GeV, event.weight()); 00073 _hist_pho_dr_lqt->fill(dR, event.weight()); 00074 } 00075 00076 if (qT / GeV > 50.) { 00077 _hist_pho_et_hqt->fill(p.pT()/GeV, event.weight()); 00078 _hist_pho_dr_hqt->fill(dR, event.weight()); 00079 } 00080 00081 break; // Exit the loop since we found the highest pT lepton already 00082 } 00083 } 00084 00085 00086 /// Normalise histograms etc., after the run 00087 void finalize() { 00088 scale(_hist_pho_et, crossSection() / sumOfWeights()); 00089 scale(_hist_pho_et_wide, crossSection() / sumOfWeights()); 00090 scale(_hist_pho_et_close, crossSection() / sumOfWeights()); 00091 scale(_hist_pho_et_lqt, crossSection() / sumOfWeights()); 00092 scale(_hist_pho_et_hqt, crossSection() / sumOfWeights()); 00093 scale(_hist_pho_dr, crossSection() / sumOfWeights()); 00094 scale(_hist_pho_dr_lqt, crossSection() / sumOfWeights()); 00095 scale(_hist_pho_dr_hqt, crossSection() / sumOfWeights()); 00096 } 00097 00098 00099 private: 00100 00101 Histo1DPtr _hist_pho_et; 00102 Histo1DPtr _hist_pho_et_wide, _hist_pho_et_close; 00103 Histo1DPtr _hist_pho_et_lqt, _hist_pho_et_hqt; 00104 Histo1DPtr _hist_pho_dr; 00105 Histo1DPtr _hist_pho_dr_lqt, _hist_pho_dr_hqt; 00106 00107 }; 00108 00109 00110 DECLARE_RIVET_PLUGIN(CMS_2015_I1346843); 00111 00112 } Generated on Tue Dec 13 2016 16:32:37 for The Rivet MC analysis system by ![]() |