/** \class THcRasteredBeam
    \ingroup Base

\brief  Apparatus for a rastered beam

\author Buddhini Waidyawansa

*/

#include "THcRasteredBeam.h"
#include "THcRaster.h"
#include "TMath.h"
#include "TDatime.h"
#include "TList.h"

#include "VarDef.h"

//_____________________________________________________________________________
THcRasteredBeam::THcRasteredBeam( const char* name, const char* description ) :
    THaBeam( name, description )
{
  AddDetector( new THcRaster("raster","raster",this) );
}


//_____________________________________________________________________________
Int_t THcRasteredBeam::Reconstruct()
{

  TIter nextDet( fDetectors );

  nextDet.Reset();

  // This apparatus assumes that there is only one detector
  // in the list. If someone adds detectors by hand, the first
  // detector in the list will be used to get the beam position
  // the others will be processed
  // -- Iam not sure why the code is written like this. But for now, I am
  // going to work with this code as it is since all I need for is to
  // decode the raster - Buddhini


  if (THaBeamDet* theBeamDet=
      static_cast<THaBeamDet*>( nextDet() )) {
    theBeamDet->Process();
    fPosition = theBeamDet->GetPosition();
    fDirection = theBeamDet->GetDirection();
  }
  else {
    Error( Here("THcRasteredBeam::Reconstruct"),
	   "Beamline Detectors Missing in Detector List" );
  }


  // Process any other detectors that may have been added (by default none)
  while (THaBeamDet * theBeamDet=
	 static_cast<THaBeamDet*>( nextDet() )) {
    theBeamDet->Process();
  }

  Update();

  return 0;

}

//_____________________________________________________________________________
ClassImp(THcRasteredBeam)


////////////////////////////////////////////////////////////////////////////////