ATLAS_2014_I1282441.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/UnstableFinalState.hh" 00005 #include "Rivet/Projections/IdentifiedFinalState.hh" 00006 00007 namespace Rivet { 00008 00009 00010 class ATLAS_2014_I1282441 : public Analysis { 00011 public: 00012 00013 ATLAS_2014_I1282441() 00014 : Analysis("ATLAS_2014_I1282441") 00015 { } 00016 00017 00018 void init() { 00019 00020 // Use a large eta range such that we can discriminate on y 00021 /// @todo Convert to use a y-cut directly 00022 UnstableFinalState ufs(Cuts::abseta < 10 && Cuts::pT > 500*MeV); 00023 IdentifiedFinalState phis(ufs); 00024 phis.acceptIdPair(PID::PHI); 00025 addProjection(phis, "Phis"); 00026 00027 IdentifiedFinalState kpms(Cuts::abseta < 2.0 && Cuts::pT > 230*MeV); 00028 kpms.acceptIdPair(PID::KPLUS); 00029 addProjection(kpms, "Kpms"); 00030 00031 _h_phi_rapidity = bookHisto1D(1,1,1); 00032 _h_phi_pT = bookHisto1D(2,1,1); 00033 } 00034 00035 00036 void analyze(const Event& event) { 00037 const Particles& ks_all = applyProjection<IdentifiedFinalState>(event, "Kpms").particles(); 00038 Particles kp, km; 00039 foreach (const Particle& p, ks_all) { 00040 if (!p.hasAncestor(PID::PHI)) { MSG_DEBUG("-- K not from phi."); continue; } 00041 if (p.p3().mod() > 800*MeV) { MSG_DEBUG("-- p K too high."); continue; } 00042 (p.charge() > 0 ? kp : km).push_back(p); 00043 } 00044 00045 const Particles& phis_all = applyProjection<FinalState>(event, "Phis").particles(); 00046 Particles phis; 00047 /// @todo Use particles(Cuts&) instead 00048 foreach (const Particle& p, phis_all) { 00049 if ( p.absrap() > 0.8 ) { MSG_DEBUG("-- phi Y too high."); continue; } 00050 if ( p.pT() > 1.2*GeV ) { MSG_DEBUG("-- phi pT too high."); continue; } 00051 phis.push_back(p); 00052 } 00053 00054 // Find Phi -> KK decays through matching of the kinematics 00055 if (!kp.empty() && !km.empty() && !phis.empty()) { 00056 const double w = event.weight(); 00057 MSG_DEBUG("Numbers of particles: #phi=" << phis.size() << ", #K+=" << kp.size() << ", #K-=" << km.size()); 00058 for (size_t ip = 0; ip < phis.size(); ++ip) { 00059 const Particle& phi = phis[ip]; 00060 for (size_t ikm = 0; ikm < km.size(); ++ikm) { 00061 for (size_t ikp = 0; ikp < kp.size(); ++ikp) { 00062 const FourMomentum mom = kp[ikp].mom() + km[ikm].mom(); 00063 if ( fuzzyEquals(mom.mass(), phi.mass(), 1e-5) ) { 00064 MSG_DEBUG("Accepted combinatoric: phi#:" << ip << " K+#:" << ikp << " K-#:" << ikm); 00065 _h_phi_rapidity->fill(phi.absrap(), w); 00066 _h_phi_pT->fill(phi.pT()/MeV, w); 00067 } else { 00068 MSG_DEBUG("Rejected combinatoric: phi#:" << ip << " K+#:" << ikp << " K-#:" << ikm << " Mass difference is " << mom.mass()-phi.mass()); 00069 } 00070 } 00071 } 00072 } 00073 } 00074 00075 } 00076 00077 00078 void finalize() { 00079 scale(_h_phi_rapidity, crossSection()/microbarn/sumOfWeights()); 00080 scale(_h_phi_pT, crossSection()/microbarn/sumOfWeights()); 00081 } 00082 00083 00084 private: 00085 00086 Histo1DPtr _h_phi_rapidity, _h_phi_pT; 00087 00088 }; 00089 00090 00091 00092 DECLARE_RIVET_PLUGIN(ATLAS_2014_I1282441); 00093 00094 } Generated on Tue Mar 24 2015 17:35:25 for The Rivet MC analysis system by ![]() |