]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCExB.cxx
take care of gGeoManager handling
[u/mrichter/AliRoot.git] / TPC / AliTPCExB.cxx
index a65fc933763395782a7336de069a38a77c2a1c50..573f47cd2acb47d807356f8885d1e6a763ab6ea0 100644 (file)
@@ -1,8 +1,9 @@
 #include "AliTPCExB.h"
 #include "TMath.h"
-#include "TTreeStream.h"
+//#include "TTreeStream.h"
 #include "AliMagF.h"
 #include "TLinearFitter.h"
+#include "AliTPCcalibDB.h"
 
 
 //
@@ -53,6 +54,30 @@ AliTPCExB::AliTPCExB():
   //
 }
 
+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) {
   //
@@ -126,58 +151,70 @@ 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;
+  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;
+  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;
+  // 
+  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;
+  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;  
 }
@@ -204,9 +241,9 @@ Double_t AliTPCExB::GetBx(Double_t r, Double_t phi, Double_t z,Int_t index){
   //
   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];
 }  
@@ -217,9 +254,9 @@ Double_t AliTPCExB::GetBy(Double_t r, Double_t phi, Double_t z,Int_t index){
   //
   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];
 }  
@@ -230,9 +267,9 @@ Double_t AliTPCExB::GetBz(Double_t r, Double_t phi, Double_t z,Int_t index){
   //
   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];
 }  
@@ -245,12 +282,12 @@ Double_t AliTPCExB::GetBr(Double_t r, Double_t phi, Double_t z,Int_t index){
   //
   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;
 }  
 
@@ -260,12 +297,12 @@ Double_t AliTPCExB::GetBrfi(Double_t r, Double_t phi, Double_t z,Int_t index){
   //
   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;
 }  
 
@@ -376,7 +413,7 @@ Double_t AliTPCExB::Eval(Int_t type, Double_t r, Double_t phi, Double_t z){
 }
 
 
-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
   //