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