//______________________________________________________________________
//
//     LCDFullRecon
//
//     Manager class for full reconstruction.  
//     Creates instances of specific
//     modules (processors) at constructor time.
//
// 26-Apr-2001 Toshi   Change contructor to remove LCDEventSource, 
//                     FetchEvent..
//

#ifndef LCDFULLREC_H
#define LCDFULLREC_H

#include "TObject.h"
#include "TObjArray.h"

#include "LCDEventMarker.h"
#include "LCDMCPartPrint.h"
#include "LCDIPSmear.h"
#include "LCDTrackRecSmear.h"
#include "LCDClusterSystem.h"
#include "LCDRecModule.h"
#include "LCDEventSource.h"
#include "LCDEvent.h"
#include "LCDGetParameters.h"

class LCDFullRecon : public TObject {

public:
  LCDFullRecon();
  LCDFullRecon(LCDGetParameters* gp,
	       Char_t* smearFileName,
	       LCDEvent* event=0);
  LCDFullRecon(Char_t* geometryFileName,
	       Char_t* smearFileName,
	       LCDEvent* event=0);
  ~LCDFullRecon();

  void Cleanup(LCDEvent* event=0); // call cleanup for each module
  void Doit(   LCDEvent *event=0); // call doit for each module

  LCDClusterSystem* GetClusterSystem() { return m_ClusterSystem; }

  void SetLCDFullRecon(LCDGetParameters* gp,
		       Char_t* smearFileName,
		       LCDEvent* event);

  // Set sigma of the IP smearing
  void SetIPSigmaX(Double_t s_x){ m_ipSmear->SetSigmaX(s_x); }
  void SetIPSigmaY(Double_t s_y){ m_ipSmear->SetSigmaY(s_y); }
  void SetIPSigmaZ(Double_t s_z){ m_ipSmear->SetSigmaZ(s_z); }

private:
  LCDEvent*         m_event        ;
  TObjArray*        m_ModuleList   ;
  TObjArrayIter*    m_iter         ;
  LCDRecModule*     m_module       ;
  LCDEventMarker*   m_eventMarker  ;
  LCDMCPartPrint*   m_mcPartPrint  ;
  LCDIPSmear*       m_ipSmear      ; 
  LCDTrackRecSmear* m_trackRecSmear;
  LCDClusterSystem* m_ClusterSystem;
  LCDGetParameters* m_gp           ;
  Bool_t            m_mygp         ;

  void Init();

public:
  ClassDef(LCDFullRecon,0) //Manager class for FullRecon

};
#endif
