#include "THaPhotoReaction.h"
#include "THaTrackingModule.h"
#include "THaBeam.h"
#include "VarDef.h"
#include "TMath.h"
using namespace std;
static const Double_t target_mass = 1.87561;
THaPhotoReaction::THaPhotoReaction( const char* name, const char* description,
const char* spectro )
: THaPhysicsModule(name,description), fMA(target_mass),
fSpectroName(spectro), fSpectro(NULL), fBeam(NULL)
{
}
THaPhotoReaction::THaPhotoReaction( const char* name, const char* description,
const char* spectro, const char* beam )
: THaPhysicsModule(name,description), fMA(target_mass),
fSpectroName(spectro), fBeamName(beam), fSpectro(NULL), fBeam(NULL)
{
}
THaPhotoReaction::~THaPhotoReaction()
{
RemoveVariables();
}
void THaPhotoReaction::Clear( Option_t* opt )
{
THaPhysicsModule::Clear(opt);
fScatAngle = fScatAngleCM = fEGamma = kBig;
}
Int_t THaPhotoReaction::DefineVariables( EMode mode )
{
if( mode == kDefine && fIsSetup ) return kOK;
fIsSetup = ( mode == kDefine );
RVarDef vars[] = {
{ "EGamma", "Real Brem. Photon Energy (GeV)", "fEGamma"},
{ "angle", "Scattering Angle (rad)", "fScatAngle"},
{ "angle_cm", "Scattering Angle(rad) in CM", "fScatAngleCM"},
{ 0 }
};
return DefineVarsFromList( vars, mode );
}
THaAnalysisObject::EStatus THaPhotoReaction::Init( const TDatime& run_time )
{
fSpectro = dynamic_cast<THaTrackingModule*>
( FindModule( fSpectroName.Data(), "THaTrackingModule"));
if( !fSpectro )
return fStatus;
if( fBeamName.Length() > 0 ) {
fBeam = dynamic_cast<THaBeamModule*>
( FindModule( fBeamName.Data(), "THaBeamModule") );
if( !fBeam )
return fStatus;
}
THaPhysicsModule::Init( run_time );
return fStatus;
}
Int_t THaPhotoReaction::Process( const THaEvData& )
{
const Double_t Mn = 0.939565;
const Double_t Mp = 0.938272;
if( !IsOK() || !gHaRun ) return -1;
THaTrackInfo* trkifo = fSpectro->GetTrackInfo();
if( !trkifo || !trkifo->IsOK() ) return 1;
TVector3 p0(0.,0.,1.);
if( fBeam )
p0 = (fBeam->GetBeamInfo()->GetPvect()).Unit();
fP1.SetVectM( trkifo->GetPvect(), Mp );
fScatAngle = p0.Angle( fP1.Vect() );
Double_t E1 = fP1.E();
Double_t Ein2 = fMA*fMA+Mp*Mp-Mn*Mn-2*fMA*E1;
fEGamma = 0.5*Ein2/(E1-fMA-fP1.Z());
double betacm = fEGamma/(fEGamma+fMA);
double gammacm = 1./(sqrt(1-betacm*betacm));
double pzcm = fP1.Z()*gammacm-E1*betacm*gammacm;
fScatAngleCM = acos( pzcm/sqrt( pow(pzcm,2)+
pow(fP1.X(),2)+
pow(fP1.Y(),2)
)
);
fDataValid = true;
return 0;
}
void THaPhotoReaction::SetSpectrometer( const char* name )
{
if( !IsInit())
fSpectroName = name;
else
PrintInitError("SetSpectrometer()");
}
void THaPhotoReaction::SetBeam( const char* name )
{
if( !IsInit())
fBeamName = name;
else
PrintInitError("SetBeam()");
}
ClassImp(THaPhotoReaction)
Last change: Sat Nov 7 21:26:49 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.