MC_PRINTEVENT.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 00007 namespace Rivet { 00008 00009 00010 /// @author Andy Buckley 00011 class MC_PRINTEVENT : public Analysis { 00012 public: 00013 00014 /// @name Constructors etc. 00015 //@{ 00016 00017 /// Constructor 00018 MC_PRINTEVENT() 00019 : Analysis("MC_PRINTEVENT") 00020 { } 00021 00022 //@} 00023 00024 00025 public: 00026 00027 /// @name Analysis methods 00028 //@{ 00029 00030 void init() { 00031 00032 /// Set up particle name map 00033 // quarks & gluons 00034 _pnames[1] = "d"; 00035 _pnames[-1] = "d~"; 00036 _pnames[2] = "u"; 00037 _pnames[-2] = "u~"; 00038 _pnames[3] = "s"; 00039 _pnames[-3] = "s~"; 00040 _pnames[4] = "c"; 00041 _pnames[-4] = "c~"; 00042 _pnames[5] = "b"; 00043 _pnames[-5] = "b~"; 00044 _pnames[6] = "t"; 00045 _pnames[-6] = "t~"; 00046 // bosons 00047 _pnames[21] = "g"; 00048 _pnames[22] = "gamma"; 00049 _pnames[23] = "W+"; 00050 _pnames[-23] = "W-"; 00051 _pnames[-24] = "Z0"; 00052 _pnames[-25] = "h0"; 00053 _pnames[-26] = "h0"; 00054 // leptons 00055 _pnames[11] = "e-"; 00056 _pnames[-11] = "e+"; 00057 _pnames[13] = "mu-"; 00058 _pnames[-13] = "mu+"; 00059 _pnames[15] = "tau-"; 00060 _pnames[-15] = "tau+"; 00061 _pnames[12] = "nu_e"; 00062 _pnames[-12] = "nu_e~"; 00063 _pnames[14] = "nu_mu"; 00064 _pnames[-14] = "nu_mu~"; 00065 _pnames[16] = "nu_tau"; 00066 _pnames[-16] = "nu_tau~"; 00067 // common hadrons 00068 _pnames[111] = "pi0"; 00069 _pnames[211] = "pi+"; 00070 _pnames[-211] = "pi-"; 00071 _pnames[221] = "eta"; 00072 _pnames[331] = "eta'"; 00073 _pnames[113] = "rho0"; 00074 _pnames[213] = "rho+"; 00075 _pnames[-213] = "rho-"; 00076 _pnames[223] = "omega"; 00077 _pnames[333] = "phi"; 00078 _pnames[130] = "K0L"; 00079 _pnames[310] = "K0S"; 00080 _pnames[311] = "K0"; 00081 _pnames[-311] = "K0"; 00082 _pnames[321] = "K+"; 00083 _pnames[-321] = "K-"; 00084 _pnames[313] = "K*0"; 00085 _pnames[-313] = "K*0~"; 00086 _pnames[323] = "K*+"; 00087 _pnames[-323] = "K*-"; 00088 _pnames[411] = "D+"; 00089 _pnames[-411] = "D-"; 00090 _pnames[421] = "D0"; 00091 _pnames[-421] = "D0~"; 00092 _pnames[413] = "D*+"; 00093 _pnames[-413] = "D*-"; 00094 _pnames[423] = "D*0"; 00095 _pnames[-423] = "D*0~"; 00096 _pnames[431] = "Ds+"; 00097 _pnames[-431] = "Ds-"; 00098 _pnames[433] = "Ds*+"; 00099 _pnames[-433] = "Ds*-"; 00100 _pnames[511] = "B0"; 00101 _pnames[-511] = "B0~"; 00102 _pnames[521] = "B+"; 00103 _pnames[-521] = "B-"; 00104 _pnames[513] = "B*0"; 00105 _pnames[-513] = "B*0~"; 00106 _pnames[523] = "B*+"; 00107 _pnames[-523] = "B*-"; 00108 _pnames[531] = "B0s"; 00109 _pnames[541] = "Bc+"; 00110 _pnames[-541] = "Bc-"; 00111 _pnames[441] = "eta_c(1S)"; 00112 _pnames[443] = "J/psi(1S)"; 00113 _pnames[551] = "eta_b(1S)"; 00114 _pnames[553] = "Upsilon(1S)"; 00115 _pnames[2212] = "p+"; 00116 _pnames[-2212] = "p-"; 00117 _pnames[2112] = "n"; 00118 _pnames[-2112] = "n~"; 00119 _pnames[2224] = "Delta++"; 00120 _pnames[2214] = "Delta+"; 00121 _pnames[2114] = "Delta0"; 00122 _pnames[1114] = "Delta-"; 00123 _pnames[3122] = "Lambda"; 00124 _pnames[-3122] = "Lambda~"; 00125 _pnames[3222] = "Sigma+"; 00126 _pnames[-3222] = "Sigma+~"; 00127 _pnames[3212] = "Sigma0"; 00128 _pnames[-3212] = "Sigma0~"; 00129 _pnames[3112] = "Sigma-"; 00130 _pnames[-3112] = "Sigma-~"; 00131 _pnames[4122] = "Lambda_c+"; 00132 _pnames[-4122] = "Lambda_c-"; 00133 _pnames[5122] = "Lambda_b"; 00134 // exotic 00135 _pnames[32] = "Z'"; 00136 _pnames[34] = "W'+"; 00137 _pnames[-34] = "W'-"; 00138 _pnames[35] = "H0"; 00139 _pnames[36] = "A0"; 00140 _pnames[37] = "H+"; 00141 _pnames[-37] = "H-"; 00142 // shower-specific 00143 _pnames[91] = "cluster"; 00144 _pnames[92] = "string"; 00145 _pnames[9922212] = "remn"; 00146 _pnames[1103] = "dd"; 00147 _pnames[2101] = "ud0"; 00148 _pnames[2103] = "ud1"; 00149 _pnames[2203] = "uu"; 00150 00151 } 00152 00153 00154 /// Perform the per-event analysis 00155 void analyze(const Event& event) { 00156 //printEvent(event.genEvent()); 00157 00158 const GenEvent& evt = event.genEvent(); 00159 00160 cout << string(120, '=') << "\n" << endl; 00161 00162 // Weights 00163 cout << "Weights(" << evt.weights().size() << ")="; 00164 for (HepMC::WeightContainer::const_iterator wgt = evt.weights().begin(); wgt != evt.weights().end(); ++wgt) { 00165 cout << *wgt << " "; 00166 } 00167 cout << "\n" 00168 << "EventScale " << evt.event_scale() 00169 << " [energy] \t alphaQCD=" << evt.alphaQCD() 00170 << "\t alphaQED=" << evt.alphaQED() << endl; 00171 00172 if (evt.pdf_info()) { 00173 cout << "PdfInfo: id1=" << evt.pdf_info()->id1() 00174 << " id2=" << evt.pdf_info()->id2() 00175 << " x1=" << evt.pdf_info()->x1() 00176 << " x2=" << evt.pdf_info()->x2() 00177 << " q=" << evt.pdf_info()->scalePDF() 00178 << " xpdf1=" << evt.pdf_info()->pdf1() 00179 << " xpdf2=" << evt.pdf_info()->pdf2() 00180 << endl; 00181 } else { 00182 cout << "PdfInfo: EMPTY"; 00183 } 00184 00185 // Print a legend to describe the particle info 00186 char particle_legend[120]; 00187 sprintf( particle_legend," %9s %8s %-15s %4s %8s %8s (%9s,%9s,%9s,%9s,%9s)", 00188 "Barcode","PDG ID","Name","Stat","ProdVtx","DecayVtx","Px","Py","Pz","E ","m"); 00189 cout << endl; 00190 cout << " GenParticle Legend\n" << particle_legend << "\n"; 00191 // if (m_vertexinfo) { 00192 // sprintf( particle_legend," %60s (%9s,%9s,%9s,%9s)"," ","Vx","Vy","Vz","Vct "); 00193 // cout << particle_legend << endl; 00194 // } 00195 // cout << string(120, '_') << endl; 00196 00197 // Print all particles 00198 // const HepPDT::ParticleDataTable* pdt = m_ppsvc->PDT(); 00199 for (HepMC::GenEvent::particle_const_iterator p = evt.particles_begin(); p != evt.particles_end(); ++p) { 00200 int p_bcode = (*p)->barcode(); 00201 int p_pdg_id = (*p)->pdg_id(); 00202 double p_px = (*p)->momentum().px(); 00203 double p_py = (*p)->momentum().py(); 00204 double p_pz = (*p)->momentum().pz(); 00205 double p_pe = (*p)->momentum().e(); 00206 00207 int p_stat = (*p)->status(); 00208 int p_prodvtx = 0; 00209 if ((*p)->production_vertex() && (*p)->production_vertex()->barcode() != 0) { 00210 p_prodvtx = (*p)->production_vertex()->barcode(); 00211 } 00212 int p_endvtx = 0; 00213 if ((*p)->end_vertex() && (*p)->end_vertex()->barcode() != 0) { 00214 p_endvtx=(*p)->end_vertex()->barcode(); 00215 } 00216 // double v_x = 0; 00217 // double v_y = 0; 00218 // double v_z = 0; 00219 // double v_ct = 0; 00220 // if ((*p)->production_vertex()) { 00221 // v_x = (*p)->production_vertex()->position().x(); 00222 // v_y = (*p)->production_vertex()->position().y(); 00223 // v_z = (*p)->production_vertex()->position().z(); 00224 // v_ct = (*p)->production_vertex()->position().t(); 00225 // } 00226 00227 // Mass (prefer generated mass if available) 00228 double p_mass = (*p)->generated_mass(); 00229 if (p_mass == 0 && !(p_stat == 1 && p_pdg_id == 22)) p_mass = (*p)->momentum().m(); 00230 00231 // Particle names 00232 string sname = (_pnames.find(p_pdg_id) != _pnames.end()) ? _pnames[p_pdg_id] : ""; 00233 const char* p_name = sname.c_str() ; 00234 00235 char particle_entries[120]; 00236 sprintf(particle_entries, " %9i %8i %-15s %4i %8i %8i (%+9.3g,%+9.3g,%+9.3g,%+9.3g,%9.3g)", 00237 p_bcode, p_pdg_id, p_name, p_stat, p_prodvtx, p_endvtx, p_px, p_py, p_pz, p_pe, p_mass); 00238 cout << particle_entries << "\n"; 00239 // if (m_vertexinfo) { 00240 // sprintf(particle_entries," %60s (%+9.3g,%+9.3g,%+9.3g,%+9.3g)"," ",v_x, v_y, v_z, v_ct); 00241 // cout << particle_entries << "\n"; 00242 // } 00243 } 00244 00245 cout << "\n" << endl; 00246 } 00247 00248 00249 /// Normalise histograms etc., after the run 00250 void finalize() { } 00251 00252 //@} 00253 00254 private: 00255 00256 map<long, string> _pnames; 00257 00258 00259 }; 00260 00261 00262 00263 // The hook for the plugin system 00264 DECLARE_RIVET_PLUGIN(MC_PRINTEVENT); 00265 00266 } Generated on Fri Dec 21 2012 15:03:41 for The Rivet MC analysis system by ![]() |