00001
00002 #include "Rivet/Analysis.hh"
00003 #include "Rivet/RivetAIDA.hh"
00004 #include "Rivet/Tools/Logging.hh"
00005 #include "Rivet/Projections/FinalState.hh"
00006 #include "Rivet/Projections/ChargedFinalState.hh"
00007 #include "Rivet/Projections/WFinder.hh"
00008 #include "Rivet/Tools/ParticleIdUtils.hh"
00009
00010 namespace Rivet {
00011
00012
00013
00014 class CDF_1991_S2313472 : public Analysis {
00015 public:
00016
00017
00018
00019
00020
00021 CDF_1991_S2313472()
00022 : Analysis("CDF_1991_S2313472")
00023 {
00024
00025 setBeams(PROTON, ANTIPROTON);
00026
00027
00028 setNeedsCrossSection(false);
00029 }
00030
00031
00032
00033
00034 public:
00035
00036
00037
00038
00039
00040 void init() {
00041 WFinder wfe(-5, 5, 0.0*GeV, ELECTRON, 60.0*GeV, 100.0*GeV, 20.0*GeV, 0.2);
00042 addProjection(wfe, "WFe");
00043
00044
00045 _hist_wpt = bookHistogram1D(1, 1, 1);
00046 }
00047
00048
00049
00050 void analyze(const Event& event) {
00051 const double weight = event.weight();
00052 const WFinder& wf = applyProjection<WFinder>(event, "WFe");
00053 if (wf.size() == 0) {
00054 getLog() << Log::DEBUG << "No W candidates found: vetoing" << endl;
00055 vetoEvent;
00056 }
00057
00058
00059
00060 FourMomentum p_e;
00061 int chg_e = 0;
00062
00063 foreach (const Particle& l, wf.constituentsFinalState().particles()) {
00064 const FourMomentum pl = l.momentum();
00065 if (abs(l.pdgId()) == ELECTRON) {
00066 chg_e = PID::threeCharge(l.pdgId());
00067 p_e = pl;
00068 const double eta_e = fabs(p_e.pseudorapidity());
00069 if ( (pl.Et()/GeV < 20.0) || (pl.pT()/GeV < 6.0) || (eta_e > 1.1) ) {
00070 getLog() << Log::DEBUG << l.pdgId() << " ET,pT,eta: " << pl.Et()/GeV << "," << pl.pT()/GeV << "," << eta_e << " fails electron cut" << endl;
00071 vetoEvent;
00072 }
00073 }
00074 else if (abs(l.pdgId()) == NU_E) {
00075 FourMomentum p_nu = l.momentum();
00076 if (p_nu.Et()/GeV < 20.0) {
00077 getLog() << Log::DEBUG << l.pdgId() << " ET(miss): " << p_nu.Et() << "fails ETmiss cut" << endl;
00078 vetoEvent;
00079 }
00080 }
00081 }
00082 assert(chg_e != 0);
00083
00084 FourMomentum pW = wf.particles()[0].momentum();
00085 getLog() << Log::DEBUG << "Dilepton mass = " << pW.mass()/GeV << " GeV" << endl;
00086 getLog() << Log::DEBUG << "Dilepton pT = " << pW.pT()/GeV << " GeV" << endl;
00087 _hist_wpt->fill(pW.pT()/GeV, weight);
00088 }
00089
00090
00091
00092 void finalize() {
00093
00094
00095 }
00096
00097
00098
00099
00100 private:
00101
00102
00103 AIDA::IHistogram1D *_hist_wpt;
00104
00105 };
00106
00107
00108
00109
00110 AnalysisBuilder<CDF_1991_S2313472> plugin_CDF_1991_S2313472;
00111
00112
00113 }