MC_ZZINC.cc
Go to the documentation of this file.
00001 // -*- C++ -*- 00002 #include "Rivet/Analysis.hh" 00003 #include "Rivet/Projections/ZFinder.hh" 00004 #include "Rivet/Projections/VetoedFinalState.hh" 00005 00006 namespace Rivet { 00007 00008 00009 /// @brief MC validation analysis for Z[ee]Z[mumu] events 00010 class MC_ZZINC : public Analysis { 00011 public: 00012 00013 /// Default constructor 00014 MC_ZZINC() 00015 : Analysis("MC_ZZINC") 00016 { } 00017 00018 00019 /// @name Analysis methods 00020 //@{ 00021 00022 /// Book histograms 00023 void init() { 00024 Cut cut = Cuts::abseta < 3.5 && Cuts::pT > 25*GeV; 00025 ZFinder zeefinder(FinalState(), cut, PID::ELECTRON, 65*GeV, 115*GeV, 00026 0.2, ZFinder::CLUSTERNODECAY, ZFinder::TRACK); 00027 addProjection(zeefinder, "ZeeFinder"); 00028 00029 VetoedFinalState zmminput; 00030 zmminput.addVetoOnThisFinalState(zeefinder); 00031 ZFinder zmmfinder(zmminput, cut, PID::MUON, 65*GeV, 115*GeV, 00032 0.2, ZFinder::CLUSTERNODECAY, ZFinder::TRACK); 00033 addProjection(zmmfinder, "ZmmFinder"); 00034 00035 // Properties of the pair momentum 00036 _h_ZZ_pT = bookHisto1D("ZZ_pT", logspace(100, 1.0, 0.5*sqrtS()/GeV)); 00037 _h_ZZ_pT_peak = bookHisto1D("ZZ_pT_peak", 25, 0.0, 25.0); 00038 _h_ZZ_eta = bookHisto1D("ZZ_eta", 40, -7.0, 7.0); 00039 _h_ZZ_phi = bookHisto1D("ZZ_phi", 25, 0.0, TWOPI); 00040 _h_ZZ_m = bookHisto1D("ZZ_m", logspace(100, 150.0, 180.0 + 0.25*sqrtS()/GeV)); 00041 00042 // Correlations between the ZZ 00043 _h_ZZ_dphi = bookHisto1D("ZZ_dphi", 25, 0.0, PI); /// @todo non-linear? 00044 _h_ZZ_deta = bookHisto1D("ZZ_deta", 25, -7.0, 7.0); 00045 _h_ZZ_dR = bookHisto1D("ZZ_dR", 25, 0.5, 7.0); 00046 _h_ZZ_dpT = bookHisto1D("ZZ_dpT", logspace(100, 1.0, 0.5*sqrtS()/GeV)); 00047 _h_ZZ_costheta_planes = bookHisto1D("ZZ_costheta_planes", 25, -1.0, 1.0); 00048 00049 // Properties of the Z bosons 00050 _h_Z_pT = bookHisto1D("Z_pT", logspace(100, 10.0, 0.25*sqrtS()/GeV)); 00051 _h_Z_eta = bookHisto1D("Z_eta", 70, -7.0, 7.0); 00052 00053 // Properties of the leptons 00054 _h_Zl_pT = bookHisto1D("Zl_pT", logspace(100, 30.0, 0.1*sqrtS()/GeV)); 00055 _h_Zl_eta = bookHisto1D("Zl_eta", 40, -3.5, 3.5); 00056 00057 // Correlations between the opposite charge leptons 00058 _h_ZeZm_dphi = bookHisto1D("ZeZm_dphi", 25, 0.0, PI); 00059 _h_ZeZm_deta = bookHisto1D("ZeZm_deta", 25, -5.0, 5.0); 00060 _h_ZeZm_dR = bookHisto1D("ZeZm_dR", 25, 0.5, 5.0); 00061 _h_ZeZm_m = bookHisto1D("ZeZm_m", 100, 0.0, 300.0); 00062 00063 } 00064 00065 00066 00067 /// Do the analysis 00068 void analyze(const Event& e) { 00069 const ZFinder& zeefinder = applyProjection<ZFinder>(e, "ZeeFinder"); 00070 if (zeefinder.bosons().size() != 1) vetoEvent; 00071 const ZFinder& zmmfinder = applyProjection<ZFinder>(e, "ZmmFinder"); 00072 if (zmmfinder.bosons().size() != 1) vetoEvent; 00073 00074 // Z momenta 00075 const FourMomentum& zee = zeefinder.bosons()[0].momentum(); 00076 const FourMomentum& zmm = zmmfinder.bosons()[0].momentum(); 00077 const FourMomentum zz = zee + zmm; 00078 // Lepton momenta 00079 const FourMomentum& ep = zeefinder.constituents()[0].momentum(); 00080 const FourMomentum& em = zeefinder.constituents()[1].momentum(); 00081 const FourMomentum& mp = zmmfinder.constituents()[0].momentum(); 00082 const FourMomentum& mm = zmmfinder.constituents()[1].momentum(); 00083 00084 const double weight = e.weight(); 00085 _h_ZZ_pT->fill(zz.pT()/GeV, weight); 00086 _h_ZZ_pT_peak->fill(zz.pT()/GeV, weight); 00087 _h_ZZ_eta->fill(zz.eta(), weight); 00088 _h_ZZ_phi->fill(zz.phi(), weight); 00089 if (zz.mass2() > 0.0) ///< @todo Protection still needed? 00090 _h_ZZ_m->fill(zz.mass()/GeV, weight); 00091 00092 _h_ZZ_dphi->fill(deltaPhi(zee, zmm), weight); 00093 _h_ZZ_deta->fill(zee.eta()-zmm.eta(), weight); 00094 _h_ZZ_dR->fill(deltaR(zee,zmm), weight); 00095 _h_ZZ_dpT->fill(fabs(zee.pT()-zmm.pT()), weight); 00096 00097 const Vector3 crossZee = ep.p3().cross(em.p3()); 00098 const Vector3 crossZmm = mp.p3().cross(mm.p3()); 00099 const double costheta = crossZee.dot(crossZmm)/crossZee.mod()/crossZmm.mod(); 00100 _h_ZZ_costheta_planes->fill(costheta, weight); 00101 00102 _h_Z_pT->fill(zee.pT()/GeV, weight); 00103 _h_Z_pT->fill(zmm.pT()/GeV, weight); 00104 _h_Z_eta->fill(zee.eta(), weight); 00105 _h_Z_eta->fill(zmm.eta(), weight); 00106 00107 _h_Zl_pT->fill(ep.pT()/GeV, weight); 00108 _h_Zl_pT->fill(em.pT()/GeV, weight); 00109 _h_Zl_pT->fill(mp.pT()/GeV, weight); 00110 _h_Zl_pT->fill(mm.pT()/GeV, weight); 00111 _h_Zl_eta->fill(ep.eta(), weight); 00112 _h_Zl_eta->fill(em.eta(), weight); 00113 _h_Zl_eta->fill(mp.eta(), weight); 00114 _h_Zl_eta->fill(mm.eta(), weight); 00115 00116 _h_ZeZm_dphi->fill(deltaPhi(ep, mm), weight); 00117 _h_ZeZm_deta->fill(ep.eta()-mm.eta(), weight); 00118 _h_ZeZm_dR->fill(deltaR(ep, mm), weight); 00119 const FourMomentum epmm = ep + mm; 00120 const double m_epmm = (epmm.mass2() > 0) ? epmm.mass() : 0; ///< @todo Protection still needed? 00121 _h_ZeZm_m->fill(m_epmm/GeV, weight); 00122 } 00123 00124 00125 /// Finalize 00126 void finalize() { 00127 const double norm = crossSection()/picobarn; 00128 normalize(_h_ZZ_pT, norm); 00129 normalize(_h_ZZ_pT_peak, norm); 00130 normalize(_h_ZZ_eta, norm); 00131 normalize(_h_ZZ_phi, norm); 00132 normalize(_h_ZZ_m, norm); 00133 normalize(_h_ZZ_dphi, norm); 00134 normalize(_h_ZZ_deta, norm); 00135 normalize(_h_ZZ_dR, norm); 00136 normalize(_h_ZZ_dpT, norm); 00137 normalize(_h_ZZ_costheta_planes, norm); 00138 normalize(_h_Z_pT, norm); 00139 normalize(_h_Z_eta, norm); 00140 normalize(_h_Zl_pT, norm); 00141 normalize(_h_Zl_eta, norm); 00142 normalize(_h_ZeZm_dphi, norm); 00143 normalize(_h_ZeZm_deta, norm); 00144 normalize(_h_ZeZm_dR, norm); 00145 normalize(_h_ZeZm_m, norm); 00146 } 00147 00148 //@} 00149 00150 00151 private: 00152 00153 /// @name Histograms 00154 //@{ 00155 Histo1DPtr _h_ZZ_pT; 00156 Histo1DPtr _h_ZZ_pT_peak; 00157 Histo1DPtr _h_ZZ_eta; 00158 Histo1DPtr _h_ZZ_phi; 00159 Histo1DPtr _h_ZZ_m; 00160 Histo1DPtr _h_ZZ_dphi; 00161 Histo1DPtr _h_ZZ_deta; 00162 Histo1DPtr _h_ZZ_dR; 00163 Histo1DPtr _h_ZZ_dpT; 00164 Histo1DPtr _h_ZZ_costheta_planes; 00165 Histo1DPtr _h_Z_pT; 00166 Histo1DPtr _h_Z_eta; 00167 Histo1DPtr _h_Zl_pT; 00168 Histo1DPtr _h_Zl_eta; 00169 Histo1DPtr _h_ZeZm_dphi; 00170 Histo1DPtr _h_ZeZm_deta; 00171 Histo1DPtr _h_ZeZm_dR; 00172 Histo1DPtr _h_ZeZm_m; 00173 //@} 00174 00175 }; 00176 00177 00178 00179 // The hook for the plugin system 00180 DECLARE_RIVET_PLUGIN(MC_ZZINC); 00181 00182 } Generated on Tue Mar 24 2015 17:35:28 for The Rivet MC analysis system by ![]() |