hepmc - Blame information for rev 69
Subversion Repositories:
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 2 | garren | 1 | ////////////////////////////////////////////////////////////////////////// |
| 2 | // Matt.Dobbs@Cern.CH, September 1999 | ||
| 3 | // | ||
| 4 | // particle properties common to all particles of a given PDG id | ||
| 5 | ////////////////////////////////////////////////////////////////////////// | ||
| 6 | |||
| 7 | #include "HepMC/ParticleData.h" | ||
| 8 | #include <cstdio> // needed for formatted output using sprintf | ||
| 9 | |||
| 10 | namespace HepMC { | ||
| 11 | |||
| 12 | ParticleData::ParticleData( std::string name, int id, double charge, | ||
| 13 | double mass, double clifetime, double spin ) : | ||
| 14 | m_name(name), m_pdg_id(id), m_mass(mass), m_clifetime(clifetime) | ||
| 15 | { | ||
| 65 | garren | 16 | /// Units ID: defined by PDG group (particles are +ve, antipart are -ve) |
| 17 | /// also consistent with the Pythia definitions | ||
| 18 | /// charge: fraction of proton charge | ||
| 19 | /// mass | ||
| 20 | /// cLifetime: c*time | ||
| 21 | /// Default mass=0 and cLifetime is -1 which means stable (width= 0.) | ||
| 22 | /// These defaults exist because many very basic MC generators | ||
| 23 | /// may produce only massless stable particles in the event record. | ||
| 2 | garren | 24 | // |
| 25 | set_charge(charge); | ||
| 26 | set_spin(spin); | ||
| 27 | s_counter++; | ||
| 28 | } | ||
| 29 | |||
| 30 | ParticleData::ParticleData( const char* name, int id, double charge, | ||
| 31 | double mass, double clifetime, double spin ): | ||
| 32 | m_name(name), m_pdg_id(id), m_mass(mass), m_clifetime(clifetime) | ||
| 33 | { | ||
| 65 | garren | 34 | /// note, this constructor is redundant to the one above, |
| 35 | /// i.e. one could use: | ||
| 36 | /// new HepMC::ParticleData(string("electron"),11,-1,0.000511,-1,.5); | ||
| 37 | /// but we keep it because it is convenient. | ||
| 2 | garren | 38 | // |
| 39 | set_charge(charge); | ||
| 40 | set_spin(spin); | ||
| 41 | s_counter++; | ||
| 42 | } | ||
| 43 | |||
| 44 | ParticleData::~ParticleData() { | ||
| 45 | s_counter--; | ||
| 46 | } | ||
| 47 | |||
| 48 | void ParticleData::print( std::ostream& ostr ) const { | ||
| 49 | ostr << "ParticleData: " << name() << "\t" | ||
| 50 | << " ID[pdg]:" << pdg_id() | ||
| 51 | << " Charge[e+]:" << charge() | ||
| 52 | << " Mass:" << mass() | ||
| 53 | << " Tau:" << clifetime() | ||
| 54 | << " J:" << spin() << std::endl; | ||
| 55 | } | ||
| 56 | |||
| 57 | //////////////////// | ||
| 58 | // access methods // | ||
| 59 | //////////////////// | ||
| 60 | |||
| 61 | int ParticleData::model_independent_pdg_id_() const { | ||
| 65 | garren | 62 | /// returns the particle id with the seventh |
| 63 | /// digit removed for susy/excited/technicolor particles. | ||
| 64 | /// Thus en excited electron (40000011) would be returned as 11 | ||
| 65 | /// Useful only internally for sorting particles! | ||
| 2 | garren | 66 | int id = m_pdg_id; |
| 67 | if ( id/1000000 >=1 && id/1000000 <= 4 ) id %= 1000000; | ||
| 68 | return id; | ||
| 69 | } | ||
| 70 | |||
| 71 | double ParticleData::width() const { | ||
| 72 | double width; | ||
| 73 | if ( m_clifetime > 0 ) { | ||
| 74 | width = HepMC_hbarc/m_clifetime; | ||
| 75 | } else if ( m_clifetime == 0 ) { | ||
| 76 | width = -1; | ||
| 77 | } else { | ||
| 78 | width = 0; | ||
| 79 | } | ||
| 80 | return width; | ||
| 81 | } | ||
| 82 | |||
| 83 | ///////////// | ||
| 84 | // Static // | ||
| 85 | ///////////// | ||
| 86 | unsigned int ParticleData::counter() { return s_counter; } | ||
| 87 | unsigned int ParticleData::s_counter = 0; | ||
| 88 | |||
| 89 | ///////////// | ||
| 90 | // Friends // | ||
| 91 | ///////////// | ||
| 92 | |||
| 69 | garren | 93 | /// write to ostr |
| 2 | garren | 94 | std::ostream& operator<<( std::ostream& ostr, const ParticleData& pdata ) { |
| 95 | char outline[80]; | ||
| 96 | sprintf( outline,"%+9d%21s%+6.2f%19.11e%19.11e%5.1f", | ||
| 97 | pdata.pdg_id(), | ||
| 98 | pdata.name().substr(0,21).c_str(), | ||
| 99 | pdata.charge(), | ||
| 100 | pdata.mass(), | ||
| 101 | pdata.clifetime(), | ||
| 102 | pdata.spin() ); | ||
| 103 | return ostr << outline; | ||
| 104 | } | ||
| 105 | |||
| 106 | ////////////////////// | ||
| 107 | // Related Methods // | ||
| 108 | ////////////////////// | ||
| 109 | |||
| 110 | double clifetime_from_width( double width ) { | ||
| 65 | garren | 111 | /// if you want to instantiate the particle lifetime from its width, |
| 112 | /// use this static method inside the constructor: | ||
| 2 | garren | 113 | // i.e. new ParticleData( |
| 114 | if ( width > 0 ) return HepMC_hbarc/width; | ||
| 115 | if ( width == 0. ) return -1.; | ||
| 116 | return 0.; | ||
| 117 | } | ||
| 118 | |||
| 119 | } // HepMC | ||
| 120 | |||
| 121 | |||
| 122 | |||
| 123 | |||
| 124 | |||
| 125 | |||
| 126 |
