]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCGGVoltError.cxx
Compatibility with the Root trunk
[u/mrichter/AliRoot.git] / TPC / AliTPCGGVoltError.cxx
index a2f0a0f0948f363950b0a8cd5ba6e505034300dc..27b47a105a28518b637cd322a1ec413f633ae350 100644 (file)
  **************************************************************************/
 
 ////////////////////////////////////////////////////////////////////////////
-//                                                                        //
 // AliTPCGGVoltError class                                                //
-// The class calculates the electric field and space point distortions    //
-// due a Gating Grid (GG) Error voltage. It uses the exact calculation    //
-// technique based on bessel functions. (original code from STAR)         //
-// The class allows "effective Omega Tau" corrections.                    // 
-//                                                                        //
-// date: 27/04/2010                                                       //
-// Authors: Jim Thomas, Stefan Rossegger, Magnus Mager                    //
-//                                                                        //
-// Example usage:                                                         //
-//  AliTPCGGVoltError GGerror;                                            //
-//  GGerror.SetOmegaTauT1T2(0.32,1.,1.); // values ideally from OCDB      //
-//  GGerror.SetDeltaVGGA(50.);           // voltage offset A-side         //
-//  GGerror.SetDeltaVGGC(50.);           // voltage offset C-side         //
-//  GGerror.InitGGVoltErrorDistortion(); // initialization of the look up //
-//  // plot dRPhi distortions ...                                         //
-//  GGerror.CreateHistoDRPhiinZR(1.,100,100)->Draw("surf2");              //
 ////////////////////////////////////////////////////////////////////////////
 
 
@@ -47,7 +30,8 @@
 AliTPCGGVoltError::AliTPCGGVoltError()
   : AliTPCCorrection("GGVoltError","GatingGrid (GG) Voltage Error"),
     fC0(0.),fC1(0.),
-    fDeltaVGGA(0.),fDeltaVGGC(0.)
+    fDeltaVGGA(0.),fDeltaVGGC(0.),
+    fInitLookUp(kFALSE)
 {
   //
   // default constructor
@@ -62,7 +46,7 @@ AliTPCGGVoltError::~AliTPCGGVoltError() {
 
 void AliTPCGGVoltError::Init() {
   //
-  //
+  // Init function
   //
   AliMagF* magF= (AliMagF*)TGeoGlobalMagField::Instance()->GetField();
   if (!magF) AliError("Magneticd field - not initialized");
@@ -74,7 +58,7 @@ void AliTPCGGVoltError::Init() {
   Double_t wt = -10.0 * (bzField*10) * vdrift / ezField ; 
   //
   SetOmegaTauT1T2(wt,fT1,fT2);
-
+  InitGGVoltErrorDistortion();
   //SetDeltaVGGA(0.0);//  ideally from the database
   //SetDeltaVGGC(0.0);//  ideally from the database
 }
@@ -92,8 +76,8 @@ void AliTPCGGVoltError::Update(const TTimeStamp &/*timeStamp*/) {
   Double_t ezField = 400; // [V/cm]   // to be updated: never (hopefully)
   Double_t wt = -10.0 * (bzField*10) * vdrift / ezField ; 
 
   SetOmegaTauT1T2(wt,fT1,fT2);
+  //  InitGGVoltErrorDistortion(); // not necessary in here since the Voltage should not change!
 }
 
 
@@ -108,6 +92,8 @@ void AliTPCGGVoltError::GetCorrection(const Float_t x[],const Short_t roc,Float_
   // Electrostatic Equations from StarNote SN0253 by Howard Wieman.
   //
   
+  if (!fInitLookUp) AliError("Lookup table was not initialized! You should do InitGGVoltErrorDistortion() ...");
+  
   Int_t   order     = 1 ;               // FIXME: hardcoded? Linear interpolation = 1, Quadratic = 2         
  
   Double_t intEr, intEphi ;
@@ -144,7 +130,9 @@ void AliTPCGGVoltError::GetCorrection(const Float_t x[],const Short_t roc,Float_
   // Calculate correction in cartesian coordinates
   dx[0] = r * TMath::Cos(phi) - x[0];
   dx[1] = r * TMath::Sin(phi) - x[1]; 
-  dx[2] = 0.; // z distortion not implemented (1st order distortions)
+  dx[2] = 0.; // z distortion not implemented (1st order distortions) - see e.g. AliTPCBoundaryVoltError-class
+
+
 
 }
 
@@ -154,7 +142,9 @@ Float_t AliTPCGGVoltError::GetIntErOverEz(const Float_t x[],const Short_t roc) {
   // This function is purely for calibration purposes
   // Calculates the integral (int Er/Ez dz) for the setted GG voltage offset 
   // 
-  
+
+  if (!fInitLookUp) AliError("Lookup table was not initialized! You should do InitGGVoltErrorDistortion() ...");
+
   Int_t   order     = 1 ;     // FIXME: so far hardcoded? Linear interpolation = 1, Quadratic = 2         
   
   Double_t intEr;
@@ -199,7 +189,7 @@ void AliTPCGGVoltError::InitGGVoltErrorDistortion() {
       fGGVoltErrorER[i][j] = 0.0 ;         
       Double_t intz = 0.0 ;
       for ( Int_t n = 1 ; n < nterms ; ++n ) {
-       Double_t k    =  n * TMath::Pi() / fgkTPC_Z0 ;
+       Double_t k    =  n * TMath::Pi() / fgkTPCZ0 ;
        Double_t ein  =  0 ;                    // Error potential on the IFC
        Double_t eout =  0 ;                    // Error potential on the OFC
        if ( z < 0 ) {
@@ -218,7 +208,7 @@ void AliTPCGGVoltError::InitGGVoltErrorDistortion() {
        Double_t denominator =
          TMath::BesselK0( k*fgkOFCRadius ) * TMath::BesselI0( k*fgkIFCRadius ) -
          TMath::BesselK0( k*fgkIFCRadius ) * TMath::BesselI0( k*fgkOFCRadius ) ;
-       Double_t zterm = TMath::Cos( k*(fgkTPC_Z0-TMath::Abs(z)) ) - 1 ;
+       Double_t zterm = TMath::Cos( k*(fgkTPCZ0-TMath::Abs(z)) ) - 1 ;
        intz += zterm * numerator / denominator ;
        // Assume series converges, break if small terms
        if ( n>10 && TMath::Abs(intz)*1.e-10 > TMath::Abs(numerator/denominator) ) break;   
@@ -227,11 +217,13 @@ void AliTPCGGVoltError::InitGGVoltErrorDistortion() {
 
     }
   }
+  
+  fInitLookUp = kTRUE;
 }
 
 
 
-void AliTPCGGVoltError::Print(Option_t* option) const {
+void AliTPCGGVoltError::Print(const Option_t* option) const {
   //
   // Print function to check the settings (e.g. voltage offsets)
   // option=="a" prints the C0 and C1 coefficents for calibration purposes
@@ -245,6 +237,7 @@ void AliTPCGGVoltError::Print(Option_t* option) const {
     printf(" - C1: %1.4f, C0: %1.4f \n",fC1,fC0);
   }    
 
+  if (!fInitLookUp) AliError("Lookup table was not initialized! You should do InitGGVoltErrorDistortion() ...");
 
   
 }