CDF_2002_S4796047.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/Beam.hh"
00006 #include "Rivet/Projections/ChargedFinalState.hh"
00007 #include "Rivet/Projections/TriggerCDFRun0Run1.hh"
00008 
00009 namespace Rivet {
00010 
00011   /*
00012    * @brief CDF Run I charged multiplicity measurement
00013    * @author Hendrik Hoeth
00014    *
00015    * This analysis measures the charged multiplicity distribution
00016    * in minimum bias events at two different center-of-mass energies:
00017    * \f$ \sqrt{s} = \f$ 630 and 1800 GeV.
00018    *
00019    * Particles with c*tau > 10 mm are considered stable, i.e. they
00020    * are reconstructed and their decay products removed. Selection
00021    * cuts are |eta|<1 and pT>0.4 GeV.
00022    *
00023    *
00024    * @par Run conditions
00025    *
00026    * @arg Two different beam energies: \f$ \sqrt{s} = \$f 630 & 1800 GeV
00027    * @arg Run with generic QCD events.
00028    * @arg Set particles with c*tau > 10 mm stable
00029    *
00030    */
00031   class CDF_2002_S4796047 : public Analysis {
00032   public:
00033 
00034     /// Constructor
00035     CDF_2002_S4796047()
00036       : Analysis("CDF_2002_S4796047")
00037     {
00038       setBeams(PROTON, ANTIPROTON);
00039       _sumWTrig = 0;
00040     }
00041 
00042 
00043     /// @name Analysis methods
00044     //@{
00045  
00046     /// Book projections and histograms
00047     void init() {
00048       addProjection(TriggerCDFRun0Run1(), "Trigger");
00049       const ChargedFinalState cfs(-1.0, 1.0, 0.4*GeV);
00050       addProjection(cfs, "FS");
00051 
00052       // Histos
00053       if (fuzzyEquals(sqrtS()/GeV, 630)) {
00054         _hist_multiplicity  = bookHistogram1D(1, 1, 1);
00055         _hist_pt_vs_multiplicity  = bookProfile1D(3, 1, 1);
00056       } else if (fuzzyEquals(sqrtS()/GeV, 1800)) {
00057         _hist_multiplicity = bookHistogram1D(2, 1, 1);
00058         _hist_pt_vs_multiplicity = bookProfile1D(4, 1, 1);
00059       }
00060     }
00061  
00062  
00063     /// Do the analysis
00064     void analyze(const Event& evt) {
00065       // Trigger
00066       const bool trigger = applyProjection<TriggerCDFRun0Run1>(evt, "Trigger").minBiasDecision();
00067       if (!trigger) vetoEvent;
00068       const double weight = evt.weight();
00069       _sumWTrig += weight;
00070 
00071       // Get beam energy and tracks
00072       const ChargedFinalState& fs = applyProjection<ChargedFinalState>(evt, "FS");
00073       const size_t numParticles = fs.particles().size();
00074 
00075       // Fill histos of charged multiplicity distributions
00076       _hist_multiplicity->fill(numParticles, weight);
00077 
00078       // Fill histos for <pT> vs. charged multiplicity
00079       foreach (const Particle& p, fs.particles()) {
00080         const double pT = p.momentum().pT();
00081         _hist_pt_vs_multiplicity->fill(numParticles, pT/GeV, weight);
00082       }
00083    
00084     }
00085  
00086 
00087     void finalize() {
00088       // This normalisation is NOT a cross-section.
00089       // In the paper the x-axes (!) of the histograms are
00090       // scaled such that they can put both energies in the
00091       // same plot. Of course this affects the area, too.
00092       // Since we want to plot the actual multiplicity, we
00093       // scale the x-axes back and have to adjust the areas
00094       // accordingly. The scale factors are given in the
00095       // legend of the plot in the paper. Have a look at
00096       // figure 1 and everything immediately becomes clear.
00097       // DON'T TRY TO REPAIR THIS, YOU WILL BREAK IT.
00098       if (fuzzyEquals(sqrtS()/GeV, 630)) {
00099         normalize(_hist_multiplicity, 3.21167); // fixed norm OK
00100       } else if (fuzzyEquals(sqrtS()/GeV, 1800)) {
00101         normalize(_hist_multiplicity, 4.19121); // fixed norm OK
00102       }
00103     }
00104 
00105     //@}
00106 
00107 
00108   private:
00109 
00110     /// @name Counter
00111     //@{
00112     double _sumWTrig;
00113     //@}
00114 
00115     /// @name Histos
00116     //@{
00117     AIDA::IHistogram1D* _hist_multiplicity;
00118     AIDA::IProfile1D* _hist_pt_vs_multiplicity;
00119     //@}
00120 
00121   };
00122 
00123 
00124 
00125   // This global object acts as a hook for the plugin system
00126   AnalysisBuilder<CDF_2002_S4796047> plugin_CDF_2002_S4796047;
00127 
00128 }