//////////////////////////////////////////////////////////////////////////////// /// AliFemtoEventReader - the pure virtual base class for the event reader /// /// All event readers must inherit from this one /// //////////////////////////////////////////////////////////////////////////////// #ifndef ALIFEMTOEVENTREADER_H #define ALIFEMTOEVENTREADER_H class AliFemtoEvent; class AliFemtoEventCut; class AliFemtoTrackCut; class AliFemtoV0Cut; class AliFemtoXiCut; class AliFemtoKinkCut; #include "AliFemtoString.h" #include #include #include using namespace std; class AliFemtoEventReader { public: // even tho it's only a base class and never constructed, if you don't have an implementation, // you get "AliFemtoEventReader type_info node" upon dynamical loading AliFemtoEventReader() : fEventCut(0), fTrackCut(0), fV0Cut(0), fXiCut(0), fKinkCut(0), fReaderStatus(0), fDebug(1) { /* no-op */ }; AliFemtoEventReader(const AliFemtoEventReader& aReader); virtual ~AliFemtoEventReader(){/* no-op */} AliFemtoEventReader& operator=(const AliFemtoEventReader& aReader); virtual AliFemtoEvent* ReturnHbtEvent() =0; virtual AliFemtoString Report(); // user-written method to return string describing reader // Including whatever "early" cuts are being done // this next method does NOT need to be implemented, in which case the // "default" method below is executed virtual int WriteHbtEvent(AliFemtoEvent*){cout << "No WriteHbtEvent implemented\n"; return (0);} // these next two are optional but would make sense for, e.g., opening and closing a file virtual int Init(const char* ReadWrite, AliFemtoString& Message); virtual void Finish(){/*no-op*/}; int Status() const {return fReaderStatus;} // AliFemtoManager looks at this for guidance if it gets null pointer from ReturnHbtEvent virtual void SetEventCut(AliFemtoEventCut* ecut); virtual void SetTrackCut(AliFemtoTrackCut* pcut); virtual void SetV0Cut(AliFemtoV0Cut* pcut); virtual void SetXiCut(AliFemtoXiCut* pcut); virtual void SetKinkCut(AliFemtoKinkCut* pcut); virtual AliFemtoEventCut* EventCut(); virtual AliFemtoTrackCut* TrackCut(); virtual AliFemtoV0Cut* V0Cut(); virtual AliFemtoXiCut* XiCut(); virtual AliFemtoKinkCut* KinkCut(); /* control of debug informations print out, my rule is: */ /* 0: no output at all */ /* 1: once (e.g. in constructor, finsh */ /* 2: once per event */ /* 3: once per track */ /* 4: once per pair */ int Debug() const {return fDebug;} void SetDebug(int d){fDebug=d;} protected: AliFemtoEventCut* fEventCut; //! link to the front-loaded event cut AliFemtoTrackCut* fTrackCut; //! link to the front-loaded track cut AliFemtoV0Cut* fV0Cut; //! link to the front-loaded V0 cut AliFemtoXiCut* fXiCut; //! link to the front-loaded Xi cut AliFemtoKinkCut* fKinkCut; //! link to the front-loaded Kink cut int fReaderStatus; // 0="good" int fDebug; // Debug information level #ifdef __ROOT__ ClassDef(AliFemtoEventReader,0) #endif }; #endif