#ifndef STNTUPLE_TStnEmTimingBlock #define STNTUPLE_TStnEmTimingBlock //----------------------------------------------------------------------------- // definition of the STNTUPLE EmTiming block // Oct 20, 2003 - RLC // //----------------------------------------------------------------------------- #include "Stntuple/base/TStnArrayI.hh" #include "Stntuple/base/TStnArrayF.hh" #include "TStnDataBlock.hh" #include "TStnEmTimingBlock.hh" class TStnEvent; class TStnLinkBlock; class TStnEmTimingBlock: public TStnDataBlock { public: //--------------------------------------------------------------------------- // data members //--------------------------------------------------------------------------- Int_t fNHits; TStnArrayI fHits; TStnArrayF fTimes; TStnArrayF fWidths; //--------------------------------------------------------------------------- // functions //---------------------------------------------------------------------------- public: // ****** constructors and destructor TStnEmTimingBlock(); virtual ~TStnEmTimingBlock(); // ****** accessors Int_t NHits () const { return fNHits; } Int_t IPhi (Int_t ihit) const { return (fHits[ihit]&0x3F); } Int_t IEta (Int_t ihit) const { return ((fHits[ihit]>>6)&0x3F); } // CEM=0, PEM=1, CHA=2, WHA=3, PHA=4 Int_t Det (Int_t ihit) const { return ((fHits[ihit]>>12)&0x7); } Float_t Time (Int_t ihit) const { return fTimes[ihit]; } Float_t Width (Int_t ihit) const { return fWidths[ihit]; } Int_t Status(Int_t ihit) const { return ((fHits[ihit]>>16)&0xFFFF); } // find ihit for the best hit for a given tower, <0 if no hit Int_t FindHit(Int_t ieta, Int_t iphi); // the following are functions to unpack the status word static Bool_t IsCalibrated(Int_t status); static Bool_t IsNormalTower(Int_t status); static Bool_t IsLowEfficiency(Int_t status); static Bool_t IsHighThreshold(Int_t status); static Bool_t IsWideRMS(Int_t status); static Bool_t EventAboveThreshold(Int_t status); static Int_t SigmasFromThreshold(Int_t status); static Bool_t IsPoorCalibFit(Int_t status); static Bool_t EnergyTooLow(Int_t status); static Bool_t EnergyTooHigh(Int_t status); static Bool_t GoodEventEnergy(Int_t status); static Bool_t IsPmt0Bad(Int_t status); static Bool_t IsPmt1Bad(Int_t status); Int_t AddHit(Int_t wedge, Int_t ieta, Int_t det, Float_t time, Float_t width, Int_t status); void Clear(Option_t* opt=""); void Print(Option_t* opt="") const ; ClassDef(TStnEmTimingBlock,2) }; #endif