CMS_2010_S8547297.cc
Go to the documentation of this file.
00001 // -*- C++ -*- 00002 #include "Rivet/Analysis.hh" 00003 #include "Rivet/RivetYODA.hh" 00004 #include "Rivet/Projections/ChargedFinalState.hh" 00005 #include "Rivet/Tools/ParticleIdUtils.hh" 00006 00007 namespace Rivet { 00008 00009 00010 class CMS_2010_S8547297 : public Analysis { 00011 public: 00012 00013 CMS_2010_S8547297() : Analysis("CMS_2010_S8547297") {} 00014 00015 00016 void init() { 00017 ChargedFinalState cfs(-2.5, 2.5, 0.0*GeV); 00018 addProjection(cfs, "CFS"); 00019 00020 if (fuzzyEquals(sqrtS()/GeV, 900)) { 00021 for (int d=1; d<=3; d++) { 00022 for (int y=1; y<=4; y++) { 00023 _h_dNch_dpT.push_back(bookHisto1D(d, 1, y)); 00024 } 00025 } 00026 _h_dNch_dpT_all = bookHisto1D(7, 1, 1); 00027 _h_dNch_dEta = bookHisto1D(8, 1, 1); 00028 } else if (fuzzyEquals(sqrtS()/GeV, 2360)) { 00029 for (int d=4; d<=6; d++) { 00030 for (int y=1; y<=4; y++) { 00031 _h_dNch_dpT.push_back(bookHisto1D(d, 1, y)); 00032 } 00033 } 00034 _h_dNch_dpT_all = bookHisto1D(7, 1, 2); 00035 _h_dNch_dEta = bookHisto1D(8, 1, 2); 00036 } 00037 } 00038 00039 00040 void analyze(const Event& event) { 00041 const double weight = event.weight(); 00042 00043 //charged particles 00044 const ChargedFinalState& charged = applyProjection<ChargedFinalState>(event, "CFS"); 00045 00046 foreach (const Particle& p, charged.particles()) { 00047 //selecting only charged hadrons 00048 if (! PID::isHadron(p.pdgId())) continue; 00049 00050 const double pT = p.momentum().pT(); 00051 const double eta = p.momentum().eta(); 00052 00053 // The data is actually a duplicated folded distribution. This should mimic it. 00054 _h_dNch_dEta->fill(eta, 0.5*weight); 00055 _h_dNch_dEta->fill(-eta, 0.5*weight); 00056 if (fabs(eta) < 2.4 && pT > 0.1*GeV) { 00057 if (pT < 4.0*GeV) { 00058 _h_dNch_dpT_all->fill(pT/GeV, weight/(pT/GeV)); 00059 if (pT < 2.0*GeV) { 00060 int ietabin = int(fabs(eta)/0.2); 00061 _h_dNch_dpT[ietabin]->fill(pT/GeV, weight); 00062 } 00063 } 00064 } 00065 } 00066 } 00067 00068 00069 void finalize() { 00070 const double normfac = 1.0/sumOfWeights(); // Normalizing to unit eta is automatic 00071 // The pT distributions in bins of eta must be normalized to unit eta. This is a factor of 2 00072 // for the |eta| times 0.2 (eta range). 00073 // The pT distributions over all eta are normalized to unit eta (2.0*2.4) and by 1/2*pi*pT. 00074 // The 1/pT part is taken care of in the filling. The 1/2pi is taken care of here. 00075 const double normpT = normfac/(2.0*0.2); 00076 const double normpTall = normfac/(2.0*M_PI*2.0*2.4); 00077 00078 for (size_t ietabin=0; ietabin < _h_dNch_dpT.size(); ietabin++){ 00079 scale(_h_dNch_dpT[ietabin], normpT); 00080 } 00081 scale(_h_dNch_dpT_all, normpTall); 00082 scale(_h_dNch_dEta, normfac); 00083 } 00084 00085 00086 private: 00087 00088 std::vector<Histo1DPtr> _h_dNch_dpT; 00089 Histo1DPtr _h_dNch_dpT_all; 00090 Histo1DPtr _h_dNch_dEta; 00091 00092 }; 00093 00094 00095 00096 // The hook for the plugin system 00097 DECLARE_RIVET_PLUGIN(CMS_2010_S8547297); 00098 00099 } Generated on Fri Dec 21 2012 15:03:40 for The Rivet MC analysis system by ![]() |