#ifndef STNTUPLE_TObspBlock #define STNTUPLE_TObspBlock //----------------------------------------------------------------------------- // definition of the STNTUPLE OBSP (simulation output) particle block // Author: Pasha Murat (CDF/FNAL) // Date: Mar 26 2001 //----------------------------------------------------------------------------- #include "TArrayI.h" #include "TClonesArray.h" #include "TStnDataBlock.hh" #include "TObspParticle.hh" #include "TObsvVertex.hh" class TStnEvent; class TObspBlock: public TStnDataBlock { friend Int_t StntupleInitObspBlock (TStnDataBlock*, TStnEvent*, int); protected: //----------------------------------------------------------------------------- // data members //----------------------------------------------------------------------------- Int_t fNParticles; // total # of particles Int_t fNPrimaryVertices; // # of primary vertices Int_t fNVertices; TClonesArray* fListOfParticles; // list of particles TClonesArray* fListOfVertices; // list of vertices TClonesArray* fListOfPrimaryVertices;// list of primary vertices //----------------------------------------------------------------------------- // functions //----------------------------------------------------------------------------- public: // ****** constructors and destructor TObspBlock(); virtual ~TObspBlock(); // ****** accessors Int_t NParticles () const { return fNParticles; } Int_t NVertices () const { return fNVertices; } Int_t NPrimaryVertices () const { return fNPrimaryVertices; } // `i'-th particle in the global list TObspParticle* Particle(int i) const { return (TObspParticle*) fListOfParticles->UncheckedAt(i); } TObsvVertex* Vertex(int i) const { return (TObsvVertex*) fListOfVertices->UncheckedAt(i); } // return list of particles with given // name/PDG code (antiparticles included) Int_t GetParticles(Int_t PdgCode , TObjArray* List , Float_t PtMin = 0 , Float_t EtaMin = -1e6, Float_t EtaMax = 1.e6) const; Int_t GetParticles(const char* Name, TObjArray* List, Float_t PtMin = 0 , Float_t EtaMin = -1e6, Float_t EtaMax = 1.e6) const; // ****** modifiers TObspParticle* NewParticle(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 = -100); TObsvVertex* NewVertex(Int_t IVert, Float_t Vx, Float_t Vy, Float_t Vz, Float_t Time, Int_t Mother, Int_t FirstDaughter, Int_t LastDaughter); //----------------------------------------------------------------------------- // overloaded functions of TObject //----------------------------------------------------------------------------- void Clear(Option_t* opt=""); void Print(Option_t* opt="") const; void Print(Int_t PdgCode , Float_t PtMin = 0, Float_t EtaMin = -99, Float_t EtaMax = 99) const; void PrintDaughters(TObspParticle* P) const; //----------------------------------------------------------------------------- // I/O and schema evolution //----------------------------------------------------------------------------- void ReadV1 (TBuffer& R__b); int WriteParticles (TBuffer& R__b); int WriteVertices (TBuffer& R__b); int WritePrimaryVertices(TBuffer& R__b); int ReadParticles (TBuffer& R__b); int ReadVertices (TBuffer& R__b); int ReadPrimaryVertices (TBuffer& R__b); ClassDef(TObspBlock,2) // OBSP block: output of detector sim }; #endif