D0_1996_S3214044.cc
Go to the documentation of this file.
00001 // -*- C++ -*- 00002 #include "Rivet/Analysis.hh" 00003 #include "Rivet/RivetYODA.hh" 00004 #include "Rivet/Tools/Logging.hh" 00005 #include "Rivet/Projections/FinalState.hh" 00006 #include "Rivet/Projections/FastJets.hh" 00007 #include "Rivet/Math/LorentzTrans.hh" 00008 #include "Rivet/Math/Vector3.hh" 00009 #include "Rivet/Math/Units.hh" 00010 00011 namespace Rivet { 00012 00013 00014 /// @brief D0 topological distributions of 3- and 4-jet events. 00015 class D0_1996_S3214044 : public Analysis { 00016 public: 00017 00018 /// @name Constructors etc. 00019 //@{ 00020 00021 /// Constructor 00022 D0_1996_S3214044() : Analysis("D0_1996_S3214044") 00023 { } 00024 00025 00026 /// @name Analysis methods 00027 //@{ 00028 00029 /// Book histograms 00030 void init() { 00031 const FinalState fs; 00032 addProjection(fs, "FS"); 00033 /// @todo Use correct jet algorithm 00034 addProjection(FastJets(fs, FastJets::D0ILCONE, 0.7), "ConeJets"); 00035 00036 _h_3j_x3 = bookHisto1D(1, 1, 1); 00037 _h_3j_x5 = bookHisto1D(2, 1, 1); 00038 _h_3j_costheta3 = bookHisto1D(3, 1, 1); 00039 _h_3j_psi = bookHisto1D(4, 1, 1); 00040 _h_3j_mu34 = bookHisto1D(5, 1, 1); 00041 _h_3j_mu35 = bookHisto1D(6, 1, 1); 00042 _h_3j_mu45 = bookHisto1D(7, 1, 1); 00043 00044 _h_4j_x3 = bookHisto1D(8, 1, 1); 00045 _h_4j_x4 = bookHisto1D(9, 1, 1); 00046 _h_4j_x5 = bookHisto1D(10, 1, 1); 00047 _h_4j_x6 = bookHisto1D(11, 1, 1); 00048 _h_4j_costheta3 = bookHisto1D(12, 1, 1); 00049 _h_4j_costheta4 = bookHisto1D(13, 1, 1); 00050 _h_4j_costheta5 = bookHisto1D(14, 1, 1); 00051 _h_4j_costheta6 = bookHisto1D(15, 1, 1); 00052 _h_4j_cosomega34 = bookHisto1D(16, 1, 1); 00053 _h_4j_cosomega35 = bookHisto1D(17, 1, 1); 00054 _h_4j_cosomega36 = bookHisto1D(18, 1, 1); 00055 _h_4j_cosomega45 = bookHisto1D(19, 1, 1); 00056 _h_4j_cosomega46 = bookHisto1D(20, 1, 1); 00057 _h_4j_cosomega56 = bookHisto1D(21, 1, 1); 00058 _h_4j_mu34 = bookHisto1D(22, 1, 1); 00059 _h_4j_mu35 = bookHisto1D(23, 1, 1); 00060 _h_4j_mu36 = bookHisto1D(24, 1, 1); 00061 _h_4j_mu45 = bookHisto1D(25, 1, 1); 00062 _h_4j_mu46 = bookHisto1D(26, 1, 1); 00063 _h_4j_mu56 = bookHisto1D(27, 1, 1); 00064 _h_4j_theta_BZ = bookHisto1D(28, 1, 1); 00065 _h_4j_costheta_NR = bookHisto1D(29, 1, 1); 00066 00067 } 00068 00069 00070 void analyze(const Event& event) { 00071 const double weight = event.weight(); 00072 00073 Jets jets_in; 00074 foreach (const Jet& jet, applyProjection<FastJets>(event, "ConeJets").jetsByEt(20.0*GeV)) { 00075 if (fabs(jet.momentum().eta()) < 3.0) { 00076 jets_in.push_back(jet); 00077 } 00078 } 00079 00080 Jets jets_isolated; 00081 for (size_t i = 0; i < jets_in.size(); ++i) { 00082 bool isolated=true; 00083 for (size_t j = 0; j < jets_in.size(); ++j) { 00084 if (i != j && deltaR(jets_in[i].momentum(), jets_in[j].momentum()) < 1.4) { 00085 isolated = false; 00086 break; 00087 } 00088 } 00089 if (isolated) { 00090 jets_isolated.push_back(jets_in[i]); 00091 } 00092 } 00093 00094 if (jets_isolated.size() == 0 || jets_isolated[0].momentum().Et() < 60.0*GeV) { 00095 vetoEvent; 00096 } 00097 00098 if (jets_isolated.size() > 2) _threeJetAnalysis(jets_isolated, weight); 00099 if (jets_isolated.size() > 3) _fourJetAnalysis(jets_isolated, weight); 00100 } 00101 00102 00103 void finalize() { 00104 normalize(_h_3j_x3, 1.0); 00105 normalize(_h_3j_x5, 1.0); 00106 normalize(_h_3j_costheta3, 1.0); 00107 normalize(_h_3j_psi, 1.0); 00108 normalize(_h_3j_mu34, 1.0); 00109 normalize(_h_3j_mu35, 1.0); 00110 normalize(_h_3j_mu45, 1.0); 00111 normalize(_h_4j_x3, 1.0); 00112 normalize(_h_4j_x4, 1.0); 00113 normalize(_h_4j_x5, 1.0); 00114 normalize(_h_4j_x6, 1.0); 00115 normalize(_h_4j_costheta3, 1.0); 00116 normalize(_h_4j_costheta4, 1.0); 00117 normalize(_h_4j_costheta5, 1.0); 00118 normalize(_h_4j_costheta6, 1.0); 00119 normalize(_h_4j_cosomega34, 1.0); 00120 normalize(_h_4j_cosomega35, 1.0); 00121 normalize(_h_4j_cosomega36, 1.0); 00122 normalize(_h_4j_cosomega45, 1.0); 00123 normalize(_h_4j_cosomega46, 1.0); 00124 normalize(_h_4j_cosomega56, 1.0); 00125 normalize(_h_4j_mu34, 1.0); 00126 normalize(_h_4j_mu35, 1.0); 00127 normalize(_h_4j_mu36, 1.0); 00128 normalize(_h_4j_mu45, 1.0); 00129 normalize(_h_4j_mu46, 1.0); 00130 normalize(_h_4j_mu56, 1.0); 00131 normalize(_h_4j_theta_BZ, 1.0); 00132 normalize(_h_4j_costheta_NR, 1.0); 00133 } 00134 00135 //@} 00136 00137 00138 private: 00139 00140 /// @name Helper functions 00141 //@{ 00142 00143 void _threeJetAnalysis(const Jets& jets, const double& weight) { 00144 // >=3 jet events 00145 FourMomentum jjj(jets[0].momentum()+jets[1].momentum()+jets[2].momentum()); 00146 const double sqrts = _safeMass(jjj); 00147 if (sqrts<200*GeV) { 00148 return; 00149 } 00150 00151 LorentzTransform cms_boost(-jjj.boostVector()); 00152 vector<FourMomentum> jets_boosted; 00153 foreach (Jet jet, jets) { 00154 jets_boosted.push_back(cms_boost.transform(jet.momentum())); 00155 } 00156 std::sort(jets_boosted.begin(), jets_boosted.end(), FourMomentum::byEDescending()); 00157 FourMomentum p3(jets_boosted[0]); 00158 FourMomentum p4(jets_boosted[1]); 00159 FourMomentum p5(jets_boosted[2]); 00160 00161 Vector3 beam1(0.0, 0.0, 1.0); 00162 Vector3 p1xp3 = beam1.cross(p3.vector3()); 00163 Vector3 p4xp5 = p4.vector3().cross(p5.vector3()); 00164 const double cospsi = p1xp3.dot(p4xp5)/p1xp3.mod()/p4xp5.mod(); 00165 00166 _h_3j_x3->fill(2.0*p3.E()/sqrts, weight); 00167 _h_3j_x5->fill(2.0*p5.E()/sqrts, weight); 00168 _h_3j_costheta3->fill(fabs(cos(p3.theta())), weight); 00169 _h_3j_psi->fill(acos(cospsi)/degree, weight); 00170 _h_3j_mu34->fill(_safeMass(FourMomentum(p3+p4))/sqrts, weight); 00171 _h_3j_mu35->fill(_safeMass(FourMomentum(p3+p5))/sqrts, weight); 00172 _h_3j_mu45->fill(_safeMass(FourMomentum(p4+p5))/sqrts, weight); 00173 } 00174 00175 00176 void _fourJetAnalysis(const Jets& jets, const double& weight) { 00177 // >=4 jet events 00178 FourMomentum jjjj(jets[0].momentum() + jets[1].momentum() + jets[2].momentum()+ jets[3].momentum()); 00179 const double sqrts = _safeMass(jjjj); 00180 if (sqrts < 200*GeV) return; 00181 00182 LorentzTransform cms_boost(-jjjj.boostVector()); 00183 vector<FourMomentum> jets_boosted; 00184 foreach (Jet jet, jets) { 00185 jets_boosted.push_back(cms_boost.transform(jet.momentum())); 00186 } 00187 sort(jets_boosted.begin(), jets_boosted.end(), FourMomentum::byEDescending()); 00188 FourMomentum p3(jets_boosted[0]); 00189 FourMomentum p4(jets_boosted[1]); 00190 FourMomentum p5(jets_boosted[2]); 00191 FourMomentum p6(jets_boosted[3]); 00192 00193 Vector3 p3xp4 = p3.vector3().cross(p4.vector3()); 00194 Vector3 p5xp6 = p5.vector3().cross(p6.vector3()); 00195 const double costheta_BZ = p3xp4.dot(p5xp6)/p3xp4.mod()/p5xp6.mod(); 00196 const double costheta_NR = (p3.vector3()-p4.vector3()).dot(p5.vector3()-p6.vector3())/ 00197 (p3.vector3()-p4.vector3()).mod()/(p5.vector3()-p6.vector3()).mod(); 00198 00199 _h_4j_x3->fill(2.0*p3.E()/sqrts, weight); 00200 _h_4j_x4->fill(2.0*p4.E()/sqrts, weight); 00201 _h_4j_x5->fill(2.0*p5.E()/sqrts, weight); 00202 _h_4j_x6->fill(2.0*p6.E()/sqrts, weight); 00203 _h_4j_costheta3->fill(fabs(cos(p3.theta())), weight); 00204 _h_4j_costheta4->fill(fabs(cos(p4.theta())), weight); 00205 _h_4j_costheta5->fill(fabs(cos(p5.theta())), weight); 00206 _h_4j_costheta6->fill(fabs(cos(p6.theta())), weight); 00207 _h_4j_cosomega34->fill(cos(p3.angle(p4)), weight); 00208 _h_4j_cosomega35->fill(cos(p3.angle(p5)), weight); 00209 _h_4j_cosomega36->fill(cos(p3.angle(p6)), weight); 00210 _h_4j_cosomega45->fill(cos(p4.angle(p5)), weight); 00211 _h_4j_cosomega46->fill(cos(p4.angle(p6)), weight); 00212 _h_4j_cosomega56->fill(cos(p5.angle(p6)), weight); 00213 _h_4j_mu34->fill(_safeMass(FourMomentum(p3+p4))/sqrts, weight); 00214 _h_4j_mu35->fill(_safeMass(FourMomentum(p3+p5))/sqrts, weight); 00215 _h_4j_mu36->fill(_safeMass(FourMomentum(p3+p6))/sqrts, weight); 00216 _h_4j_mu45->fill(_safeMass(FourMomentum(p4+p5))/sqrts, weight); 00217 _h_4j_mu46->fill(_safeMass(FourMomentum(p4+p6))/sqrts, weight); 00218 _h_4j_mu56->fill(_safeMass(FourMomentum(p5+p6))/sqrts, weight); 00219 _h_4j_theta_BZ->fill(acos(costheta_BZ)/degree, weight); 00220 _h_4j_costheta_NR->fill(costheta_NR, weight); 00221 00222 } 00223 00224 double _safeMass(const FourMomentum& p) { 00225 double mass2=p.mass2(); 00226 if (mass2>0.0) return sqrt(mass2); 00227 else if (mass2<-1.0e-5) { 00228 MSG_WARNING("m2 = " << m2 << ". Assuming m2=0."); 00229 return 0.0; 00230 } 00231 else return 0.0; 00232 } 00233 00234 private: 00235 00236 /// @name Histograms 00237 //@{ 00238 00239 Histo1DPtr _h_3j_x3; 00240 Histo1DPtr _h_3j_x5; 00241 Histo1DPtr _h_3j_costheta3; 00242 Histo1DPtr _h_3j_psi; 00243 Histo1DPtr _h_3j_mu34; 00244 Histo1DPtr _h_3j_mu35; 00245 Histo1DPtr _h_3j_mu45; 00246 00247 Histo1DPtr _h_4j_x3; 00248 Histo1DPtr _h_4j_x4; 00249 Histo1DPtr _h_4j_x5; 00250 Histo1DPtr _h_4j_x6; 00251 Histo1DPtr _h_4j_costheta3; 00252 Histo1DPtr _h_4j_costheta4; 00253 Histo1DPtr _h_4j_costheta5; 00254 Histo1DPtr _h_4j_costheta6; 00255 Histo1DPtr _h_4j_cosomega34; 00256 Histo1DPtr _h_4j_cosomega35; 00257 Histo1DPtr _h_4j_cosomega36; 00258 Histo1DPtr _h_4j_cosomega45; 00259 Histo1DPtr _h_4j_cosomega46; 00260 Histo1DPtr _h_4j_cosomega56; 00261 Histo1DPtr _h_4j_mu34; 00262 Histo1DPtr _h_4j_mu35; 00263 Histo1DPtr _h_4j_mu36; 00264 Histo1DPtr _h_4j_mu45; 00265 Histo1DPtr _h_4j_mu46; 00266 Histo1DPtr _h_4j_mu56; 00267 Histo1DPtr _h_4j_theta_BZ; 00268 Histo1DPtr _h_4j_costheta_NR; 00269 //@} 00270 00271 }; 00272 00273 00274 00275 // The hook for the plugin system 00276 DECLARE_RIVET_PLUGIN(D0_1996_S3214044); 00277 00278 } Generated on Fri Dec 21 2012 15:03:40 for The Rivet MC analysis system by ![]() |