#ifndef STNTUPLE_TPhoenixElectronBlock #define STNTUPLE_TPhoenixElectronBlock //----------------------------------------------------------------------------- // definition of the STNTUPLE photon block // Author: Cigdem Issever (UCSB), Pasha Murat (CDF/FNAL) // Date: Apr 2002 //----------------------------------------------------------------------------- #include "TClonesArray.h" #include "Stntuple/base/TStnArrayI.hh" #include "TStnDataBlock.hh" #include "TStnElectron.hh" #include "TStnLinkBlock.hh" #include "Stntuple/mod/InitStntupleDataBlocks.hh" #include "Stntuple/run1/StnRun1InitDataBlocks.hh" class TPhoenixElectronBlock: public TStnDataBlock { friend Int_t StntupleInitPhoenixElectronBlock (TStnDataBlock*, AbsEvent* ,int); friend Int_t StnRun1InitElectronBlock (TStnDataBlock*, TStnEvent*,int); friend Int_t StntuplePhoenixElectronBlockLinks(TStnDataBlock*, AbsEvent* ,int); public: //----------------------------------------------------------------------------- // data members //----------------------------------------------------------------------------- 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* fPhoenixSiTrkLink[2]; // || # links to si tracks TStnLinkBlock* fTowerLinkList; // || links to the towers // TStnArrayI fOriginalElectron; // || backward links to Bob's electrons TStnLinkBlock* fOriginalElectron; // || links to the towers //----------------------------------------------------------------------------- // functions //----------------------------------------------------------------------------- public: // ****** constructors and destructor TPhoenixElectronBlock(); virtual ~TPhoenixElectronBlock(); // ****** 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* SiTrkLink(Int_t i) { return fPhoenixSiTrkLink[i]; } TStnLinkBlock* TowerLinkList() { return fTowerLinkList; } //----------------------------------------------------------------------------- // number of si tracks for electron I and seed ISeed //----------------------------------------------------------------------------- Int_t NTracks(Int_t I, Int_t ISeed) { return fPhoenixSiTrkLink[ISeed]->NLinks(I); } // Si Track Number Int_t TrackNumber(Int_t I, Int_t ISeed, Int_t ITrk) { return fPhoenixSiTrkLink[ISeed]->Index(I,ITrk); } // Int_t OriginalElectron(int ie) { return fOriginalElectron[ie]; } Int_t OriginalElectron(Int_t I) { return fOriginalElectron->Index(I,0); } //----------------------------------------------------------------------------- // overloaded functions of TObject //----------------------------------------------------------------------------- void Clear(Option_t* opt=""); void Print(Option_t* opt="") const; ClassDef(TPhoenixElectronBlock,1) // Phoenix electron block }; #endif