rivet is hosted by Hepforge, IPPP Durham
ATLAS_2011_I954993.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/WFinder.hh"
00005 #include "Rivet/Projections/VetoedFinalState.hh"
00006 
00007 namespace Rivet {
00008 
00009 
00010   /// @brief MC validation analysis for WZ events
00011   class ATLAS_2011_I954993 : public Analysis {
00012   public:
00013 
00014     /// Default constructor
00015     ATLAS_2011_I954993()
00016       : Analysis("ATLAS_2011_I954993")
00017     {
00018       setNeedsCrossSection(true);
00019     }
00020 
00021 
00022     /// @name Analysis methods
00023     //@{
00024 
00025     /// Book histograms
00026     void init() {
00027 
00028       //// ZFinder: etaMin,etaMax,pTmin,pid,m2_min,m2_max,dRmax,clusterPhotons,excludePhotonsFromRFS
00029       ZFinder zfinder_e( -2.5, 2.5, 15.0*GeV, PID::ELECTRON, 81.1876*GeV, 101.1876*GeV, 0.1, true, true);
00030       addProjection(zfinder_e, "ZFinder_e");
00031       ZFinder zfinder_mu(-2.5, 2.5, 15.0*GeV, PID::MUON, 81.1876*GeV, 101.1876*GeV, 0.1, true, true);
00032       addProjection(zfinder_mu, "ZFinder_mu");
00033 
00034       //// WFinder: etaRanges,pTmin,pid,m2_min,m2_max,missingET,dRmax
00035       VetoedFinalState weinput;
00036       weinput.addVetoOnThisFinalState(zfinder_e);
00037       WFinder wfinder_e(weinput, -2.5, 2.5, 15.0*GeV, PID::ELECTRON, 0.0*GeV, 1000.0*GeV, 25.0*GeV, 0.1);
00038       addProjection(wfinder_e, "WFinder_e");
00039 
00040       VetoedFinalState wminput;
00041       wminput.addVetoOnThisFinalState(zfinder_mu);
00042       WFinder wfinder_mu(wminput,-2.5, 2.5, 15.0*GeV, PID::MUON, 0.0*GeV, 1000.0*GeV, 25.0*GeV, 0.1);
00043       addProjection(wfinder_mu, "WFinder_mu");
00044 
00045       //// Histograms
00046       _h_fiducial = bookHisto1D(1,1,1);
00047 
00048     }
00049 
00050     /// Do the analysis
00051     void analyze(const Event & e) {
00052 
00053       const double weight = e.weight();
00054 
00055       const ZFinder& zfinder_e = applyProjection<ZFinder>(e, "ZFinder_e");
00056       const ZFinder& zfinder_mu = applyProjection<ZFinder>(e, "ZFinder_mu");
00057       const WFinder& wfinder_e = applyProjection<WFinder>(e, "WFinder_e");
00058       const WFinder& wfinder_mu = applyProjection<WFinder>(e, "WFinder_mu");
00059 
00060 
00061       // Looking for a Z
00062       if (zfinder_e.bosons().size()!= 1 && zfinder_mu.bosons().size() != 1) {
00063         MSG_DEBUG("No Z boson found, vetoing event");
00064         vetoEvent;
00065       }
00066 
00067       // Looking for a W
00068       if (wfinder_e.bosons().size()!= 1 && wfinder_mu.bosons().size() != 1) {
00069         MSG_DEBUG("No W boson found, vetoing event");
00070         vetoEvent;
00071       }
00072 
00073       // If we find a W...
00074       FourMomentum wmom_e(0.0,0.0,0.0,0.0), We(0.0,0.0,0.0,0.0), Wenu(0.0,0.0,0.0,0.0);
00075       FourMomentum wmom_mu(0.0,0.0,0.0,0.0), Wmu(0.0,0.0,0.0,0.0), Wmunu(0.0,0.0,0.0,0.0);
00076       if(wfinder_e.bosons().size()== 1){
00077         wmom_e = wfinder_e.bosons().front().momentum();
00078         We = wfinder_e.constituentLeptons()[0].momentum();
00079         Wenu = wfinder_e.constituentNeutrinos()[0].momentum();
00080       }
00081       if(wfinder_mu.bosons().size()== 1){
00082         wmom_mu = wfinder_mu.bosons().front().momentum();
00083         Wmu = wfinder_mu.constituentLeptons()[0].momentum();
00084         Wmunu = wfinder_mu.constituentNeutrinos()[0].momentum();
00085       }
00086 
00087       // Applying remaining fiducial phase space requirements
00088       double mT = 0;
00089       if(wfinder_e.bosons().size() == 1){
00090         mT = sqrt(2*We.pT()*Wenu.Et()*(1.0-cos(We.phi()-Wenu.phi())));
00091         if (Wenu.pT()/GeV < 25.0 || We.pT()/GeV < 20.0 || mT/GeV < 20.0) {
00092           MSG_DEBUG(" Wnu.pT()/GeV:" << Wenu.pT()/GeV<<" Wl.pT()/GeV:" << We.pT()/GeV<<" mT/GeV:" << mT/GeV);
00093           vetoEvent;
00094         }
00095       }
00096       else if(wfinder_mu.bosons().size() == 1){
00097         mT = sqrt(2*Wmu.pT()*Wmunu.Et()*(1.0-cos(Wmu.phi()-Wmunu.phi())));
00098         if (Wmunu.pT()/GeV < 25.0 || Wmu.pT()/GeV < 20.0 || mT/GeV < 20.0) {
00099           MSG_DEBUG(" Wnu.pT()/GeV:" << Wmunu.pT()/GeV<<" Wl.pT()/GeV:" << Wmu.pT()/GeV<<" mT/GeV:" << mT/GeV);
00100           vetoEvent;
00101         }
00102       }
00103       else{
00104         MSG_DEBUG("No W boson found, can't make a transverse mass, vetoing event");
00105         vetoEvent;
00106       }
00107 
00108       _h_fiducial->fill(7000.0, weight);
00109 
00110     }
00111 
00112 
00113     /// Finalize
00114     void finalize() {
00115 
00116       scale(_h_fiducial, crossSection()/femtobarn/sumOfWeights());
00117 
00118     }
00119 
00120     //@}
00121 
00122 
00123   private:
00124 
00125     /// @name Histograms
00126     //@{
00127     Histo1DPtr _h_fiducial;
00128 
00129     //@}
00130 
00131   };
00132 
00133 
00134   //// The hook for the plugin system
00135   DECLARE_RIVET_PLUGIN(ATLAS_2011_I954993);
00136 
00137 }