#ifndef STNTUPLE_TStnElectronBlock #define STNTUPLE_TStnElectronBlock //----------------------------------------------------------------------------- // definition of the STNTUPLE photon block // Author: Pasha Murat (CDF/FNAL) // Date: Oct 31 2000 // // the implementation is a trade-off between the performance in split and // non-split modes. I'm assuming that on a long term time scale // TStnElectronBlock // will be written in split mode, however the TClonesArray itself may not // be split (if one needs tracks, he normally needs all the tracks, not only // track Pt) // Also one wants to control the streamer of the class, having a wrapper // around TClonesArray seems to be a reasonable compromise here //----------------------------------------------------------------------------- #include "TClonesArray.h" #include "TStnDataBlock.hh" #include "TStnElectron.hh" #include "TStnLinkBlock.hh" #include "Stntuple/mod/InitStntupleDataBlocks.hh" #include "Stntuple/run1/StnRun1InitDataBlocks.hh" class TStnElectronBlock: public TStnDataBlock { friend Int_t StntupleInitElectronBlock (TStnDataBlock*, AbsEvent* ,int); friend Int_t StnRun1InitElectronBlock (TStnDataBlock*, TStnEvent*,int); friend Int_t StntupleElectronBlockLinks(TStnDataBlock*, AbsEvent* ,int); public: //----------------------------------------------------------------------------- // data members (v3: towerlinklist added) //----------------------------------------------------------------------------- Int_t fNElectrons; // # of electrons Int_t fNHpte; // # of high-Pt electrons TClonesArray* fElectronList; // list of electrons TStnLinkBlock* fCprLinkTrk; // || # links to trk-based CPR clusters TStnLinkBlock* fCprLinkCes; // || # links to CES-based CPR clusters TStnLinkBlock* fTrkLink; // || # links to the matching tracks TStnLinkBlock* fTowerLinkList; // || links to the towers //----------------------------------------------------------------------------- // functions //----------------------------------------------------------------------------- public: // ****** constructors and destructor TStnElectronBlock(); virtual ~TStnElectronBlock(); // ****** accessors Int_t NElectrons () const { return fNElectrons; } Int_t NHpte () const { return fNHpte; } TClonesArray* ElectronList () const { return fElectronList; } TStnElectron* Electron(int i) const { return (TStnElectron*) fElectronList->UncheckedAt(i); } // ****** modifiers TStnElectron* NewElectron() { TStnElectron* e = new ((*fElectronList)[fNElectrons]) TStnElectron(fNElectrons); fNElectrons++; return e; } TStnLinkBlock* CprLinkTrk () { return fCprLinkTrk; } TStnLinkBlock* CprLinkCes () { return fCprLinkCes; } TStnLinkBlock* TrkLink () { return fTrkLink; } TStnLinkBlock* TowerLinkList() { return fTowerLinkList; } // ****** overloaded functions of // TObject void Clear(Option_t* opt=""); void Print(Option_t* opt="") const; // ****** schema evolution void ReadV1(TBuffer& R__b); void ReadV2(TBuffer& R__b); ClassDef(TStnElectronBlock,3) // electron block }; #endif