ROOT logo
AliRoot » TPC » BASE » AliTPCSpaceCharge3D

class AliTPCSpaceCharge3D: public AliTPCCorrection



AliTPCSpaceCharge3D class

The class calculates the space point distortions due to an arbitrary space charge distribution in 3D.

The method of calculation is based on the analytical solution for the Poisson problem in 3D (cylindrical coordinates). The solution is used in form of look up tables, where the pre calculated solutions for different voxel positions are stored. These voxel solutions can be summed up according to the weight of the position of the applied space charge distribution. Further details can be found in \cite[chap.5]{PhD-thesis_S.Rossegger}.

The class also allows a simple scaling of the resulting distortions via the function SetCorrectionFactor. This speeds up the calculation time under the assumption, that the distortions scales linearly with the magnitude of the space charge distribution $\rho(r,z)$ and the shape stays the same at higher luminosities.

In contrast to the implementation in 2D (see the class AliTPCSpaceChargeabove), the input charge distribution can be of arbitrary character. An example on how to produce a corresponding charge distribution can be found in the function WriteChargeDistributionToFile. In there, a $\rho(r,z) = (A-B\,z)/r^2$, with slightly different magnitude on the A and C side (due to the muon absorber), is superpositioned with a few leaking wires at arbitrary positions. Marian Ivanov change: 26.06.2013 Usage of the realy 3D space charge map as an optional input SetInputSpaceCharge map. In case given map is used 2 2D maps are ignored and scaling functions $\rho(r,z) = (A-B\,z)/r^2$, will not work



output of MACRO_AliTPCSpaceCharge3D_1_cAliTPCSpaceCharge3D
   {
   gROOT->SetStyle("Plain"); gStyle->SetPalette(1);
   TCanvas *c2 = new TCanvas("cAliTPCSpaceCharge3D","cAliTPCSpaceCharge3D",500,400); 
   AliTPCSpaceCharge3D sc;
   sc.WriteChargeDistributionToFile("SC_zr2_GGleaks.root");
   sc.SetSCDataFileName("SC_zr2_GGleaks.root");
   sc.SetOmegaTauT1T2(0,1,1); // B=0
   sc.InitSpaceCharge3DDistortion();
   sc.CreateHistoDRinXY(15,300,300)->Draw("colz");
   return c2;
   } 
 
   

Date: 19/06/2010
Authors: Stefan Rossegger


Function Members (Methods)

public:
AliTPCSpaceCharge3D()
virtual~AliTPCSpaceCharge3D()
voidTObject::AbstractMethod(const char* method) const
static voidAliTPCCorrection::AddVisualCorrection(AliTPCCorrection* corr, Int_t position)
virtual voidTObject::AppendPad(Option_t* option = "")
virtual voidTObject::Browse(TBrowser* b)
static TClass*Class()
virtual const char*TObject::ClassName() const
virtual voidTNamed::Clear(Option_t* option = "")
virtual TObject*TNamed::Clone(const char* newname = "") const
virtual Int_tTNamed::Compare(const TObject* obj) const
virtual voidTNamed::Copy(TObject& named) const
voidAliTPCCorrection::CorrectPoint(Float_t* x, Short_t roc)
voidAliTPCCorrection::CorrectPoint(const Float_t* x, Short_t roc, Float_t* xp)
voidAliTPCCorrection::CorrectPointLocal(Float_t* x, Short_t roc)
TTree*AliTPCCorrection::CreateDistortionTree(Double_t step = 5)
TH2F*AliTPCCorrection::CreateHistoDRinXY(Float_t z = 10., Int_t nx = 100, Int_t ny = 100)
TH2F*AliTPCCorrection::CreateHistoDRinZR(Float_t phi = 0., Int_t nZ = 100, Int_t nR = 100)
TH2F*AliTPCCorrection::CreateHistoDRPhiinXY(Float_t z = 10., Int_t nx = 100, Int_t nphi = 100)
TH2F*AliTPCCorrection::CreateHistoDRPhiinZR(Float_t phi = 0., Int_t nZ = 100, Int_t nR = 100)
TH2F*AliTPCCorrection::CreateHistoDZinXY(Float_t z = 10., Int_t nx = 100, Int_t ny = 100)
TH2F*AliTPCCorrection::CreateHistoDZinZR(Float_t phi = 0., Int_t nZ = 100, Int_t nR = 100)
TH2F*CreateHistoSCinXY(Float_t z, Int_t nx = 100, Int_t ny = 100, Int_t mode = 0)
TH2F*CreateHistoSCinZR(Float_t phi, Int_t nz = 100, Int_t nr = 100, Int_t mode = 0)
virtual voidTObject::Delete(Option_t* option = "")MENU
virtual Int_tTObject::DistancetoPrimitive(Int_t px, Int_t py)
voidAliTPCCorrection::DistortPoint(Float_t* x, Short_t roc)
voidAliTPCCorrection::DistortPoint(const Float_t* x, Short_t roc, Float_t* xp)
voidAliTPCCorrection::DistortPointLocal(Float_t* x, Short_t roc)
virtual voidTObject::Draw(Option_t* option = "")
virtual voidTObject::DrawClass() constMENU
virtual TObject*TObject::DrawClone(Option_t* option = "") constMENU
virtual voidTObject::Dump() constMENU
virtual voidTObject::Error(const char* method, const char* msgfmt) const
virtual voidTObject::Execute(const char* method, const char* params, Int_t* error = 0)
virtual voidTObject::Execute(TMethod* method, TObjArray* params, Int_t* error = 0)
virtual voidTObject::ExecuteEvent(Int_t event, Int_t px, Int_t py)
voidAliTPCCorrection::FastSimDistortedVertex(Double_t* orgVertex, Int_t nTracks, AliESDVertex& aV, AliESDVertex& avOrg, AliESDVertex& cV, AliESDVertex& cvOrg, TTreeSRedirector *const pcstream, Double_t etaCuts)
virtual voidTObject::Fatal(const char* method, const char* msgfmt) const
virtual voidTNamed::FillBuffer(char*& buffer)
virtual TObject*TObject::FindObject(const char* name) const
virtual TObject*TObject::FindObject(const TObject* obj) const
AliExternalTrackParam*AliTPCCorrection::FitDistortedTrack(AliExternalTrackParam& trackIn, Double_t refX, Int_t dir, TTreeSRedirector* pcstream)
voidForceInitSpaceCharge3DDistortion()
voidForceInitSpaceCharge3DPoisson(Int_t kRows, Int_t kColumns, Int_t kPhiSlices, Int_t kIterations)
Float_tGetC0() const
Float_tGetC1() const
virtual voidGetCorrection(const Float_t* x, const Short_t roc, Float_t* dx)
virtual voidAliTPCCorrection::GetCorrectionDz(const Float_t* x, Short_t roc, Float_t* dx, Float_t delta)
Float_tGetCorrectionFactor() const
virtual voidAliTPCCorrection::GetCorrectionIntegralDz(const Float_t* x, Short_t roc, Float_t* dx, Float_t delta)
virtual Float_tAliTPCCorrection::GetCorrScaleFactor() const
static Double_tAliTPCCorrection::GetCorrSector(Double_t sector, Double_t r, Double_t kZ, Int_t axisType, Int_t corrType = 0)
static Double_tAliTPCCorrection::GetCorrXYZ(Double_t gx, Double_t gy, Double_t gz, Int_t axisType, Int_t corrType = 0)
static Double_tAliTPCCorrection::GetCorrXYZDz(Double_t gx, Double_t gy, Double_t gz, Int_t axisType, Int_t corrType = 0, Double_t delta = 5)
static Double_tAliTPCCorrection::GetCorrXYZIntegrateZ(Double_t gx, Double_t gy, Double_t gz, Int_t axisType, Int_t corrType = 0, Double_t delta = 5)
virtual voidAliTPCCorrection::GetDistortion(const Float_t* x, Short_t roc, Float_t* dx)
virtual voidAliTPCCorrection::GetDistortionDz(const Float_t* x, Short_t roc, Float_t* dx, Float_t delta)
virtual voidAliTPCCorrection::GetDistortionIntegralDz(const Float_t* x, Short_t roc, Float_t* dx, Float_t delta)
static Double_tAliTPCCorrection::GetDistXYZ(Double_t gx, Double_t gy, Double_t gz, Int_t axisType, Int_t corrType = 0)
static Double_tAliTPCCorrection::GetDistXYZDz(Double_t gx, Double_t gy, Double_t gz, Int_t axisType, Int_t corrType = 0, Double_t delta = 5)
static Double_tAliTPCCorrection::GetDistXYZIntegrateZ(Double_t gx, Double_t gy, Double_t gz, Int_t axisType, Int_t corrType = 0, Double_t delta = 5)
virtual Option_t*TObject::GetDrawOption() const
static Long_tTObject::GetDtorOnly()
virtual const char*TObject::GetIconName() const
const TH3*GetInputSpaceCharge3D()
const TH2*GetInputSpaceChargeRPhi()
const TH2*GetInputSpaceChargeRZ()
virtual const char*TNamed::GetName() const
virtual char*TObject::GetObjectInfo(Int_t px, Int_t py) const
static Bool_tTObject::GetObjectStat()
virtual Option_t*TObject::GetOption() const
const char*GetSCDataFileName()
Float_tGetSpaceChargeDensity(Float_t r, Float_t phi, Float_t z, Int_t mode)
virtual const char*TNamed::GetTitle() const
virtual UInt_tTObject::GetUniqueID() const
static AliTPCCorrection*AliTPCCorrection::GetVisualCorrection(Int_t position)
virtual Bool_tTObject::HandleTimer(TTimer* timer)
virtual ULong_tTNamed::Hash() const
virtual voidTObject::Info(const char* method, const char* msgfmt) const
virtual Bool_tTObject::InheritsFrom(const char* classname) const
virtual Bool_tTObject::InheritsFrom(const TClass* cl) const
virtual voidInit()
voidInitSpaceCharge3DDistortion()
voidInitSpaceCharge3DDistortionCourse()
voidInitSpaceCharge3DPoisson(Int_t kRows, Int_t kColumns, Int_t kPhiSlices, Int_t kIterations)
virtual voidTObject::Inspect() constMENU
voidTObject::InvertBit(UInt_t f)
virtual TClass*IsA() const
virtual Bool_tTObject::IsEqual(const TObject* obj) const
virtual Bool_tTObject::IsFolder() const
Bool_tTObject::IsOnHeap() const
virtual Bool_tTNamed::IsSortable() const
Bool_tTObject::IsZombie() const
virtual voidTNamed::ls(Option_t* option = "") const
static AliTPCSpaceCharge3D*MakeCorrection22D(const char* filename = "SpaceChargeMap.root", Double_t multiplicity = 950., Double_t intRate = 5e4, Double_t epsIROC = 10., Double_t epsOROC = 10, Double_t gasfactor = 1., Double_t radialScaling = 1.5)
static voidAliTPCCorrection::MakeDistortionMap(THnSparse* his0, TTreeSRedirector* pcstream, const char* hname, Int_t run, Float_t refX, Int_t type, Int_t integ = 1)
static voidAliTPCCorrection::MakeDistortionMapCosmic(THnSparse* his0, TTreeSRedirector* pcstream, const char* hname, Int_t run, Float_t refX, Int_t type)
static voidAliTPCCorrection::MakeDistortionMapSector(THnSparse* his0, TTreeSRedirector* pcstream, const char* hname, Int_t run, Int_t type)
static voidAliTPCCorrection::MakeLaserDistortionTree(TTree* tree, TObjArray* corrArray, Int_t itype)
static voidAliTPCCorrection::MakeLaserDistortionTreeOld(TTree* tree, TObjArray* corrArray, Int_t itype)
static voidAliTPCCorrection::MakeSectorDistortionTree(TTree* tinput, Int_t dtype, Int_t ptype, const TObjArray* corrArray, Int_t step = 1, Int_t offset = 0, Bool_t debug = 0)
static voidAliTPCCorrection::MakeTrackDistortionTree(TTree* tinput, Int_t dtype, Int_t ptype, const TObjArray* corrArray, Int_t step = 1, Int_t offset = 0, Bool_t debug = 0)
voidTObject::MayNotUse(const char* method) const
virtual Bool_tTObject::Notify()
voidTObject::Obsolete(const char* method, const char* asOfVers, const char* removedFromVers) const
static voidTObject::operator delete(void* ptr)
static voidTObject::operator delete(void* ptr, void* vp)
static voidTObject::operator delete[](void* ptr)
static voidTObject::operator delete[](void* ptr, void* vp)
void*TObject::operator new(size_t sz)
void*TObject::operator new(size_t sz, void* vp)
void*TObject::operator new[](size_t sz)
void*TObject::operator new[](size_t sz, void* vp)
virtual voidTObject::Paint(Option_t* option = "")
virtual voidTObject::Pop()
virtual voidPrint(Option_t* option = "") const
virtual Int_tTObject::Read(const char* name)
virtual voidTObject::RecursiveRemove(TObject* obj)
voidTObject::ResetBit(UInt_t f)
virtual voidTObject::SaveAs(const char* filename = "", Option_t* option = "") constMENU
virtual voidTObject::SavePrimitive(basic_ostream<char,char_traits<char> >& out, Option_t* option = "")
voidTObject::SetBit(UInt_t f)
voidTObject::SetBit(UInt_t f, Bool_t set)
voidSetC0C1(Float_t c0, Float_t c1)
voidSetCorrectionFactor(Float_t correctionFactor)
virtual voidAliTPCCorrection::SetCorrScaleFactor(Float_t)
virtual voidTObject::SetDrawOption(Option_t* option = "")MENU
static voidTObject::SetDtorOnly(void* obj)
voidSetInputSpaceCharge(TH3* hisSpaceCharge3D, TH2* hisRPhi, TH2* hisRZ, Double_t norm)
voidSetInputSpaceCharge3D(TH3* hisSpaceCharge3D)
virtual voidTNamed::SetName(const char* name)MENU
virtual voidTNamed::SetNameTitle(const char* name, const char* title)
static voidTObject::SetObjectStat(Bool_t stat)
virtual voidSetOmegaTauT1T2(Float_t omegaTau, Float_t t1, Float_t t2)
voidSetSCDataFileName(TString fname)
virtual voidTNamed::SetTitle(const char* title = "")MENU
virtual voidTObject::SetUniqueID(UInt_t uid)
virtual voidShowMembers(TMemberInspector&)
virtual Int_tTNamed::Sizeof() const
voidAliTPCCorrection::StoreInOCDB(Int_t startRun, Int_t endRun, const char* comment = 0)
virtual voidStreamer(TBuffer&)
voidStreamerNVirtual(TBuffer& ClassDef_StreamerNVirtual_b)
virtual voidTObject::SysError(const char* method, const char* msgfmt) const
Bool_tTObject::TestBit(UInt_t f) const
Int_tTObject::TestBits(UInt_t f) const
virtual voidUpdate(const TTimeStamp& timeStamp)
virtual voidTObject::UseCurrentStyle()
virtual voidTObject::Warning(const char* method, const char* msgfmt) const
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0)
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) const
voidWriteChargeDistributionToFile(const char* fname = "SC-Alice.root")
protected:
TH2F*AliTPCCorrection::CreateTH2F(const char* name, const char* title, const char* xlabel, const char* ylabel, const char* zlabel, Int_t nbinsx, Double_t xlow, Double_t xup, Int_t nbinsy, Double_t ylow, Double_t yup)
virtual voidTObject::DoError(int level, const char* location, const char* fmt, va_list va) const
Double_tAliTPCCorrection::Interpolate(const Double_t* xArray, const Double_t* yArray, Int_t order, Double_t x)
Float_tAliTPCCorrection::Interpolate(const Double_t* xArray, const Float_t* yArray, Int_t order, Double_t x)
voidAliTPCCorrection::Interpolate2DEdistortion(Int_t order, Double_t r, Double_t z, const Double_t er[][kNR], Double_t& erValue)
Double_tAliTPCCorrection::Interpolate2DTable(Int_t order, Double_t x, Double_t y, Int_t nx, Int_t ny, const Double_t* xv, const Double_t* yv, const TMatrixD& array)
Float_tAliTPCCorrection::Interpolate2DTable(Int_t order, Double_t x, Double_t y, Int_t nx, Int_t ny, const Double_t* xv, const Double_t* yv, const TMatrixF& array)
voidAliTPCCorrection::Interpolate3DEdistortion(Int_t order, Double_t r, Float_t phi, Double_t z, const Double_t er[][kNPhi][kNR], const Double_t ephi[][kNPhi][kNR], const Double_t ez[][kNPhi][kNR], Double_t& erValue, Double_t& ephiValue, Double_t& ezValue)
Double_tAliTPCCorrection::Interpolate3DTable(Int_t order, Double_t x, Double_t y, Double_t z, Int_t nx, Int_t ny, Int_t nz, const Double_t* xv, const Double_t* yv, const Double_t* zv, TMatrixD** arrayofArrays)
Float_tAliTPCCorrection::Interpolate3DTable(Int_t order, Double_t x, Double_t y, Double_t z, Int_t nx, Int_t ny, Int_t nz, const Double_t* xv, const Double_t* yv, const Double_t* zv, TMatrixF** arrayofArrays)
Bool_tAliTPCCorrection::IsLocal() const
virtual Int_tAliTPCCorrection::IsPowerOfTwo(Int_t i) const
voidTObject::MakeZombie()
voidAliTPCCorrection::PoissonRelaxation2D(TMatrixD& arrayV, TMatrixD& chargeDensity, TMatrixD& arrayErOverEz, TMatrixD& arrayDeltaEz, Int_t rows, Int_t columns, Int_t iterations, Bool_t rocDisplacement = kTRUE)
voidAliTPCCorrection::PoissonRelaxation3D(TMatrixD** arrayofArrayV, TMatrixD** arrayofChargeDensities, TMatrixD** arrayofEroverEz, TMatrixD** arrayofEPhioverEz, TMatrixD** arrayofEz, Int_t rows, Int_t columns, Int_t phislices, Float_t deltaphi, Int_t iterations, Int_t summetry, Bool_t rocDisplacement = kTRUE)
voidAliTPCCorrection::Search(Int_t n, const Double_t* xArray, Double_t x, Int_t& low)
voidAliTPCCorrection::SetIsLocal(Bool_t isLocal)

Data Members

public:
enum { kNRows
kNPhiSlices
kNColumns
};
enum AliTPCCorrection::CompositionType { kParallel
kQueue
};
enum AliTPCCorrection::[unnamed] { kNR
kNPhi
kNZ
};
enum TObject::EStatusBits { kCanDelete
kMustCleanup
kObjInCanvas
kIsReferenced
kHasUUID
kCannotPick
kNoContextMenu
kInvalidObject
};
enum TObject::[unnamed] { kIsOnHeap
kNotDeleted
kZombie
kBitMask
kSingleKey
kOverwrite
kWriteDelete
};
protected:
Int_tAliTPCCorrection::fILow
Bool_tAliTPCCorrection::fIsLocalswitch to indicate that the distortion is a local vector drphi/dz, dr/dz
Int_tAliTPCCorrection::fJLow
Int_tAliTPCCorrection::fKLowvariable to help in the interpolation
TStringTNamed::fNameobject identifier
Double_tAliTPCCorrection::fT1tensor term of wt - T1
Double_tAliTPCCorrection::fT2tensor term of wt - T2
TStringTNamed::fTitleobject title
static TObjArray*AliTPCCorrection::fgVisualCorrectionarray of orrection for visualization
static const Double_tAliTPCCorrection::fgkCathodeVCathode Voltage (volts)
static const Double_tAliTPCCorrection::fgkEMcharge/mass in [C/kg]
static const Double_tAliTPCCorrection::fgkGGGating Grid voltage (volts)
static const Double_tAliTPCCorrection::fgkIFCRadiusMean Radius of the Inner Field Cage ( 82.43 min, 83.70 max) (cm)
static const Double_tAliTPCCorrection::fgkOFCRadiusMean Radius of the Outer Field Cage (252.55 min, 256.45 max) (cm)
Double_tAliTPCCorrection::fgkPhiList[181]points in the phi direction (for the lookup table)
Double_tAliTPCCorrection::fgkRList[72]points in the radial direction (for the lookup table)
static const Double_tAliTPCCorrection::fgkTPCZ0nominal gating grid position
Double_tAliTPCCorrection::fgkZList[166]points in the z direction (for the lookup table)
static const Double_tAliTPCCorrection::fgkZOffSetOffset from CE: calculate all distortions closer to CE as if at this point
static const Double_tAliTPCCorrection::fgkdvdE[cm/V] drift velocity dependency on the E field (from Magboltz for NeCO2N2 at standard environment)
static const Double_tAliTPCCorrection::fgke0vacuum permittivity [A·s/(V·m)]
private:
Float_tfC0coefficient C0 (compare Jim Thomas's notes for definitions)
Float_tfC1coefficient C1 (compare Jim Thomas's notes for definitions)
Float_tfCorrectionFactorSpace Charge Correction factor in comparison to initialized
Bool_tfInitLookUpflag to check if the Look Up table was created
TMatrixF*fLookUpDeltaEz[181]Array to store electric field integral (int Er/Ez)
TMatrixF*fLookUpEphiOverEz[181]Array to store electric field integral (int Er/Ez)
TMatrixF*fLookUpErOverEz[181]Array to store electric field integral (int Er/Ez)
TStringfSCDataFileNamefile which contains the space charge distribution
TStringfSCLookUpPOCsFileName3Dfilename of the precalculated lookup tables (for individual voxels)
TStringfSCLookUpPOCsFileNameRPhifilename of the precalculated lookup tables (for individual voxels)
TStringfSCLookUpPOCsFileNameRZfilename of the precalculated lookup tables (for individual voxels)
TMatrixF*fSCdensityDistribution[181]3D space charge distribution
TMatrixD*fSCdensityInRPhiA(r,phi) space charge distribution
TMatrixD*fSCdensityInRPhiC(r,phi) space charge distribution
TMatrixD*fSCdensityInRZ(r,z) space charge distribution
TH3*fSpaceChargeHistogram3DHistogram with the input space charge histogram - used as an optional input
TH2*fSpaceChargeHistogramRPhiHistogram with the input space charge histogram - used as an optional input
TH2*fSpaceChargeHistogramRZHistogram with the input space charge histogram - used as an optional input

Class Charts

Inheritance Chart:
TNamed
AliTPCCorrection
AliTPCSpaceCharge3D

Function documentation

AliTPCSpaceCharge3D()
 default constructor

~AliTPCSpaceCharge3D()
 default destructor

void Init()
 Initialization funtion

void Update(const TTimeStamp& timeStamp)
 Update function

void 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

void InitSpaceCharge3DDistortion()
 Initialization of the Lookup table which contains the solutions of the
 "space charge" (poisson) problem - Faster and more accureate

 Method: Weighted sum-up of the different fields within the look up table
 but using two lookup tables with higher granularity in the (r,z) and the (rphi)- plane to emulate
 more realistic space charges. (r,z) from primary ionisation. (rphi) for possible Gating leaks
void InitSpaceCharge3DDistortionCourse()
 Initialization of the Lookup table which contains the solutions of the
 "space charge" (poisson) problem

 The sum-up uses a look-up table which contains different discretized Space charge fields
 in order to calculate the corresponding field deviations due to a given (discretized)
 space charge distribution ....

 Method of calculation: Weighted sum-up of the different fields within the look up table
 Note: Full 3d version: Course and slow ...
void SetSCDataFileName(TString fname)
 Set & load the Space charge density distribution from a file
 (linear interpolation onto a standard grid)

void SetInputSpaceCharge(TH3* hisSpaceCharge3D, TH2* hisRPhi, TH2* hisRZ, Double_t norm)
 Use 3D space charge map as an optional input
 The layout of the input histogram is assumed to be: (phi,r,z)
 Density histogram is expreseed is expected to bin in  C/m^3

 Standard histogram interpolation is used in order to use the density at center of voxel


Float_t GetSpaceChargeDensity(Float_t r, Float_t phi, Float_t z, Int_t mode)
 returns the (input) space charge density at a given point according
 Note: input in [cm], output in [C/m^3/e0] !!

TH2F * CreateHistoSCinXY(Float_t z, Int_t nx = 100, Int_t ny = 100, Int_t mode = 0)
 return a simple histogramm containing the space charge distribution (input for the calculation)

TH2F * CreateHistoSCinZR(Float_t phi, Int_t nz = 100, Int_t nr = 100, Int_t mode = 0)
 return a simple histogramm containing the space charge distribution (input for the calculation)

void WriteChargeDistributionToFile(const char* fname = "SC-Alice.root")
 Example on how to write a Space charge distribution into a File
  (see below: estimate from scaling STAR measurements to Alice)
 Charge distribution is splitted into two (RZ and RPHI) in order to speed up
 the needed calculation time

void Print(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

void InitSpaceCharge3DPoisson(Int_t kRows, Int_t kColumns, Int_t kPhiSlices, Int_t kIterations)
 MI extension  - calculate E field
               - inspired by  AliTPCROCVoltError3D::InitROCVoltError3D()
 Initialization of the Lookup table which contains the solutions of the
 Dirichlet boundary problem
 Calculation of the single 3D-Poisson solver is done just if needed
 (see basic lookup tables in header file)

AliTPCSpaceCharge3D * MakeCorrection22D(const char* filename = "SpaceChargeMap.root", Double_t multiplicity = 950., Double_t intRate = 5e4, Double_t epsIROC = 10., Double_t epsOROC = 10, Double_t gasfactor = 1., Double_t radialScaling = 1.5)
 Origin: Christian Lippmann, CERN, Christian.Lippmann@cern.ch based on the internal note (xxx ...)
 adopted by Marian Ivanov (different epsilon in IROC and OROC)

 Charge distribution is splitted into two (RZ and RPHI) in order to speed up
 the needed calculation time.

 Explanation of variables:
 1) multiplicity: charghed particle dn/deta for top 80% centrality (660 for 2011,
    expect 950 for full energy)
 2) intRate: Total interaction rate (e.g. 50kHz for the upgrade)
 3) eps: Number of backdrifting ions per primary electron (0 for MWPC, e.g.10 for GEM)
 4) gasfactor: Use different gas. E.g. Ar/CO2 has twice the primary ionization, ion drift
    velocity factor 2.5 slower, so  gasfactor = 5.

 some grid, not too coarse
AliTPCSpaceCharge3D()
void SetOmegaTauT1T2(Float_t omegaTau, Float_t t1, Float_t t2)
 common setters and getters for tangled ExB effect
void SetC0C1(Float_t c0, Float_t c1)
{fC0=c0;fC1=c1;}
Float_t GetC0() const
{return fC0;}
Float_t GetC1() const
{return fC1;}
void SetCorrectionFactor(Float_t correctionFactor)
 setters and getters
{fCorrectionFactor=correctionFactor;}
Float_t GetCorrectionFactor() const
const char* GetSCDataFileName()
{ return fSCDataFileName.Data(); }
void ForceInitSpaceCharge3DDistortion()
void ForceInitSpaceCharge3DPoisson(Int_t kRows, Int_t kColumns, Int_t kPhiSlices, Int_t kIterations)
{ fInitLookUp=kFALSE; InitSpaceCharge3DPoisson(kRows,kColumns,kPhiSlices,kIterations); }
void SetInputSpaceCharge3D(TH3* hisSpaceCharge3D)
{fSpaceChargeHistogram3D= hisSpaceCharge3D;}
const TH3 * GetInputSpaceCharge3D()
const TH2 * GetInputSpaceChargeRPhi()
const TH2 * GetInputSpaceChargeRZ()
AliTPCSpaceCharge3D & operator=(const AliTPCSpaceCharge3D& )