// ----------------------------------------------------------------------------
// $Id: LCDFullRecon.cxx,v 1.2 2001/06/23 16:17:07 toshi Exp $
// ----------------------------------------------------------------------------
//
// $Log: LCDFullRecon.cxx,v $
// Revision 1.2  2001/06/23 16:17:07  toshi
// In method arg. , Char_t* -> const Char_t* .
//
// Revision 1.1  2001/05/10 18:29:05  toshi
// C++ file name convention has been changed from *.C to *.cxx .
//
//
#include "LCDFullRecon.h"

ClassImp(LCDFullRecon)

//______________________________________________________________________
 LCDFullRecon::LCDFullRecon() {
  Init();
}
//______________________________________________________________________

//______________________________________________________________________
 LCDFullRecon::LCDFullRecon(LCDGetParameters* gp,
			   const Char_t* smearFileName,
			   LCDEvent* event) {
  Init();
  m_mygp=kFALSE;
  SetLCDFullRecon(gp,smearFileName,event);
}
//______________________________________________________________________

//______________________________________________________________________
 LCDFullRecon::LCDFullRecon(Char_t* geometryFileName,
			   const Char_t* smearFileName,
			   LCDEvent* event) {
  Init();
  FILE* parfile =  fopen(geometryFileName,"r");  
  LCDGetParameters* gp = new LCDGetParameters(parfile);
  fclose(parfile);
  m_mygp=kTRUE;
  SetLCDFullRecon(gp,smearFileName,event);  
}
//______________________________________________________________________

//______________________________________________________________________
void 
 LCDFullRecon::SetLCDFullRecon(LCDGetParameters* gp,
			      const Char_t* smearFileName,
			      LCDEvent* event) {
  m_event  = event;
  m_gp     = gp;

  // Create list of modules to run  
  // Add modules to list. They inherit from RecModule and must have 
  // doit, cleanup and spew functions defined.
  if (m_ModuleList == 0) {
    m_ModuleList=new TObjArray();
  }

  if (m_eventMarker == 0) {
    m_eventMarker    = new LCDEventMarker(0,0);
    m_ModuleList->Add(m_eventMarker);
  }
  
  if (m_ipSmear == 0) {
    m_ipSmear        = new LCDIPSmear(gp);
    m_ModuleList->Add(m_ipSmear);
  }
  
  if (m_mcPartPrint == 0) {
    m_mcPartPrint    = new LCDMCPartPrint();
    m_ModuleList->Add(m_mcPartPrint); 
  }
  
  if (m_trackRecSmear == 0) {
    m_trackRecSmear  = new LCDTrackRecSmear(gp,smearFileName);
    m_ModuleList->Add(m_trackRecSmear); 
  }
  
  if (m_ClusterSystem == 0) {
    m_ClusterSystem  = new LCDClusterSystem(gp);
    m_ModuleList->Add(m_ClusterSystem);
  }
  
  if(m_iter == 0) {
    m_iter = new TObjArrayIter(m_ModuleList);
  }
  
}
//______________________________________________________________________

//______________________________________________________________________
 LCDFullRecon::~LCDFullRecon() {
  if (m_mygp && m_gp) {
    delete m_gp;
    m_gp=0;
  }

  if (m_eventMarker) {
    delete m_eventMarker;
    m_eventMarker=0;
  }

  if (m_ipSmear) {
    delete m_ipSmear;
    m_ipSmear=0;
  }

  if (m_mcPartPrint) {
    delete m_mcPartPrint;
    m_mcPartPrint=0;
  }

  if (m_trackRecSmear) {
    delete m_ModuleList;
    m_ModuleList=0;
  }
  
  if (m_ClusterSystem) {
    delete m_ModuleList;
    m_ModuleList=0;
  }

  if (m_iter) {
    delete m_iter;
    m_iter=0;
  }

  if (m_ModuleList) {
    delete m_ModuleList;
    m_ModuleList=0;
  }
}
//______________________________________________________________________

//______________________________________________________________________
void 
 LCDFullRecon::Doit(LCDEvent *event) {
  if (event) {
    m_event=event;
  }
  if (m_event) {
    Cleanup(0);
    m_iter->Reset();  
    while( (m_module = (LCDRecModule*) (*m_iter)()) ) {
      m_module->Doit(m_event);
    }
  } else {
    fprintf(stderr,"LCDFullMC::Doit Pointer of LCDEvent is not given!n");
  }
}
//______________________________________________________________________

//______________________________________________________________________
 void  LCDFullRecon::Cleanup(LCDEvent *event) {
  // Invoke each module's cleanup method
  if (event) {
    m_event=event;
  }
  if (m_event) {
    m_iter->Reset();  
    while( (m_module = (LCDRecModule*) (*m_iter)()) ) {    
      m_module->Cleanup(m_event);
    }
  } else {
    fprintf(stderr,"LCDFullRecon::Clean Pointer of LCDEvent is not given!n");
  }

}
//______________________________________________________________________

//______________________________________________________________________
 void LCDFullRecon::Init() {
  m_event          = 0;
  m_ModuleList     = 0;
  m_iter           = 0;
  m_module         = 0;
  m_eventMarker    = 0;
  m_mcPartPrint    = 0;
  m_trackRecSmear  = 0;
  m_ClusterSystem  = 0;
  m_gp             = 0;
  m_mygp           = kFALSE;
}
//______________________________________________________________________


ROOT page - Class index - Top of the page

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.