Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TDatabasePDG.h
Go to the documentation of this file.
1 // @(#)root/eg:$Id$
2 // Author: Pasha Murat 12/02/99
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 #ifndef ROOT_TDatabasePDG
13 #define ROOT_TDatabasePDG
14 
15 #include "TParticlePDG.h"
16 #include "TParticleClassPDG.h"
17 
18 class THashList;
19 class TExMap;
20 
21 class TDatabasePDG: public TNamed {
22 
23 protected:
24  THashList *fParticleList; // list of PDG particles
25  TObjArray *fListOfClasses; // list of classes (leptons etc.)
26  mutable TExMap *fPdgMap; //!hash-map from pdg-code to particle
27 
28  // make copy-constructor and assigment protected since class cannot be copied
29  TDatabasePDG(const TDatabasePDG& db)
30  : TNamed(db), fParticleList(db.fParticleList),
31  fListOfClasses(db.fListOfClasses), fPdgMap(0) { }
32 
33  TDatabasePDG& operator=(const TDatabasePDG& db)
34  {if(this!=&db) {TNamed::operator=(db); fParticleList=db.fParticleList;
35  fListOfClasses=db.fListOfClasses; fPdgMap=db.fPdgMap;}
36  return *this;}
37 
38  void BuildPdgMap() const;
39 
40 public:
41 
42  TDatabasePDG();
43  virtual ~TDatabasePDG();
44 
45  static TDatabasePDG* Instance();
46 
47  virtual TParticlePDG* AddParticle(const char* Name,
48  const char* Title,
49  Double_t Mass,
50  Bool_t Stable,
51  Double_t DecayWidth,
52  Double_t Charge,
53  const char* ParticleClass,
54  Int_t PdgCode,
55  Int_t Anti=-1,
56  Int_t TrackingCode=0);
57 
58  virtual Int_t ConvertGeant3ToPdg(Int_t Geant3Number) const;
59  virtual Int_t ConvertPdgToGeant3(Int_t pdgNumber) const;
60  virtual Int_t ConvertIsajetToPdg(Int_t isaNumber) const;
61 
62  virtual TParticlePDG* AddAntiParticle(const char* Name, Int_t PdgCode);
63 
64  TParticlePDG *GetParticle(Int_t pdgCode) const;
65  TParticlePDG *GetParticle(const char *name) const;
66 
67  TParticleClassPDG* GetParticleClass(const char* name) {
68  if (fParticleList == 0) ((TDatabasePDG*)this)->ReadPDGTable();
69  return (TParticleClassPDG*) fListOfClasses->FindObject(name);
70  }
71 
72  const THashList *ParticleList() const { return fParticleList; }
73 
74  virtual void Print(Option_t *opt = "") const;
75 
76  Bool_t IsFolder() const { return kTRUE; }
77  virtual void Browse(TBrowser* b);
78 
79  virtual void ReadPDGTable (const char *filename = "");
80  virtual Int_t WritePDGTable(const char *filename);
81 
82  ClassDef(TDatabasePDG, 3); // PDG particle database
83 };
84 
85 #endif