#ifndef TCalData_hh #define TCalData_hh #include "TClonesArray.h" #include #include #include class CalData; class TCalDataBlock : public TStnDataBlock { friend Int_t StntupleInitCalDataBlock(TStnDataBlock*, AbsEvent*, int); public: Int_t fNTowers; // number of hit towers Int_t fNTowersOot; // added in V3: Int_t fNMPHits[2]; // Number of "seed towers" above // threshold in the MiniPlug W,E Float_t fHadEnergy; // total had energy Float_t fEmEnergy; // total em energy Float_t fSumEt; // sum(Et) Excludes MP Float_t fEmEnergyOot; // Float_t fHadEnergyOot; // // added in V3 Float_t fSumEtMP[2]; // sum(Et) MP towers only W,E Float_t fMEtXMP; // sum Ex of MP towers Float_t fMEtYMP; // sum Ey of MP towers Float_t fXiP; // Xi of the proton from cal towers Float_t fXiPbar; // Xi of the anti-proton from cal towers TClonesArray* fTowerList; // list of towers Int_t fAdcThreshold; // ! //----------------------------------------------------------------------------- // functions //----------------------------------------------------------------------------- public: TCalDataBlock(); virtual ~TCalDataBlock(); // ****** accessors Int_t NTowers () { return fNTowers; } Int_t NTowersOot () { return fNTowersOot; } TCalTower* Tower (int i) { return (TCalTower*) fTowerList->UncheckedAt(i);} Float_t HadEnergy () { return fHadEnergy; } Float_t EmEnergy () { return fEmEnergy; } Float_t HadEnergyOot () { return fHadEnergyOot; } Float_t EmEnergyOot () { return fEmEnergyOot; } Float_t EmFraction () { return fEmEnergy/(fEmEnergy+fHadEnergy); } Float_t EmFractionOot() { return fEmEnergyOot/(fEmEnergyOot+fHadEnergyOot); } Float_t SumEt () { return fSumEt; } Float_t SumEtMP (Int_t iside) { return fSumEtMP[iside]; } Float_t MEtXMP () { return fMEtXMP; } Float_t MEtYMP () { return fMEtYMP; } Float_t XiP () { return fXiP; } Float_t XiPbar () { return fXiPbar; } Float_t Etotal () { return fHadEnergy+fEmEnergy; } Int_t AdcThreshold () { return fAdcThreshold; } Int_t NMPHits (Int_t iside) { return fNMPHits[iside]; } TClonesArray* GetListOfTowers() { return fTowerList ; } //----------------------------------------------------------------------------- // these routines do loops - be careful using them if you need performance //----------------------------------------------------------------------------- TCalTower* Tower(Int_t IEta, Int_t IPhi); TCalTower* GetTowerByKey(Int_t Key) { return Tower(TCalTower::IEta(Key), TCalTower::IPhi(Key)); } //----------------------------------------------------------------------------- // return list of towers within a given cone around given direction //----------------------------------------------------------------------------- Int_t GetListOfTowers(Float_t Eta, Float_t Phi, Float_t Cone, TObjArray* List); //----------------------------------------------------------------------------- // returns number of "seed towers" in the MiniPlug above a threshold //----------------------------------------------------------------------------- Int_t GetMPMultiplicity(Int_t iside, Float_t thresh, Int_t thresh_type = 0); void GetMPIetaIphi(int is, int it, int & ieta, int & iphi); //----------------------------------------------------------------------------- // modifiers //----------------------------------------------------------------------------- TCalTower* NewTower() { return new ((*fTowerList)[fNTowers++]) TCalTower();} void SetAdcThreshold(Int_t thr) { fAdcThreshold = thr; } //----------------------------------------------------------------------------- // schema evolution //----------------------------------------------------------------------------- void ReadV1(TBuffer& R__b); void ReadV2(TBuffer& R__b); //----------------------------------------------------------------------------- // overloaded methods of TObject //----------------------------------------------------------------------------- void Clear(Option_t* opt=""); void Print(Option_t* opt="") const; ClassDef(TCalDataBlock,3) }; #endif