#ifndef NLD_FASTMC_H
#define NLD_FASTMC_H
#include "EventMarker.h"
#include "MCPartPrint.h"
#include "TrackFullSmear.h"
#include "CalRecon.h"
#include "RecModule.h"
#include "EventSource.h"

class FastMC : public TObject {

 public:

  FastMC(EventSource* eventSource,
	 Char_t* parameterFileName,
	 Char_t* outputFileName
	 );

  ~FastMC();

  void  SetSource(EventSource* eventSource) {m_source = eventSource;}
  Int_t DoEventBatch();
  Int_t FetchEvent(Event *evt);
  void  Doit(Event *evt); // call doit for each module
  void  Spew(); // call spew for each module
  void  Cleanup(); // call cleanup for each module

  CalRecon* GetCalRecon() {return m_calRecon;}
  //  Int_t ReadStd(Event *evt) {return m_source->getEvent(evt);}

private:

  EventSource* m_source;      // e.g., base class that can produce events
  TObjArray m_ModuleList;     // processors which have signed up
  TObjArrayIter *m_iter;      // iterate through m_ModuleList
  RecModule* m_module;
  EventMarker* m_eventMarker; // our instance of EventMarker
  MCPartPrint* m_mcPartPrint; // our instance of MCPartPrint
  TrackFullSmear* m_trackFullSmear;  // our instance of TrackFullSmear
  CalRecon* m_calRecon;       // our instance of CalRecon
  FILE* m_ofile;              // output file
  FILE* m_parfile;            // parameter file
public:
    ClassDef(FastMC,0)  // Manager class for Fast MC 
};
#endif
