UA5_1988_S1867512.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/Math/MathUtils.hh"
00006 #include "Rivet/Projections/ChargedFinalState.hh"
00007 #include "Rivet/Projections/Beam.hh"
00008 #include "Rivet/Projections/TriggerUA5.hh"
00009 
00010 namespace Rivet {
00011 
00012 
00013   class UA5_1988_S1867512 : public Analysis {
00014   public:
00015 
00016     UA5_1988_S1867512() : Analysis("UA5_1988_S1867512")
00017     {
00018       setBeams(PROTON, ANTIPROTON);
00019       _sumWPassed = 0;
00020     }  
00021 
00022 
00023     /// @name Analysis methods
00024     //@{
00025 
00026     void init() {
00027       // Projections
00028       addProjection(TriggerUA5(), "Trigger");
00029       
00030       // Symmetric eta interval
00031       addProjection(ChargedFinalState(-0.5, 0.5), "CFS05");
00032 
00033       // Asymmetric intervals first
00034       // Forward eta intervals
00035       addProjection(ChargedFinalState(0.0, 1.0), "CFS10F");
00036       addProjection(ChargedFinalState(0.5, 1.5), "CFS15F");
00037       addProjection(ChargedFinalState(1.0, 2.0), "CFS20F");
00038       addProjection(ChargedFinalState(1.5, 2.5), "CFS25F");
00039       addProjection(ChargedFinalState(2.0, 3.0), "CFS30F");
00040       addProjection(ChargedFinalState(2.5, 3.5), "CFS35F");
00041       addProjection(ChargedFinalState(3.0, 4.0), "CFS40F");
00042       
00043       // Backward eta intervals
00044       addProjection(ChargedFinalState(-1.0,  0.0), "CFS10B");
00045       addProjection(ChargedFinalState(-1.5, -0.5), "CFS15B");
00046       addProjection(ChargedFinalState(-2.0, -1.0), "CFS20B");
00047       addProjection(ChargedFinalState(-2.5, -1.5), "CFS25B");
00048       addProjection(ChargedFinalState(-3.0, -2.0), "CFS30B");
00049       addProjection(ChargedFinalState(-3.5, -2.5), "CFS35B");
00050       addProjection(ChargedFinalState(-4.0, -3.0), "CFS40B");
00051       
00052       // Histogram booking, we have sqrt(s) = 200, 546 and 900 GeV
00053       if (fuzzyEquals(sqrtS()/GeV, 200.0, 1E-4)) {
00054         _hist_correl = bookProfile1D(2, 1, 1);
00055         _hist_correl_asym = bookProfile1D(3, 1, 1);
00056       } else if (fuzzyEquals(sqrtS()/GeV, 546.0, 1E-4)) {
00057         _hist_correl = bookProfile1D(2, 1, 2);      
00058         _hist_correl_asym = bookProfile1D(3, 1, 2);
00059       } else if (fuzzyEquals(sqrtS()/GeV, 900.0, 1E-4)) {
00060         _hist_correl = bookProfile1D(2, 1, 3);
00061         _hist_correl_asym = bookProfile1D(3, 1, 3);
00062       }
00063     }
00064     
00065     
00066     void analyze(const Event& event) {      
00067       // Trigger
00068       const bool trigger = applyProjection<TriggerUA5>(event, "Trigger").nsdDecision();
00069       if (!trigger) vetoEvent;
00070       _sumWPassed += event.weight();
00071             
00072       // Count forward/backward particles
00073       n_10f += applyProjection<ChargedFinalState>(event, "CFS10F").size();
00074       n_15f += applyProjection<ChargedFinalState>(event, "CFS15F").size();
00075       n_20f += applyProjection<ChargedFinalState>(event, "CFS20F").size();
00076       n_25f += applyProjection<ChargedFinalState>(event, "CFS25F").size();
00077       n_30f += applyProjection<ChargedFinalState>(event, "CFS30F").size();
00078       n_35f += applyProjection<ChargedFinalState>(event, "CFS35F").size();
00079       n_40f += applyProjection<ChargedFinalState>(event, "CFS40F").size();
00080       //
00081       n_10b += applyProjection<ChargedFinalState>(event, "CFS10B").size();
00082       n_15b += applyProjection<ChargedFinalState>(event, "CFS15B").size();
00083       n_20b += applyProjection<ChargedFinalState>(event, "CFS20B").size();
00084       n_25b += applyProjection<ChargedFinalState>(event, "CFS25B").size();
00085       n_30b += applyProjection<ChargedFinalState>(event, "CFS30B").size();
00086       n_35b += applyProjection<ChargedFinalState>(event, "CFS35B").size();
00087       n_40b += applyProjection<ChargedFinalState>(event, "CFS40B").size();
00088       //
00089       n_05 += applyProjection<ChargedFinalState>(event, "CFS05").size();
00090     }
00091     
00092     
00093     void finalize() {
00094       // The correlation strength is defined in formulas
00095       // 4.1 and 4.2
00096 
00097       // Fill histos, gap width histo comes first
00098       _hist_correl->fill(0.0, correlation(n_10f, n_10b));
00099       _hist_correl->fill(1.0, correlation(n_15f, n_15b));
00100       _hist_correl->fill(2.0, correlation(n_20f, n_20b));
00101       _hist_correl->fill(3.0, correlation(n_25f, n_25b));
00102       _hist_correl->fill(4.0, correlation(n_30f, n_30b));
00103       _hist_correl->fill(5.0, correlation(n_35f, n_35b));
00104       _hist_correl->fill(6.0, correlation(n_40f, n_40b));
00105 
00106       // Fill gap-center histo (Fig 15)
00107       //
00108       // The first bin contains all the c_str strengths of
00109       // the gap size histo above, since the corresponding
00110       // 'center of the separating gap' is always at eta=0
00111       _hist_correl_asym->fill(0.0, correlation(n_10f, n_10b));
00112       _hist_correl_asym->fill(0.0, correlation(n_15f, n_15b));
00113       _hist_correl_asym->fill(0.0, correlation(n_20f, n_20b));
00114       _hist_correl_asym->fill(0.0, correlation(n_25f, n_25b));
00115       _hist_correl_asym->fill(0.0, correlation(n_30f, n_30b));
00116       _hist_correl_asym->fill(0.0, correlation(n_35f, n_35b));
00117       _hist_correl_asym->fill(0.0, correlation(n_40f, n_40b));
00118       // Fill in correlation strength for assymetric intervals,
00119       // see Tab. 5
00120       _hist_correl_asym->fill(0.5, correlation(n_25f, n_15b));
00121       _hist_correl_asym->fill(1.0, correlation(n_30f, n_10b));
00122       _hist_correl_asym->fill(1.5, correlation(n_35f, n_05 ));
00123       _hist_correl_asym->fill(2.0, correlation(n_40f, n_10f));
00124 
00125       // TODO: find out what exactly n_F and n_B are in the
00126       // asymmetric case. It's important for the definition
00127       // of b (see Eq. 4.2)
00128       //_hist_correl_asym->fill(0.5, correlation(n_15b, n_25f));
00129       //_hist_correl_asym->fill(1.0, correlation(n_10b, n_30f));
00130       //_hist_correl_asym->fill(1.5, correlation(n_05 , n_35f));
00131       //_hist_correl_asym->fill(2.0, correlation(n_10f, n_40f));
00132     
00133     }
00134     
00135     //@}
00136     
00137     
00138   private:
00139    
00140     /// @name Counters
00141     //@{
00142     double _sumWPassed;
00143     //@}
00144 
00145 
00146     /// @name Vectors for storing the number of particles in the different eta intervals per event.
00147     /// @todo Is there a better way?
00148     //@{    
00149     std::vector<int> n_10f;
00150     std::vector<int> n_15f;
00151     std::vector<int> n_20f;
00152     std::vector<int> n_25f;
00153     std::vector<int> n_30f;
00154     std::vector<int> n_35f;
00155     std::vector<int> n_40f;
00156     //                           
00157     std::vector<int> n_10b;
00158     std::vector<int> n_15b;
00159     std::vector<int> n_20b;
00160     std::vector<int> n_25b;
00161     std::vector<int> n_30b;
00162     std::vector<int> n_35b;
00163     std::vector<int> n_40b;
00164     //
00165     std::vector<int> n_05;
00166     //@}
00167 
00168 
00169     /// @name Histograms
00170     //@{
00171     // Symmetric eta intervals
00172     AIDA::IProfile1D *_hist_correl;    
00173     // For asymmetric eta intervals
00174     AIDA::IProfile1D *_hist_correl_asym;
00175     //@}
00176 
00177   };
00178 
00179 
00180   
00181   // This global object acts as a hook for the plugin system
00182   AnalysisBuilder<UA5_1988_S1867512> plugin_UA5_1988_S1867512;
00183 
00184 }