CDF_2005_S6217184.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/JetShape.hh"
00009 
00010 namespace Rivet {
00011 
00012 
00013   /// @brief CDF Run II jet shape analysis
00014   /// @author Lars Sonnenschein
00015   /// @author Andy Buckley
00016   class CDF_2005_S6217184 : public Analysis {
00017   public:
00018 
00019     /// Constructor
00020     CDF_2005_S6217184()
00021       : Analysis("CDF_2005_S6217184")
00022     {
00023       setBeams(PROTON, ANTIPROTON);
00024     }
00025 
00026     /// @name Analysis methods
00027     //@{
00028 
00029     void init() {
00030       // Set up projections
00031       const FinalState fs(-2.0, 2.0);
00032       addProjection(fs, "FS");
00033       addProjection(FastJets(fs, FastJets::CDFMIDPOINT, 0.7), "Jets");
00034 
00035       // Veto (anti)neutrinos, and muons with pT above 1.0 GeV
00036       VisibleFinalState visfs(fs);
00037       VetoedFinalState vfs(visfs);
00038       vfs.addVetoPairDetail(MUON, 1.0*GeV, MAXDOUBLE);
00039       addProjection(JetShape(vfs, _jetaxes, 0.0, 0.7, 0.1, 0.3), "JetShape");
00040 
00041       // Specify pT bins
00042       _pTbins += 37.0, 45.0, 55.0, 63.0, 73.0, 84.0, 97.0, 112.0, 128.0,
00043         148.0, 166.0, 186.0, 208.0, 229.0, 250.0, 277.0, 304.0, 340.0, 380.0;
00044 
00045       /// Book histograms
00046       // 18 = 6x3 pT bins, one histogram each
00047       for (size_t i = 0; i < 6; ++i) {
00048         for (size_t j = 0; j < 3; ++j) {
00049           size_t k = i*3 + j;
00050           _profhistRho_pT[k] = bookProfile1D(i+1, 1, j+1);
00051           _profhistPsi_pT[k] = bookProfile1D(6+i+1, 1, j+1);
00052         }
00053       }
00054 
00055       _profhistPsi = bookProfile1D(13, 1, 1);
00056     }
00057 
00058 
00059 
00060     /// Do the analysis
00061     void analyze(const Event& event) {
00062 
00063       // Get jets and require at least one to pass pT and y cuts
00064       const Jets& jets = applyProjection<FastJets>(event, "Jets").jetsByPt();
00065       getLog() << Log::DEBUG << "Jet multiplicity before cuts = " << jets.size() << endl;
00066 
00067       // Determine the central jet axes
00068       _jetaxes.clear();
00069       foreach (const Jet& jt, jets) {
00070         const FourMomentum pj = jt.momentum();
00071         if (inRange(pj.pT()/GeV, 37.0, 380.0) && inRange(fabs(pj.rapidity()), 0.1, 0.7)) {
00072           _jetaxes.push_back(jt.momentum());
00073         }
00074       }
00075       if (_jetaxes.empty()) vetoEvent;
00076 
00077       // Calculate and histogram jet shapes
00078       const double weight = event.weight();
00079       const JetShape& js = applyProjection<JetShape>(event, "JetShape");
00080 
00081       /// @todo Use BinnedHistogram, for collections of histos each for a range of values of an extra variable
00082       for (size_t jind = 0; jind < _jetaxes.size(); ++jind) {
00083         for (size_t ipT = 0; ipT < 18; ++ipT) {
00084           if (_jetaxes[jind].pT() > _pTbins[ipT] && _jetaxes[jind].pT() <= _pTbins[ipT+1]) {
00085             for (size_t rbin = 0; rbin < js.numBins(); ++rbin) {
00086               const double rad_Rho = js.rMin() + (rbin+0.5)*js.interval();
00087               _profhistRho_pT[ipT]->fill(rad_Rho/0.7, (0.7/1.0)*js.diffJetShape(jind, rbin), weight);
00088               /// @todo Calc int histos from diff histos
00089               const double rad_Psi = js.rMin() +(rbin+1.0)*js.interval();
00090               _profhistPsi_pT[ipT]->fill(rad_Psi/0.7, js.intJetShape(jind, rbin), weight);
00091             }
00092             /// @todo Calc int histos from diff histos
00093             _profhistPsi->fill((_pTbins[ipT] + _pTbins[ipT+1])/2.0, js.psi(jind), weight);
00094           }
00095         }
00096       }
00097 
00098     }
00099 
00100 
00101     // Finalize
00102     void finalize() {
00103       //
00104     }
00105 
00106     //@}
00107 
00108 
00109   private:
00110 
00111     /// @name Analysis data
00112     //@{
00113 
00114     /// Vector of jet axes
00115     vector<FourMomentum> _jetaxes;
00116 
00117     /// \f$p_\perp\f$ bins to be distinguished during analysis
00118     vector<double> _pTbins;
00119     //@}
00120 
00121 
00122     /// @name Histograms
00123     //@{
00124     AIDA::IProfile1D* _profhistRho_pT[18];
00125     AIDA::IProfile1D* _profhistPsi_pT[18];
00126     AIDA::IProfile1D* _profhistPsi;
00127     //@}
00128 
00129   };
00130 
00131 
00132   // This global object acts as a hook for the plugin system
00133   AnalysisBuilder<CDF_2005_S6217184> plugin_CDF_2005_S6217184;
00134 
00135 }