CDF_1994_S2952106.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 #include "LWH/Histogram1D.h"
00010 
00011 namespace Rivet {
00012 
00013 
00014   /// @brief CDF Run I color coherence analysis
00015   /// @author Andy Buckley
00016   /// @author Lars Sonnenschein
00017   class CDF_1994_S2952106 : public Analysis {
00018   public:
00019 
00020     /// Constructor
00021     CDF_1994_S2952106() : Analysis("CDF_1994_S2952106")
00022     {
00023     }
00024 
00025 
00026     /// @name Analysis methods
00027     //@{
00028 
00029     void init() {
00030       const FinalState fs(-4.2, 4.2);
00031       addProjection(fs, "FS");
00032       addProjection(FastJets(fs, FastJets::CDFJETCLU, 0.7), "Jets");
00033 
00034       // Zero passed-cuts event weight counters
00035       _sumw = 0;
00036 
00037       // Output histograms
00038       _histJet1Et  = bookHistogram1D(1,1,1);
00039       _histJet2Et  = bookHistogram1D(2,1,1);
00040       _histJet3eta = bookDataPointSet(3,1,1);
00041       _histR23     = bookDataPointSet(4,1,1);
00042       _histAlpha   = bookDataPointSet(5,1,1);
00043 
00044       // Temporary histos: these are the ones we actually fill for the plots which require correction
00045       _tmphistJet3eta.reset(new LWH::Histogram1D(binEdges(3,1,1)));
00046       _tmphistR23.reset(    new LWH::Histogram1D(binEdges(4,1,1)));
00047       _tmphistAlpha.reset(  new LWH::Histogram1D(binEdges(5,1,1)));
00048     }
00049 
00050 
00051 
00052     // Do the analysis
00053     void analyze(const Event & event) {
00054       const Jets jets = applyProjection<FastJets>(event, "Jets").jetsByEt();
00055       MSG_DEBUG("Jet multiplicity before any cuts = " << jets.size());
00056 
00057       // ETs only from jets:
00058       double et_sinphi_sum = 0;
00059       double et_cosphi_sum = 0;
00060       double et_sum = 0;
00061       for (size_t i = 0; i< jets.size(); ++i) {
00062         et_sinphi_sum += jets[i].momentum().Et() * sin(jets[i].phi());
00063         et_cosphi_sum += jets[i].momentum().Et() * cos(jets[i].phi());
00064         et_sum += jets[i].momentum().Et();
00065       }
00066 
00067       // ET requirement
00068       if (sqrt(sqr(et_sinphi_sum) + sqr(et_cosphi_sum))/et_sum > 6.0) vetoEvent;
00069 
00070       // Check jet requirements
00071       if (jets.size() < 3) vetoEvent;
00072       if (jets[0].momentum().pT() < 110*GeV) vetoEvent;
00073       if (jets[2].momentum().pT() < 10*GeV) vetoEvent;
00074 
00075       // More jet 1,2,3 checks
00076       FourMomentum pj1(jets[0].momentum()), pj2(jets[1].momentum()), pj3(jets[2].momentum());
00077       if (fabs(pj1.eta()) > 0.7 || fabs(pj2.eta()) > 0.7) vetoEvent;
00078       MSG_DEBUG("Jet 1 & 2 eta, pT requirements fulfilled");
00079 
00080       // Require that jets are back-to-back within 20 degrees in phi
00081       if ((PI - deltaPhi(pj1.phi(), pj2.phi())) > (20/180.0)*PI) vetoEvent;
00082       MSG_DEBUG("Jet 1 & 2 phi requirement fulfilled");
00083 
00084       const double weight = event.weight();
00085       _sumw += weight;
00086 
00087       // Fill histos
00088       _histJet1Et->fill(pj1.pT(), weight);
00089       _histJet2Et->fill(pj2.pT(), weight);
00090       _tmphistJet3eta->fill(pj3.eta(), weight);
00091       _tmphistR23->fill(deltaR(pj2, pj3), weight);
00092 
00093       // Calc and plot alpha
00094       const double dPhi = deltaPhi(pj3.phi(), pj2.phi());
00095       const double dH = sign(pj2.eta()) * (pj3.eta() - pj2.eta());
00096       const double alpha = atan(dH/dPhi);
00097       _tmphistAlpha->fill(alpha*180./PI, weight);
00098     }
00099 
00100 
00101     /// Apply bin-wise detector correction factors
00102     void finalize() {
00103 
00104       // Normal scalings
00105       normalize(_histJet1Et, 12.3);
00106       normalize(_histJet2Et, 12.3);
00107 
00108       // eta3 correction
00109       const double eta3_CDF_sim[] =
00110         { 0.0013, 0.0037, 0.0047, 0.0071, 0.0093, 0.0117, 0.0151, 0.0149, 0.0197, 0.0257,
00111           0.0344, 0.0409, 0.0481, 0.0454, 0.0394, 0.0409, 0.0387, 0.0387, 0.0322, 0.0313,
00112           0.0290, 0.0309, 0.0412, 0.0417, 0.0412, 0.0397, 0.0417, 0.0414, 0.0376, 0.0316,
00113           0.0270, 0.0186, 0.0186, 0.0132, 0.0127, 0.0106, 0.0071, 0.0040, 0.0020, 0.0013 };
00114       const double eta3_CDF_sim_err[] =
00115         { 0.0009, 0.0009, 0.0007, 0.0007, 0.0007, 0.0010, 0.0012, 0.0012, 0.0013, 0.0016,
00116           0.0017, 0.0020, 0.0020, 0.0022, 0.0020, 0.0020, 0.0018, 0.0018, 0.0016, 0.0017,
00117           0.0017, 0.0019, 0.0020, 0.0021, 0.0020, 0.0020, 0.0019, 0.0020, 0.0018, 0.0017,
00118           0.0017, 0.0014, 0.0014, 0.0009, 0.0010, 0.0009, 0.0009, 0.0008, 0.0008, 0.0009 };
00119       const double eta3_Ideal_sim[] =
00120         { 0.0017, 0.0030, 0.0033, 0.0062, 0.0062, 0.0112, 0.0177, 0.0164, 0.0196, 0.0274,
00121           0.0351, 0.0413, 0.0520, 0.0497, 0.0448, 0.0446, 0.0375, 0.0329, 0.0291, 0.0272,
00122           0.0233, 0.0288, 0.0384, 0.0396, 0.0468, 0.0419, 0.0459, 0.0399, 0.0355, 0.0329,
00123           0.0274, 0.0230, 0.0201, 0.0120, 0.0100, 0.0080, 0.0051, 0.0051, 0.0010, 0.0010 };
00124       vector<double> yval_eta3, yerr_eta3;
00125       for (size_t i = 0;  i < 40; ++i) {
00126         const double yval = _tmphistJet3eta->binHeight(i) * (eta3_CDF_sim[i]/eta3_Ideal_sim[i]);
00127         yval_eta3.push_back(yval/_sumw);
00128         const double yerr = _tmphistJet3eta->binError(i) * (eta3_CDF_sim_err[i]/eta3_Ideal_sim[i]);
00129         yerr_eta3.push_back(yerr/_sumw);
00130       }
00131       _histJet3eta->setCoordinate(1, yval_eta3, yerr_eta3);
00132 
00133       // R23 correction
00134       const double R23_CDF_sim[] =
00135         { 0.0005, 0.0161, 0.0570, 0.0762, 0.0723, 0.0705, 0.0598, 0.0563, 0.0557, 0.0579,
00136           0.0538, 0.0522, 0.0486, 0.0449, 0.0418, 0.0361, 0.0326, 0.0304, 0.0252, 0.0212,
00137           0.0173, 0.0176, 0.0145, 0.0127, 0.0103, 0.0065, 0.0049, 0.0045, 0.0035, 0.0029,
00138           0.0024, 0.0014, 0.0011, 0.0010, 0.0009 };
00139       const double R23_CDF_sim_err[] =
00140         { 0.0013, 0.0009, 0.0022, 0.0029, 0.0026, 0.0024, 0.0022, 0.0025, 0.0023, 0.0024,
00141           0.0021, 0.0021, 0.0021, 0.0021, 0.0021, 0.0019, 0.0019, 0.0016, 0.0017, 0.0014,
00142           0.0010, 0.0014, 0.0012, 0.0013, 0.0010, 0.0011, 0.0010, 0.0010, 0.0010, 0.0011,
00143           0.0011, 0.0009, 0.0008, 0.0008, 0.0009 };
00144       const double R23_Ideal_sim[] =
00145         { 0.0005, 0.0176, 0.0585, 0.0862, 0.0843, 0.0756, 0.0673, 0.0635, 0.0586, 0.0619,
00146           0.0565, 0.0515, 0.0466, 0.0472, 0.0349, 0.0349, 0.0266, 0.0254, 0.0204, 0.0179,
00147           0.0142, 0.0134, 0.0101, 0.0090, 0.0080, 0.0034, 0.0030, 0.0033, 0.0027, 0.0021,
00148           0.0012, 0.0006, 0.0004, 0.0005, 0.0003 };
00149       vector<double> yval_R23, yerr_R23;
00150       for (size_t i = 0;  i < 35; ++i) {
00151         const double yval = _tmphistR23->binHeight(i) * (R23_CDF_sim[i]/R23_Ideal_sim[i]);
00152         yval_R23.push_back(yval/_sumw);
00153         const double yerr = _tmphistR23->binError(i) * (R23_CDF_sim_err[i]/R23_Ideal_sim[i]);
00154         yerr_R23.push_back(yerr/_sumw);
00155       }
00156       _histR23->setCoordinate(1, yval_R23, yerr_R23);
00157 
00158       // alpha correction
00159       const double alpha_CDF_sim[] =
00160         { 0.0517, 0.0461, 0.0490, 0.0452, 0.0451, 0.0435, 0.0317, 0.0287, 0.0294, 0.0261,
00161           0.0231, 0.0220, 0.0233, 0.0192, 0.0213, 0.0166, 0.0176, 0.0146, 0.0136, 0.0156,
00162           0.0142, 0.0152, 0.0151, 0.0147, 0.0164, 0.0186, 0.0180, 0.0210, 0.0198, 0.0189,
00163           0.0197, 0.0211, 0.0270, 0.0236, 0.0243, 0.0269, 0.0257, 0.0276, 0.0246, 0.0286 };
00164       const double alpha_CDF_sim_err[] =
00165         { 0.0024, 0.0025, 0.0024, 0.0024, 0.0024, 0.0022, 0.0019, 0.0018, 0.0019, 0.0016,
00166           0.0017, 0.0017, 0.0019, 0.0013, 0.0017, 0.0014, 0.0016, 0.0013, 0.0012, 0.0009,
00167           0.0014, 0.0014, 0.0014, 0.0014, 0.0014, 0.0015, 0.0014, 0.0016, 0.0016, 0.0015,
00168           0.0016, 0.0016, 0.0019, 0.0017, 0.0019, 0.0018, 0.0018, 0.0018, 0.0018, 0.0019 };
00169       const double alpha_Ideal_sim[] =
00170         { 0.0552, 0.0558, 0.0583, 0.0550, 0.0495, 0.0433, 0.0393, 0.0346, 0.0331, 0.0296,
00171           0.0258, 0.0196, 0.0171, 0.0179, 0.0174, 0.0141, 0.0114, 0.0096, 0.0076, 0.0087,
00172           0.0099, 0.0079, 0.0102, 0.0114, 0.0124, 0.0130, 0.0165, 0.0160, 0.0177, 0.0190,
00173           0.0232, 0.0243, 0.0238, 0.0248, 0.0235, 0.0298, 0.0292, 0.0291, 0.0268, 0.0316 };
00174       vector<double> yval_alpha, yerr_alpha;
00175       for (size_t i = 0;  i < 40; ++i) {
00176         const double yval = _tmphistAlpha->binHeight(i) * (alpha_CDF_sim[i]/alpha_Ideal_sim[i]);
00177         yval_alpha.push_back(yval/_sumw);
00178         const double yerr = _tmphistAlpha->binError(i) * (alpha_CDF_sim_err[i]/alpha_Ideal_sim[i]);
00179         yerr_alpha.push_back(yerr/_sumw);
00180       }
00181       _histAlpha->setCoordinate(1, yval_alpha, yerr_alpha);
00182     }
00183 
00184     //@}
00185 
00186 
00187   private:
00188 
00189     /// @name Event weight counters
00190     //@{
00191 
00192     double _sumw;
00193 
00194     //@}
00195 
00196 
00197     /// @name Histograms
00198     //@{
00199 
00200     /// Straightforward output histos
00201     AIDA::IHistogram1D *_histJet1Et, *_histJet2Et;
00202 
00203     /// Output histos which need to have correction factors applied
00204     AIDA::IDataPointSet *_histR23, *_histJet3eta, *_histAlpha;
00205 
00206     /// Temporary histos, to be converted to DPSes
00207     shared_ptr<LWH::IHistogram1D> _tmphistR23, _tmphistJet3eta, _tmphistAlpha;
00208 
00209     //@}
00210 
00211   };
00212 
00213 
00214 
00215   // The hook for the plugin system
00216   DECLARE_RIVET_PLUGIN(CDF_1994_S2952106);
00217 
00218 }