Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-15 10:29:34

0001 // @(#)root/eg:$Id$
0002 // Author: Pasha Murat   12/02/99
0003 
0004 /*************************************************************************
0005  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
0006  * All rights reserved.                                                  *
0007  *                                                                       *
0008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
0009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
0010  *************************************************************************/
0011 
0012 #ifndef ROOT_TDatabasePDG
0013 #define ROOT_TDatabasePDG
0014 
0015 #include "TParticlePDG.h"
0016 #include "TParticleClassPDG.h"
0017 
0018 class THashList;
0019 class TExMap;
0020 
0021 class TDatabasePDG: public TNamed {
0022 
0023 protected:
0024    THashList           *fParticleList;     // list of PDG particles
0025    TObjArray           *fListOfClasses;    // list of classes (leptons etc.)
0026    mutable TExMap      *fPdgMap;           //!hash-map from pdg-code to particle
0027 
0028    // make copy-constructor and assigment protected since class cannot be copied
0029    TDatabasePDG(const TDatabasePDG& db)
0030      : TNamed(db), fParticleList(db.fParticleList),
0031      fListOfClasses(db.fListOfClasses), fPdgMap(0) { }
0032 
0033    TDatabasePDG& operator=(const TDatabasePDG& db)
0034    {if(this!=&db) {TNamed::operator=(db); fParticleList=db.fParticleList;
0035          fListOfClasses=db.fListOfClasses; fPdgMap=db.fPdgMap;}
0036       return *this;}
0037 
0038    void BuildPdgMap() const;
0039    virtual void ReadPDGTableImpl(const char *filename, bool isParticleListInitializedWhenInvoking);
0040 
0041 public:
0042 
0043    TDatabasePDG();
0044    ~TDatabasePDG() override;
0045 
0046    static TDatabasePDG*  Instance();
0047 
0048    virtual TParticlePDG*   AddParticle(const char*  Name,
0049                                        const char*  Title,
0050                                        Double_t     Mass,
0051                                        Bool_t       Stable,
0052                                        Double_t     DecayWidth,
0053                                        Double_t     Charge,
0054                                        const char*  ParticleClass,
0055                                        Int_t        PdgCode,
0056                                        Int_t        Anti=-1,
0057                                        Int_t        TrackingCode=0);
0058 
0059    virtual Int_t  ConvertGeant3ToPdg(Int_t Geant3Number) const;
0060    virtual Int_t  ConvertPdgToGeant3(Int_t pdgNumber) const;
0061    virtual Int_t  ConvertIsajetToPdg(Int_t isaNumber) const;
0062 
0063    virtual TParticlePDG* AddAntiParticle(const char* Name, Int_t PdgCode);
0064 
0065    TParticlePDG  *GetParticle(Int_t pdgCode) const;
0066    TParticlePDG  *GetParticle(const char *name) const;
0067 
0068    TParticleClassPDG* GetParticleClass(const char* name) {
0069       if (fParticleList == 0)  ((TDatabasePDG*)this)->ReadPDGTable();
0070       return (TParticleClassPDG*) fListOfClasses->FindObject(name);
0071    }
0072 
0073    const THashList *ParticleList() const { return fParticleList; }
0074 
0075    void   Print(Option_t *opt = "") const override;
0076 
0077    Bool_t IsFolder() const override { return kTRUE; }
0078    void   Browse(TBrowser* b) override;
0079 
0080    virtual void   ReadPDGTable (const char *filename = "");
0081    virtual Int_t  WritePDGTable(const char *filename);
0082 
0083    ClassDefOverride(TDatabasePDG, 3);  // PDG particle database
0084 };
0085 
0086 #endif