#include "AliTPCExB.h"
#include "TMath.h"
-#include "TTreeStream.h"
+//#include "TTreeStream.h"
#include "AliMagF.h"
#include "TLinearFitter.h"
+#include "AliTPCcalibDB.h"
//
//
}
+AliTPCExB::AliTPCExB(const AliTPCExB& exb):
+ TObject(exb),
+ fMatBrBz(new TVectorD(*(exb.fMatBrBz))), //param matrix Br/Bz
+ fMatBrfiBz(new TVectorD(*(exb.fMatBrfiBz))), //param matrix Br/Bz
+ fMatBrBzI0(new TVectorD(*(exb.fMatBrBzI0))), //param matrix Br/Bz integral z>0
+ fMatBrBzI1(new TVectorD(*(exb.fMatBrBzI1))), //param matrix Br/Bz integral z<0
+ fMatBrfiBzI0(new TVectorD(*(exb.fMatBrfiBzI0))), //param matrix Br/Bz integral z>0
+ fMatBrfiBzI1(new TVectorD(*(exb.fMatBrfiBzI1))) //param matrix Br/Bz integral z<0
+{
+ //
+ // copy constructor
+ //
+}
+
+AliTPCExB& AliTPCExB::operator=(const AliTPCExB &/*exb*/)
+{
+ //
+ // Dummy assignment
+ //
+ return *this;
+}
+
+
+
void AliTPCExB::TestExB(const char* fileName) {
//
-Double_t AliTPCExB::GetDr(Double_t r, Double_t phi, Double_t z){
+Double_t AliTPCExB::GetDr(Double_t r, Double_t phi, Double_t z, Double_t bz){
//
// Static function
// Posibble to us it for visualization
//
//
- if (!fgInstance) return 0;
- Double_t pos0[3] = {r*TMath::Sin(phi), r*TMath::Cos(phi),z};
+ AliTPCExB *exb = Instance();
+ if (!exb) exb = AliTPCcalibDB::GetExB(bz,kFALSE);
+ if (!exb) return 0;
+ Double_t pos0[3] = {r*TMath::Cos(phi), r*TMath::Sin(phi),z};
Double_t pos1[3];
- fgInstance->Correct(pos0,pos1);
+ exb->Correct(pos0,pos1);
Double_t dx=pos1[0]-pos0[0];
Double_t dy=pos1[1]-pos0[1];
// Double_t dz=pos1[2]-pos0[2];
- return TMath::Sqrt(dx*dx+dy*dy);
+ // return TMath::Sqrt(dx*dx+dy*dy);
+ Float_t dr = (dx*pos0[0]+dy*pos0[1])/r;
+ return dr;
}
-Double_t AliTPCExB::GetDrphi(Double_t r, Double_t phi, Double_t z){
+Double_t AliTPCExB::GetDrphi(Double_t r, Double_t phi, Double_t z, Double_t bz){
//
//
//
- if (!fgInstance) return 0;
- Double_t pos0[3] = {r*TMath::Sin(phi), r*TMath::Cos(phi),z};
+ AliTPCExB *exb = Instance();
+ if (!exb) exb = AliTPCcalibDB::GetExB(bz,kFALSE);
+ if (!exb) return 0;
+ Double_t pos0[3] = {r*TMath::Cos(phi), r*TMath::Sin(phi),z};
Double_t pos1[3];
- fgInstance->Correct(pos0,pos1);
+ exb->Correct(pos0,pos1);
Double_t dphi=TMath::ATan2(pos1[1],pos1[0])-TMath::ATan2(pos0[1],pos0[0]);
+ if (dphi>TMath::Pi()) dphi-=TMath::TwoPi();
+ if (dphi<-TMath::Pi()) dphi+=TMath::TwoPi();
return r*dphi;
}
-Double_t AliTPCExB::GetDphi(Double_t r, Double_t phi, Double_t z){
- //
+Double_t AliTPCExB::GetDphi(Double_t r, Double_t phi, Double_t z, Double_t bz){
//
//
- if (!fgInstance) return 0;
- Double_t pos0[3] = {r*TMath::Sin(phi), r*TMath::Cos(phi),z};
+ //
+ AliTPCExB *exb = Instance();
+ if (!exb) exb = AliTPCcalibDB::GetExB(bz,kFALSE);
+ if (!exb) return 0;
+ Double_t pos0[3] = {r*TMath::Cos(phi), r*TMath::Sin(phi),z};
Double_t pos1[3];
- fgInstance->Correct(pos0,pos1);
+ exb->Correct(pos0,pos1);
Double_t dphi=TMath::ATan2(pos1[1],pos1[0])-TMath::ATan2(pos0[1],pos0[0]);
return dphi;
}
-Double_t AliTPCExB::GetDz(Double_t r, Double_t phi, Double_t z){
+Double_t AliTPCExB::GetDz(Double_t r, Double_t phi, Double_t z, Double_t bz){
//
//
//
- if (!fgInstance) return 0;
- Double_t pos0[3] = {r*TMath::Sin(phi), r*TMath::Cos(phi),z};
+ AliTPCExB *exb = Instance();
+ if (!exb) exb = AliTPCcalibDB::GetExB(bz,kFALSE);
+ if (!exb) return 0;
+ Double_t pos0[3] = {r*TMath::Cos(phi), r*TMath::Sin(phi),z};
Double_t pos1[3];
- fgInstance->Correct(pos0,pos1);
+ exb->Correct(pos0,pos1);
Double_t dz=pos1[2]-pos0[2];
return dz;
}
//
AliMagF *mag = (AliMagF*)fgArray.At(index);
if (!mag) return 0;
- Float_t xyz[3]={r*TMath::Cos(phi),r*TMath::Sin(phi),z};
+ Double_t xyz[3]={r*TMath::Cos(phi),r*TMath::Sin(phi),z};
// xyz[1]+=30;
- Float_t bxyz[3];
+ Double_t bxyz[3];
mag->Field(xyz,bxyz);
return bxyz[0];
}
//
AliMagF *mag = (AliMagF*)fgArray.At(index);
if (!mag) return 0;
- Float_t xyz[3]={r*TMath::Cos(phi),r*TMath::Sin(phi),z};
+ Double_t xyz[3]={r*TMath::Cos(phi),r*TMath::Sin(phi),z};
// xyz[1]+=30;
- Float_t bxyz[3];
+ Double_t bxyz[3];
mag->Field(xyz,bxyz);
return bxyz[1];
}
//
AliMagF *mag = (AliMagF*)fgArray.At(index);
if (!mag) return 0;
- Float_t xyz[3]={r*TMath::Cos(phi),r*TMath::Sin(phi),z};
+ Double_t xyz[3]={r*TMath::Cos(phi),r*TMath::Sin(phi),z};
// xyz[1]+=30;
- Float_t bxyz[3];
+ Double_t bxyz[3];
mag->Field(xyz,bxyz);
return bxyz[2];
}
//
AliMagF *mag = (AliMagF*)fgArray.At(index);
if (!mag) return 0;
- Float_t xyz[3]={r*TMath::Cos(phi),r*TMath::Sin(phi),z};
+ Double_t xyz[3]={r*TMath::Cos(phi),r*TMath::Sin(phi),z};
//xyz[1]+=30;
- Float_t bxyz[3];
+ Double_t bxyz[3];
mag->Field(xyz,bxyz);
if (r==0) return 0;
- Float_t br = (bxyz[0]*xyz[0]+bxyz[1]*xyz[1])/r;
+ Double_t br = (bxyz[0]*xyz[0]+bxyz[1]*xyz[1])/r;
return br;
}
//
AliMagF *mag = (AliMagF*)fgArray.At(index);
if (!mag) return 0;
- Float_t xyz[3]={r*TMath::Cos(phi),r*TMath::Sin(phi),z};
+ Double_t xyz[3]={r*TMath::Cos(phi),r*TMath::Sin(phi),z};
//xyz[1]+=30;
- Float_t bxyz[3];
+ Double_t bxyz[3];
mag->Field(xyz,bxyz);
if (r==0) return 0;
- Float_t br = (-bxyz[0]*xyz[1]+bxyz[1]*xyz[0])/r;
+ Double_t br = (-bxyz[0]*xyz[1]+bxyz[1]*xyz[0])/r;
return br;
}
}
-Double_t AliTPCExB::EvalMat(TVectorD &vec, Double_t r, Double_t phi, Double_t z){
+Double_t AliTPCExB::EvalMat(const TVectorD &vec, Double_t r, Double_t phi, Double_t z){
//
// Evaluate taylor expansion in r,phi,z
//