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.                  *
 **************************************************************************/

//-------------------------------------------------------
//          Implementation of the TPC transformation class
//
//   Origin: Marian Ivanov   Marian.Ivanov@cern.ch
//           Magnus Mager
//
//   Class for tranformation of the coordinate frame
//   Transformation  
//    local coordinate frame (sector, padrow, pad, timebine) ==>
//    rotated global (tracking) cooridnate frame (sector, lx,ly,lz)
//
//    Unisochronity  - (substract time0 - pad by pad)
//    Drift velocity - Currently common drift velocity - functionality of AliTPCParam
//    ExB effect     - 
//
//    Time of flight correction -
//                   - Depends on the vertex position
//                   - by default 
//                           
//    Usage:
//          AliTPCclusterer::AddCluster
//          AliTPCtracker::Transform
//    
//-------------------------------------------------------

/* To test it:
   cdb=AliCDBManager::Instance()
   cdb->SetDefaultStorage("local:///u/mmager/mycalib1")
   c=AliTPCcalibDB::Instance()
   c->SetRun(0)
   Double_t x[]={1.0,2.0,3.0}
   Int_t i[]={4}
   AliTPCTransform trafo
   trafo.Transform(x,i,0,1)
 */

/* $Id$ */

#include "AliTPCROC.h"
#include "AliTPCCalPad.h"
#include "AliTPCCalROC.h"
#include "AliTPCcalibDB.h"
#include "AliTPCParam.h"
#include "TMath.h"
#include "AliLog.h"
#include "AliTPCExB.h"
#include "AliTPCCorrection.h"
#include "TGeoMatrix.h"
#include "AliTPCRecoParam.h"
#include "AliTPCCalibVdrift.h"
#include "AliTPCTransform.h"
#include "AliMagF.h"
#include "TGeoGlobalMagField.h"
#include "AliTracker.h"
#include <AliCTPTimeParams.h>

ClassImp(AliTPCTransform)


AliTPCTransform::AliTPCTransform():
  AliTransform(),
  fCurrentRecoParam(0),       //! current reconstruction parameters
  fCurrentRun(0),             //! current run
  fCurrentTimeStamp(0)        //! current time stamp   
{
  //
  // Speed it up a bit!
  //
  for (Int_t i=0;i<18;++i) {
    Double_t alpha=TMath::DegToRad()*(10.+20.*(i%18));
    fSins[i]=TMath::Sin(alpha);
    fCoss[i]=TMath::Cos(alpha);
  }
  fPrimVtx[0]=0;
  fPrimVtx[1]=0;
  fPrimVtx[2]=0;
}
AliTPCTransform::AliTPCTransform(const AliTPCTransform& transform):
  AliTransform(transform),
  fCurrentRecoParam(transform.fCurrentRecoParam),       //! current reconstruction parameters
  fCurrentRun(transform.fCurrentRun),             //! current run
  fCurrentTimeStamp(transform.fCurrentTimeStamp)        //! current time stamp   
{
  //
  // Speed it up a bit!
  //
  for (Int_t i=0;i<18;++i) {
    Double_t alpha=TMath::DegToRad()*(10.+20.*(i%18));
    fSins[i]=TMath::Sin(alpha);
    fCoss[i]=TMath::Cos(alpha);
  }
  fPrimVtx[0]=0;
  fPrimVtx[1]=0;
  fPrimVtx[2]=0;
}

AliTPCTransform::~AliTPCTransform() {
  //
  // Destructor
  //
}

void AliTPCTransform::SetPrimVertex(Double_t *vtx){
  //
  //
  //
  fPrimVtx[0]=vtx[0];
  fPrimVtx[1]=vtx[1];
  fPrimVtx[2]=vtx[2];
}


void AliTPCTransform::Transform(Double_t *x,Int_t *i,UInt_t /*time*/,
				Int_t /*coordinateType*/) {
  // input: x[0] - pad row
  //        x[1] - pad 
  //        x[2] - time in us
  //        i[0] - sector
  // output: x[0] - x (all in the rotated global coordinate frame)
  //         x[1] - y
  //         x[2] - z
  //
  //  primvtx     - position of the primary vertex
  //                used for the TOF correction
  //                TOF of particle calculated assuming the speed-of-light and 
  //                line approximation  
  //
  if (!fCurrentRecoParam) {
    return;
  }
  Int_t row=TMath::Nint(x[0]);
  Int_t pad=TMath::Nint(x[1]);
  Int_t sector=i[0];
  AliTPCcalibDB*  calib=AliTPCcalibDB::Instance();  
  //
  AliTPCCalPad * time0TPC = calib->GetPadTime0(); 
  AliTPCCalPad * distortionMapY = calib->GetDistortionMap(0); 
  AliTPCCalPad * distortionMapZ = calib->GetDistortionMap(1); 
  AliTPCCalPad * distortionMapR = calib->GetDistortionMap(2); 
  AliTPCParam  * param    = calib->GetParameters(); 
  AliTPCCorrection * correction = calib->GetTPCComposedCorrection();   // first user defined correction  // if does not exist  try to get it from calibDB array
  if (!correction) correction = calib->GetTPCComposedCorrection(AliTracker::GetBz());
  if (!time0TPC){
    AliFatal("Time unisochronity missing");
    return ; // make coverity happy
  }
  AliTPCCorrection * correctionDelta = calib->GetTPCComposedCorrectionDelta(); 

  if (!param){
    AliFatal("Parameters missing");
    return; // make coverity happy
  }

  Double_t xx[3];
  //  Apply Time0 correction - Pad by pad fluctuation
  //  
  if (!calib->HasAlignmentOCDB()) x[2]-=time0TPC->GetCalROC(sector)->GetValue(row,pad);
  //
  // Tranform from pad - time coordinate system to the rotated global (tracking) system
  //
  Local2RotatedGlobal(sector,x);
  //
  //
  //
  // Alignment
  //TODO:  calib->GetParameters()->GetClusterMatrix(sector)->LocalToMaster(x,xx);
  RotatedGlobal2Global(sector,x);
  
  //
  // old ExB correction 
  //
  if(fCurrentRecoParam->GetUseExBCorrection()) {

    calib->GetExB()->Correct(x,xx);

  } else {

    xx[0] = x[0];
    xx[1] = x[1];
    xx[2] = x[2];
  }

  //
  // new composed  correction  - will replace soon ExB correction
  //
  if(fCurrentRecoParam->GetUseComposedCorrection()&&correction) {
    Float_t distPoint[3]={static_cast<Float_t>(xx[0]),static_cast<Float_t>(xx[1]),static_cast<Float_t>(xx[2])};
    correction->CorrectPoint(distPoint, sector);
    xx[0]=distPoint[0];
    xx[1]=distPoint[1];
    xx[2]=distPoint[2];
    if (correctionDelta&&fCurrentRecoParam->GetUseAlignmentTime()){  // appply time dependent correction if available and enabled
      Float_t distPointDelta[3]={static_cast<Float_t>(xx[0]),static_cast<Float_t>(xx[1]),static_cast<Float_t>(xx[2])};
      correctionDelta->CorrectPoint(distPointDelta, sector);
      xx[0]=distPointDelta[0];
      xx[1]=distPointDelta[1];
      xx[2]=distPointDelta[2];
    }
  } 


  //
  // Time of flight correction
  // 
  if (fCurrentRecoParam->GetUseTOFCorrection()){
    const Int_t kNIS=param->GetNInnerSector(), kNOS=param->GetNOuterSector(); 
    Float_t sign=1;
    if (sector < kNIS) {
      sign = (sector < kNIS/2) ? 1 : -1;
    } else {
      sign = ((sector-kNIS) < kNOS/2) ? 1 : -1;
    }
    Float_t deltaDr =0;
    Float_t dist=0;
    dist+=(fPrimVtx[0]-x[0])*(fPrimVtx[0]-x[0]);
    dist+=(fPrimVtx[1]-x[1])*(fPrimVtx[1]-x[1]);
    dist+=(fPrimVtx[2]-x[2])*(fPrimVtx[2]-x[2]);
    dist = TMath::Sqrt(dist);
    // drift length correction because of TOF
    // the drift velocity is in cm/s therefore multiplication by 0.01
    deltaDr = (dist*(0.01*param->GetDriftV()))/TMath::C(); 
    xx[2]+=sign*deltaDr;
  }
  //
  //
  //

  //
  Global2RotatedGlobal(sector,xx);

  //
  // Apply non linear distortion correction  
  //
  if (distortionMapY ){
    // wt - to get it form the OCDB
    // ignore T1 and T2
    AliMagF* magF= (AliMagF*)TGeoGlobalMagField::Instance()->GetField();
    Double_t bzField = magF->SolenoidField()/10.; //field in T
    Double_t vdrift = param->GetDriftV()/1000000.; // [cm/us]   // From dataBase: to be updated: per second (ideally)
    Double_t ezField = 400; // [V/cm]   // to be updated: never (hopefully)
    if (sector%36<18) ezField*=-1;
    Double_t wt = -10.0 * (bzField*10) * vdrift / ezField ;
    Double_t c0=1./(1.+wt*wt);
    Double_t c1=wt/c0;
    
    //can be switch on for each dimension separatelly
    if (fCurrentRecoParam->GetUseFieldCorrection()&0x2)
      if (distortionMapY){
	xx[1]-= c0*distortionMapY->GetCalROC(sector)->GetValue(row,pad);
	xx[0]-= c1*distortionMapY->GetCalROC(sector)->GetValue(row,pad);
      }
    if (fCurrentRecoParam->GetUseFieldCorrection()&0x4) 
      if (distortionMapZ)
	xx[2]-=distortionMapZ->GetCalROC(sector)->GetValue(row,pad);
    if (fCurrentRecoParam->GetUseFieldCorrection()&0x8) 
      if (distortionMapR){
	xx[0]-= c0*distortionMapR->GetCalROC(sector)->GetValue(row,pad);
	xx[1]-=-c1*distortionMapR->GetCalROC(sector)->GetValue(row,pad)*wt;
      }
    
  }
  //

  //
  x[0]=xx[0];x[1]=xx[1];x[2]=xx[2];
}

void AliTPCTransform::Local2RotatedGlobal(Int_t sector, Double_t *x) const {
  //
  //  
  // Tranform coordinate from  
  // row, pad, time to x,y,z
  //
  // Drift Velocity 
  // Current implementation - common drift velocity - for full chamber
  // TODO: use a map or parametrisation!
  //
  //  
  //
  if (!fCurrentRecoParam) return;
  const  Int_t kMax =60;  // cache for 60 seconds
  static Int_t lastStamp=-1;  //cached values
  static Double_t lastCorr = 1;
  //
  AliTPCcalibDB*  calib=AliTPCcalibDB::Instance();
  AliTPCParam  * param    = calib->GetParameters(); 
  AliTPCCalibVdrift *driftCalib = AliTPCcalibDB::Instance()->GetVdrift(fCurrentRun);
  Double_t driftCorr = 1.;
  if (driftCalib){
    //
    // caching drift correction - temp. fix
    // Extremally slow procedure
    if ( TMath::Abs((lastStamp)-Int_t(fCurrentTimeStamp))<kMax){
      driftCorr = lastCorr;
    }else{
      driftCorr = 1.+(driftCalib->GetPTRelative(fCurrentTimeStamp,0)+ driftCalib->GetPTRelative(fCurrentTimeStamp,1))*0.5;
      lastCorr=driftCorr;
      lastStamp=fCurrentTimeStamp;
      
    }
  }
  //
  // simple caching non thread save
  static Double_t vdcorrectionTime=1;
  static Double_t vdcorrectionTimeGY=0;
  static Double_t time0corrTime=0;
  static Double_t deltaZcorrTime=0;
  static Int_t    lastStampT=-1;
  //
  if (lastStampT!=(Int_t)fCurrentTimeStamp){
    lastStampT=fCurrentTimeStamp;
    if(fCurrentRecoParam->GetUseDriftCorrectionTime()>0) {
      vdcorrectionTime = (1+AliTPCcalibDB::Instance()->
			  GetVDriftCorrectionTime(fCurrentTimeStamp, 
						  fCurrentRun,
						  sector%36>=18,
						  fCurrentRecoParam->GetUseDriftCorrectionTime()));			  
      time0corrTime= AliTPCcalibDB::Instance()->
	GetTime0CorrectionTime(fCurrentTimeStamp, 
			       fCurrentRun,
			       sector%36>=18,
			       fCurrentRecoParam->GetUseDriftCorrectionTime());	
      //
      deltaZcorrTime= AliTPCcalibDB::Instance()->
	GetVDriftCorrectionDeltaZ(fCurrentTimeStamp, 
			       fCurrentRun,
			       sector%36>=18,
			       0);	
      
    }
    //
    if(fCurrentRecoParam->GetUseDriftCorrectionGY()>0) {
      
      Double_t corrGy= AliTPCcalibDB::Instance()->
			GetVDriftCorrectionGy(fCurrentTimeStamp, 
					      AliTPCcalibDB::Instance()->GetRun(),
					      sector%36>=18,
					      fCurrentRecoParam->GetUseDriftCorrectionGY());
      vdcorrectionTimeGY = corrGy;
    }
  }


  if (!param){
    AliFatal("Parameters missing");
    return; // make coverity happy
  }
  Int_t row=TMath::Nint(x[0]);
  //  Int_t pad=TMath::Nint(x[1]);
  //
  const Int_t kNIS=param->GetNInnerSector(), kNOS=param->GetNOuterSector();
  Double_t sign = 1.;
  Double_t zwidth    = param->GetZWidth()*driftCorr;
  Float_t xyzPad[3];
  AliTPCROC::Instance()->GetPositionGlobal(sector, TMath::Nint(x[0]) ,TMath::Nint(x[1]), xyzPad);
  if (AliTPCRecoParam:: GetUseTimeCalibration()) zwidth*=vdcorrectionTime*(1+xyzPad[1]*vdcorrectionTimeGY);
  Double_t padWidth  = 0;
  Double_t padLength = 0;
  Double_t    maxPad    = 0;
  //
  if (sector < kNIS) {
    maxPad = param->GetNPadsLow(row);
    sign = (sector < kNIS/2) ? 1 : -1;
    padLength = param->GetPadPitchLength(sector,row);
    padWidth = param->GetPadPitchWidth(sector);
  } else {
    maxPad = param->GetNPadsUp(row);
    sign = ((sector-kNIS) < kNOS/2) ? 1 : -1;
    padLength = param->GetPadPitchLength(sector,row);
    padWidth  = param->GetPadPitchWidth(sector);
  }
  //
  // X coordinate
  x[0] = param->GetPadRowRadii(sector,row);  // padrow X position - ideal
  //
  // Y coordinate
  //
  x[1]=(x[1]-0.5*maxPad)*padWidth;
  // pads are mirrorred on C-side
  if (sector%36>17){
    x[1]*=-1;
  }
  
  //
  
  //
  // Z coordinate
  //
  if (AliTPCcalibDB::Instance()->IsTrgL0()){
    // by defualt we assume L1 trigger is used - make a correction in case of  L0
    AliCTPTimeParams* ctp = AliTPCcalibDB::Instance()->GetCTPTimeParams();
    if (ctp){
      //for TPC standalone runs no ctp info
      Double_t delay = ctp->GetDelayL1L0()*0.000000025;
      x[2]-=delay/param->GetTSample();
    }
  }
  x[2]-= param->GetNTBinsL1();
  x[2]*= zwidth;  // tranform time bin to the distance to the ROC
  x[2]-= 3.*param->GetZSigma() + time0corrTime;
  // subtract the time offsets
  x[2] = sign*( param->GetZLength(sector) - x[2]);
  x[2]-=deltaZcorrTime;   // subtrack time dependent z shift (calibrated together with the drift velocity and T0)
}

void AliTPCTransform::RotatedGlobal2Global(Int_t sector,Double_t *x) const {
  //
  // transform possition rotated global to the global
  //
  Double_t cos,sin;
  GetCosAndSin(sector,cos,sin);
  Double_t tmp=x[0];
  x[0]= cos*tmp-sin*x[1];
  x[1]=+sin*tmp+cos*x[1];
}

void AliTPCTransform::Global2RotatedGlobal(Int_t sector,Double_t *x) const {
  //
  // tranform possition Global2RotatedGlobal
  //
  Double_t cos,sin;
  GetCosAndSin(sector,cos,sin);
  Double_t tmp=x[0];
  x[0]= cos*tmp+sin*x[1];
  x[1]= -sin*tmp+cos*x[1];
}

void AliTPCTransform::GetCosAndSin(Int_t sector,Double_t &cos,
					  Double_t &sin) const {
  cos=fCoss[sector%18];
  sin=fSins[sector%18];
}


void AliTPCTransform::ApplyTransformations(Double_t */*xyz*/, Int_t /*volID*/){
  //
  // Modify global position
  // xyz    - global xyz position
  // volID  - volID of detector (sector number)
  //
  //
  
}
 AliTPCTransform.cxx:1
 AliTPCTransform.cxx:2
 AliTPCTransform.cxx:3
 AliTPCTransform.cxx:4
 AliTPCTransform.cxx:5
 AliTPCTransform.cxx:6
 AliTPCTransform.cxx:7
 AliTPCTransform.cxx:8
 AliTPCTransform.cxx:9
 AliTPCTransform.cxx:10
 AliTPCTransform.cxx:11
 AliTPCTransform.cxx:12
 AliTPCTransform.cxx:13
 AliTPCTransform.cxx:14
 AliTPCTransform.cxx:15
 AliTPCTransform.cxx:16
 AliTPCTransform.cxx:17
 AliTPCTransform.cxx:18
 AliTPCTransform.cxx:19
 AliTPCTransform.cxx:20
 AliTPCTransform.cxx:21
 AliTPCTransform.cxx:22
 AliTPCTransform.cxx:23
 AliTPCTransform.cxx:24
 AliTPCTransform.cxx:25
 AliTPCTransform.cxx:26
 AliTPCTransform.cxx:27
 AliTPCTransform.cxx:28
 AliTPCTransform.cxx:29
 AliTPCTransform.cxx:30
 AliTPCTransform.cxx:31
 AliTPCTransform.cxx:32
 AliTPCTransform.cxx:33
 AliTPCTransform.cxx:34
 AliTPCTransform.cxx:35
 AliTPCTransform.cxx:36
 AliTPCTransform.cxx:37
 AliTPCTransform.cxx:38
 AliTPCTransform.cxx:39
 AliTPCTransform.cxx:40
 AliTPCTransform.cxx:41
 AliTPCTransform.cxx:42
 AliTPCTransform.cxx:43
 AliTPCTransform.cxx:44
 AliTPCTransform.cxx:45
 AliTPCTransform.cxx:46
 AliTPCTransform.cxx:47
 AliTPCTransform.cxx:48
 AliTPCTransform.cxx:49
 AliTPCTransform.cxx:50
 AliTPCTransform.cxx:51
 AliTPCTransform.cxx:52
 AliTPCTransform.cxx:53
 AliTPCTransform.cxx:54
 AliTPCTransform.cxx:55
 AliTPCTransform.cxx:56
 AliTPCTransform.cxx:57
 AliTPCTransform.cxx:58
 AliTPCTransform.cxx:59
 AliTPCTransform.cxx:60
 AliTPCTransform.cxx:61
 AliTPCTransform.cxx:62
 AliTPCTransform.cxx:63
 AliTPCTransform.cxx:64
 AliTPCTransform.cxx:65
 AliTPCTransform.cxx:66
 AliTPCTransform.cxx:67
 AliTPCTransform.cxx:68
 AliTPCTransform.cxx:69
 AliTPCTransform.cxx:70
 AliTPCTransform.cxx:71
 AliTPCTransform.cxx:72
 AliTPCTransform.cxx:73
 AliTPCTransform.cxx:74
 AliTPCTransform.cxx:75
 AliTPCTransform.cxx:76
 AliTPCTransform.cxx:77
 AliTPCTransform.cxx:78
 AliTPCTransform.cxx:79
 AliTPCTransform.cxx:80
 AliTPCTransform.cxx:81
 AliTPCTransform.cxx:82
 AliTPCTransform.cxx:83
 AliTPCTransform.cxx:84
 AliTPCTransform.cxx:85
 AliTPCTransform.cxx:86
 AliTPCTransform.cxx:87
 AliTPCTransform.cxx:88
 AliTPCTransform.cxx:89
 AliTPCTransform.cxx:90
 AliTPCTransform.cxx:91
 AliTPCTransform.cxx:92
 AliTPCTransform.cxx:93
 AliTPCTransform.cxx:94
 AliTPCTransform.cxx:95
 AliTPCTransform.cxx:96
 AliTPCTransform.cxx:97
 AliTPCTransform.cxx:98
 AliTPCTransform.cxx:99
 AliTPCTransform.cxx:100
 AliTPCTransform.cxx:101
 AliTPCTransform.cxx:102
 AliTPCTransform.cxx:103
 AliTPCTransform.cxx:104
 AliTPCTransform.cxx:105
 AliTPCTransform.cxx:106
 AliTPCTransform.cxx:107
 AliTPCTransform.cxx:108
 AliTPCTransform.cxx:109
 AliTPCTransform.cxx:110
 AliTPCTransform.cxx:111
 AliTPCTransform.cxx:112
 AliTPCTransform.cxx:113
 AliTPCTransform.cxx:114
 AliTPCTransform.cxx:115
 AliTPCTransform.cxx:116
 AliTPCTransform.cxx:117
 AliTPCTransform.cxx:118
 AliTPCTransform.cxx:119
 AliTPCTransform.cxx:120
 AliTPCTransform.cxx:121
 AliTPCTransform.cxx:122
 AliTPCTransform.cxx:123
 AliTPCTransform.cxx:124
 AliTPCTransform.cxx:125
 AliTPCTransform.cxx:126
 AliTPCTransform.cxx:127
 AliTPCTransform.cxx:128
 AliTPCTransform.cxx:129
 AliTPCTransform.cxx:130
 AliTPCTransform.cxx:131
 AliTPCTransform.cxx:132
 AliTPCTransform.cxx:133
 AliTPCTransform.cxx:134
 AliTPCTransform.cxx:135
 AliTPCTransform.cxx:136
 AliTPCTransform.cxx:137
 AliTPCTransform.cxx:138
 AliTPCTransform.cxx:139
 AliTPCTransform.cxx:140
 AliTPCTransform.cxx:141
 AliTPCTransform.cxx:142
 AliTPCTransform.cxx:143
 AliTPCTransform.cxx:144
 AliTPCTransform.cxx:145
 AliTPCTransform.cxx:146
 AliTPCTransform.cxx:147
 AliTPCTransform.cxx:148
 AliTPCTransform.cxx:149
 AliTPCTransform.cxx:150
 AliTPCTransform.cxx:151
 AliTPCTransform.cxx:152
 AliTPCTransform.cxx:153
 AliTPCTransform.cxx:154
 AliTPCTransform.cxx:155
 AliTPCTransform.cxx:156
 AliTPCTransform.cxx:157
 AliTPCTransform.cxx:158
 AliTPCTransform.cxx:159
 AliTPCTransform.cxx:160
 AliTPCTransform.cxx:161
 AliTPCTransform.cxx:162
 AliTPCTransform.cxx:163
 AliTPCTransform.cxx:164
 AliTPCTransform.cxx:165
 AliTPCTransform.cxx:166
 AliTPCTransform.cxx:167
 AliTPCTransform.cxx:168
 AliTPCTransform.cxx:169
 AliTPCTransform.cxx:170
 AliTPCTransform.cxx:171
 AliTPCTransform.cxx:172
 AliTPCTransform.cxx:173
 AliTPCTransform.cxx:174
 AliTPCTransform.cxx:175
 AliTPCTransform.cxx:176
 AliTPCTransform.cxx:177
 AliTPCTransform.cxx:178
 AliTPCTransform.cxx:179
 AliTPCTransform.cxx:180
 AliTPCTransform.cxx:181
 AliTPCTransform.cxx:182
 AliTPCTransform.cxx:183
 AliTPCTransform.cxx:184
 AliTPCTransform.cxx:185
 AliTPCTransform.cxx:186
 AliTPCTransform.cxx:187
 AliTPCTransform.cxx:188
 AliTPCTransform.cxx:189
 AliTPCTransform.cxx:190
 AliTPCTransform.cxx:191
 AliTPCTransform.cxx:192
 AliTPCTransform.cxx:193
 AliTPCTransform.cxx:194
 AliTPCTransform.cxx:195
 AliTPCTransform.cxx:196
 AliTPCTransform.cxx:197
 AliTPCTransform.cxx:198
 AliTPCTransform.cxx:199
 AliTPCTransform.cxx:200
 AliTPCTransform.cxx:201
 AliTPCTransform.cxx:202
 AliTPCTransform.cxx:203
 AliTPCTransform.cxx:204
 AliTPCTransform.cxx:205
 AliTPCTransform.cxx:206
 AliTPCTransform.cxx:207
 AliTPCTransform.cxx:208
 AliTPCTransform.cxx:209
 AliTPCTransform.cxx:210
 AliTPCTransform.cxx:211
 AliTPCTransform.cxx:212
 AliTPCTransform.cxx:213
 AliTPCTransform.cxx:214
 AliTPCTransform.cxx:215
 AliTPCTransform.cxx:216
 AliTPCTransform.cxx:217
 AliTPCTransform.cxx:218
 AliTPCTransform.cxx:219
 AliTPCTransform.cxx:220
 AliTPCTransform.cxx:221
 AliTPCTransform.cxx:222
 AliTPCTransform.cxx:223
 AliTPCTransform.cxx:224
 AliTPCTransform.cxx:225
 AliTPCTransform.cxx:226
 AliTPCTransform.cxx:227
 AliTPCTransform.cxx:228
 AliTPCTransform.cxx:229
 AliTPCTransform.cxx:230
 AliTPCTransform.cxx:231
 AliTPCTransform.cxx:232
 AliTPCTransform.cxx:233
 AliTPCTransform.cxx:234
 AliTPCTransform.cxx:235
 AliTPCTransform.cxx:236
 AliTPCTransform.cxx:237
 AliTPCTransform.cxx:238
 AliTPCTransform.cxx:239
 AliTPCTransform.cxx:240
 AliTPCTransform.cxx:241
 AliTPCTransform.cxx:242
 AliTPCTransform.cxx:243
 AliTPCTransform.cxx:244
 AliTPCTransform.cxx:245
 AliTPCTransform.cxx:246
 AliTPCTransform.cxx:247
 AliTPCTransform.cxx:248
 AliTPCTransform.cxx:249
 AliTPCTransform.cxx:250
 AliTPCTransform.cxx:251
 AliTPCTransform.cxx:252
 AliTPCTransform.cxx:253
 AliTPCTransform.cxx:254
 AliTPCTransform.cxx:255
 AliTPCTransform.cxx:256
 AliTPCTransform.cxx:257
 AliTPCTransform.cxx:258
 AliTPCTransform.cxx:259
 AliTPCTransform.cxx:260
 AliTPCTransform.cxx:261
 AliTPCTransform.cxx:262
 AliTPCTransform.cxx:263
 AliTPCTransform.cxx:264
 AliTPCTransform.cxx:265
 AliTPCTransform.cxx:266
 AliTPCTransform.cxx:267
 AliTPCTransform.cxx:268
 AliTPCTransform.cxx:269
 AliTPCTransform.cxx:270
 AliTPCTransform.cxx:271
 AliTPCTransform.cxx:272
 AliTPCTransform.cxx:273
 AliTPCTransform.cxx:274
 AliTPCTransform.cxx:275
 AliTPCTransform.cxx:276
 AliTPCTransform.cxx:277
 AliTPCTransform.cxx:278
 AliTPCTransform.cxx:279
 AliTPCTransform.cxx:280
 AliTPCTransform.cxx:281
 AliTPCTransform.cxx:282
 AliTPCTransform.cxx:283
 AliTPCTransform.cxx:284
 AliTPCTransform.cxx:285
 AliTPCTransform.cxx:286
 AliTPCTransform.cxx:287
 AliTPCTransform.cxx:288
 AliTPCTransform.cxx:289
 AliTPCTransform.cxx:290
 AliTPCTransform.cxx:291
 AliTPCTransform.cxx:292
 AliTPCTransform.cxx:293
 AliTPCTransform.cxx:294
 AliTPCTransform.cxx:295
 AliTPCTransform.cxx:296
 AliTPCTransform.cxx:297
 AliTPCTransform.cxx:298
 AliTPCTransform.cxx:299
 AliTPCTransform.cxx:300
 AliTPCTransform.cxx:301
 AliTPCTransform.cxx:302
 AliTPCTransform.cxx:303
 AliTPCTransform.cxx:304
 AliTPCTransform.cxx:305
 AliTPCTransform.cxx:306
 AliTPCTransform.cxx:307
 AliTPCTransform.cxx:308
 AliTPCTransform.cxx:309
 AliTPCTransform.cxx:310
 AliTPCTransform.cxx:311
 AliTPCTransform.cxx:312
 AliTPCTransform.cxx:313
 AliTPCTransform.cxx:314
 AliTPCTransform.cxx:315
 AliTPCTransform.cxx:316
 AliTPCTransform.cxx:317
 AliTPCTransform.cxx:318
 AliTPCTransform.cxx:319
 AliTPCTransform.cxx:320
 AliTPCTransform.cxx:321
 AliTPCTransform.cxx:322
 AliTPCTransform.cxx:323
 AliTPCTransform.cxx:324
 AliTPCTransform.cxx:325
 AliTPCTransform.cxx:326
 AliTPCTransform.cxx:327
 AliTPCTransform.cxx:328
 AliTPCTransform.cxx:329
 AliTPCTransform.cxx:330
 AliTPCTransform.cxx:331
 AliTPCTransform.cxx:332
 AliTPCTransform.cxx:333
 AliTPCTransform.cxx:334
 AliTPCTransform.cxx:335
 AliTPCTransform.cxx:336
 AliTPCTransform.cxx:337
 AliTPCTransform.cxx:338
 AliTPCTransform.cxx:339
 AliTPCTransform.cxx:340
 AliTPCTransform.cxx:341
 AliTPCTransform.cxx:342
 AliTPCTransform.cxx:343
 AliTPCTransform.cxx:344
 AliTPCTransform.cxx:345
 AliTPCTransform.cxx:346
 AliTPCTransform.cxx:347
 AliTPCTransform.cxx:348
 AliTPCTransform.cxx:349
 AliTPCTransform.cxx:350
 AliTPCTransform.cxx:351
 AliTPCTransform.cxx:352
 AliTPCTransform.cxx:353
 AliTPCTransform.cxx:354
 AliTPCTransform.cxx:355
 AliTPCTransform.cxx:356
 AliTPCTransform.cxx:357
 AliTPCTransform.cxx:358
 AliTPCTransform.cxx:359
 AliTPCTransform.cxx:360
 AliTPCTransform.cxx:361
 AliTPCTransform.cxx:362
 AliTPCTransform.cxx:363
 AliTPCTransform.cxx:364
 AliTPCTransform.cxx:365
 AliTPCTransform.cxx:366
 AliTPCTransform.cxx:367
 AliTPCTransform.cxx:368
 AliTPCTransform.cxx:369
 AliTPCTransform.cxx:370
 AliTPCTransform.cxx:371
 AliTPCTransform.cxx:372
 AliTPCTransform.cxx:373
 AliTPCTransform.cxx:374
 AliTPCTransform.cxx:375
 AliTPCTransform.cxx:376
 AliTPCTransform.cxx:377
 AliTPCTransform.cxx:378
 AliTPCTransform.cxx:379
 AliTPCTransform.cxx:380
 AliTPCTransform.cxx:381
 AliTPCTransform.cxx:382
 AliTPCTransform.cxx:383
 AliTPCTransform.cxx:384
 AliTPCTransform.cxx:385
 AliTPCTransform.cxx:386
 AliTPCTransform.cxx:387
 AliTPCTransform.cxx:388
 AliTPCTransform.cxx:389
 AliTPCTransform.cxx:390
 AliTPCTransform.cxx:391
 AliTPCTransform.cxx:392
 AliTPCTransform.cxx:393
 AliTPCTransform.cxx:394
 AliTPCTransform.cxx:395
 AliTPCTransform.cxx:396
 AliTPCTransform.cxx:397
 AliTPCTransform.cxx:398
 AliTPCTransform.cxx:399
 AliTPCTransform.cxx:400
 AliTPCTransform.cxx:401
 AliTPCTransform.cxx:402
 AliTPCTransform.cxx:403
 AliTPCTransform.cxx:404
 AliTPCTransform.cxx:405
 AliTPCTransform.cxx:406
 AliTPCTransform.cxx:407
 AliTPCTransform.cxx:408
 AliTPCTransform.cxx:409
 AliTPCTransform.cxx:410
 AliTPCTransform.cxx:411
 AliTPCTransform.cxx:412
 AliTPCTransform.cxx:413
 AliTPCTransform.cxx:414
 AliTPCTransform.cxx:415
 AliTPCTransform.cxx:416
 AliTPCTransform.cxx:417
 AliTPCTransform.cxx:418
 AliTPCTransform.cxx:419
 AliTPCTransform.cxx:420
 AliTPCTransform.cxx:421
 AliTPCTransform.cxx:422
 AliTPCTransform.cxx:423
 AliTPCTransform.cxx:424
 AliTPCTransform.cxx:425
 AliTPCTransform.cxx:426
 AliTPCTransform.cxx:427
 AliTPCTransform.cxx:428
 AliTPCTransform.cxx:429
 AliTPCTransform.cxx:430
 AliTPCTransform.cxx:431
 AliTPCTransform.cxx:432
 AliTPCTransform.cxx:433
 AliTPCTransform.cxx:434
 AliTPCTransform.cxx:435
 AliTPCTransform.cxx:436
 AliTPCTransform.cxx:437
 AliTPCTransform.cxx:438
 AliTPCTransform.cxx:439
 AliTPCTransform.cxx:440
 AliTPCTransform.cxx:441
 AliTPCTransform.cxx:442
 AliTPCTransform.cxx:443
 AliTPCTransform.cxx:444
 AliTPCTransform.cxx:445
 AliTPCTransform.cxx:446
 AliTPCTransform.cxx:447
 AliTPCTransform.cxx:448
 AliTPCTransform.cxx:449
 AliTPCTransform.cxx:450
 AliTPCTransform.cxx:451
 AliTPCTransform.cxx:452
 AliTPCTransform.cxx:453
 AliTPCTransform.cxx:454
 AliTPCTransform.cxx:455
 AliTPCTransform.cxx:456
 AliTPCTransform.cxx:457
 AliTPCTransform.cxx:458