50 ClassImp(TParticlePDG);
55 TParticlePDG::TParticlePDG()
81 TParticlePDG::TParticlePDG(
const char* Name,
const char* Title, Double_t aMass,
82 Bool_t aStable, Double_t aWidth, Double_t aCharge,
83 const char* aParticleClass, Int_t aPdgCode, Int_t Anti,
105 fParticleClass = aParticleClass;
107 fTrackingCode = aTrackingCode;
109 if (Anti) fAntiParticle =
this;
110 else fAntiParticle = 0;
112 const Double_t kHbar = 6.58211889e-25;
113 if (fWidth != 0.) fLifetime = kHbar / fWidth;
119 TParticlePDG::TParticlePDG(
const TParticlePDG& pdg) :
121 fPdgCode(pdg.fPdgCode),
123 fCharge(pdg.fCharge),
124 fLifetime(pdg.fLifetime),
126 fParity(pdg.fParity),
128 fIsospin(pdg.fIsospin),
130 fStrangeness(pdg.fStrangeness),
132 fBeauty(pdg.fBeauty),
136 fStable(pdg.fStable),
137 fDecayList(pdg.fDecayList),
138 fParticleClass(pdg.fParticleClass),
139 fTrackingCode(pdg.fTrackingCode),
140 fAntiParticle(pdg.fAntiParticle)
147 TParticlePDG& TParticlePDG::operator=(
const TParticlePDG& pdg)
150 TNamed::operator=(pdg);
151 fPdgCode=pdg.fPdgCode;
154 fLifetime=pdg.fLifetime;
158 fIsospin=pdg.fIsospin;
160 fStrangeness=pdg.fStrangeness;
167 fDecayList=pdg.fDecayList;
168 fParticleClass=pdg.fParticleClass;
169 fTrackingCode=pdg.fTrackingCode;
170 fAntiParticle=pdg.fAntiParticle;
178 TParticlePDG::~TParticlePDG() {
180 fDecayList->Delete();
189 Int_t TParticlePDG::AddDecayChannel(Int_t Type,
190 Double_t BranchingRatio,
192 Int_t* DaughterPdgCode)
194 Int_t n = NDecayChannels();
195 if (NDecayChannels() == 0) {
196 fDecayList =
new TObjArray(5);
198 TDecayChannel* dc =
new TDecayChannel(n,Type,BranchingRatio,NDaughters,
207 TDecayChannel* TParticlePDG::DecayChannel(Int_t i)
209 return (TDecayChannel*) fDecayList->At(i);
215 void TParticlePDG::PrintDecayChannel(TDecayChannel* dc, Option_t* option)
const
217 if (strstr(option,
"banner")) {
220 printf(
" Channel Code BranchingRatio Nd ");
221 printf(
" ...................Daughters.................... \n");
223 if (strstr(option,
"data")) {
225 TDatabasePDG* db = TDatabasePDG::Instance();
227 printf(
"%7i %5i %12.5e %5i ",
229 dc->MatrixElementCode(),
230 dc->BranchingRatio(),
233 for (
int i=0; i<dc->NDaughters(); i++) {
234 int ic = dc->DaughterPdgCode(i);
235 TParticlePDG* p = db->GetParticle(ic);
236 printf(
" %15s(%8i)",p->GetName(),ic);
248 void TParticlePDG::Print(Option_t *)
const
250 printf(
"%-20s %6d\t",GetName(),fPdgCode);
252 printf(
"Mass:%9.4f Width (GeV):%11.4e\tCharge: %5.1f\n",
253 fMass, fWidth, fCharge);
255 printf(
"Mass:%9.4f Width (GeV): Stable\tCharge: %5.1f\n",
259 int banner_printed = 0;
260 TIter next(fDecayList);
262 while ((dc = (TDecayChannel*)next())) {
263 if (! banner_printed) {
264 PrintDecayChannel(dc,
"banner");
267 PrintDecayChannel(dc,
"data");