CDF_1997_S3541940.cc
Go to the documentation of this file.
00001 // -*- C++ -*- 00002 #include "Rivet/Analysis.hh" 00003 #include "Rivet/Projections/FinalState.hh" 00004 #include "Rivet/Projections/FastJets.hh" 00005 #include "Rivet/Projections/SmearedJets.hh" 00006 00007 namespace Rivet { 00008 00009 00010 /// @brief CDF properties of 6-jet events with large 6-jet mass 00011 class CDF_1997_S3541940 : public Analysis { 00012 public: 00013 00014 CDF_1997_S3541940() 00015 : Analysis("CDF_1997_S3541940") 00016 { 00017 } 00018 00019 00020 public: 00021 00022 void init() { 00023 00024 const FinalState fs(-4.2, 4.2); 00025 FastJets fj (fs, FastJets::CDFJETCLU, 0.7); 00026 declare(fj, "Jets"); 00027 00028 // Smear Energy and mass with the 10% uncertainty quoted in the paper 00029 SmearedJets sj_E(fj, [](const Jet& jet){ return P4_SMEAR_MASS_GAUSS(P4_SMEAR_E_GAUSS(jet, 0.1*jet.E()), 0.1*jet.mass()); }); 00030 declare(sj_E, "SmearedJets"); 00031 00032 _h_m6J = bookHisto1D(1, 1, 1); 00033 _h_X3ppp = bookHisto1D(2, 1, 1); 00034 _h_X4ppp = bookHisto1D(3, 1, 1); 00035 _h_costheta3ppp = bookHisto1D(4, 1, 1); 00036 _h_psi3ppp = bookHisto1D(5, 1, 1); 00037 _h_f3ppp = bookHisto1D(6, 1, 1); 00038 _h_f4ppp = bookHisto1D(6, 1, 2); 00039 _h_f5ppp = bookHisto1D(6, 1, 3); 00040 _h_XApp = bookHisto1D(7, 1, 1); 00041 _h_XCp = bookHisto1D(8, 1, 1); 00042 _h_XE = bookHisto1D(9, 1, 1); 00043 _h_psiAppBpp = bookHisto1D(10, 1, 1); 00044 _h_psiCpDp = bookHisto1D(11, 1, 1); 00045 _h_psiEF = bookHisto1D(12, 1, 1); 00046 _h_fApp = bookHisto1D(13, 1, 1); 00047 _h_fBpp = bookHisto1D(14, 1, 1); 00048 _h_fCp = bookHisto1D(15, 1, 1); 00049 _h_fDp = bookHisto1D(16, 1, 1); 00050 _h_fE = bookHisto1D(17, 1, 1); 00051 _h_fF = bookHisto1D(18, 1, 1); 00052 } 00053 00054 00055 void analyze(const Event& event) { 00056 Jets jets; 00057 double sumEt = 0.0; 00058 FourMomentum jetsystem(0.0, 0.0, 0.0, 0.0); 00059 foreach (const Jet& jet, apply<JetAlg>(event, "SmearedJets").jets(Cuts::Et>20*GeV && Cuts::abseta<3,cmpMomByEt)) { 00060 double Et = jet.Et(); 00061 bool separated = true; 00062 foreach (const Jet& ref, jets) { 00063 if (deltaR(jet, ref) < 0.9) { 00064 separated = false; 00065 break; 00066 } 00067 } 00068 if (!separated) continue; 00069 jets.push_back(jet); 00070 sumEt += Et; 00071 jetsystem += jet.momentum(); 00072 if (jets.size() >= 6) break; 00073 } 00074 00075 if (jets.size() < 6) vetoEvent; 00076 if (sumEt < 320.0*GeV) vetoEvent; 00077 00078 double m6J = _safeMass(jetsystem); 00079 if (m6J < 520.0*GeV) vetoEvent; 00080 00081 const LorentzTransform cms_boost = LorentzTransform::mkFrameTransformFromBeta(jetsystem.betaVec()); 00082 vector<FourMomentum> jets6; 00083 foreach (Jet jet, jets) { 00084 jets6.push_back(cms_boost.transform(jet.momentum())); 00085 } 00086 std::sort(jets6.begin(), jets6.end(), FourMomentum::byEDescending()); 00087 00088 FourMomentum pE, pF; 00089 vector<FourMomentum> jets5(_reduce(jets6, pE, pF)); 00090 std::sort(jets5.begin(), jets5.end(), FourMomentum::byEDescending()); 00091 00092 FourMomentum pCp, pDp; 00093 vector<FourMomentum> jets4(_reduce(jets5, pCp, pDp)); 00094 std::sort(jets4.begin(), jets4.end(), FourMomentum::byEDescending()); 00095 00096 FourMomentum pApp, pBpp; 00097 vector<FourMomentum> jets3(_reduce(jets4, pApp, pBpp)); 00098 std::sort(jets3.begin(), jets3.end(), FourMomentum::byEDescending()); 00099 FourMomentum p3ppp(jets3[0]); 00100 FourMomentum p4ppp(jets3[1]); 00101 FourMomentum p5ppp(jets3[2]); 00102 00103 double X3ppp = 2.0*p3ppp.E()/m6J; 00104 if (X3ppp > 0.9) vetoEvent; 00105 00106 FourMomentum pAV = cms_boost.transform(_avg_beam_in_lab(m6J, jetsystem.rapidity())); 00107 double costheta3ppp = pAV.p3().unit().dot(p3ppp.p3().unit()); 00108 if (fabs(costheta3ppp) > 0.9) vetoEvent; 00109 00110 const double weight = event.weight(); 00111 00112 // 3-jet-system variables 00113 _h_m6J->fill(m6J, weight); 00114 _h_X3ppp->fill(X3ppp, weight); 00115 _h_X4ppp->fill(2.0*p4ppp.E()/m6J, weight); 00116 _h_costheta3ppp->fill(costheta3ppp, weight); 00117 double psi3ppp = _psi(p3ppp, pAV, p4ppp, p5ppp); 00118 _h_psi3ppp->fill(psi3ppp, weight); 00119 _h_f3ppp->fill(_safeMass(p3ppp)/m6J, weight); 00120 _h_f4ppp->fill(_safeMass(p4ppp)/m6J, weight); 00121 _h_f5ppp->fill(_safeMass(p5ppp)/m6J, weight); 00122 00123 // 4 -> 3 jet variables 00124 _h_fApp->fill(_safeMass(pApp)/m6J, weight); 00125 _h_fBpp->fill(_safeMass(pApp)/m6J, weight); 00126 _h_XApp->fill(pApp.E()/(pApp.E()+pBpp.E()), weight); 00127 double psiAppBpp = _psi(pApp, pBpp, pApp+pBpp, pAV); 00128 _h_psiAppBpp->fill(psiAppBpp, weight); 00129 00130 // 5 -> 4 jet variables 00131 _h_fCp->fill(_safeMass(pCp)/m6J, weight); 00132 _h_fDp->fill(_safeMass(pDp)/m6J, weight); 00133 _h_XCp->fill(pCp.E()/(pCp.E()+pDp.E()), weight); 00134 double psiCpDp = _psi(pCp, pDp, pCp+pDp, pAV); 00135 _h_psiCpDp->fill(psiCpDp, weight); 00136 00137 // 6 -> 5 jet variables 00138 _h_fE->fill(_safeMass(pE)/m6J, weight); 00139 _h_fF->fill(_safeMass(pF)/m6J, weight); 00140 _h_XE->fill(pE.E()/(pE.E()+pF.E()), weight); 00141 double psiEF = _psi(pE, pF, pE+pF, pAV); 00142 _h_psiEF->fill(psiEF, weight); 00143 } 00144 00145 00146 void finalize() { 00147 normalize(_h_m6J); 00148 normalize(_h_X3ppp); 00149 normalize(_h_X4ppp); 00150 normalize(_h_costheta3ppp); 00151 normalize(_h_psi3ppp); 00152 normalize(_h_f3ppp); 00153 normalize(_h_f4ppp); 00154 normalize(_h_f5ppp); 00155 normalize(_h_XApp); 00156 normalize(_h_XCp); 00157 normalize(_h_XE); 00158 normalize(_h_psiAppBpp); 00159 normalize(_h_psiCpDp); 00160 normalize(_h_psiEF); 00161 normalize(_h_fApp); 00162 normalize(_h_fBpp); 00163 normalize(_h_fCp); 00164 normalize(_h_fDp); 00165 normalize(_h_fE); 00166 normalize(_h_fF); 00167 } 00168 00169 00170 private: 00171 00172 vector<FourMomentum> _reduce(const vector<FourMomentum>& jets, 00173 FourMomentum& combined1, 00174 FourMomentum& combined2) { 00175 double minMass2 = 1e9; 00176 size_t idx1(jets.size()), idx2(jets.size()); 00177 for (size_t i = 0; i < jets.size(); ++i) { 00178 for (size_t j = i+1; j < jets.size(); ++j) { 00179 double mass2 = FourMomentum(jets[i] + jets[j]).mass2(); 00180 if (mass2 < minMass2) { 00181 idx1 = i; 00182 idx2 = j; 00183 } 00184 } 00185 } 00186 vector<FourMomentum> newjets; 00187 for (size_t i = 0; i < jets.size(); ++i) { 00188 if (i != idx1 && i != idx2) newjets.push_back(jets[i]); 00189 } 00190 newjets.push_back(jets[idx1] + jets[idx2]); 00191 combined1 = jets[idx1]; 00192 combined2 = jets[idx2]; 00193 return newjets; 00194 } 00195 00196 00197 FourMomentum _avg_beam_in_lab(const double& m, const double& y) { 00198 const double mt = m/2.0; 00199 FourMomentum beam1(mt, 0, 0, mt); 00200 FourMomentum beam2(mt, 0, 0, -mt); 00201 if (fabs(y) > 1e-3) { 00202 FourMomentum boostvec(cosh(y), 0.0, 0.0, sinh(y)); 00203 const LorentzTransform cms_boost = LorentzTransform::mkFrameTransformFromBeta(boostvec.betaVec()).inverse(); 00204 beam1 = cms_boost.transform(beam1); 00205 beam2 = cms_boost.transform(beam2); 00206 } 00207 return (beam1.E() > beam2.E()) ? beam1 - beam2 : beam2 - beam1; 00208 } 00209 00210 00211 double _psi(const FourMomentum& p1, const FourMomentum& p2, 00212 const FourMomentum& p3, const FourMomentum& p4) { 00213 Vector3 p1xp2 = p1.p3().cross(p2.p3()); 00214 Vector3 p3xp4 = p3.p3().cross(p4.p3()); 00215 return mapAngle0ToPi(acos(p1xp2.unit().dot(p3xp4.unit()))); 00216 } 00217 00218 00219 double _safeMass(const FourMomentum& p) { 00220 double mass2 = p.mass2(); 00221 if (mass2 > 0.0) return sqrt(mass2); 00222 if (mass2 < -1e-5) MSG_WARNING("m2 = " << m2 << ". Assuming m2=0."); 00223 return 0.0; 00224 } 00225 00226 00227 private: 00228 00229 Histo1DPtr _h_m6J; 00230 Histo1DPtr _h_X3ppp, _h_X4ppp; 00231 Histo1DPtr _h_costheta3ppp; 00232 Histo1DPtr _h_psi3ppp; 00233 Histo1DPtr _h_f3ppp, _h_f4ppp, _h_f5ppp; 00234 Histo1DPtr _h_XApp, _h_XCp, _h_XE; 00235 Histo1DPtr _h_psiAppBpp, _h_psiCpDp, _h_psiEF; 00236 Histo1DPtr _h_fApp, _h_fBpp, _h_fCp, _h_fDp, _h_fE, _h_fF; 00237 00238 }; 00239 00240 00241 00242 // The hook for the plugin system 00243 DECLARE_RIVET_PLUGIN(CDF_1997_S3541940); 00244 00245 } Generated on Tue Dec 13 2016 16:32:36 for The Rivet MC analysis system by ![]() |