Skip to content
Snippets Groups Projects
Commit 810f8b3e authored by hallc-online's avatar hallc-online Committed by Mark K Jones
Browse files

Modify THcExtTarCor.cxx and THcReactionPoint

Fix sign mistake in correction for vertical pointing offset
   in THcExtTarCor.cxx

Write Hall C version of THcReactionPoint
parent 13c30107
No related branches found
No related tags found
No related merge requests found
......@@ -138,7 +138,7 @@ Int_t THcExtTarCor::Process( const THaEvData& )
THaTrack* theTrack = static_cast<THaTrack*>( tracks->At(i) );
if( theTrack == spectro->GetGoldenTrack() ) {
// Calculate corrections & recalculate ,,,track parameters
Double_t x_tg = -vertex[1]+pointing_off[0]; // units of cm, beam position in spectrometer coordinate system
Double_t x_tg = -vertex[1]-pointing_off[0]; // units of cm, beam position in spectrometer coordinate system
spectro->CalculateTargetQuantities(theTrack,x_tg,xptar,ytar,yptar,delta);
p = spectro->GetPcentral() * ( 1.0+delta );
spectro->TransportToLab( p, xptar, yptar, pvect );
......
//*-- Author : Ole Hansen 13-Mar-03
#include "THcReactionPoint.h"
#include "THaSpectrometer.h"
#include "THaTrack.h"
#include "THaBeam.h"
#include "TMath.h"
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;
ClassImp(THcReactionPoint)
//_____________________________________________________________________________
THcReactionPoint::THcReactionPoint( const char* name, const char* description,
const char* spectro, const char* beam ) :
THaPhysicsModule(name,description), fSpectroName(spectro),
fBeamName(beam), fSpectro(NULL), fBeam(NULL)
{
// Normal constructor.
}
//_____________________________________________________________________________
THcReactionPoint::~THcReactionPoint()
{
// Destructor
DefineVariables( kDelete );
}
//_____________________________________________________________________________
void THcReactionPoint::Clear( Option_t* opt )
{
// Clear all event-by-event variables.
THaPhysicsModule::Clear(opt);
VertexClear();
}
//_____________________________________________________________________________
Int_t THcReactionPoint::DefineVariables( EMode mode )
{
// Define/delete analysis variables
if( mode == kDefine && fIsSetup ) return kOK;
fIsSetup = ( mode == kDefine );
return DefineVarsFromList( THaVertexModule::GetRVarDef(), mode );
}
//_____________________________________________________________________________
THaAnalysisObject::EStatus THcReactionPoint::Init( const TDatime& run_time )
{
// Initialize the module.
// Locate the spectrometer apparatus named in fSpectroName and save
// pointer to it.
// Standard initialization. Calls this object's DefineVariables().
if( THaPhysicsModule::Init( run_time ) != kOK )
return fStatus;
fSpectro = static_cast<THaSpectrometer*>
( FindModule( fSpectroName.Data(), "THaSpectrometer"));
if( !fSpectro )
return fStatus;
if( fBeamName.Length() > 0 )
fBeam = static_cast<THaBeam*>( FindModule( fBeamName.Data(), "THaBeam") );
return fStatus;
}
//_____________________________________________________________________________
Int_t THcReactionPoint::Process( const THaEvData& )
{
// Calculate the vertex coordinates.
if( !IsOK() ) return -1;
Int_t ntracks = fSpectro->GetNTracks();
if( ntracks == 0 ) return 0;
TClonesArray* tracks = fSpectro->GetTracks();
if( !tracks ) return -2;
TVector3 beam_org, beam_ray( 0.0, 0.0, 1.0 );
if( fBeam ) {
beam_org = fBeam->GetPosition();
beam_ray = fBeam->GetDirection();
}
TVector3 v;
for( Int_t i = 0; i<ntracks; i++ ) {
THaTrack* theTrack = static_cast<THaTrack*>( tracks->At(i) );
// Ignore junk tracks
if( !theTrack || !theTrack->HasTarget() )
continue;
TVector3 pointing_off=fSpectro->GetPointingOffset();
Double_t costheta=TMath::Cos(fSpectro->GetThetaSph());
Double_t sintheta=TMath::Cos(fSpectro->GetPhiSph())*TMath::Sin(fSpectro->GetThetaSph());
Double_t ytar_off=theTrack->GetTY()+pointing_off(1);
Double_t yptar = theTrack->GetTPhi();
Double_t ztarg=(ytar_off-beam_org(0)*(costheta-yptar*sintheta))/(-sintheta-yptar*costheta);
v.SetXYZ(beam_org(0),beam_org(1),ztarg);
theTrack->SetVertex(v);
if( theTrack == fSpectro->GetGoldenTrack() ) {
fVertex = theTrack->GetVertex();
fVertexOK = kTRUE;
}
}
return 0;
}
#ifndef ROOT_THcReactionPoint
#define ROOT_THcReactionPoint
//////////////////////////////////////////////////////////////////////////
//
// THcReactionPoint
//
//////////////////////////////////////////////////////////////////////////
#include "THaPhysicsModule.h"
#include "THaVertexModule.h"
#include "TString.h"
class THaSpectrometer;
class THaBeam;
class THcReactionPoint : public THaPhysicsModule, public THaVertexModule {
public:
THcReactionPoint( const char* name, const char* description,
const char* spectro="", const char* beam="" );
virtual ~THcReactionPoint();
virtual void Clear( Option_t* opt="" );
virtual EStatus Init( const TDatime& run_time );
virtual Int_t Process( const THaEvData& );
void SetSpectrometer( const char* name );
void SetBeam( const char* name );
protected:
TString fSpectroName; // Name of spectrom. to consider
TString fBeamName; // Name of beam position apparatus
THaSpectrometer* fSpectro; // Pointer to spectrometer object
THaBeam* fBeam; // Pointer to beam position apparatus
virtual Int_t DefineVariables( EMode mode = kDefine );
ClassDef(THcReactionPoint,0) //Single arm track-beam vertex module
};
//_________ inlines __________________________________________________________
inline
void THcReactionPoint::SetSpectrometer( const char* name ) {
fSpectroName = name;
}
//_____________________________________________________________________________
inline
void THcReactionPoint::SetBeam( const char* name ) {
fBeamName = name;
}
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment