ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

////////////////////////////////////////////////////////////////////////////
//                                                                        //
// AliTPCCorrectionDrift class  
// linear drift corrections                                               //
//  
////////////////////////////////////////////////////////////////////////////
#include "AliMagF.h"
#include "TGeoGlobalMagField.h"
#include "AliTPCcalibDB.h"
#include "AliTPCParam.h"
#include "AliLog.h"

#include "TMath.h"
#include "AliTPCROC.h"
#include "AliTPCCorrectionDrift.h"
ClassImp(AliTPCCorrectionDrift)

AliTPCCorrectionDrift::AliTPCCorrectionDrift()
  : AliTPCCorrection("CorrectionDrift","CorrectionDrift") ,
    fZ0Aside(0),     // z- t0*vdrift shift A side
    fZ0Cside(0),     // z- t0*vdrift shift C side
    fVScale0(0),     // drift velocity scaling - constant
    fVScaleR(0),     // drift velocity scaling - radial
    fVScaleX(0),     // drift velocity scaling - global x
    fVScaleY(0),     // drift velocity scaling - global y
    fIROCZ0(0),
    fOROCDZ(0)
{
  //
  // default constructor
  //
}

AliTPCCorrectionDrift::~AliTPCCorrectionDrift() {
  //
  // default destructor
  //
}



void AliTPCCorrectionDrift::Init() {
  //
  // Initialization funtion
  //
  


}

void AliTPCCorrectionDrift::Update(const TTimeStamp &/*timeStamp*/) {
  //
  // Update function 
  //

}



void AliTPCCorrectionDrift::GetCorrection(const Float_t x[],const Short_t roc,Float_t dx[]) {
  //
  // Calculates the correction due conical shape
  //   
  AliTPCROC * calROC = AliTPCROC::Instance();
  //const Double_t kRTPC0  =calROC->GetPadRowRadii(0,0);
  const Double_t kRTPC1  =calROC->GetPadRowRadii(36,calROC->GetNRows(36)-1);
  const Double_t kRIO    =0.5*(calROC->GetPadRowRadii(0,calROC->GetNRows(0)-1)+calROC->GetPadRowRadii(36,0));
  //  Float_t rmiddle=(kRTPC0+kRTPC1)/2.;
  //
  //Double_t phi      = TMath::ATan2(x[1],x[0]);
  Double_t r        = TMath::Sqrt(x[1]*x[1]+x[0]*x[0]);
  Double_t driftN   = 1.-TMath::Abs(x[2])/calROC->GetZLength(0);  // drift from 0 to 1
  //
  Double_t dz0   =(roc%36<18) ? fZ0Aside:-fZ0Cside;
  Double_t dscale= (fVScale0+(fVScaleR*r+fVScaleX*x[0]+fVScaleY*x[1])/kRTPC1);
  Double_t ddrift=(roc%36<18) ? driftN*dscale*calROC->GetZLength(0):-driftN*dscale*calROC->GetZLength(0);
  if (r<kRIO) dz0+=(roc%36<18) ? fIROCZ0:-fIROCZ0;
  if (r>kRIO) dz0+=(roc%36<18) ? fOROCDZ*(r-kRIO):-fOROCDZ*(r-kRIO);
  // Calculate correction in cartesian coordinates
  dx[0] = 0;
  dx[1] = 0;
  dx[2] = dz0+ddrift; // z distortion not implemented (1st order distortions)

}





void AliTPCCorrectionDrift::Print(const Option_t* option) const {
  //
  // Print function to check the settings (e.g. the twist in the X direction)
  // 
  //

  TString opt = option; opt.ToLower();
  printf("%s\t%s\n",GetName(),GetTitle());
  
  if (opt.Contains("a")) { // Print all details
    printf(" - T0A: %1.4f, T0C: %1.4f (cm)\n",fZ0Aside,fZ0Cside);
    printf(" - Scale0: %1.4f, ScaleR: %1.4f \n",fVScale0,fVScaleR);
    printf(" - ScaleX: %1.4f, ScaleY: %1.4f \n",fVScaleX,fVScaleY);

  }    
 
 
}
 AliTPCCorrectionDrift.cxx:1
 AliTPCCorrectionDrift.cxx:2
 AliTPCCorrectionDrift.cxx:3
 AliTPCCorrectionDrift.cxx:4
 AliTPCCorrectionDrift.cxx:5
 AliTPCCorrectionDrift.cxx:6
 AliTPCCorrectionDrift.cxx:7
 AliTPCCorrectionDrift.cxx:8
 AliTPCCorrectionDrift.cxx:9
 AliTPCCorrectionDrift.cxx:10
 AliTPCCorrectionDrift.cxx:11
 AliTPCCorrectionDrift.cxx:12
 AliTPCCorrectionDrift.cxx:13
 AliTPCCorrectionDrift.cxx:14
 AliTPCCorrectionDrift.cxx:15
 AliTPCCorrectionDrift.cxx:16
 AliTPCCorrectionDrift.cxx:17
 AliTPCCorrectionDrift.cxx:18
 AliTPCCorrectionDrift.cxx:19
 AliTPCCorrectionDrift.cxx:20
 AliTPCCorrectionDrift.cxx:21
 AliTPCCorrectionDrift.cxx:22
 AliTPCCorrectionDrift.cxx:23
 AliTPCCorrectionDrift.cxx:24
 AliTPCCorrectionDrift.cxx:25
 AliTPCCorrectionDrift.cxx:26
 AliTPCCorrectionDrift.cxx:27
 AliTPCCorrectionDrift.cxx:28
 AliTPCCorrectionDrift.cxx:29
 AliTPCCorrectionDrift.cxx:30
 AliTPCCorrectionDrift.cxx:31
 AliTPCCorrectionDrift.cxx:32
 AliTPCCorrectionDrift.cxx:33
 AliTPCCorrectionDrift.cxx:34
 AliTPCCorrectionDrift.cxx:35
 AliTPCCorrectionDrift.cxx:36
 AliTPCCorrectionDrift.cxx:37
 AliTPCCorrectionDrift.cxx:38
 AliTPCCorrectionDrift.cxx:39
 AliTPCCorrectionDrift.cxx:40
 AliTPCCorrectionDrift.cxx:41
 AliTPCCorrectionDrift.cxx:42
 AliTPCCorrectionDrift.cxx:43
 AliTPCCorrectionDrift.cxx:44
 AliTPCCorrectionDrift.cxx:45
 AliTPCCorrectionDrift.cxx:46
 AliTPCCorrectionDrift.cxx:47
 AliTPCCorrectionDrift.cxx:48
 AliTPCCorrectionDrift.cxx:49
 AliTPCCorrectionDrift.cxx:50
 AliTPCCorrectionDrift.cxx:51
 AliTPCCorrectionDrift.cxx:52
 AliTPCCorrectionDrift.cxx:53
 AliTPCCorrectionDrift.cxx:54
 AliTPCCorrectionDrift.cxx:55
 AliTPCCorrectionDrift.cxx:56
 AliTPCCorrectionDrift.cxx:57
 AliTPCCorrectionDrift.cxx:58
 AliTPCCorrectionDrift.cxx:59
 AliTPCCorrectionDrift.cxx:60
 AliTPCCorrectionDrift.cxx:61
 AliTPCCorrectionDrift.cxx:62
 AliTPCCorrectionDrift.cxx:63
 AliTPCCorrectionDrift.cxx:64
 AliTPCCorrectionDrift.cxx:65
 AliTPCCorrectionDrift.cxx:66
 AliTPCCorrectionDrift.cxx:67
 AliTPCCorrectionDrift.cxx:68
 AliTPCCorrectionDrift.cxx:69
 AliTPCCorrectionDrift.cxx:70
 AliTPCCorrectionDrift.cxx:71
 AliTPCCorrectionDrift.cxx:72
 AliTPCCorrectionDrift.cxx:73
 AliTPCCorrectionDrift.cxx:74
 AliTPCCorrectionDrift.cxx:75
 AliTPCCorrectionDrift.cxx:76
 AliTPCCorrectionDrift.cxx:77
 AliTPCCorrectionDrift.cxx:78
 AliTPCCorrectionDrift.cxx:79
 AliTPCCorrectionDrift.cxx:80
 AliTPCCorrectionDrift.cxx:81
 AliTPCCorrectionDrift.cxx:82
 AliTPCCorrectionDrift.cxx:83
 AliTPCCorrectionDrift.cxx:84
 AliTPCCorrectionDrift.cxx:85
 AliTPCCorrectionDrift.cxx:86
 AliTPCCorrectionDrift.cxx:87
 AliTPCCorrectionDrift.cxx:88
 AliTPCCorrectionDrift.cxx:89
 AliTPCCorrectionDrift.cxx:90
 AliTPCCorrectionDrift.cxx:91
 AliTPCCorrectionDrift.cxx:92
 AliTPCCorrectionDrift.cxx:93
 AliTPCCorrectionDrift.cxx:94
 AliTPCCorrectionDrift.cxx:95
 AliTPCCorrectionDrift.cxx:96
 AliTPCCorrectionDrift.cxx:97
 AliTPCCorrectionDrift.cxx:98
 AliTPCCorrectionDrift.cxx:99
 AliTPCCorrectionDrift.cxx:100
 AliTPCCorrectionDrift.cxx:101
 AliTPCCorrectionDrift.cxx:102
 AliTPCCorrectionDrift.cxx:103
 AliTPCCorrectionDrift.cxx:104
 AliTPCCorrectionDrift.cxx:105
 AliTPCCorrectionDrift.cxx:106
 AliTPCCorrectionDrift.cxx:107
 AliTPCCorrectionDrift.cxx:108
 AliTPCCorrectionDrift.cxx:109
 AliTPCCorrectionDrift.cxx:110
 AliTPCCorrectionDrift.cxx:111
 AliTPCCorrectionDrift.cxx:112
 AliTPCCorrectionDrift.cxx:113
 AliTPCCorrectionDrift.cxx:114
 AliTPCCorrectionDrift.cxx:115
 AliTPCCorrectionDrift.cxx:116
 AliTPCCorrectionDrift.cxx:117
 AliTPCCorrectionDrift.cxx:118
 AliTPCCorrectionDrift.cxx:119
 AliTPCCorrectionDrift.cxx:120
 AliTPCCorrectionDrift.cxx:121
 AliTPCCorrectionDrift.cxx:122