#include <TSystem.h>
#include "AliESDEvent.h"
#include "AliTender.h"
#include "AliVParticle.h"
#include "AliLog.h"
#include "AliOADBContainer.h"
#include "AliAnalysisManager.h"
#include "AliTrackFixTenderSupply.h"
#include "AliOADBTrackFix.h"
ClassImp(AliTrackFixTenderSupply)
AliTrackFixTenderSupply::AliTrackFixTenderSupply() :
fDebug(0),
fBz(0),
fParams(0),
fOADBObjPath("$OADB/PWGPP/data/CorrPTInv.root"),
fOADBObjName("CorrPTInv"),
fOADBCont(0)
{
}
AliTrackFixTenderSupply::AliTrackFixTenderSupply(const char *name, const AliTender *tender) :
AliTenderSupply(name,tender),
fDebug(0),
fBz(0),
fParams(0),
fOADBObjPath("$OADB/PWGPP/data/CorrPTInv.root"),
fOADBObjName("CorrPTInv"),
fOADBCont(0)
{
}
AliTrackFixTenderSupply::~AliTrackFixTenderSupply()
{
delete fOADBCont;
}
void AliTrackFixTenderSupply::ProcessEvent()
{
AliESDEvent *event=fTender->GetEvent();
if (!event) return;
if (fTender->RunChanged() && !GetRunCorrections(fTender->GetRun())) return;
int nTracks = event->GetNumberOfTracks();
fBz = event->GetMagneticField();
if (TMath::Abs(fBz) < kAlmost0Field) return;
const AliESDVertex *vtx = 0, *vtxTPC = 0;
vtx = event->GetPrimaryVertexTracks();
if (!vtx || vtx->GetStatus()<1) {
vtx = event->GetPrimaryVertexSPD();
if (vtx && vtx->GetStatus()<1) vtx = 0;
}
vtxTPC = event->GetPrimaryVertexTPC();
if (vtxTPC && vtxTPC->GetStatus()<1) vtxTPC = 0;
AliExternalTrackParam* extPar = 0;
double xOrig = 0;
double xyzTPCInner[3] = {0,0,0};
for (int itr=0;itr<nTracks;itr++) {
AliESDtrack* trc = event->GetTrack(itr);
if (!trc->IsOn(AliESDtrack::kTPCin)) continue;
double sideAfraction = GetSideAFraction(trc);
int cormode = trc->IsOn(AliESDtrack::kITSin) ? AliOADBTrackFix::kCorModeGlob : AliOADBTrackFix::kCorModeTPCInner;
xOrig = trc->GetX();
double xIniCor = fParams->GetXIniPtInvCorr(cormode);
const AliExternalTrackParam* parInner = trc->GetInnerParam();
if (!parInner) {
AliError("Failed to extract inner param");
continue;
}
parInner->GetXYZ(xyzTPCInner);
double phi = TMath::ATan2(xyzTPCInner[1],xyzTPCInner[0]);
if (phi<0) phi += 2*TMath::Pi();
if (fDebug>1) {
AliInfo(Form("Tr:%4d kITSin:%d Phi=%+5.2f at X=%+7.2f | SideA fraction: %.3f",itr,trc->IsOn(AliESDtrack::kITSin),phi,parInner->GetX(),sideAfraction));
AliInfo(Form("Main Param before corr. in mode %s, xIni:%.1f",cormode== AliOADBTrackFix::kCorModeGlob ? "Glo":"TPC",xIniCor));
trc->AliExternalTrackParam::Print();
}
if (xIniCor>0) trc->PropagateTo(xIniCor,fBz);
CorrectTrackPtInv(trc, cormode, sideAfraction, phi);
if (xIniCor>0) {
if (vtx) trc->RelateToVertex(vtx, fBz, kVeryBig);
else trc->PropagateTo(xOrig, fBz);
}
if (fDebug>1) {
AliInfo("Main Param after corr.");
trc->AliExternalTrackParam::Print();
}
if ( (extPar=(AliExternalTrackParam*)trc->GetTPCInnerParam()) ) {
cormode = AliOADBTrackFix::kCorModeTPCInner;
xOrig = extPar->GetX();
xIniCor = fParams->GetXIniPtInvCorr(cormode);
if (fDebug>1) {
AliInfo(Form("TPCinner Param before corr. in mode %s, xIni:%.1f",cormode== AliOADBTrackFix::kCorModeGlob ? "Glo":"TPC",xIniCor));
extPar->AliExternalTrackParam::Print();
}
if (xIniCor>0) extPar->PropagateTo(xIniCor,fBz);
CorrectTrackPtInv(extPar,cormode,sideAfraction, phi);
if (xIniCor>0) {
if (vtxTPC) trc->RelateToVertexTPC(vtxTPC, fBz, kVeryBig);
else extPar->PropagateTo(xOrig, fBz);
}
if (fDebug>1) {
AliInfo("TPCinner Param after corr.");
extPar->AliExternalTrackParam::Print();
}
}
}
}
void AliTrackFixTenderSupply::CorrectTrackPtInv(AliExternalTrackParam* trc, Int_t mode, double sideAfraction, double phi) const
{
if (!trc) return;
double *param = (double*)trc->GetParameter();
param[4] += fParams->GetPtInvCorr(mode,sideAfraction,phi);
}
Bool_t AliTrackFixTenderSupply::LoadOADBObjects()
{
TString fileName = fOADBObjPath;
if (fileName.BeginsWith("$OADB")) fileName.ReplaceAll("$OADB",Form("%s/",AliAnalysisManager::GetOADBPath()));
gSystem->ExpandPathName(fileName);
AliInfo(Form("Loading correction parameters %s from %s",fOADBObjName.Data(),fileName.Data()));
fOADBCont = new AliOADBContainer("OADB");
if (fOADBCont->InitFromFile(fileName.Data(),fOADBObjName.Data())) {
AliError("Failed to load OADB Container");
delete fOADBCont;
fOADBCont = 0;
return kFALSE;
}
return kTRUE;
}
Bool_t AliTrackFixTenderSupply::GetRunCorrections(int run)
{
fParams = 0;
if (!fOADBCont) if (!LoadOADBObjects()) return kFALSE;
fParams = dynamic_cast<AliOADBTrackFix*>(fOADBCont->GetObject(run,"default"));
if (!fParams) {AliError(Form("No correction parameters for found for run %d",run)); return kFALSE;}
AliInfo(Form("Loaded correction parameters for run %d",run));
return kTRUE;
}
Double_t AliTrackFixTenderSupply::GetSideAFraction(const AliESDtrack* track) const
{
const AliExternalTrackParam *trIn = track->GetInnerParam();
if (!trIn) {AliError("Failed to onbtain InnerParam"); return 0.5;}
double sideAfrac = 0.5;
if (trIn->GetZ()>0) { sideAfrac = 1.; if (trIn->GetTgl()>-kAlmost0) return sideAfrac;}
else if (trIn->GetZ()<0) { sideAfrac = 0.; if (trIn->GetTgl()< kAlmost0) return sideAfrac;}
int sqb = fBz<0 ? -trIn->Charge() : trIn->Charge();
double radq = TMath::Abs(trIn->GetC(fBz));
radq = radq>kAlmost0 ? 1./radq : 1e4;
if (sqb<0) radq = -radq;
double cstCphi0 = trIn->GetSnp();
double sntCphi0 = -TMath::Sqrt((1.-cstCphi0)*(1+cstCphi0));
double xc0 = trIn->GetX() + radq*cstCphi0;
double yc0 = trIn->GetY() + radq*sntCphi0;
double phi0 = TMath::ATan2( yc0, xc0);
if (sqb<0) phi0 += TMath::Pi();
if (phi0 > TMath::Pi()) phi0 -= 2.*TMath::Pi();
else if (phi0 <-TMath::Pi()) phi0 += 2.*TMath::Pi();
double csphi0 = TMath::Cos(phi0);
double snphi0 = TMath::Sin(phi0);
double dca = xc0*csphi0 + yc0*snphi0 - radq;
double tC = TMath::ATan2(sntCphi0,cstCphi0) - phi0;
double tglR = radq*trIn->GetTgl();
double z0 = trIn->GetZ() + tglR*tC;
Double_t tCross = z0/tglR;
if (tCross<tC || tCross>TMath::Pi()) return sideAfrac;
const double kROutTPC2 = 250.*250.;
double dcaR = dca+radq;
double rmax2 = dcaR*dcaR + radq*radq + 2*radq*dcaR;
double tmax = TMath::Pi();
if (rmax2>kROutTPC2) {
double ct = 0.5*(dcaR/radq + radq/dcaR - kROutTPC2/radq/dcaR);
if (TMath::Abs(ct)<1-kAlmost0) tmax = TMath::ACos(ct);
}
if (tmax<tCross) return sideAfrac;
sideAfrac = sideAfrac>0.5 ? (tCross-tC)/(tmax-tC) : 1.-(tCross-tC)/(tmax-tC);
return sideAfrac;
}
AliTrackFixTenderSupply.cxx:1 AliTrackFixTenderSupply.cxx:2 AliTrackFixTenderSupply.cxx:3 AliTrackFixTenderSupply.cxx:4 AliTrackFixTenderSupply.cxx:5 AliTrackFixTenderSupply.cxx:6 AliTrackFixTenderSupply.cxx:7 AliTrackFixTenderSupply.cxx:8 AliTrackFixTenderSupply.cxx:9 AliTrackFixTenderSupply.cxx:10 AliTrackFixTenderSupply.cxx:11 AliTrackFixTenderSupply.cxx:12 AliTrackFixTenderSupply.cxx:13 AliTrackFixTenderSupply.cxx:14 AliTrackFixTenderSupply.cxx:15 AliTrackFixTenderSupply.cxx:16 AliTrackFixTenderSupply.cxx:17 AliTrackFixTenderSupply.cxx:18 AliTrackFixTenderSupply.cxx:19 AliTrackFixTenderSupply.cxx:20 AliTrackFixTenderSupply.cxx:21 AliTrackFixTenderSupply.cxx:22 AliTrackFixTenderSupply.cxx:23 AliTrackFixTenderSupply.cxx:24 AliTrackFixTenderSupply.cxx:25 AliTrackFixTenderSupply.cxx:26 AliTrackFixTenderSupply.cxx:27 AliTrackFixTenderSupply.cxx:28 AliTrackFixTenderSupply.cxx:29 AliTrackFixTenderSupply.cxx:30 AliTrackFixTenderSupply.cxx:31 AliTrackFixTenderSupply.cxx:32 AliTrackFixTenderSupply.cxx:33 AliTrackFixTenderSupply.cxx:34 AliTrackFixTenderSupply.cxx:35 AliTrackFixTenderSupply.cxx:36 AliTrackFixTenderSupply.cxx:37 AliTrackFixTenderSupply.cxx:38 AliTrackFixTenderSupply.cxx:39 AliTrackFixTenderSupply.cxx:40 AliTrackFixTenderSupply.cxx:41 AliTrackFixTenderSupply.cxx:42 AliTrackFixTenderSupply.cxx:43 AliTrackFixTenderSupply.cxx:44 AliTrackFixTenderSupply.cxx:45 AliTrackFixTenderSupply.cxx:46 AliTrackFixTenderSupply.cxx:47 AliTrackFixTenderSupply.cxx:48 AliTrackFixTenderSupply.cxx:49 AliTrackFixTenderSupply.cxx:50 AliTrackFixTenderSupply.cxx:51 AliTrackFixTenderSupply.cxx:52 AliTrackFixTenderSupply.cxx:53 AliTrackFixTenderSupply.cxx:54 AliTrackFixTenderSupply.cxx:55 AliTrackFixTenderSupply.cxx:56 AliTrackFixTenderSupply.cxx:57 AliTrackFixTenderSupply.cxx:58 AliTrackFixTenderSupply.cxx:59 AliTrackFixTenderSupply.cxx:60 AliTrackFixTenderSupply.cxx:61 AliTrackFixTenderSupply.cxx:62 AliTrackFixTenderSupply.cxx:63 AliTrackFixTenderSupply.cxx:64 AliTrackFixTenderSupply.cxx:65 AliTrackFixTenderSupply.cxx:66 AliTrackFixTenderSupply.cxx:67 AliTrackFixTenderSupply.cxx:68 AliTrackFixTenderSupply.cxx:69 AliTrackFixTenderSupply.cxx:70 AliTrackFixTenderSupply.cxx:71 AliTrackFixTenderSupply.cxx:72 AliTrackFixTenderSupply.cxx:73 AliTrackFixTenderSupply.cxx:74 AliTrackFixTenderSupply.cxx:75 AliTrackFixTenderSupply.cxx:76 AliTrackFixTenderSupply.cxx:77 AliTrackFixTenderSupply.cxx:78 AliTrackFixTenderSupply.cxx:79 AliTrackFixTenderSupply.cxx:80 AliTrackFixTenderSupply.cxx:81 AliTrackFixTenderSupply.cxx:82 AliTrackFixTenderSupply.cxx:83 AliTrackFixTenderSupply.cxx:84 AliTrackFixTenderSupply.cxx:85 AliTrackFixTenderSupply.cxx:86 AliTrackFixTenderSupply.cxx:87 AliTrackFixTenderSupply.cxx:88 AliTrackFixTenderSupply.cxx:89 AliTrackFixTenderSupply.cxx:90 AliTrackFixTenderSupply.cxx:91 AliTrackFixTenderSupply.cxx:92 AliTrackFixTenderSupply.cxx:93 AliTrackFixTenderSupply.cxx:94 AliTrackFixTenderSupply.cxx:95 AliTrackFixTenderSupply.cxx:96 AliTrackFixTenderSupply.cxx:97 AliTrackFixTenderSupply.cxx:98 AliTrackFixTenderSupply.cxx:99 AliTrackFixTenderSupply.cxx:100 AliTrackFixTenderSupply.cxx:101 AliTrackFixTenderSupply.cxx:102 AliTrackFixTenderSupply.cxx:103 AliTrackFixTenderSupply.cxx:104 AliTrackFixTenderSupply.cxx:105 AliTrackFixTenderSupply.cxx:106 AliTrackFixTenderSupply.cxx:107 AliTrackFixTenderSupply.cxx:108 AliTrackFixTenderSupply.cxx:109 AliTrackFixTenderSupply.cxx:110 AliTrackFixTenderSupply.cxx:111 AliTrackFixTenderSupply.cxx:112 AliTrackFixTenderSupply.cxx:113 AliTrackFixTenderSupply.cxx:114 AliTrackFixTenderSupply.cxx:115 AliTrackFixTenderSupply.cxx:116 AliTrackFixTenderSupply.cxx:117 AliTrackFixTenderSupply.cxx:118 AliTrackFixTenderSupply.cxx:119 AliTrackFixTenderSupply.cxx:120 AliTrackFixTenderSupply.cxx:121 AliTrackFixTenderSupply.cxx:122 AliTrackFixTenderSupply.cxx:123 AliTrackFixTenderSupply.cxx:124 AliTrackFixTenderSupply.cxx:125 AliTrackFixTenderSupply.cxx:126 AliTrackFixTenderSupply.cxx:127 AliTrackFixTenderSupply.cxx:128 AliTrackFixTenderSupply.cxx:129 AliTrackFixTenderSupply.cxx:130 AliTrackFixTenderSupply.cxx:131 AliTrackFixTenderSupply.cxx:132 AliTrackFixTenderSupply.cxx:133 AliTrackFixTenderSupply.cxx:134 AliTrackFixTenderSupply.cxx:135 AliTrackFixTenderSupply.cxx:136 AliTrackFixTenderSupply.cxx:137 AliTrackFixTenderSupply.cxx:138 AliTrackFixTenderSupply.cxx:139 AliTrackFixTenderSupply.cxx:140 AliTrackFixTenderSupply.cxx:141 AliTrackFixTenderSupply.cxx:142 AliTrackFixTenderSupply.cxx:143 AliTrackFixTenderSupply.cxx:144 AliTrackFixTenderSupply.cxx:145 AliTrackFixTenderSupply.cxx:146 AliTrackFixTenderSupply.cxx:147 AliTrackFixTenderSupply.cxx:148 AliTrackFixTenderSupply.cxx:149 AliTrackFixTenderSupply.cxx:150 AliTrackFixTenderSupply.cxx:151 AliTrackFixTenderSupply.cxx:152 AliTrackFixTenderSupply.cxx:153 AliTrackFixTenderSupply.cxx:154 AliTrackFixTenderSupply.cxx:155 AliTrackFixTenderSupply.cxx:156 AliTrackFixTenderSupply.cxx:157 AliTrackFixTenderSupply.cxx:158 AliTrackFixTenderSupply.cxx:159 AliTrackFixTenderSupply.cxx:160 AliTrackFixTenderSupply.cxx:161 AliTrackFixTenderSupply.cxx:162 AliTrackFixTenderSupply.cxx:163 AliTrackFixTenderSupply.cxx:164 AliTrackFixTenderSupply.cxx:165 AliTrackFixTenderSupply.cxx:166 AliTrackFixTenderSupply.cxx:167 AliTrackFixTenderSupply.cxx:168 AliTrackFixTenderSupply.cxx:169 AliTrackFixTenderSupply.cxx:170 AliTrackFixTenderSupply.cxx:171 AliTrackFixTenderSupply.cxx:172 AliTrackFixTenderSupply.cxx:173 AliTrackFixTenderSupply.cxx:174 AliTrackFixTenderSupply.cxx:175 AliTrackFixTenderSupply.cxx:176 AliTrackFixTenderSupply.cxx:177 AliTrackFixTenderSupply.cxx:178 AliTrackFixTenderSupply.cxx:179 AliTrackFixTenderSupply.cxx:180 AliTrackFixTenderSupply.cxx:181 AliTrackFixTenderSupply.cxx:182 AliTrackFixTenderSupply.cxx:183 AliTrackFixTenderSupply.cxx:184 AliTrackFixTenderSupply.cxx:185 AliTrackFixTenderSupply.cxx:186 AliTrackFixTenderSupply.cxx:187 AliTrackFixTenderSupply.cxx:188 AliTrackFixTenderSupply.cxx:189 AliTrackFixTenderSupply.cxx:190 AliTrackFixTenderSupply.cxx:191 AliTrackFixTenderSupply.cxx:192 AliTrackFixTenderSupply.cxx:193 AliTrackFixTenderSupply.cxx:194 AliTrackFixTenderSupply.cxx:195 AliTrackFixTenderSupply.cxx:196 AliTrackFixTenderSupply.cxx:197 AliTrackFixTenderSupply.cxx:198 AliTrackFixTenderSupply.cxx:199 AliTrackFixTenderSupply.cxx:200 AliTrackFixTenderSupply.cxx:201 AliTrackFixTenderSupply.cxx:202 AliTrackFixTenderSupply.cxx:203 AliTrackFixTenderSupply.cxx:204 AliTrackFixTenderSupply.cxx:205 AliTrackFixTenderSupply.cxx:206 AliTrackFixTenderSupply.cxx:207 AliTrackFixTenderSupply.cxx:208 AliTrackFixTenderSupply.cxx:209 AliTrackFixTenderSupply.cxx:210 AliTrackFixTenderSupply.cxx:211 AliTrackFixTenderSupply.cxx:212 AliTrackFixTenderSupply.cxx:213 AliTrackFixTenderSupply.cxx:214 AliTrackFixTenderSupply.cxx:215 AliTrackFixTenderSupply.cxx:216 AliTrackFixTenderSupply.cxx:217 AliTrackFixTenderSupply.cxx:218 AliTrackFixTenderSupply.cxx:219 AliTrackFixTenderSupply.cxx:220 AliTrackFixTenderSupply.cxx:221 AliTrackFixTenderSupply.cxx:222 AliTrackFixTenderSupply.cxx:223 AliTrackFixTenderSupply.cxx:224 AliTrackFixTenderSupply.cxx:225 AliTrackFixTenderSupply.cxx:226 AliTrackFixTenderSupply.cxx:227 AliTrackFixTenderSupply.cxx:228 AliTrackFixTenderSupply.cxx:229 AliTrackFixTenderSupply.cxx:230 AliTrackFixTenderSupply.cxx:231 AliTrackFixTenderSupply.cxx:232 AliTrackFixTenderSupply.cxx:233 AliTrackFixTenderSupply.cxx:234 AliTrackFixTenderSupply.cxx:235 AliTrackFixTenderSupply.cxx:236 AliTrackFixTenderSupply.cxx:237 AliTrackFixTenderSupply.cxx:238 AliTrackFixTenderSupply.cxx:239 AliTrackFixTenderSupply.cxx:240 AliTrackFixTenderSupply.cxx:241 AliTrackFixTenderSupply.cxx:242 AliTrackFixTenderSupply.cxx:243 AliTrackFixTenderSupply.cxx:244 AliTrackFixTenderSupply.cxx:245 AliTrackFixTenderSupply.cxx:246 AliTrackFixTenderSupply.cxx:247 AliTrackFixTenderSupply.cxx:248 AliTrackFixTenderSupply.cxx:249 AliTrackFixTenderSupply.cxx:250 AliTrackFixTenderSupply.cxx:251 AliTrackFixTenderSupply.cxx:252 AliTrackFixTenderSupply.cxx:253 AliTrackFixTenderSupply.cxx:254 AliTrackFixTenderSupply.cxx:255 AliTrackFixTenderSupply.cxx:256 AliTrackFixTenderSupply.cxx:257 AliTrackFixTenderSupply.cxx:258 AliTrackFixTenderSupply.cxx:259