BELLE_2006_S6265367.cc
Go to the documentation of this file.
00001 // -*- C++ -*- 00002 #include <iostream> 00003 #include "Rivet/Analysis.hh" 00004 #include "Rivet/Projections/Beam.hh" 00005 #include "Rivet/Projections/UnstableFinalState.hh" 00006 00007 namespace Rivet { 00008 00009 00010 /// @brief BELLE charmed mesons and baryons from fragmentation 00011 /// @author Eike von Seggern 00012 class BELLE_2006_S6265367 : public Analysis { 00013 public: 00014 00015 BELLE_2006_S6265367() 00016 : Analysis("BELLE_2006_S6265367") 00017 { } 00018 00019 00020 void analyze(const Event& e) { 00021 const double weight = e.weight(); 00022 00023 // Loop through unstable FS particles and look for charmed mesons/baryons 00024 const UnstableFinalState& ufs = applyProjection<UnstableFinalState>(e, "UFS"); 00025 00026 const Beam beamproj = applyProjection<Beam>(e, "Beams"); 00027 const ParticlePair& beams = beamproj.beams(); 00028 FourMomentum mom_tot = beams.first.momentum() + beams.second.momentum(); 00029 LorentzTransform cms_boost(-mom_tot.boostVector()); 00030 const double s = sqr(beamproj.sqrtS()); 00031 const bool onresonance = fuzzyEquals(beamproj.sqrtS(), 10.58, 5E-3); 00032 00033 // Particle masses from PDGlive (accessed online 16. Nov. 2009). 00034 foreach (const Particle& p, ufs.particles()) { 00035 00036 double xp = 0.0; 00037 double mH2 = 0.0; 00038 // 3-momentum in CMS frame 00039 const double mom = cms_boost.transform(p.momentum()).vector3().mod(); 00040 00041 const int PdgId = p.abspid(); 00042 MSG_DEBUG("pdgID = " << PdgId << " mom = " << mom); 00043 switch (PdgId) { 00044 00045 case 421: 00046 MSG_DEBUG("D0 found"); 00047 mH2 = 3.47763; // 1.86484^2 00048 xp = mom/sqrt(s/4.0 - mH2); 00049 // off-resonance cross section 00050 if(!onresonance) _sigmaD0->fill(10.6,weight); 00051 if(checkDecay(p.genParticle())) { 00052 if (onresonance) 00053 _histXpD0_R->fill(xp, s*weight); 00054 else 00055 _histXpD0_C->fill(xp, s*weight); 00056 } 00057 if (onresonance) 00058 _histXpD0_R_N->fill(xp, weight); 00059 else 00060 _histXpD0_C_N->fill(xp, weight); 00061 break; 00062 00063 case 411: 00064 MSG_DEBUG("D+ found"); 00065 mH2 = 3.49547; // 1.86962^2 00066 xp = mom/sqrt(s/4.0 - mH2); 00067 if(!onresonance) _sigmaDPlus->fill(10.6,weight); 00068 if(checkDecay(p.genParticle())) { 00069 if (onresonance) 00070 _histXpDplus_R->fill(xp, s*weight); 00071 else 00072 _histXpDplus_C->fill(xp, s*weight); 00073 } 00074 if (onresonance) 00075 _histXpDplus_R_N->fill(xp, weight); 00076 else 00077 _histXpDplus_C_N->fill(xp, weight); 00078 break; 00079 case 431: 00080 MSG_DEBUG("D+_s found"); 00081 mH2 = 3.87495; // 1.96849^2 00082 xp = mom/sqrt(s/4.0 - mH2); 00083 if(!onresonance) _sigmaDs->fill(10.6,weight); 00084 if(checkDecay(p.genParticle())) { 00085 if (onresonance) 00086 _histXpDplus_s_R->fill(xp, s*weight); 00087 else 00088 _histXpDplus_s_C->fill(xp, s*weight); 00089 } 00090 if (onresonance) 00091 _histXpDplus_s_R_N->fill(xp, weight); 00092 else 00093 _histXpDplus_s_C_N->fill(xp, weight); 00094 break; 00095 00096 case 4122: 00097 MSG_DEBUG("Lambda_c found"); 00098 mH2 = 5.22780; // 2.28646^2 00099 xp = mom/sqrt(s/4.0 - mH2); 00100 if(!onresonance) _sigmaLambdac ->fill(10.6,weight); 00101 if(checkDecay(p.genParticle())) { 00102 if (onresonance) 00103 _histXpLambda_c_R->fill(xp, s*weight); 00104 else 00105 _histXpLambda_c_C->fill(xp, s*weight); 00106 } 00107 if (onresonance) 00108 _histXpLambda_c_R_N->fill(xp, weight); 00109 else 00110 _histXpLambda_c_C_N->fill(xp, weight); 00111 break; 00112 00113 00114 case 413: { 00115 MSG_DEBUG("D*+ found"); 00116 mH2 = 4.04119; // 2.01027^2 00117 xp = mom/sqrt(s/4.0 - mH2); 00118 if(!onresonance) { 00119 _sigmaDStarPlusA->fill(10.6,weight); 00120 _sigmaDStarPlusB->fill(10.6,weight); 00121 _sigmaDStarPlusC->fill(10.6,weight); 00122 } 00123 const GenParticle* Dmeson = p.genParticle(); 00124 const GenVertex* dv = p.genParticle()->end_vertex(); 00125 bool D0decay(false), Pi0decay(false), Piplusdecay(false), Dplusdecay(false); 00126 00127 for (GenVertex::particles_out_const_iterator 00128 pp = dv->particles_out_const_begin(); 00129 pp != dv->particles_out_const_end(); ++pp) { 00130 if (abs((*pp)->pdg_id()) == 421) { 00131 Dmeson = *pp; 00132 D0decay = true; 00133 } else if (abs((*pp)->pdg_id()) == 411) { 00134 Dmeson = *pp; 00135 Dplusdecay = true; 00136 } else if (abs((*pp)->pdg_id()) == 111) { 00137 Pi0decay = true; 00138 } else if (abs((*pp)->pdg_id()) == 211) { 00139 Piplusdecay = true; 00140 } 00141 } 00142 if (D0decay && Piplusdecay && checkDecay(Dmeson)) { 00143 if (onresonance) 00144 _histXpDstarplus2D0_R->fill(xp, s*weight); 00145 else 00146 _histXpDstarplus2D0_C->fill(xp, s*weight); 00147 } 00148 else if (Dplusdecay && Pi0decay && checkDecay(Dmeson)) { 00149 if (onresonance) 00150 _histXpDstarplus2Dplus_R->fill(xp, s*weight); 00151 else 00152 _histXpDstarplus2Dplus_C->fill(xp, s*weight); 00153 } 00154 else { 00155 MSG_WARNING("Unexpected D* decay!"); 00156 } 00157 if (onresonance) { 00158 _histXpDstarplus2D0_R_N->fill(xp, weight); 00159 _histXpDstarplus2Dplus_R_N->fill(xp, weight); 00160 } 00161 else { 00162 _histXpDstarplus2D0_C_N->fill(xp, weight); 00163 _histXpDstarplus2Dplus_C_N->fill(xp, weight); 00164 } 00165 break; 00166 } 00167 00168 case 423: 00169 MSG_DEBUG("D*0 found"); 00170 mH2 = 4.02793; // 2.00697**2 00171 xp = mom/sqrt(s/4.0 - mH2); 00172 if(!onresonance) _sigmaDStar0 ->fill(10.6,weight); 00173 MSG_DEBUG("xp = " << xp); 00174 const GenParticle* Dmeson = p.genParticle(); 00175 const GenVertex* dv = p.genParticle()->end_vertex(); 00176 bool D0decay(false), Pi0decay(false); 00177 /// @todo Use better looping 00178 for (GenVertex::particles_out_const_iterator pp = dv->particles_out_const_begin(); pp != dv->particles_out_const_end(); ++pp) { 00179 if (abs((*pp)->pdg_id()) == 421) { 00180 Dmeson = *pp; 00181 D0decay = true; 00182 } 00183 else if (abs((*pp)->pdg_id()) == 111) { 00184 Pi0decay = true; 00185 } 00186 } 00187 if (D0decay && Pi0decay && checkDecay(Dmeson)) { 00188 if (onresonance) 00189 _histXpDstar0_R->fill(xp, s*weight); 00190 else { 00191 _histXpDstar0_C->fill(xp, s*weight); 00192 } 00193 } 00194 if (onresonance) 00195 _histXpDstar0_R_N->fill(xp, weight); 00196 else { 00197 _histXpDstar0_C_N->fill(xp, weight); 00198 } 00199 break; 00200 } 00201 } 00202 } // analyze 00203 00204 00205 void finalize() { 00206 scale(_histXpDstarplus2D0_R, crossSection()/nanobarn/sumOfWeights()); 00207 scale(_histXpD0_R, crossSection()/nanobarn/sumOfWeights()); 00208 scale(_histXpDplus_R, crossSection()/nanobarn/sumOfWeights()); 00209 scale(_histXpDplus_s_R, crossSection()/nanobarn/sumOfWeights()); 00210 scale(_histXpLambda_c_R, crossSection()/nanobarn/sumOfWeights()); 00211 scale(_histXpDstarplus2Dplus_R, crossSection()/nanobarn/sumOfWeights()); 00212 scale(_histXpDstar0_R, crossSection()/nanobarn/sumOfWeights()); 00213 00214 scale(_histXpDstarplus2D0_C, crossSection()/nanobarn/sumOfWeights()); 00215 scale(_histXpD0_C, crossSection()/nanobarn/sumOfWeights()); 00216 scale(_histXpDplus_C, crossSection()/nanobarn/sumOfWeights()); 00217 scale(_histXpDplus_s_C, crossSection()/nanobarn/sumOfWeights()); 00218 scale(_histXpLambda_c_C, crossSection()/nanobarn/sumOfWeights()); 00219 scale(_histXpDstarplus2Dplus_C, crossSection()/nanobarn/sumOfWeights()); 00220 scale(_histXpDstar0_C, crossSection()/nanobarn/sumOfWeights()); 00221 00222 normalize(_histXpDstarplus2D0_R_N); 00223 normalize(_histXpD0_R_N); 00224 normalize(_histXpDplus_R_N); 00225 normalize(_histXpDplus_s_R_N); 00226 normalize(_histXpLambda_c_R_N); 00227 normalize(_histXpDstarplus2Dplus_R_N); 00228 normalize(_histXpDstar0_R_N); 00229 00230 normalize(_histXpDstarplus2D0_C_N); 00231 normalize(_histXpD0_C_N); 00232 normalize(_histXpDplus_C_N); 00233 normalize(_histXpDplus_s_C_N); 00234 normalize(_histXpLambda_c_C_N); 00235 normalize(_histXpDstarplus2Dplus_C_N); 00236 normalize(_histXpDstar0_C_N); 00237 00238 scale(_sigmaD0, crossSection()/picobarn/sumOfWeights()); 00239 scale(_sigmaDPlus, crossSection()/picobarn/sumOfWeights()); 00240 scale(_sigmaDs, crossSection()/picobarn/sumOfWeights()); 00241 scale(_sigmaLambdac, crossSection()/picobarn/sumOfWeights()); 00242 scale(_sigmaDStar0, crossSection()/picobarn/sumOfWeights()); 00243 scale(_sigmaDStarPlusA, crossSection()/picobarn/sumOfWeights()); 00244 scale(_sigmaDStarPlusB, crossSection()/picobarn/sumOfWeights()); 00245 scale(_sigmaDStarPlusC, crossSection()/picobarn/sumOfWeights()); 00246 } // finalize 00247 00248 00249 void init() { 00250 addProjection(Beam(), "Beams"); 00251 addProjection(UnstableFinalState(), "UFS"); 00252 00253 // continuum cross sections 00254 _sigmaD0 = bookHisto1D(1,1,1); 00255 _sigmaDPlus = bookHisto1D(1,1,2); 00256 _sigmaDs = bookHisto1D(1,1,3); 00257 _sigmaLambdac = bookHisto1D(1,1,4); 00258 _sigmaDStar0 = bookHisto1D(1,1,5); 00259 _sigmaDStarPlusA = bookHisto1D(1,1,6); 00260 _sigmaDStarPlusB = bookHisto1D(1,1,7); 00261 _sigmaDStarPlusC = bookHisto1D(1,1,8); 00262 00263 // histograms for continuum data (sqrt(s) = 10.52 GeV) 00264 _histXpDstarplus2D0_C = bookHisto1D(2, 1, 1); 00265 _histXpD0_C = bookHisto1D(3, 1, 1); 00266 _histXpDplus_C = bookHisto1D(4, 1, 1); 00267 _histXpDplus_s_C = bookHisto1D(5, 1, 1); 00268 _histXpLambda_c_C = bookHisto1D(6, 1, 1); 00269 _histXpDstarplus2Dplus_C = bookHisto1D(7, 1, 1); 00270 _histXpDstar0_C = bookHisto1D(8, 1, 1); 00271 00272 // histograms for on-resonance data (sqrt(s) = 10.58 GeV) 00273 _histXpDstarplus2D0_R = bookHisto1D(9, 1, 1); 00274 _histXpD0_R = bookHisto1D(10, 1, 1); 00275 _histXpDplus_R = bookHisto1D(11, 1, 1); 00276 _histXpDplus_s_R = bookHisto1D(12, 1, 1); 00277 _histXpLambda_c_R = bookHisto1D(13, 1, 1); 00278 _histXpDstarplus2Dplus_R = bookHisto1D(14, 1, 1); 00279 _histXpDstar0_R = bookHisto1D(15, 1, 1); 00280 00281 // histograms for continuum data (sqrt(s) = 10.52 GeV) 00282 _histXpDstarplus2D0_C_N = bookHisto1D(2, 1, 2); 00283 _histXpD0_C_N = bookHisto1D(3, 1, 2); 00284 _histXpDplus_C_N = bookHisto1D(4, 1, 2); 00285 _histXpDplus_s_C_N = bookHisto1D(5, 1, 2); 00286 _histXpLambda_c_C_N = bookHisto1D(6, 1, 2); 00287 _histXpDstarplus2Dplus_C_N = bookHisto1D(7, 1, 2); 00288 _histXpDstar0_C_N = bookHisto1D(8, 1, 2); 00289 00290 // histograms for on-resonance data (sqrt(s) = 10.58 GeV) 00291 _histXpDstarplus2D0_R_N = bookHisto1D(9, 1, 2); 00292 _histXpD0_R_N = bookHisto1D(10, 1, 2); 00293 _histXpDplus_R_N = bookHisto1D(11, 1, 2); 00294 _histXpDplus_s_R_N = bookHisto1D(12, 1, 2); 00295 _histXpLambda_c_R_N = bookHisto1D(13, 1, 2); 00296 _histXpDstarplus2Dplus_R_N = bookHisto1D(14, 1, 2); 00297 _histXpDstar0_R_N = bookHisto1D(15, 1, 2); 00298 00299 } // init 00300 00301 private: 00302 00303 //@{ 00304 /// Histograms 00305 00306 // Histograms for the continuum cross sections 00307 Histo1DPtr _sigmaD0; 00308 Histo1DPtr _sigmaDPlus; 00309 Histo1DPtr _sigmaDs; 00310 Histo1DPtr _sigmaLambdac; 00311 Histo1DPtr _sigmaDStar0; 00312 Histo1DPtr _sigmaDStarPlusA; 00313 Histo1DPtr _sigmaDStarPlusB; 00314 Histo1DPtr _sigmaDStarPlusC; 00315 00316 // histograms for continuum data (sqrt(s) = 10.52 GeV) 00317 Histo1DPtr _histXpDstarplus2D0_C; 00318 Histo1DPtr _histXpD0_C; 00319 Histo1DPtr _histXpDplus_C; 00320 Histo1DPtr _histXpDplus_s_C; 00321 Histo1DPtr _histXpLambda_c_C; 00322 Histo1DPtr _histXpDstarplus2Dplus_C; 00323 Histo1DPtr _histXpDstar0_C; 00324 Histo1DPtr _histXpDstarplus2D0_C_N; 00325 Histo1DPtr _histXpD0_C_N; 00326 Histo1DPtr _histXpDplus_C_N; 00327 Histo1DPtr _histXpDplus_s_C_N; 00328 Histo1DPtr _histXpLambda_c_C_N; 00329 Histo1DPtr _histXpDstarplus2Dplus_C_N; 00330 Histo1DPtr _histXpDstar0_C_N; 00331 00332 // histograms for on-resonance data (sqrt(s) = 10.58 GeV) 00333 Histo1DPtr _histXpDstarplus2D0_R; 00334 Histo1DPtr _histXpD0_R; 00335 Histo1DPtr _histXpDplus_R; 00336 Histo1DPtr _histXpDplus_s_R; 00337 Histo1DPtr _histXpLambda_c_R; 00338 Histo1DPtr _histXpDstarplus2Dplus_R; 00339 Histo1DPtr _histXpDstar0_R; 00340 Histo1DPtr _histXpDstarplus2D0_R_N; 00341 Histo1DPtr _histXpD0_R_N; 00342 Histo1DPtr _histXpDplus_R_N; 00343 Histo1DPtr _histXpDplus_s_R_N; 00344 Histo1DPtr _histXpLambda_c_R_N; 00345 Histo1DPtr _histXpDstarplus2Dplus_R_N; 00346 Histo1DPtr _histXpDstar0_R_N; 00347 //@} 00348 00349 bool checkDecay(const GenParticle* p) { 00350 unsigned int nstable=0,npip=0,npim=0; 00351 unsigned int np=0,nap=0,nKp=0,nKm=0,nPhi=0; 00352 findDecayProducts(p, nstable, npip, npim, np, nap, nKp, nKm, nPhi); 00353 int id = p->pdg_id(); 00354 //D0 00355 if(id==421) { 00356 if(nstable==2&&nKm==1&&npip==1) return true; 00357 } 00358 //Dbar0 00359 else if(id==-421) { 00360 if(nstable==2&&nKp==1&&npim==1) return true; 00361 } 00362 // D+ 00363 else if(id==411) { 00364 if(nstable==3&&nKm==1&&npip==2) return true; 00365 } 00366 // D- 00367 else if(id==-411) { 00368 if(nstable==3&&nKp==1&&npim==2) return true; 00369 } 00370 // D_s+ 00371 else if(id==431) { 00372 if(nstable==1&&nPhi==1&&npip==1) return true; 00373 } 00374 // D_s- 00375 else if(id==-431) { 00376 if(nstable==1&&nPhi==1&&npim==1) return true; 00377 } 00378 // Lambda_c 00379 else if(id==4122) { 00380 if(nstable==3&&np==1&&npip==1&&nKm==1) return true; 00381 } 00382 // Lambda_c bar 00383 else if(id==-4122) { 00384 if(nstable==3&&nap==1&&npim==1&&nKp==1) return true; 00385 } 00386 return false; 00387 } 00388 00389 void findDecayProducts(const GenParticle* p, 00390 unsigned int & nstable, unsigned int & npip, 00391 unsigned int & npim , unsigned int & np, 00392 unsigned int & nap , unsigned int & nKp, 00393 unsigned int & nKm , unsigned int & nPhi) { 00394 const GenVertex* dv = p->end_vertex(); 00395 /// @todo Use better looping 00396 for (GenVertex::particles_out_const_iterator pp = dv->particles_out_const_begin(); pp != dv->particles_out_const_end(); ++pp) { 00397 int id = (*pp)->pdg_id(); 00398 if(id==333) 00399 ++nPhi; 00400 else if(id==111||id==221) 00401 ++nstable; 00402 else if((*pp)->end_vertex()) 00403 findDecayProducts(*pp, nstable, npip, npim, np, nap, nKp, nKm, nPhi); 00404 else { 00405 if (id != 22) ++nstable; 00406 if (id == 211) ++npip; 00407 else if(id == -211) ++npim; 00408 else if(id == 2212) ++np; 00409 else if(id == -2212) ++nap; 00410 else if(id == 321) ++nKp; 00411 else if(id == -321) ++nKm; 00412 } 00413 } 00414 } 00415 00416 }; 00417 00418 00419 // The hook for the plugin system 00420 DECLARE_RIVET_PLUGIN(BELLE_2006_S6265367); 00421 00422 } Generated on Tue Sep 30 2014 19:45:42 for The Rivet MC analysis system by ![]() |