00001
00002 #ifndef ROOT_StEventHitIter_HH
00003 #define ROOT_StEventHitIter_HH
00004
00005
00007
00008
00009
00010
00012
00013 #include "Rtypes.h"
00014 #include "TObject.h"
00015 #include "StEnumerations.h"
00016 #include "vector"
00017 class StEvent;
00018 class StHit;
00019
00020
00021
00022
00023 class StHitIter : public TObject
00024 {
00025 public:
00026 StHitIter();
00027 virtual ~StHitIter();
00028 virtual const TObject *Reset(const TObject *cont);
00029 virtual const TObject *operator++();
00030 virtual const TObject *Get () const;
00031 virtual const TObject *GetObject (int idx) const=0;
00032 virtual int GetSize () const=0;
00033 virtual StDetectorId DetectorId() const {return kUnknownId;}
00034 void SetDowIter(StHitIter *it) {fDowIter=it;}
00035 virtual void UPath(ULong64_t &upath) const;
00036 protected:
00037
00038 const TObject *fCont;
00039 StHitIter *fDowIter;
00040 int fJIter;
00041 int fNIter;
00042 };
00043
00044 class StHitIterGroup : public StHitIter {
00045 public:
00046 StHitIterGroup();
00047 virtual ~StHitIterGroup();
00048 virtual const TObject *Reset(const TObject *cont);
00049 virtual const TObject *operator++();
00050 virtual const TObject *Get () const;
00051 virtual const StHit *operator*() const {return (StHit*)Get();}
00052 virtual const TObject *GetObject (int idx) const;
00053 virtual int GetSize () const {return fGroup.size();};
00054 virtual StDetectorId DetectorId() const {return fDetectorId;}
00055 void UPath(ULong64_t &upa) const;
00056 UInt_t UPath() const;
00057 virtual void Add(StHitIter* iter);
00058 protected:
00059 mutable StDetectorId fDetectorId;
00060 std::vector<StHitIter*> fGroup;
00061 };
00062
00063
00064 class StEventHitIter : public StHitIterGroup {
00065 public:
00066 StEventHitIter(const TObject *ev=0){if (ev) Reset(ev);}
00067 virtual ~StEventHitIter(){;}
00068 int AddDetector(StDetectorId detId);
00069 int AddDetector(const char *name);
00070 private:
00071 };
00072
00073
00074 #endif //ROOT_StEventHelper