#include "AliMagF.h"
#include "TGeoGlobalMagField.h"
#include "AliTPCcalibDB.h"
#include "AliTPCParam.h"
#include "AliLog.h"
#include "TMath.h"
#include "AliTPCROC.h"
#include "AliTPCExBEffective.h"
ClassImp(AliTPCExBEffective)
AliTPCExBEffective::AliTPCExBEffective()
: AliTPCCorrection("ExB_effective","ExB effective"),
fC0(1.),fC1(0.),
fPolynomA(0),
fPolynomC(0),
fPolynomValA(0),
fPolynomValC(0)
{
}
AliTPCExBEffective::~AliTPCExBEffective() {
}
void AliTPCExBEffective::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 AliTPCExBEffective::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 AliTPCExBEffective::GetCorrection(const Float_t x[],const Short_t roc,Float_t dx[]) {
if (!fPolynomA) return;
AliTPCROC * calROC = AliTPCROC::Instance();
const Double_t kRTPC0 =calROC->GetPadRowRadii(0,0);
const Double_t kRTPC1 =calROC->GetPadRowRadii(36,calROC->GetNRows(36)-1);
Float_t rmiddle=(kRTPC0+kRTPC1)/2.;
Double_t phi = TMath::ATan2(x[1],x[0]);
Double_t r = TMath::Sqrt(x[1]*x[1]+x[0]*x[0]);
Double_t driftN = 1.-TMath::Abs(x[2])/calROC->GetZLength(0);
Double_t localxN = 2*(r-rmiddle)/(kRTPC1-kRTPC0);
Double_t erez = 0;
Double_t erphiez = 0;
if (roc%36<18) erez= GetSum(*fPolynomA, *fPolynomValA, localxN, driftN, phi,0);
if (roc%36>=18) erez= GetSum(*fPolynomC, *fPolynomValC, localxN, driftN, phi,0);
if (roc%36<18) erphiez= GetSum(*fPolynomA, *fPolynomValA, localxN, driftN, phi,1);
if (roc%36>=18) erphiez= GetSum(*fPolynomC, *fPolynomValC, localxN, driftN, phi,1);
Double_t dr = fC0 * erez + fC1 * erphiez;
Double_t drphi = -fC1 * erez + fC0 * erphiez;
if ( r > 0.0 ) {
r = r + dr;
phi = phi + drphi/r;
}
dx[0] = r * TMath::Cos(phi) - x[0];
dx[1] = r * TMath::Sin(phi) - x[1];
dx[2] = 0.;
}
Double_t AliTPCExBEffective::GetSum(const TMatrixD& mpol, const TMatrixD&mcoef, Double_t r, Double_t drift, Double_t phi, Int_t coord) const {
Int_t npols=mpol.GetNrows();
Double_t sum=0;
for (Int_t ipol=0;ipol<npols; ipol++){
Double_t pR = 1, pD=1, pPhi=1;
Int_t icoord = TMath::Nint(mpol(ipol,0));
if (icoord!=coord) continue;
Int_t npolR = TMath::Nint(mpol(ipol,1));
Int_t npolD = TMath::Nint(mpol(ipol,2));
Int_t npolPhi = TMath::Nint(mpol(ipol,3));
Double_t coef=mcoef(ipol,0);
for (Int_t ipolR=1; ipolR<=npolR; ipolR++) pR*=r;
for (Int_t ipolD=1; ipolD<=npolD; ipolD++) pD*=drift;
pPhi=TMath::Cos(npolPhi*phi);
sum+= pR*pD*pPhi*coef;
}
return sum;
}
void AliTPCExBEffective::SetPolynoms(const TMatrixD *polA,const TMatrixD *polC){
fPolynomA = new TMatrixD(*polA);
fPolynomC = new TMatrixD(*polC);
}
void AliTPCExBEffective::SetCoeficients(const TMatrixD *valA,const TMatrixD *valC){
fPolynomValA = new TMatrixD(*valA);
fPolynomValC = new TMatrixD(*valC);
}
void AliTPCExBEffective::Print(const Option_t* option) const {
TString opt = option; opt.ToLower();
printf("%s\t%s\n",GetName(),GetTitle());
if (opt.Contains("a")) {
printf(" - T1: %1.4f, T2: %1.4f \n",fT1,fT2);
printf(" - C0: %1.4f, C1: %1.4f \n",fC0,fC1);
fPolynomValA->Print();
fPolynomValC->Print();
}
}
AliTPCExBEffective.cxx:10 AliTPCExBEffective.cxx:11 AliTPCExBEffective.cxx:12 AliTPCExBEffective.cxx:13 AliTPCExBEffective.cxx:14 AliTPCExBEffective.cxx:15 AliTPCExBEffective.cxx:16 AliTPCExBEffective.cxx:17 AliTPCExBEffective.cxx:18 AliTPCExBEffective.cxx:19 AliTPCExBEffective.cxx:20 AliTPCExBEffective.cxx:21 AliTPCExBEffective.cxx:22 AliTPCExBEffective.cxx:23 AliTPCExBEffective.cxx:24 AliTPCExBEffective.cxx:25 AliTPCExBEffective.cxx:26 AliTPCExBEffective.cxx:27 AliTPCExBEffective.cxx:28 AliTPCExBEffective.cxx:29 AliTPCExBEffective.cxx:30 AliTPCExBEffective.cxx:31 AliTPCExBEffective.cxx:32 AliTPCExBEffective.cxx:33 AliTPCExBEffective.cxx:34 AliTPCExBEffective.cxx:35 AliTPCExBEffective.cxx:36 AliTPCExBEffective.cxx:37 AliTPCExBEffective.cxx:38 AliTPCExBEffective.cxx:39 AliTPCExBEffective.cxx:40 AliTPCExBEffective.cxx:41 AliTPCExBEffective.cxx:42 AliTPCExBEffective.cxx:43 AliTPCExBEffective.cxx:44 AliTPCExBEffective.cxx:45 AliTPCExBEffective.cxx:46 AliTPCExBEffective.cxx:47 AliTPCExBEffective.cxx:48 AliTPCExBEffective.cxx:49 AliTPCExBEffective.cxx:50 AliTPCExBEffective.cxx:51 AliTPCExBEffective.cxx:52 AliTPCExBEffective.cxx:53 AliTPCExBEffective.cxx:54 AliTPCExBEffective.cxx:55 AliTPCExBEffective.cxx:56 AliTPCExBEffective.cxx:57 AliTPCExBEffective.cxx:58 AliTPCExBEffective.cxx:59 AliTPCExBEffective.cxx:60 AliTPCExBEffective.cxx:61 AliTPCExBEffective.cxx:62 AliTPCExBEffective.cxx:63 AliTPCExBEffective.cxx:64 AliTPCExBEffective.cxx:65 AliTPCExBEffective.cxx:66 AliTPCExBEffective.cxx:67 AliTPCExBEffective.cxx:68 AliTPCExBEffective.cxx:69 AliTPCExBEffective.cxx:70 AliTPCExBEffective.cxx:71 AliTPCExBEffective.cxx:72 AliTPCExBEffective.cxx:73 AliTPCExBEffective.cxx:74 AliTPCExBEffective.cxx:75 AliTPCExBEffective.cxx:76 AliTPCExBEffective.cxx:77 AliTPCExBEffective.cxx:78 AliTPCExBEffective.cxx:79 AliTPCExBEffective.cxx:80 AliTPCExBEffective.cxx:81 AliTPCExBEffective.cxx:82 AliTPCExBEffective.cxx:83 AliTPCExBEffective.cxx:84 AliTPCExBEffective.cxx:85 AliTPCExBEffective.cxx:86 AliTPCExBEffective.cxx:87 AliTPCExBEffective.cxx:88 AliTPCExBEffective.cxx:89 AliTPCExBEffective.cxx:90 AliTPCExBEffective.cxx:91 AliTPCExBEffective.cxx:92 AliTPCExBEffective.cxx:93 AliTPCExBEffective.cxx:94 AliTPCExBEffective.cxx:95 AliTPCExBEffective.cxx:96 AliTPCExBEffective.cxx:97 AliTPCExBEffective.cxx:98 AliTPCExBEffective.cxx:99 AliTPCExBEffective.cxx:100 AliTPCExBEffective.cxx:101 AliTPCExBEffective.cxx:102 AliTPCExBEffective.cxx:103 AliTPCExBEffective.cxx:104 AliTPCExBEffective.cxx:105 AliTPCExBEffective.cxx:106 AliTPCExBEffective.cxx:107 AliTPCExBEffective.cxx:108 AliTPCExBEffective.cxx:109 AliTPCExBEffective.cxx:110 AliTPCExBEffective.cxx:111 AliTPCExBEffective.cxx:112 AliTPCExBEffective.cxx:113 AliTPCExBEffective.cxx:114 AliTPCExBEffective.cxx:115 AliTPCExBEffective.cxx:116 AliTPCExBEffective.cxx:117 AliTPCExBEffective.cxx:118 AliTPCExBEffective.cxx:119 AliTPCExBEffective.cxx:120 AliTPCExBEffective.cxx:121 AliTPCExBEffective.cxx:122 AliTPCExBEffective.cxx:123 AliTPCExBEffective.cxx:124 AliTPCExBEffective.cxx:125 AliTPCExBEffective.cxx:126 AliTPCExBEffective.cxx:127 AliTPCExBEffective.cxx:128 AliTPCExBEffective.cxx:129 AliTPCExBEffective.cxx:130 AliTPCExBEffective.cxx:131 AliTPCExBEffective.cxx:132 AliTPCExBEffective.cxx:133 AliTPCExBEffective.cxx:134 AliTPCExBEffective.cxx:135 AliTPCExBEffective.cxx:136 AliTPCExBEffective.cxx:137 AliTPCExBEffective.cxx:138 AliTPCExBEffective.cxx:139 AliTPCExBEffective.cxx:140 AliTPCExBEffective.cxx:141 AliTPCExBEffective.cxx:142 AliTPCExBEffective.cxx:143 AliTPCExBEffective.cxx:144 AliTPCExBEffective.cxx:145 AliTPCExBEffective.cxx:146 AliTPCExBEffective.cxx:147 AliTPCExBEffective.cxx:148 AliTPCExBEffective.cxx:149 AliTPCExBEffective.cxx:150 AliTPCExBEffective.cxx:151 AliTPCExBEffective.cxx:152 AliTPCExBEffective.cxx:153 AliTPCExBEffective.cxx:154 AliTPCExBEffective.cxx:155 AliTPCExBEffective.cxx:156 AliTPCExBEffective.cxx:157 AliTPCExBEffective.cxx:158 AliTPCExBEffective.cxx:159 AliTPCExBEffective.cxx:160 AliTPCExBEffective.cxx:161 AliTPCExBEffective.cxx:162 AliTPCExBEffective.cxx:163 AliTPCExBEffective.cxx:164 AliTPCExBEffective.cxx:165 AliTPCExBEffective.cxx:166 AliTPCExBEffective.cxx:167 AliTPCExBEffective.cxx:168 AliTPCExBEffective.cxx:169 AliTPCExBEffective.cxx:170 AliTPCExBEffective.cxx:171 AliTPCExBEffective.cxx:172 AliTPCExBEffective.cxx:173 AliTPCExBEffective.cxx:174 AliTPCExBEffective.cxx:175 AliTPCExBEffective.cxx:176 AliTPCExBEffective.cxx:177 AliTPCExBEffective.cxx:178 AliTPCExBEffective.cxx:179 AliTPCExBEffective.cxx:180 AliTPCExBEffective.cxx:181 AliTPCExBEffective.cxx:182 AliTPCExBEffective.cxx:183 AliTPCExBEffective.cxx:184 AliTPCExBEffective.cxx:185 AliTPCExBEffective.cxx:186 AliTPCExBEffective.cxx:187 AliTPCExBEffective.cxx:188 AliTPCExBEffective.cxx:189 AliTPCExBEffective.cxx:190 AliTPCExBEffective.cxx:191 AliTPCExBEffective.cxx:192 AliTPCExBEffective.cxx:193 AliTPCExBEffective.cxx:194 AliTPCExBEffective.cxx:195 AliTPCExBEffective.cxx:196 AliTPCExBEffective.cxx:197 AliTPCExBEffective.cxx:198 AliTPCExBEffective.cxx:199 AliTPCExBEffective.cxx:200 AliTPCExBEffective.cxx:201 AliTPCExBEffective.cxx:202 AliTPCExBEffective.cxx:203 AliTPCExBEffective.cxx:204 AliTPCExBEffective.cxx:205