3 #include "TTreeStream.h"
7 // Abstract class for ExB effect parameterization
11 // The ExB correction map is stored in the calib DB
12 // The lookup can be dumped to the tree:
16 char *storage = "local://OCDBres"
18 AliCDBManager::Instance()->SetDefaultStorage(storage);
19 AliCDBManager::Instance()->SetRun(RunNumber)
20 AliTPCExBFirst * exb = AliTPCcalibDB::Instance()->GetExB();
22 // See example macro $ALICE_ROOT/TPC/macros/AliTPCExBdraw.C
24 .L $ALICE_ROOT/TPC/macros/AliTPCExBdraw.C
32 AliTPCExB* AliTPCExB::fgInstance = 0;
37 void AliTPCExB::TestExB(const char* fileName) {
39 // well, as the name sais...
41 TTreeSRedirector ts(fileName);
43 for (x[0]=-250.;x[0]<=250.;x[0]+=10.)
44 for (x[1]=-250.;x[1]<=250.;x[1]+=10.)
45 for (x[2]=-250.;x[2]<=250.;x[2]+=10.) {
48 Double_t r=TMath::Sqrt(x[0]*x[0]+x[1]*x[1]);
49 Double_t rd=TMath::Sqrt(d[0]*d[0]+d[1]*d[1]);
51 Double_t phi=TMath::ATan2(x[0],x[1]);
52 Double_t phid=TMath::ATan2(d[0],d[1]);
53 Double_t dphi=phi-phid;
54 if (dphi<0.) dphi+=TMath::TwoPi();
55 if (dphi>TMath::Pi()) dphi=TMath::TwoPi()-dphi;
56 Double_t drphi=r*dphi;
57 Double_t dx=x[0]-d[0];
58 Double_t dy=x[1]-d[1];
59 Double_t dz=x[2]-d[2];
77 Double_t AliTPCExB::GetDr(Double_t r, Double_t phi, Double_t z){
80 // Posibble to us it for visualization
83 if (!fgInstance) return 0;
84 Double_t pos0[3] = {r*TMath::Sin(phi), r*TMath::Cos(phi),z};
86 fgInstance->Correct(pos0,pos1);
87 Double_t dx=pos1[0]-pos0[0];
88 Double_t dy=pos1[1]-pos0[1];
89 // Double_t dz=pos1[2]-pos0[2];
90 return TMath::Sqrt(dx*dx+dy*dy);
94 Double_t AliTPCExB::GetDrphi(Double_t r, Double_t phi, Double_t z){
98 if (!fgInstance) return 0;
99 Double_t pos0[3] = {r*TMath::Sin(phi), r*TMath::Cos(phi),z};
101 fgInstance->Correct(pos0,pos1);
102 Double_t dphi=TMath::ATan2(pos1[1],pos1[0])-TMath::ATan2(pos0[1],pos0[0]);
108 Double_t AliTPCExB::GetDphi(Double_t r, Double_t phi, Double_t z){
112 if (!fgInstance) return 0;
113 Double_t pos0[3] = {r*TMath::Sin(phi), r*TMath::Cos(phi),z};
115 fgInstance->Correct(pos0,pos1);
116 Double_t dphi=TMath::ATan2(pos1[1],pos1[0])-TMath::ATan2(pos0[1],pos0[0]);
121 Double_t AliTPCExB::GetDz(Double_t r, Double_t phi, Double_t z){
125 if (!fgInstance) return 0;
126 Double_t pos0[3] = {r*TMath::Sin(phi), r*TMath::Cos(phi),z};
128 fgInstance->Correct(pos0,pos1);
129 Double_t dz=pos1[2]-pos0[2];