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