#include "THaEpicsEbeam.h"
#include "VarDef.h"
#include "THaEvData.h"
#include "TMath.h"
THaEpicsEbeam::THaEpicsEbeam( const char* name, const char* description,
const char* beam, const char* epics_var,
Double_t scale_factor ) :
THaPhysicsModule( name,description ), fEcorr(0.0), fEpicsIsMomentum(kFALSE),
fScaleFactor(scale_factor), fBeamName(beam), fEpicsVar(epics_var),
fBeamModule(NULL)
{
}
THaEpicsEbeam::~THaEpicsEbeam()
{
RemoveVariables();
}
void THaEpicsEbeam::Clear( Option_t* opt )
{
THaPhysicsModule::Clear(opt);
BeamIfoClear();
fEcorr = 0.0;
}
THaAnalysisObject::EStatus THaEpicsEbeam::Init( const TDatime& run_time )
{
fBeamModule = dynamic_cast<THaBeamModule*>
( FindModule( fBeamName.Data(), "THaBeamModule"));
if( !fBeamModule )
return fStatus;
return THaPhysicsModule::Init(run_time);
}
Int_t THaEpicsEbeam::DefineVariables( EMode mode )
{
if( mode == kDefine && fIsSetup ) return kOK;
fIsSetup = ( mode == kDefine );
RVarDef vars[] = {
{ "ecorr", "Beam energy correction (output-input) (GeV)", "fEcorr" },
{ 0 }
};
DefineVarsFromList( vars, mode );
return DefineVarsFromList( GetRVarDef(), mode );
}
Int_t THaEpicsEbeam::Process( const THaEvData& evdata )
{
if( !IsOK() ) return -1;
THaBeamInfo* input = fBeamModule->GetBeamInfo();
if( !input->IsOK() ) return 2;
fBeamIfo = *input;
if( evdata.IsLoadedEpics(fEpicsVar) ) {
Double_t e = evdata.GetEpicsData(fEpicsVar);
e *= fScaleFactor;
Double_t m = fBeamIfo.GetM();
Double_t p;
if( fEpicsIsMomentum ) {
p = e;
e = TMath::Sqrt(p*p+m*m);
} else {
p = TMath::Sqrt( TMath::Max(e*e-m*m,0.0) );
}
fBeamIfo.SetP(p);
fEcorr = e - input->GetE();
}
fDataValid = true;
return 0;
}
void THaEpicsEbeam::SetBeam( const char* name )
{
if( !IsInit())
fBeamName = name;
else
PrintInitError("SetBeam");
}
void THaEpicsEbeam::SetEpicsVar( const char* name )
{
if( !IsInit())
fEpicsVar = name;
else
PrintInitError("SetEpicsVar");
}
void THaEpicsEbeam::SetEpicsIsMomentum( Bool_t mode )
{
if( !IsInit())
fEpicsIsMomentum = mode;
else
PrintInitError("SetEpicsIsMomentum");
}
void THaEpicsEbeam::SetScaleFactor( Double_t factor )
{
if( !IsInit())
fScaleFactor = factor;
else
PrintInitError("SetEpicsIsMomentum");
}
ClassImp(THaEpicsEbeam)
Last change: Sat Nov 7 21:26:45 2009
Last generated: 2009-11-07 21:26
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.