#include "AliMagF.h"
#include "TGeoGlobalMagField.h"
#include "AliTPCcalibDB.h"
#include "AliTPCParam.h"
#include "AliLog.h"
#include "AliTPCExBTwist.h"
AliTPCExBTwist::AliTPCExBTwist()
: AliTPCCorrection("exb_twist","ExB twist"),
fC1(0.),fC2(0.),
fXTwist(0.),fYTwist(0.)
{
}
AliTPCExBTwist::~AliTPCExBTwist() {
}
Bool_t AliTPCExBTwist::AddCorrectionCompact(AliTPCCorrection* corr, Double_t weight){
if (corr==NULL) {
AliError("Zerro pointer - correction");
return kFALSE;
}
AliTPCExBTwist * corrC = dynamic_cast< AliTPCExBTwist*>(corr);
if (corrC == NULL) return kFALSE;
fXTwist+=weight*corrC->fXTwist;
fYTwist+=weight*corrC->fYTwist;
return kTRUE;
}
void AliTPCExBTwist::Init() {
AliMagF* magF= (AliMagF*)TGeoGlobalMagField::Instance()->GetField();
if (!magF) AliError("Magneticd field - not initialized");
Double_t bzField = magF->SolenoidField()/10.;
AliTPCParam *param= AliTPCcalibDB::Instance()->GetParameters();
if (!param) AliError("Parameters - not initialized");
Double_t vdrift = param->GetDriftV()/1000000.;
Double_t ezField = 400;
Double_t wt = -10.0 * (bzField*10) * vdrift / ezField ;
SetOmegaTauT1T2(wt,fT1,fT2);
}
void AliTPCExBTwist::Update(const TTimeStamp &) {
AliMagF* magF= (AliMagF*)TGeoGlobalMagField::Instance()->GetField();
if (!magF) AliError("Magneticd field - not initialized");
Double_t bzField = magF->SolenoidField()/10.;
AliTPCParam *param= AliTPCcalibDB::Instance()->GetParameters();
if (!param) AliError("Parameters - not initialized");
Double_t vdrift = param->GetDriftV()/1000000.;
Double_t ezField = 400;
Double_t wt = -10.0 * (bzField*10) * vdrift / ezField ;
SetOmegaTauT1T2(wt,fT1,fT2);
}
void AliTPCExBTwist::GetCorrection(const Float_t x[],const Short_t roc,Float_t dx[]) {
const Float_t zstart=x[2];
const Float_t zend =(roc%36<18?fgkTPCZ0:-fgkTPCZ0);
const Float_t zdrift=zstart-zend;
dx[0]=(fC2*fXTwist-fC1*fYTwist)*zdrift;
dx[1]=(fC1*fXTwist+fC2*fYTwist)*zdrift;
dx[2]=0.;
}
void AliTPCExBTwist::Print(const Option_t* option) const {
TString opt = option; opt.ToLower();
printf("%s\n",GetTitle());
printf(" - Twist settings: X-Twist: %1.5f rad, Y-Twist: %1.5f rad \n",fXTwist,fYTwist);
if (opt.Contains("a")) {
printf(" - T1: %1.4f, T2: %1.4f \n",fT1,fT2);
printf(" - C1: %1.4f, C2: %1.4f \n",fC1,fC2);
}
}