00001
00002 #include "Rivet/Analyses/MC_JetAnalysis.hh"
00003 #include "Rivet/Projections/WFinder.hh"
00004 #include "Rivet/Projections/FastJets.hh"
00005 #include "Rivet/Projections/VetoedFinalState.hh"
00006 #include "Rivet/Tools/Logging.hh"
00007 #include "Rivet/Tools/ParticleIdUtils.hh"
00008 #include "Rivet/RivetAIDA.hh"
00009
00010 namespace Rivet {
00011
00012
00013 class MC_WWJETS : public MC_JetAnalysis {
00014 public:
00015
00016
00017 MC_WWJETS()
00018 : MC_JetAnalysis("MC_WWJETS", 4, "Jets")
00019 {
00020 setNeedsCrossSection(true);
00021 }
00022
00023
00024
00025
00026
00027
00028 void init() {
00029 WFinder wenufinder(-3.5, 3.5, 25.0*GeV, ELECTRON, 60.0*GeV, 100.0*GeV, 25.0*GeV, 0.2);
00030 addProjection(wenufinder, "WenuFinder");
00031 WFinder wmnufinder(-3.5, 3.5, 25.0*GeV, MUON, 60.0*GeV, 100.0*GeV, 25.0*GeV, 0.2);
00032 addProjection(wmnufinder, "WmnuFinder");
00033 VetoedFinalState jetinput;
00034 jetinput
00035 .addVetoOnThisFinalState(wenufinder.constituentsFinalState())
00036 .addVetoOnThisFinalState(wenufinder.clusteredPhotonsFinalState())
00037 .addVetoOnThisFinalState(wmnufinder.constituentsFinalState())
00038 .addVetoOnThisFinalState(wmnufinder.clusteredPhotonsFinalState());
00039 FastJets jetpro(jetinput, FastJets::KT, 0.7);
00040 addProjection(jetpro, "Jets");
00041
00042
00043 _h_WW_pT = bookHistogram1D("WW_pT", logBinEdges(100, 1.0, 0.5*sqrtS()));
00044 _h_WW_pT_peak = bookHistogram1D("WW_pT_peak", 25, 0.0, 25.0);
00045 _h_WW_eta = bookHistogram1D("WW_eta", 40, -7.0, 7.0);
00046 _h_WW_phi = bookHistogram1D("WW_phi", 25, 0.0, TWOPI);
00047 _h_WW_m = bookHistogram1D("WW_m", logBinEdges(100, 150.0, 180.0+0.25*sqrtS()));
00048
00049
00050 _h_WW_dphi = bookHistogram1D("WW_dphi", 25, 0.0, PI);
00051 _h_WW_deta = bookHistogram1D("WW_deta", 25, -7.0, 7.0);
00052 _h_WW_dR = bookHistogram1D("WW_dR", 25, 0.5, 7.0);
00053 _h_WW_dpT = bookHistogram1D("WW_dpT", logBinEdges(100, 1.0, 0.5*sqrtS()));
00054 _h_WW_costheta_planes = bookHistogram1D("WW_costheta_planes", 25, -1.0, 1.0);
00055
00056
00057
00058
00059 _h_W_pT = bookHistogram1D("W_pT", logBinEdges(100, 10.0, 0.25*sqrtS()));
00060 _h_W_eta = bookHistogram1D("W_eta", 70, -7.0, 7.0);
00061
00062
00063 _h_Wl_pT = bookHistogram1D("Wl_pT", logBinEdges(100, 30.0, 0.1
00064 *sqrtS()));
00065 _h_Wl_eta = bookHistogram1D("Wl_eta", 40, -3.5, 3.5);
00066
00067
00068 _h_WeWm_dphi = bookHistogram1D("WeWm_dphi", 25, 0.0, PI);
00069 _h_WeWm_deta = bookHistogram1D("WeWm_deta", 25, -5.0, 5.0);
00070 _h_WeWm_dR = bookHistogram1D("WeWm_dR", 25, 0.5, 5.0);
00071 _h_WeWm_m = bookHistogram1D("WeWm_m", 100, 0.0, 300.0);
00072
00073
00074 _h_WW_jet1_deta = bookHistogram1D("WW_jet1_deta", 70, -7.0, 7.0);
00075 _h_WW_jet1_dR = bookHistogram1D("WW_jet1_dR", 25, 1.5, 7.0);
00076 _h_We_jet1_dR = bookHistogram1D("We_jet1_dR", 25, 0.0, 7.0);
00077
00078
00079 _h_HT = bookHistogram1D("HT", logBinEdges(100, 100.0, 0.5*sqrtS()));
00080 _h_jets_dphi_12 = bookHistogram1D("jets_dphi_12", 25.0, 0.0, PI);
00081 _h_jets_m_12 = bookHistogram1D("jets_m_12", logBinEdges(100, 1.0, 0.25*sqrtS()));
00082
00083 MC_JetAnalysis::init();
00084 }
00085
00086
00087
00088
00089 void analyze(const Event & e) {
00090 const double weight = e.weight();
00091
00092 const WFinder& wenufinder = applyProjection<WFinder>(e, "WenuFinder");
00093 if (wenufinder.particles().size()!=1) {
00094 vetoEvent;
00095 }
00096
00097 const WFinder& wmnufinder = applyProjection<WFinder>(e, "WmnuFinder");
00098 if (wmnufinder.particles().size()!=1) {
00099 vetoEvent;
00100 }
00101
00102 FourMomentum wenu(wenufinder.particles()[0].momentum());
00103 FourMomentum wmnu(wmnufinder.particles()[0].momentum());
00104 FourMomentum ww(wenu+wmnu);
00105
00106 FourMomentum ep(0.0,0.0,0.0,0.0), enu(0.0,0.0,0.0,0.0);
00107 if (PID::threeCharge(wenufinder.constituentsFinalState().particles()[0])>0.0) {
00108 ep=wenufinder.constituentsFinalState().particles()[0].momentum();
00109 enu=wenufinder.constituentsFinalState().particles()[1].momentum();
00110 }
00111 else {
00112 ep=wenufinder.constituentsFinalState().particles()[1].momentum();
00113 enu=wenufinder.constituentsFinalState().particles()[0].momentum();
00114 }
00115 FourMomentum mnu(0.0,0.0,0.0,0.0), mm(0.0,0.0,0.0,0.0);
00116 if (PID::threeCharge(wmnufinder.constituentsFinalState().particles()[0])==0.0) {
00117 mnu=wmnufinder.constituentsFinalState().particles()[0].momentum();
00118 mm=wmnufinder.constituentsFinalState().particles()[1].momentum();
00119 }
00120 else {
00121 mnu=wmnufinder.constituentsFinalState().particles()[1].momentum();
00122 mm=wmnufinder.constituentsFinalState().particles()[0].momentum();
00123 }
00124
00125 _h_WW_pT->fill(ww.pT(),weight);
00126 _h_WW_pT_peak->fill(ww.pT(),weight);
00127 _h_WW_eta->fill(ww.eta(),weight);
00128 _h_WW_phi->fill(ww.azimuthalAngle(),weight);
00129 double mww2=ww.mass2();
00130 if (mww2>0.0) _h_WW_m->fill(sqrt(mww2), weight);
00131
00132 _h_WW_dphi->fill(mapAngle0ToPi(wenu.phi()-wmnu.phi()), weight);
00133 _h_WW_deta->fill(wenu.eta()-wmnu.eta(), weight);
00134 _h_WW_dR->fill(deltaR(wenu,wmnu), weight);
00135 _h_WW_dpT->fill(fabs(wenu.pT()-wmnu.pT()), weight);
00136
00137 Vector3 crossWenu = ep.vector3().cross(enu.vector3());
00138 Vector3 crossWmnu = mm.vector3().cross(mnu.vector3());
00139 double costheta = crossWenu.dot(crossWmnu)/crossWenu.mod()/crossWmnu.mod();
00140 _h_WW_costheta_planes->fill(costheta, weight);
00141
00142 _h_W_pT->fill(wenu.pT(),weight);
00143 _h_W_pT->fill(wmnu.pT(),weight);
00144 _h_W_eta->fill(wenu.eta(),weight);
00145 _h_W_eta->fill(wmnu.eta(),weight);
00146
00147 _h_Wl_pT->fill(ep.pT(), weight);
00148 _h_Wl_pT->fill(mm.pT(), weight);
00149 _h_Wl_eta->fill(ep.eta(), weight);
00150 _h_Wl_eta->fill(mm.eta(), weight);
00151
00152 _h_WeWm_dphi->fill(mapAngle0ToPi(ep.phi()-mm.phi()), weight);
00153 _h_WeWm_deta->fill(ep.eta()-mm.eta(), weight);
00154 _h_WeWm_dR->fill(deltaR(ep,mm), weight);
00155 double m2=FourMomentum(ep+mm).mass2();
00156 if (m2 < 0) m2 = 0.0;
00157 _h_WeWm_m->fill(sqrt(m2), weight);
00158
00159 const FastJets& jetpro = applyProjection<FastJets>(e, "Jets");
00160 const Jets& jets = jetpro.jetsByPt(20.0*GeV);
00161 if (jets.size() > 0) {
00162 _h_WW_jet1_deta->fill(ww.eta()-jets[0].momentum().eta(), weight);
00163 _h_WW_jet1_dR->fill(deltaR(ww, jets[0].momentum()), weight);
00164 _h_We_jet1_dR->fill(deltaR(ep, jets[0].momentum()), weight);
00165 }
00166
00167 double HT=ep.pT()+mm.pT()+FourMomentum(enu+mnu).pT();
00168 foreach (const Jet& jet, jets) {
00169 HT+=jet.momentum().pT();
00170 }
00171 foreach (const Particle& p, wenufinder.clusteredPhotonsFinalState().particles()) {
00172 HT+=p.momentum().pT();
00173 }
00174 foreach (const Particle& p, wmnufinder.clusteredPhotonsFinalState().particles()) {
00175 HT+=p.momentum().pT();
00176 }
00177 if (HT>0.0) _h_HT->fill(HT, weight);
00178
00179 if (jets.size()>1) {
00180 FourMomentum jet1(jets[0].momentum());
00181 FourMomentum jet2(jets[1].momentum());
00182 _h_jets_dphi_12->fill(mapAngle0ToPi(jet1.phi()-jet2.phi()), weight);
00183 _h_jets_m_12->fill(FourMomentum(jet1+jet2).mass(), weight);
00184 }
00185
00186 MC_JetAnalysis::analyze(e);
00187 }
00188
00189
00190
00191 void finalize() {
00192 double norm=crossSection()/sumOfWeights();
00193 scale(_h_WW_pT, norm);
00194 scale(_h_WW_pT_peak, norm);
00195 scale(_h_WW_eta, norm);
00196 scale(_h_WW_phi, norm);
00197 scale(_h_WW_m, norm);
00198 scale(_h_WW_dphi, norm);
00199 scale(_h_WW_deta, norm);
00200 scale(_h_WW_dR, norm);
00201 scale(_h_WW_dpT, norm);
00202 scale(_h_WW_costheta_planes, norm);
00203 scale(_h_W_pT, norm);
00204 scale(_h_W_eta, norm);
00205 scale(_h_Wl_pT, norm);
00206 scale(_h_Wl_eta, norm);
00207 scale(_h_WeWm_dphi, norm);
00208 scale(_h_WeWm_deta, norm);
00209 scale(_h_WeWm_dR, norm);
00210 scale(_h_WeWm_m, norm);
00211 scale(_h_WW_jet1_deta, norm);
00212 scale(_h_WW_jet1_dR, norm);
00213 scale(_h_We_jet1_dR, norm);
00214 scale(_h_jets_dphi_12, norm);
00215 scale(_h_jets_m_12, norm);
00216 scale(_h_HT, norm);
00217
00218 MC_JetAnalysis::finalize();
00219 }
00220
00221
00222
00223
00224 private:
00225
00226
00227
00228 AIDA::IHistogram1D * _h_WW_pT;
00229 AIDA::IHistogram1D * _h_WW_pT_peak;
00230 AIDA::IHistogram1D * _h_WW_eta;
00231 AIDA::IHistogram1D * _h_WW_phi;
00232 AIDA::IHistogram1D * _h_WW_m;
00233 AIDA::IHistogram1D * _h_WW_dphi;
00234 AIDA::IHistogram1D * _h_WW_deta;
00235 AIDA::IHistogram1D * _h_WW_dR;
00236 AIDA::IHistogram1D * _h_WW_dpT;
00237 AIDA::IHistogram1D * _h_WW_costheta_planes;
00238 AIDA::IHistogram1D * _h_W_pT;
00239 AIDA::IHistogram1D * _h_W_eta;
00240 AIDA::IHistogram1D * _h_Wl_pT;
00241 AIDA::IHistogram1D * _h_Wl_eta;
00242 AIDA::IHistogram1D * _h_WeWm_dphi;
00243 AIDA::IHistogram1D * _h_WeWm_deta;
00244 AIDA::IHistogram1D * _h_WeWm_dR;
00245 AIDA::IHistogram1D * _h_WeWm_m;
00246 AIDA::IHistogram1D * _h_WW_jet1_deta;
00247 AIDA::IHistogram1D * _h_WW_jet1_dR;
00248 AIDA::IHistogram1D * _h_We_jet1_dR;
00249 AIDA::IHistogram1D * _h_jets_dphi_12;
00250 AIDA::IHistogram1D * _h_jets_m_12;
00251 AIDA::IHistogram1D * _h_HT;
00252
00253
00254 };
00255
00256
00257
00258
00259 AnalysisBuilder<MC_WWJETS> plugin_MC_WWJETS;
00260
00261 }