10 #include "THaVertexModule.h"
13 #include "THaTrackInfo.h"
25 const char* spectro,
const char*
vertex ) :
26 THaExtTarCor(name, description, spectro, vertex)
45 THaPhysicsModule::Clear(opt);
47 fDeltaTh = fDeltaDp = fDeltaP = 0.0;
57 if( mode == kDefine && fIsSetup )
return kOK;
58 fIsSetup = ( mode == kDefine );
60 DefineVarsFromList( THaTrackingModule::GetRVarDef(), mode );
62 const RVarDef var2[] = {
63 {
"delta_p",
"Size of momentum correction",
"fDeltaP" },
64 {
"delta_dp",
"Size of delta correction (%)",
"fDeltaDp" },
65 {
"delta_xptar",
"Size of xptar correction (rad)",
"fDeltaTh" },
66 {
"xsieve",
"Golden track vertical position at sieve location (cm)",
"fxsieve" },
67 {
"ysieve",
"Golden track horizontal position at sieve location (cm) (cm)",
"fysieve" },
70 DefineVarsFromList( var2, mode );
79 if( !IsOK() )
return -1;
81 THaTrackInfo* trkifo = fTrackModule->GetTrackInfo();
82 if( !trkifo->IsOK() )
return 2;
84 if( !spectro )
return 3;
88 spectro->LabToTransport( fVertexModule->GetVertex(),
89 trkifo->GetPvect(), ray );
99 Int_t ntracks = spectro->GetNTracks();
100 if( ntracks == 0 )
return -2;
112 TVector3 pointing_off=spectro->GetPointingOffset();
118 for(
Int_t i = 0; i<ntracks; i++ ) {
119 THaTrack* theTrack =
static_cast<THaTrack*
>( tracks->
At(i) );
120 if( theTrack == spectro->GetGoldenTrack() ) {
121 delta_before_xtar_corr=theTrack->GetDp();
122 p_before_xtar_corr=theTrack->GetP();
123 xptar_before_xtar_corr=theTrack->GetTTheta();
125 Double_t xptar_save=0.,xptar_diff=10000.;
126 Double_t x_tg = -vertex[1]-pointing_off[0];
130 while ( xptar_diff > 2 && niter < 5) {
131 p = spectro->GetPcentral() * ( 1.0+delta );
132 spectro->TransportToLab( p, xptar, yptar, pvect );
133 Double_t theta=spectro->GetThetaSph();
134 xtar_new = x_tg - xptar*ztarg*
cos(theta);
136 xptar_diff = abs(xptar-xptar_save)*1000;
140 theTrack->SetTarget(xtar_new, ytar*100.0, xptar, yptar);
141 theTrack->SetDp(delta*100.0);
142 p_after_xtar_corr =spectro->GetPcentral()*(1+theTrack->GetDp()/100.0);
143 theTrack->SetMomentum(p_after_xtar_corr);
144 spectro->TransportToLab(theTrack->GetP(),theTrack->GetTTheta(),theTrack->GetTPhi(),pvect_final);
145 theTrack->SetPvect(pvect_final);
146 if (strcmp(spectro->GetName(),
"H")==0) {
150 if (strcmp(spectro->GetName(),
"P")==0) {
153 fysieve=ytar*100+yptar*253.-(0.019+40.*.01*0.052)*delta_per+(0.00019+40*.01*.00052)*delta_per*delta_per;
155 fDeltaDp = delta_before_xtar_corr -theTrack->GetDp();
156 fDeltaP = p_before_xtar_corr - theTrack->GetP();
157 fDeltaTh = xptar_before_xtar_corr - theTrack->GetTTheta();
163 trkifo->Set( p_after_xtar_corr, delta*100, xtar_new,100*ytar, xptar, yptar, pvect_final );
164 fTrkIfo.Set( p_after_xtar_corr, delta*100, xtar_new,100*ytar, xptar, yptar, pvect_final );
173 cout <<
"In THcExtTarCor::ReadDatabase()" << endl;
virtual Int_t DefineVariables(EMode mode=kDefine)
virtual Int_t Process(const THaEvData &)
virtual void Clear(Option_t *opt="")
virtual void CalculateTargetQuantities(THaTrack *track, Double_t &gbeam_y, Double_t &xptar, Double_t &ytar, Double_t &yptar, Double_t &delta)
Transport focal plane track to target.
Extended target corrections physics module.
virtual Int_t ReadDatabase(const TDatime &date)
THcExtTarCor(const char *name, const char *description, const char *spectro="", const char *vertex="")
ClassImp(THcDCLookupTTDConv) THcDCLookupTTDConv
TObject * At(Int_t idx) const
A standard Hall C spectrometer apparatus.