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