D0_2004_S5992206.cc

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