#ifndef ROOT_Event #define ROOT_Event ////////////////////////////////////////////////////////////////////////// // // // Event // // // // Description of the event and track parameters // // This version of the Event class is a simplified version suitable for // // use in a multi-threads environment as all Event objects are // // independent from each other. // // // ////////////////////////////////////////////////////////////////////////// #include "TObject.h" #include "TClonesArray.h" #include "TRefArray.h" #include "TRef.h" #include "TH1.h" #include "TBits.h" #include "TMath.h" class TDirectory; class Track : public TObject { private: Float_t fPx; //X component of the momentum Float_t fPy; //Y component of the momentum Float_t fPz; //Z component of the momentum Float_t fRandom; //A random track quantity Float16_t fMass2; //[0,0,8] The mass square of this particle Float16_t fBx; //[0,0,10] X intercept at the vertex Float16_t fBy; //[0,0,10] Y intercept at the vertex Float_t fMeanCharge; //Mean charge deposition of all hits of this track Float16_t fXfirst; //X coordinate of the first point Float16_t fXlast; //X coordinate of the last point Float16_t fYfirst; //Y coordinate of the first point Float16_t fYlast; //Y coordinate of the last point Float16_t fZfirst; //Z coordinate of the first point Float16_t fZlast; //Z coordinate of the last point Double32_t fCharge; //[-1,1,2] Charge of this track Double32_t fVertex[3]; //[-30,30,16] Track vertex position Int_t fNpoint; //Number of points for this track Short_t fValid; //Validity criterion Int_t fNsp; //Number of points for this track with a special value Double32_t* fPointValue; //[fNsp][0,3] a special quantity for some point. TBits fTriggerBits; //Bits triggered by this track. public: Track() { fPointValue = 0; } Track(const Track& orig); Track(Float_t random); ~Track() override {Clear();} Track &operator=(const Track &orig); void Clear(Option_t *option="") override; Float_t GetPx() const { return fPx; } Float_t GetPy() const { return fPy; } Float_t GetPz() const { return fPz; } Float_t GetPt() const { return TMath::Sqrt(fPx*fPx + fPy*fPy); } Float_t GetRandom() const { return fRandom; } Float_t GetBx() const { return fBx; } Float_t GetBy() const { return fBy; } Float_t GetMass2() const { return fMass2; } Float_t GetMeanCharge() const { return fMeanCharge; } Float_t GetXfirst() const { return fXfirst; } Float_t GetXlast() const { return fXlast; } Float_t GetYfirst() const { return fYfirst; } Float_t GetYlast() const { return fYlast; } Float_t GetZfirst() const { return fZfirst; } Float_t GetZlast() const { return fZlast; } Double32_t GetCharge() const { return fCharge; } Double32_t GetVertex(Int_t i=0) {return (i<3)?fVertex[i]:0;} Int_t GetNpoint() const { return fNpoint; } TBits& GetTriggerBits() { return fTriggerBits; } Short_t GetValid() const { return fValid; } virtual void SetValid(Int_t valid=1) { fValid = valid; } Int_t GetN() const { return fNsp; } Double32_t GetPointValue(Int_t i=0) const { return (iarray with all tracks TRefArray *fHighPt; //array of High Pt tracks only TRefArray *fMuons; //array of Muon tracks only TRef fLastTrack; //reference pointer to last track TRef fWebHistogram; //EXEC:GetWebHistogram reference to an histogram in a TWebFile TH1F *fH; //-> TBits fTriggerBits; //Bits triggered by this event. Bool_t fIsValid; // public: Event(); ~Event() override; void Build(Int_t ev, Int_t arg5=600, Float_t ptmin=1); void Clear(Option_t *option ="") override; Bool_t IsValid() const { return fIsValid; } void ResetHistogramPointer() {fH=0;} void SetNseg(Int_t n) { fNseg = n; } void SetNtrack(Int_t n) { fNtrack = n; } void SetNvertex(Int_t n) { fNvertex = n; SetRandomVertex(); } void SetFlag(UInt_t f) { fFlag = f; } void SetTemperature(Double32_t t) { fTemperature = t; } void SetType(char *type) {strcpy(fType,type);} void SetHeader(Int_t i, Int_t run, Int_t date, Float_t random); Track *AddTrack(Float_t random, Float_t ptmin=1); void SetMeasure(UChar_t which, Int_t what); void SetMatrix(UChar_t x, UChar_t y, Double32_t what) { if (x<3&&y<3) fMatrix[x][y]=what;} void SetRandomVertex(); Float_t GetClosestDistance(Int_t i) {return fClosestDistance[i];} char *GetType() {return fType;} Int_t GetNtrack() const { return fNtrack; } Int_t GetNseg() const { return fNseg; } Int_t GetNvertex() const { return fNvertex; } UInt_t GetFlag() const { return fFlag; } Double32_t GetTemperature() const { return fTemperature; } EventHeader *GetHeader() { return &fEvtHdr; } TClonesArray *GetTracks() const {return fTracks;} TRefArray *GetHighPt() const {return fHighPt;} TRefArray *GetMuons() const {return fMuons;} Track *GetLastTrack() const {return (Track*)fLastTrack.GetObject();} TH1F *GetHistogram() const {return fH;} TH1 *GetWebHistogram() const {return (TH1*)fWebHistogram.GetObject();} Int_t GetMeasure(UChar_t which) { return (which<10)?fMeasures[which]:0; } Double32_t GetMatrix(UChar_t x, UChar_t y) { return (x<4&&y<4)?fMatrix[x][y]:0; } TBits& GetTriggerBits() { return fTriggerBits; } ClassDefOverride(Event,1) //Event structure }; class HistogramManager { private: TH1F *fNtrack; TH1F *fNseg; TH1F *fTemperature; TH1F *fPx; TH1F *fPy; TH1F *fPz; TH1F *fRandom; TH1F *fMass2; TH1F *fBx; TH1F *fBy; TH1F *fMeanCharge; TH1F *fXfirst; TH1F *fXlast; TH1F *fYfirst; TH1F *fYlast; TH1F *fZfirst; TH1F *fZlast; TH1F *fCharge; TH1F *fNpoint; TH1F *fValid; public: HistogramManager(TDirectory *dir); virtual ~HistogramManager(); void Hfill(Event *event); ClassDefOverride(HistogramManager,1) //Manages all histograms }; #endif