//----------------------------------------------------------------------------- // TObspParticle: STNTUPLE description of the post-simulation particle // Mar 26 2001 P.Murat (CDF/FNAL) //----------------------------------------------------------------------------- #ifdef __GNUG__ #pragma implementation #endif #include #include "TParticlePDG.h" #include "TDatabasePDG.h" #include "Stntuple/obj/TObspParticle.hh" ClassImp(TObspParticle) //_____________________________________________________________________________ TObspParticle::TObspParticle() { SetUniqueID(UINT_MAX); } //_____________________________________________________________________________ TObspParticle::TObspParticle(Int_t IPart, Int_t PdgCode, Float_t Px, Float_t Py, Float_t Pz, Float_t Mass, Float_t Path, Int_t VertexNumber, Int_t DecayVertexNumber, Int_t GenpNumber, Int_t DecayCode, Float_t Charge) { //----------------------------------------------------------------------------- // need to initialize the particle record w/o searching the particle DB //----------------------------------------------------------------------------- SetUniqueID(IPart); fPdgCode = PdgCode; fCharge = Charge; if (fCharge == -1000.) { TDatabasePDG* db = TDatabasePDG::Instance(); TParticlePDG* pdg = db->GetParticle(PdgCode); if (pdg) { fCharge = pdg->Charge(); } } fMomentum.SetXYZM(Px,Py,Pz,Mass); fPath = Path; fVertexNumber = VertexNumber; fDecayVertexNumber = DecayVertexNumber; fGenpNumber = GenpNumber; fDecayCode = DecayCode; } //_____________________________________________________________________________ TObspParticle::~TObspParticle() { } //_____________________________________________________________________________ Int_t TObspParticle::Init(Int_t IPart, Int_t PdgCode, Float_t Px, Float_t Py, Float_t Pz, Float_t M, Float_t Path, Int_t VertexNumber, Int_t DecayVertexNumber, Int_t GenpNumber, Int_t DecayCode, Float_t Charge) { // primary use: I/O (read form the disk) SetUniqueID(IPart); fMomentum.SetXYZM(Px,Py,Pz,M); fPdgCode = PdgCode; fPath = Path; fVertexNumber = VertexNumber; fDecayVertexNumber = DecayVertexNumber; fGenpNumber = GenpNumber; fDecayCode = DecayCode; fCharge = Charge; return 0; } //_____________________________________________________________________________ void TObspParticle::Print(Option_t* Opt) const { TString opt(Opt); // parse options int print_lf(1), print_banner(0), print_data(1); print_lf = opt.Index("/nolf" ) < 0; print_banner = opt.Index("/banner") >= 0; print_data = (opt == "") || (opt.Index("/data") >= 0); if (opt.Index("/banner") >= 0) { // print banner printf(" i name PDG px"); printf(" py pz mass v1 v2 path Genp"); if (print_lf) printf("\n"); } if (print_data) { TDatabasePDG* db = TDatabasePDG::Instance(); TParticlePDG* pdg = db->GetParticle(fPdgCode); printf("%4i ",Number()); if (pdg) printf("%-19s",pdg->GetName()); else printf("%-19s","*** unknown ***"); printf("%7i",PdgCode()); printf("%9.3f",fMomentum.Px()); printf("%9.3f",fMomentum.Py()); printf("%9.3f",fMomentum.Pz()); printf("%7.3f",fMomentum.M()); printf("%4i" ,VertexNumber()); printf("%4i" ,DecayVertexNumber()); printf("%8.2f",Path()); printf("%6i",GenpNumber()); if (print_lf) printf("\n"); } }