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

// _________________________________________________________________
//
// Begin_Html
//   <h2> AliTPCSpaceCharge class  </h2>    
//   The class calculates the space point distortions due to a rotational 
//   symmetric space charge distribution with the TPC drift volume. 
//   <p>
//   The class uses the PoissonRelaxation2D to calculate the resulting 
//   electrical field inhomogeneities in the (r,z)-plane. Then, the 
//   Langevin-integral formalism is used to calculate the space point distortions. 
//   <p>
//   The class assumes, that the distortions scales linearly with the magnitude 
//   of the space charge distribution $\rho(r,z)$. The in here assumed distribution is 
//   $$\rho(r,z) = \frac{(A-B\,z)}{r^2} $$ wherein the factors A and B scale with the
//   event multiplicity and the interaction rate.
//   <p>
//   The scaling factor can be set via the function SetCorrectionFactor. An example of 
//   the shape of the distortions is given below.
//
//   MI modification - 22.05.2013
//   As an optional input the Space charge histogram RZ is used in case it is provided 
//     - using the SetInputSpaceCharge function
//
// End_Html
//
// Begin_Macro(source)
//   {
//   gROOT->SetStyle("Plain"); gStyle->SetPalette(1);
//   TCanvas *c2 = new TCanvas("cAliTPCSpaceCharge","cAliTPCSpaceCharge",500,300); 
//   AliTPCSpaceCharge sc;
//   sc.SetOmegaTauT1T2(-0.32,1,1); // B=0.5 Tesla
//   sc.SetCorrectionFactor(0.0015);
//   sc.CreateHistoDRinZR(0.)->Draw("surf2");
//   return c2;
//   } 
// End_Macro
//
// Begin_Html
//   <p>
//   Date: 23/08/2010 <br>
// Authors: Jim Thomas, Stefan Rossegger 
// End_Html 
// _________________________________________________________________



#include "AliMagF.h"
#include "TGeoGlobalMagField.h"
#include "AliTPCcalibDB.h"
#include "AliTPCParam.h"
#include "AliLog.h"
#include "TMatrixD.h"
#include "TH2.h"

#include "TMath.h"
#include "AliTPCROC.h"
#include "AliTPCSpaceCharge.h"

ClassImp(AliTPCSpaceCharge)

AliTPCSpaceCharge::AliTPCSpaceCharge()
  : AliTPCCorrection("SpaceCharge2D","Space Charge 2D"),
    fC0(0.),fC1(0.),fCorrectionFactor(0.001),fSpaceChargeHistogram(0),
    fInitLookUp(kFALSE)
{
  //
  // default constructor
  //
 
}

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



void AliTPCSpaceCharge::Init() {
  //
  // Initialization funtion
  //
  
  AliMagF* magF= (AliMagF*)TGeoGlobalMagField::Instance()->GetField();
  if (!magF) AliError("Magneticd field - not initialized");
  Double_t bzField = magF->SolenoidField()/10.; //field in T
  AliTPCParam *param= AliTPCcalibDB::Instance()->GetParameters();
  if (!param) AliError("Parameters - not initialized");
  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)
  Double_t wt = -10.0 * (bzField*10) * vdrift / ezField ; 
  // Correction Terms for effective omegaTau; obtained by a laser calibration run
  SetOmegaTauT1T2(wt,fT1,fT2);

  InitSpaceChargeDistortion(); // fill the look up table
}

void AliTPCSpaceCharge::Update(const TTimeStamp &/*timeStamp*/) {
  //
  // Update function 
  //
  AliMagF* magF= (AliMagF*)TGeoGlobalMagField::Instance()->GetField();
  if (!magF) AliError("Magneticd field - not initialized");
  Double_t bzField = magF->SolenoidField()/10.; //field in T
  AliTPCParam *param= AliTPCcalibDB::Instance()->GetParameters();
  if (!param) AliError("Parameters - not initialized");
  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)
  Double_t wt = -10.0 * (bzField*10) * vdrift / ezField ; 
  // Correction Terms for effective omegaTau; obtained by a laser calibration run
  SetOmegaTauT1T2(wt,fT1,fT2);

  //  SetCorrectionFactor(1.); // should come from some database

}



void AliTPCSpaceCharge::GetCorrection(const Float_t x[],const Short_t roc,Float_t dx[]) {
  //
  // Calculates the correction due the Space Charge effect within the TPC drift volume
  //   

  if (!fInitLookUp) {
    AliInfo("Lookup table was not initialized! Perform the inizialisation now ...");
    InitSpaceChargeDistortion();
  }
  Int_t   order     = 1 ;    // FIXME: hardcoded? Linear interpolation = 1, Quadratic = 2         
                        
  Double_t intEr, intEphi, intdEz;
  Double_t r, phi, z ;
  Int_t    sign;

  r      =  TMath::Sqrt( x[0]*x[0] + x[1]*x[1] ) ;
  phi    =  TMath::ATan2(x[1],x[0]) ;
  if ( phi < 0 ) phi += TMath::TwoPi() ;                   // Table uses phi from 0 to 2*Pi
  z      =  x[2] ;                                         // Create temporary copy of x[2]

  if ( (roc%36) < 18 ) {
    sign =  1;       // (TPC A side)
  } else {
    sign = -1;       // (TPC C side)
  }
  
  if ( sign==1  && z <  fgkZOffSet ) z =  fgkZOffSet;    // Protect against discontinuity at CE
  if ( sign==-1 && z > -fgkZOffSet ) z = -fgkZOffSet;    // Protect against discontinuity at CE
  

  if ( (sign==1 && z<0) || (sign==-1 && z>0) ) // just a consistency check
    AliError("ROC number does not correspond to z coordinate! Calculation of distortions is most likely wrong!");

  // Efield is symmetric in phi - 2D calculation
  intEphi = 0.0; 
  // Get the E field integrals
  Interpolate2DEdistortion( order, r, z, fLookUpErOverEz, intEr );
  // Get DeltaEz field integral
  Interpolate2DEdistortion( order, r, z, fLookUpDeltaEz, intdEz );
  
 
  // Calculate distorted position
  if ( r > 0.0 ) {
    phi =  phi + fCorrectionFactor *( fC0*intEphi - fC1*intEr ) / r;      
    r   =  r   + fCorrectionFactor *( fC0*intEr   + fC1*intEphi );  
  }
  Double_t dz = intdEz*fCorrectionFactor;
 
  // Calculate correction in cartesian coordinates
  dx[0] = - (r * TMath::Cos(phi) - x[0]);
  dx[1] = - (r * TMath::Sin(phi) - x[1]); 
  dx[2] = - dz;  // z distortion - (internally scaled with driftvelocity dependency 
                 // on the Ez field 

}

void AliTPCSpaceCharge::InitSpaceChargeDistortion() {
  //
  // Initialization of the Lookup table which contains the solutions of the 
  // poisson problem
  //

  const Float_t  gridSizeR   =  (fgkOFCRadius-fgkIFCRadius) / (kRows-1) ;
  const Float_t  gridSizeZ   =  fgkTPCZ0 / (kColumns-1) ;

  TMatrixD voltArray(kRows,kColumns);        // dummy boundary vectors
  TMatrixD chargeDensity(kRows,kColumns);    // charge
  TMatrixD arrayErOverEz(kRows,kColumns);    // solution in Er
  TMatrixD arrayDeltaEz(kRows,kColumns);    // solution in Ez

  Double_t  rList[kRows], zedList[kColumns] ;
  
  // Fill arrays with initial conditions.  V on the boundary and ChargeDensity in the volume.      
  for ( Int_t j = 0 ; j < kColumns ; j++ ) {
    Double_t zed = j*gridSizeZ ;
    zedList[j] = zed ;
    for ( Int_t i = 0 ; i < kRows ; i++ )  {
      Double_t radius = fgkIFCRadius + i*gridSizeR ;
      rList[i]           = radius ;
      voltArray(i,j)        = 0;  // Initialize voltArray to zero - not used in this class
      chargeDensity(i,j)     = 0;  // Initialize ChargeDensity to zero
    }
  }      

  // Fill the initial conditions
  for ( Int_t j = 1 ; j < kColumns-1 ; j++ ) {
    Double_t zed = j*gridSizeZ ;
    for ( Int_t i = 1 ; i < kRows-1 ; i++ ) { 
      Double_t radius = fgkIFCRadius + i*gridSizeR ;

      Double_t zterm = (fgkTPCZ0-zed) * (fgkOFCRadius*fgkOFCRadius - fgkIFCRadius*fgkIFCRadius) / fgkTPCZ0 ;
      // for 1/R**2 charge density in the TPC; then integrated in Z due to drifting ions
      chargeDensity(i,j) = zterm / ( TMath::Log(fgkOFCRadius/fgkIFCRadius) * ( radius*radius ) ) ;              
    }
  }
  // Fill the initial space charge in case histogram exist
  if (fSpaceChargeHistogram){
    for ( Int_t j = 1 ; j < kColumns-1 ; j++ ) {
      Double_t zed = j*gridSizeZ ;
      for ( Int_t i = 1 ; i < kRows-1 ; i++ ) { 
	Double_t radius = fgkIFCRadius + i*gridSizeR ;
	
	Double_t zterm = (fgkTPCZ0-zed) * (fgkOFCRadius*fgkOFCRadius - fgkIFCRadius*fgkIFCRadius) / fgkTPCZ0 ;
	// for 1/R**2 charge density in the TPC; then integrated in Z due to drifting ions
	chargeDensity(i,j) = fSpaceChargeHistogram->Interpolate(radius,zed);
      }
    }
  }


  // Solve the electrosatic problem in 2D 

  PoissonRelaxation2D( voltArray, chargeDensity, arrayErOverEz, arrayDeltaEz, kRows, kColumns, kIterations ) ;
  
  //Interpolate results onto standard grid for Electric Fields
  Int_t ilow=0, jlow=0 ;
  Double_t z,r;
  Float_t saveEr[2], saveEz[2] ;	      
  for ( Int_t i = 0 ; i < kNZ ; ++i )  {
    z = TMath::Abs( fgkZList[i] ) ; // assume symmetric behaviour on A and C side
    for ( Int_t j = 0 ; j < kNR ; ++j ) {

      // Linear interpolation !!
      r = fgkRList[j] ;
      Search( kRows,   rList, r, ilow ) ;          // Note switch - R in rows and Z in columns
      Search( kColumns, zedList, z, jlow ) ;
      if ( ilow < 0 ) ilow = 0 ;                   // check if out of range
      if ( jlow < 0 ) jlow = 0 ;   
      if ( ilow + 1  >=  kRows - 1 ) ilow =  kRows - 2 ;	      
      if ( jlow + 1  >=  kColumns - 1 ) jlow =  kColumns - 2 ; 
    
      saveEr[0] = arrayErOverEz(ilow,jlow) + 
	(arrayErOverEz(ilow,jlow+1)-arrayErOverEz(ilow,jlow))*(z-zedList[jlow])/gridSizeZ ;
      saveEr[1] = arrayErOverEz(ilow+1,jlow) + 
	(arrayErOverEz(ilow+1,jlow+1)-arrayErOverEz(ilow+1,jlow))*(z-zedList[jlow])/gridSizeZ ;
      saveEz[0] = arrayDeltaEz(ilow,jlow) + 
	(arrayDeltaEz(ilow,jlow+1)-arrayDeltaEz(ilow,jlow))*(z-zedList[jlow])/gridSizeZ ;
      saveEz[1] = arrayDeltaEz(ilow+1,jlow) + 
	(arrayDeltaEz(ilow+1,jlow+1)-arrayDeltaEz(ilow+1,jlow))*(z-zedList[jlow])/gridSizeZ ;

      
      fLookUpErOverEz[i][j] = saveEr[0] + (saveEr[1]-saveEr[0])*(r-rList[ilow])/gridSizeR ;
      fLookUpDeltaEz[i][j]  = saveEz[0] + (saveEz[1]-saveEz[0])*(r-rList[ilow])/gridSizeR ;

      if (fgkZList[i]<0)  fLookUpDeltaEz[i][j] *= -1; // C side is negative z
    }
  }
  
  fInitLookUp = kTRUE;

}

void AliTPCSpaceCharge::Print(const Option_t* option) const {
  //
  // Print function to check the settings of the boundary vectors
  // option=="a" prints the C0 and C1 coefficents for calibration purposes
  //

  TString opt = option; opt.ToLower();
  printf("%s\n",GetTitle());
  printf(" - Space Charge effects assuming a radial symmetric z over r^2 SC-distribution.\n");
  printf("   SC correction factor: %f \n",fCorrectionFactor);

  if (opt.Contains("a")) { // Print all details
    printf(" - T1: %1.4f, T2: %1.4f \n",fT1,fT2);
    printf(" - C1: %1.4f, C0: %1.4f \n",fC1,fC0);
  } 
   
  if (!fInitLookUp) AliError("Lookup table was not initialized! You should do InitSpaceChargeDistortion() ...");

}
 AliTPCSpaceCharge.cxx:1
 AliTPCSpaceCharge.cxx:2
 AliTPCSpaceCharge.cxx:3
 AliTPCSpaceCharge.cxx:4
 AliTPCSpaceCharge.cxx:5
 AliTPCSpaceCharge.cxx:6
 AliTPCSpaceCharge.cxx:7
 AliTPCSpaceCharge.cxx:8
 AliTPCSpaceCharge.cxx:9
 AliTPCSpaceCharge.cxx:10
 AliTPCSpaceCharge.cxx:11
 AliTPCSpaceCharge.cxx:12
 AliTPCSpaceCharge.cxx:13
 AliTPCSpaceCharge.cxx:14
 AliTPCSpaceCharge.cxx:15
 AliTPCSpaceCharge.cxx:16
 AliTPCSpaceCharge.cxx:17
 AliTPCSpaceCharge.cxx:18
 AliTPCSpaceCharge.cxx:19
 AliTPCSpaceCharge.cxx:20
 AliTPCSpaceCharge.cxx:21
 AliTPCSpaceCharge.cxx:22
 AliTPCSpaceCharge.cxx:23
 AliTPCSpaceCharge.cxx:24
 AliTPCSpaceCharge.cxx:25
 AliTPCSpaceCharge.cxx:26
 AliTPCSpaceCharge.cxx:27
 AliTPCSpaceCharge.cxx:28
 AliTPCSpaceCharge.cxx:29
 AliTPCSpaceCharge.cxx:30
 AliTPCSpaceCharge.cxx:31
 AliTPCSpaceCharge.cxx:32
 AliTPCSpaceCharge.cxx:33
 AliTPCSpaceCharge.cxx:34
 AliTPCSpaceCharge.cxx:35
 AliTPCSpaceCharge.cxx:36
 AliTPCSpaceCharge.cxx:37
 AliTPCSpaceCharge.cxx:38
 AliTPCSpaceCharge.cxx:39
 AliTPCSpaceCharge.cxx:40
 AliTPCSpaceCharge.cxx:41
 AliTPCSpaceCharge.cxx:42
 AliTPCSpaceCharge.cxx:43
 AliTPCSpaceCharge.cxx:44
 AliTPCSpaceCharge.cxx:45
 AliTPCSpaceCharge.cxx:46
 AliTPCSpaceCharge.cxx:47
 AliTPCSpaceCharge.cxx:48
 AliTPCSpaceCharge.cxx:49
 AliTPCSpaceCharge.cxx:50
 AliTPCSpaceCharge.cxx:51
 AliTPCSpaceCharge.cxx:52
 AliTPCSpaceCharge.cxx:53
 AliTPCSpaceCharge.cxx:54
 AliTPCSpaceCharge.cxx:55
 AliTPCSpaceCharge.cxx:56
 AliTPCSpaceCharge.cxx:57
 AliTPCSpaceCharge.cxx:58
 AliTPCSpaceCharge.cxx:59
 AliTPCSpaceCharge.cxx:60
 AliTPCSpaceCharge.cxx:61
 AliTPCSpaceCharge.cxx:62
 AliTPCSpaceCharge.cxx:63
 AliTPCSpaceCharge.cxx:64
 AliTPCSpaceCharge.cxx:65
 AliTPCSpaceCharge.cxx:66
 AliTPCSpaceCharge.cxx:67
 AliTPCSpaceCharge.cxx:68
 AliTPCSpaceCharge.cxx:69
 AliTPCSpaceCharge.cxx:70
 AliTPCSpaceCharge.cxx:71
 AliTPCSpaceCharge.cxx:72
 AliTPCSpaceCharge.cxx:73
 AliTPCSpaceCharge.cxx:74
 AliTPCSpaceCharge.cxx:75
 AliTPCSpaceCharge.cxx:76
 AliTPCSpaceCharge.cxx:77
 AliTPCSpaceCharge.cxx:78
 AliTPCSpaceCharge.cxx:79
 AliTPCSpaceCharge.cxx:80
 AliTPCSpaceCharge.cxx:81
 AliTPCSpaceCharge.cxx:82
 AliTPCSpaceCharge.cxx:83
 AliTPCSpaceCharge.cxx:84
 AliTPCSpaceCharge.cxx:85
 AliTPCSpaceCharge.cxx:86
 AliTPCSpaceCharge.cxx:87
 AliTPCSpaceCharge.cxx:88
 AliTPCSpaceCharge.cxx:89
 AliTPCSpaceCharge.cxx:90
 AliTPCSpaceCharge.cxx:91
 AliTPCSpaceCharge.cxx:92
 AliTPCSpaceCharge.cxx:93
 AliTPCSpaceCharge.cxx:94
 AliTPCSpaceCharge.cxx:95
 AliTPCSpaceCharge.cxx:96
 AliTPCSpaceCharge.cxx:97
 AliTPCSpaceCharge.cxx:98
 AliTPCSpaceCharge.cxx:99
 AliTPCSpaceCharge.cxx:100
 AliTPCSpaceCharge.cxx:101
 AliTPCSpaceCharge.cxx:102
 AliTPCSpaceCharge.cxx:103
 AliTPCSpaceCharge.cxx:104
 AliTPCSpaceCharge.cxx:105
 AliTPCSpaceCharge.cxx:106
 AliTPCSpaceCharge.cxx:107
 AliTPCSpaceCharge.cxx:108
 AliTPCSpaceCharge.cxx:109
 AliTPCSpaceCharge.cxx:110
 AliTPCSpaceCharge.cxx:111
 AliTPCSpaceCharge.cxx:112
 AliTPCSpaceCharge.cxx:113
 AliTPCSpaceCharge.cxx:114
 AliTPCSpaceCharge.cxx:115
 AliTPCSpaceCharge.cxx:116
 AliTPCSpaceCharge.cxx:117
 AliTPCSpaceCharge.cxx:118
 AliTPCSpaceCharge.cxx:119
 AliTPCSpaceCharge.cxx:120
 AliTPCSpaceCharge.cxx:121
 AliTPCSpaceCharge.cxx:122
 AliTPCSpaceCharge.cxx:123
 AliTPCSpaceCharge.cxx:124
 AliTPCSpaceCharge.cxx:125
 AliTPCSpaceCharge.cxx:126
 AliTPCSpaceCharge.cxx:127
 AliTPCSpaceCharge.cxx:128
 AliTPCSpaceCharge.cxx:129
 AliTPCSpaceCharge.cxx:130
 AliTPCSpaceCharge.cxx:131
 AliTPCSpaceCharge.cxx:132
 AliTPCSpaceCharge.cxx:133
 AliTPCSpaceCharge.cxx:134
 AliTPCSpaceCharge.cxx:135
 AliTPCSpaceCharge.cxx:136
 AliTPCSpaceCharge.cxx:137
 AliTPCSpaceCharge.cxx:138
 AliTPCSpaceCharge.cxx:139
 AliTPCSpaceCharge.cxx:140
 AliTPCSpaceCharge.cxx:141
 AliTPCSpaceCharge.cxx:142
 AliTPCSpaceCharge.cxx:143
 AliTPCSpaceCharge.cxx:144
 AliTPCSpaceCharge.cxx:145
 AliTPCSpaceCharge.cxx:146
 AliTPCSpaceCharge.cxx:147
 AliTPCSpaceCharge.cxx:148
 AliTPCSpaceCharge.cxx:149
 AliTPCSpaceCharge.cxx:150
 AliTPCSpaceCharge.cxx:151
 AliTPCSpaceCharge.cxx:152
 AliTPCSpaceCharge.cxx:153
 AliTPCSpaceCharge.cxx:154
 AliTPCSpaceCharge.cxx:155
 AliTPCSpaceCharge.cxx:156
 AliTPCSpaceCharge.cxx:157
 AliTPCSpaceCharge.cxx:158
 AliTPCSpaceCharge.cxx:159
 AliTPCSpaceCharge.cxx:160
 AliTPCSpaceCharge.cxx:161
 AliTPCSpaceCharge.cxx:162
 AliTPCSpaceCharge.cxx:163
 AliTPCSpaceCharge.cxx:164
 AliTPCSpaceCharge.cxx:165
 AliTPCSpaceCharge.cxx:166
 AliTPCSpaceCharge.cxx:167
 AliTPCSpaceCharge.cxx:168
 AliTPCSpaceCharge.cxx:169
 AliTPCSpaceCharge.cxx:170
 AliTPCSpaceCharge.cxx:171
 AliTPCSpaceCharge.cxx:172
 AliTPCSpaceCharge.cxx:173
 AliTPCSpaceCharge.cxx:174
 AliTPCSpaceCharge.cxx:175
 AliTPCSpaceCharge.cxx:176
 AliTPCSpaceCharge.cxx:177
 AliTPCSpaceCharge.cxx:178
 AliTPCSpaceCharge.cxx:179
 AliTPCSpaceCharge.cxx:180
 AliTPCSpaceCharge.cxx:181
 AliTPCSpaceCharge.cxx:182
 AliTPCSpaceCharge.cxx:183
 AliTPCSpaceCharge.cxx:184
 AliTPCSpaceCharge.cxx:185
 AliTPCSpaceCharge.cxx:186
 AliTPCSpaceCharge.cxx:187
 AliTPCSpaceCharge.cxx:188
 AliTPCSpaceCharge.cxx:189
 AliTPCSpaceCharge.cxx:190
 AliTPCSpaceCharge.cxx:191
 AliTPCSpaceCharge.cxx:192
 AliTPCSpaceCharge.cxx:193
 AliTPCSpaceCharge.cxx:194
 AliTPCSpaceCharge.cxx:195
 AliTPCSpaceCharge.cxx:196
 AliTPCSpaceCharge.cxx:197
 AliTPCSpaceCharge.cxx:198
 AliTPCSpaceCharge.cxx:199
 AliTPCSpaceCharge.cxx:200
 AliTPCSpaceCharge.cxx:201
 AliTPCSpaceCharge.cxx:202
 AliTPCSpaceCharge.cxx:203
 AliTPCSpaceCharge.cxx:204
 AliTPCSpaceCharge.cxx:205
 AliTPCSpaceCharge.cxx:206
 AliTPCSpaceCharge.cxx:207
 AliTPCSpaceCharge.cxx:208
 AliTPCSpaceCharge.cxx:209
 AliTPCSpaceCharge.cxx:210
 AliTPCSpaceCharge.cxx:211
 AliTPCSpaceCharge.cxx:212
 AliTPCSpaceCharge.cxx:213
 AliTPCSpaceCharge.cxx:214
 AliTPCSpaceCharge.cxx:215
 AliTPCSpaceCharge.cxx:216
 AliTPCSpaceCharge.cxx:217
 AliTPCSpaceCharge.cxx:218
 AliTPCSpaceCharge.cxx:219
 AliTPCSpaceCharge.cxx:220
 AliTPCSpaceCharge.cxx:221
 AliTPCSpaceCharge.cxx:222
 AliTPCSpaceCharge.cxx:223
 AliTPCSpaceCharge.cxx:224
 AliTPCSpaceCharge.cxx:225
 AliTPCSpaceCharge.cxx:226
 AliTPCSpaceCharge.cxx:227
 AliTPCSpaceCharge.cxx:228
 AliTPCSpaceCharge.cxx:229
 AliTPCSpaceCharge.cxx:230
 AliTPCSpaceCharge.cxx:231
 AliTPCSpaceCharge.cxx:232
 AliTPCSpaceCharge.cxx:233
 AliTPCSpaceCharge.cxx:234
 AliTPCSpaceCharge.cxx:235
 AliTPCSpaceCharge.cxx:236
 AliTPCSpaceCharge.cxx:237
 AliTPCSpaceCharge.cxx:238
 AliTPCSpaceCharge.cxx:239
 AliTPCSpaceCharge.cxx:240
 AliTPCSpaceCharge.cxx:241
 AliTPCSpaceCharge.cxx:242
 AliTPCSpaceCharge.cxx:243
 AliTPCSpaceCharge.cxx:244
 AliTPCSpaceCharge.cxx:245
 AliTPCSpaceCharge.cxx:246
 AliTPCSpaceCharge.cxx:247
 AliTPCSpaceCharge.cxx:248
 AliTPCSpaceCharge.cxx:249
 AliTPCSpaceCharge.cxx:250
 AliTPCSpaceCharge.cxx:251
 AliTPCSpaceCharge.cxx:252
 AliTPCSpaceCharge.cxx:253
 AliTPCSpaceCharge.cxx:254
 AliTPCSpaceCharge.cxx:255
 AliTPCSpaceCharge.cxx:256
 AliTPCSpaceCharge.cxx:257
 AliTPCSpaceCharge.cxx:258
 AliTPCSpaceCharge.cxx:259
 AliTPCSpaceCharge.cxx:260
 AliTPCSpaceCharge.cxx:261
 AliTPCSpaceCharge.cxx:262
 AliTPCSpaceCharge.cxx:263
 AliTPCSpaceCharge.cxx:264
 AliTPCSpaceCharge.cxx:265
 AliTPCSpaceCharge.cxx:266
 AliTPCSpaceCharge.cxx:267
 AliTPCSpaceCharge.cxx:268
 AliTPCSpaceCharge.cxx:269
 AliTPCSpaceCharge.cxx:270
 AliTPCSpaceCharge.cxx:271
 AliTPCSpaceCharge.cxx:272
 AliTPCSpaceCharge.cxx:273
 AliTPCSpaceCharge.cxx:274
 AliTPCSpaceCharge.cxx:275
 AliTPCSpaceCharge.cxx:276
 AliTPCSpaceCharge.cxx:277
 AliTPCSpaceCharge.cxx:278
 AliTPCSpaceCharge.cxx:279
 AliTPCSpaceCharge.cxx:280
 AliTPCSpaceCharge.cxx:281
 AliTPCSpaceCharge.cxx:282
 AliTPCSpaceCharge.cxx:283
 AliTPCSpaceCharge.cxx:284
 AliTPCSpaceCharge.cxx:285
 AliTPCSpaceCharge.cxx:286
 AliTPCSpaceCharge.cxx:287
 AliTPCSpaceCharge.cxx:288
 AliTPCSpaceCharge.cxx:289
 AliTPCSpaceCharge.cxx:290
 AliTPCSpaceCharge.cxx:291
 AliTPCSpaceCharge.cxx:292
 AliTPCSpaceCharge.cxx:293
 AliTPCSpaceCharge.cxx:294
 AliTPCSpaceCharge.cxx:295
 AliTPCSpaceCharge.cxx:296
 AliTPCSpaceCharge.cxx:297
 AliTPCSpaceCharge.cxx:298
 AliTPCSpaceCharge.cxx:299
 AliTPCSpaceCharge.cxx:300
 AliTPCSpaceCharge.cxx:301
 AliTPCSpaceCharge.cxx:302
 AliTPCSpaceCharge.cxx:303
 AliTPCSpaceCharge.cxx:304
 AliTPCSpaceCharge.cxx:305