ROOT logo
////////////////////////////////////////////////////////////////////////////////
/// 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 <iostream>
#include <fstream>
#include <stdio.h>

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

 AliFemtoEventReader.h:1
 AliFemtoEventReader.h:2
 AliFemtoEventReader.h:3
 AliFemtoEventReader.h:4
 AliFemtoEventReader.h:5
 AliFemtoEventReader.h:6
 AliFemtoEventReader.h:7
 AliFemtoEventReader.h:8
 AliFemtoEventReader.h:9
 AliFemtoEventReader.h:10
 AliFemtoEventReader.h:11
 AliFemtoEventReader.h:12
 AliFemtoEventReader.h:13
 AliFemtoEventReader.h:14
 AliFemtoEventReader.h:15
 AliFemtoEventReader.h:16
 AliFemtoEventReader.h:17
 AliFemtoEventReader.h:18
 AliFemtoEventReader.h:19
 AliFemtoEventReader.h:20
 AliFemtoEventReader.h:21
 AliFemtoEventReader.h:22
 AliFemtoEventReader.h:23
 AliFemtoEventReader.h:24
 AliFemtoEventReader.h:25
 AliFemtoEventReader.h:26
 AliFemtoEventReader.h:27
 AliFemtoEventReader.h:28
 AliFemtoEventReader.h:29
 AliFemtoEventReader.h:30
 AliFemtoEventReader.h:31
 AliFemtoEventReader.h:32
 AliFemtoEventReader.h:33
 AliFemtoEventReader.h:34
 AliFemtoEventReader.h:35
 AliFemtoEventReader.h:36
 AliFemtoEventReader.h:37
 AliFemtoEventReader.h:38
 AliFemtoEventReader.h:39
 AliFemtoEventReader.h:40
 AliFemtoEventReader.h:41
 AliFemtoEventReader.h:42
 AliFemtoEventReader.h:43
 AliFemtoEventReader.h:44
 AliFemtoEventReader.h:45
 AliFemtoEventReader.h:46
 AliFemtoEventReader.h:47
 AliFemtoEventReader.h:48
 AliFemtoEventReader.h:49
 AliFemtoEventReader.h:50
 AliFemtoEventReader.h:51
 AliFemtoEventReader.h:52
 AliFemtoEventReader.h:53
 AliFemtoEventReader.h:54
 AliFemtoEventReader.h:55
 AliFemtoEventReader.h:56
 AliFemtoEventReader.h:57
 AliFemtoEventReader.h:58
 AliFemtoEventReader.h:59
 AliFemtoEventReader.h:60
 AliFemtoEventReader.h:61
 AliFemtoEventReader.h:62
 AliFemtoEventReader.h:63
 AliFemtoEventReader.h:64
 AliFemtoEventReader.h:65
 AliFemtoEventReader.h:66
 AliFemtoEventReader.h:67
 AliFemtoEventReader.h:68
 AliFemtoEventReader.h:69
 AliFemtoEventReader.h:70
 AliFemtoEventReader.h:71
 AliFemtoEventReader.h:72
 AliFemtoEventReader.h:73
 AliFemtoEventReader.h:74
 AliFemtoEventReader.h:75
 AliFemtoEventReader.h:76
 AliFemtoEventReader.h:77
 AliFemtoEventReader.h:78
 AliFemtoEventReader.h:79
 AliFemtoEventReader.h:80
 AliFemtoEventReader.h:81
 AliFemtoEventReader.h:82