JADE_1998_S3612880.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/Thrust.hh"
00006 #include "Rivet/Projections/FastJets.hh"
00007 #include "Rivet/Projections/Hemispheres.hh"
00008 #include "Rivet/Projections/ChargedFinalState.hh"
00009 /// @todo Include more projections as required, e.g. ChargedFinalState, FastJets, ZFinder...
00010 
00011 namespace Rivet {
00012 
00013 
00014   class JADE_1998_S3612880 : public Analysis {
00015   public:
00016 
00017     /// @name Constructors etc.
00018     //@{
00019 
00020     /// Constructor
00021     JADE_1998_S3612880()
00022       : Analysis("JADE_1998_S3612880")
00023     {
00024       /// @todo Set whether your finalize method needs the generator cross section
00025       setBeams(ELECTRON, POSITRON);
00026     }
00027 
00028 
00029 
00030     /// Book histograms and initialise projections before the run
00031     void init() {
00032       const ChargedFinalState cfs(-MAXRAPIDITY, MAXRAPIDITY, 0.1/GeV);
00033       addProjection(cfs, "CFS");
00034       addProjection(FastJets(cfs, FastJets::DURHAM, 0.7), "DurhamJets");
00035       
00036       // Thrust
00037       const Thrust thrust(cfs);
00038       addProjection(thrust, "Thrust");
00039       addProjection(Hemispheres(thrust), "Hemispheres");
00040 
00041       // Histos
00042       int offset = 0;
00043       switch (int(sqrtS()/GeV)) {
00044 
00045         case 44:
00046           offset = 0;
00047           _h_thrust  = bookHistogram1D( 2+offset, 1, 1);
00048           _h_MH = bookHistogram1D( 3 + offset, 1, 1);
00049           _h_BT = bookHistogram1D( 4 + offset, 1, 1);
00050           _h_BW = bookHistogram1D( 5 + offset, 1, 1);
00051           _h_y23 = bookHistogram1D(10, 1, 1);
00052           break;
00053         case 35:
00054           offset = 4;
00055           _h_thrust  = bookHistogram1D( 2+offset, 1, 1);
00056           _h_MH = bookHistogram1D( 3 + offset, 1, 1);
00057           _h_BT = bookHistogram1D( 4 + offset, 1, 1);
00058           _h_BW = bookHistogram1D( 5 + offset, 1, 1);
00059           _h_y23 = bookHistogram1D(11, 1, 1);
00060           break;
00061         case 22:
00062           _h_y23 = bookHistogram1D(12, 1, 1);
00063           break;
00064       }
00065     }
00066 
00067 
00068     /// Perform the per-event analysis
00069     void analyze(const Event& event) {
00070       const double weight = event.weight();
00071       const ChargedFinalState& cfs = applyProjection<ChargedFinalState>(event, "CFS");
00072 
00073       // JADE hadronic event selection TODO: move this into a trigger definition
00074       if (cfs.particles().size() < 3 ) {
00075         vetoEvent;
00076       }
00077       const Thrust& thrust = applyProjection<Thrust>(event, "Thrust");
00078       const Vector3 & thrustAxis = thrust.thrustAxis ();
00079       double theta = thrustAxis.theta();
00080       if ( fabs(cos(theta)) >= 0.8 ) {
00081         getLog() << Log::DEBUG << "Failed thrust angle cut: " << fabs(cos(theta)) << endl;
00082         vetoEvent;
00083       }
00084       // TODO Evis, pmiss, pbal
00085 
00086       const Hemispheres& hemi = applyProjection<Hemispheres>(event, "Hemispheres");
00087       const FastJets& durjet = applyProjection<FastJets>(event, "DurhamJets");
00088 
00089       double y23 = durjet.clusterSeq()->exclusive_ymerge_max(2);
00090       
00091       // Make sure we don't run into a segfault by trying to fill non-existing histos
00092       int s = int(sqrtS()/GeV);
00093       if (s == 44 || s == 35) {
00094         _h_thrust->fill(1. - thrust.thrust(), weight);
00095         _h_MH->fill(sqrt(hemi.scaledM2high()), weight);
00096         _h_BT->fill(hemi.Bsum(), weight);
00097         _h_BW->fill(hemi.Bmax(), weight);
00098       }
00099       _h_y23->fill(y23, weight);
00100     }
00101 
00102     /// Normalise histograms etc., after the run
00103     void finalize() {
00104       // Make sure we don't try to normalise non-existing histos
00105       int s = int(sqrtS()/GeV);
00106       if (s == 44 || s == 35) {
00107         normalize(_h_thrust);
00108         normalize(_h_MH);
00109         normalize(_h_BT);
00110         normalize(_h_BW);
00111       }
00112       normalize(_h_y23);
00113 
00114 
00115     }
00116 
00117     //@}
00118 
00119 
00120   private:
00121 
00122     AIDA::IHistogram1D *_h_thrust;
00123     AIDA::IHistogram1D *_h_MH;
00124     AIDA::IHistogram1D *_h_BT;
00125     AIDA::IHistogram1D *_h_BW;
00126     AIDA::IHistogram1D *_h_y23;
00127 
00128 
00129   };
00130 
00131 
00132 
00133   // This global object acts as a hook for the plugin system
00134   AnalysisBuilder<JADE_1998_S3612880> plugin_JADE_1998_S3612880;
00135 
00136 
00137 }