rivet is hosted by Hepforge, IPPP Durham
D0_2004_S5992206.cc
Go to the documentation of this file.
00001 // -*- C++ -*-
00002 #include "Rivet/Analysis.hh"
00003 #include "Rivet/Projections/FastJets.hh"
00004 #include "Rivet/Projections/VetoedFinalState.hh"
00005 #include "Rivet/Projections/VisibleFinalState.hh"
00006 #include "Rivet/Projections/MissingMomentum.hh"
00007 
00008 namespace Rivet {
00009 
00010 
00011   /* @brief D0 Run II angular correlations in di-jet events
00012    * @author Lars Sonnenschein
00013    *
00014    * Measurement of angular correlations in di-jet events.
00015    *
00016    * @par Run conditions
00017    *
00018    * @arg \f$ \sqrt{s} = \f$ 1960 GeV
00019    * @arg Run with generic QCD events.
00020    * @arg Several \f$ p_\perp^\text{min} \f$ cutoffs are probably required to fill the histograms:
00021    *   @arg \f$ p_\perp^\text{min} = \f$ 50, 75, 100, 150 GeV for the four pT ranges respecively
00022    *
00023    */
00024   class D0_2004_S5992206 : public Analysis {
00025 
00026   public:
00027 
00028     /// @name Constructors etc.
00029     //@{
00030 
00031     /// Constructor.
00032     D0_2004_S5992206()
00033       : Analysis("D0_2004_S5992206")
00034     {  }
00035 
00036     //@}
00037 
00038 
00039     /// @name Analysis methods
00040     //@{
00041 
00042     void init() {
00043       // Final state for jets, mET etc.
00044       const FinalState fs(-3.0, 3.0);
00045       addProjection(fs, "FS");
00046       // Veto neutrinos, and muons with pT above 1.0 GeV
00047       VetoedFinalState vfs(fs);
00048       vfs.vetoNeutrinos();
00049       vfs.addVetoPairDetail(PID::MUON, 1.0*GeV, MAXDOUBLE);
00050       addProjection(vfs, "VFS");
00051       addProjection(FastJets(vfs, FastJets::D0ILCONE, 0.7), "Jets");
00052       addProjection(MissingMomentum(vfs), "CalMET");
00053 
00054       // Book histograms
00055       _histJetAzimuth_pTmax75_100  = bookHisto1D(1, 2, 1);
00056       _histJetAzimuth_pTmax100_130 = bookHisto1D(2, 2, 1);
00057       _histJetAzimuth_pTmax130_180 = bookHisto1D(3, 2, 1);
00058       _histJetAzimuth_pTmax180_    = bookHisto1D(4, 2, 1);
00059     }
00060 
00061 
00062     /// Do the analysis
00063     void analyze(const Event& event) {
00064 
00065       // Analyse and print some info
00066       const JetAlg& jetpro = applyProjection<JetAlg>(event, "Jets");
00067       MSG_DEBUG("Jet multiplicity before any pT cut = " << jetpro.size());
00068 
00069       const Jets jets  = jetpro.jetsByPt(40.0*GeV);
00070       if (jets.size() >= 2) {
00071         MSG_DEBUG("Jet multiplicity after pT > 40 GeV cut = " << jets.size());
00072       } else {
00073         vetoEvent;
00074       }
00075       const double rap1 = jets[0].rapidity();
00076       const double rap2 = jets[1].rapidity();
00077       if (fabs(rap1) > 0.5 || fabs(rap2) > 0.5) {
00078         vetoEvent;
00079       }
00080       MSG_DEBUG("Jet eta and pT requirements fulfilled");
00081       const double pT1 = jets[0].pT();
00082 
00083       const MissingMomentum& caloMissEt = applyProjection<MissingMomentum>(event, "CalMET");
00084       MSG_DEBUG("Missing vector Et = " << caloMissEt.vectorEt()/GeV << " GeV");
00085       if (caloMissEt.vectorEt().mod() > 0.7*pT1) {
00086         MSG_DEBUG("Vetoing event with too much missing ET: "
00087                   << caloMissEt.vectorEt()/GeV << " GeV > "
00088                   << 0.7*pT1/GeV << " GeV");
00089         vetoEvent;
00090       }
00091 
00092       if (pT1/GeV >= 75.0) {
00093         const double weight = event.weight();
00094         const double dphi = deltaPhi(jets[0].momentum().phi(), jets[1].momentum().phi());
00095         if (inRange(pT1/GeV, 75.0, 100.0)) {
00096           _histJetAzimuth_pTmax75_100->fill(dphi, weight);
00097         } else if (inRange(pT1/GeV, 100.0, 130.0)) {
00098           _histJetAzimuth_pTmax100_130->fill(dphi, weight);
00099         } else if (inRange(pT1/GeV, 130.0, 180.0)) {
00100           _histJetAzimuth_pTmax130_180->fill(dphi, weight);
00101         } else if (pT1/GeV > 180.0) {
00102           _histJetAzimuth_pTmax180_->fill(dphi, weight);
00103         }
00104       }
00105 
00106     }
00107 
00108 
00109     // Finalize
00110     void finalize() {
00111       // Normalize histograms to unit area
00112       normalize(_histJetAzimuth_pTmax75_100);
00113       normalize(_histJetAzimuth_pTmax100_130);
00114       normalize(_histJetAzimuth_pTmax130_180);
00115       normalize(_histJetAzimuth_pTmax180_);
00116     }
00117 
00118     //@}
00119 
00120 
00121   private:
00122 
00123     /// @name Histograms
00124     //@{
00125     Histo1DPtr _histJetAzimuth_pTmax75_100;
00126     Histo1DPtr _histJetAzimuth_pTmax100_130;
00127     Histo1DPtr _histJetAzimuth_pTmax130_180;
00128     Histo1DPtr _histJetAzimuth_pTmax180_;
00129     //@}
00130 
00131   };
00132 
00133 
00134 
00135   // The hook for the plugin system
00136   DECLARE_RIVET_PLUGIN(D0_2004_S5992206);
00137 
00138 }