ROOT logo
AliRoot » TPC » BASE » AliTPCSpaceCharge

class AliTPCSpaceCharge: public AliTPCCorrection



AliTPCSpaceCharge class

The class calculates the space point distortions due to a rotational symmetric space charge distribution with the TPC drift volume.

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.

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.

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



output of MACRO_AliTPCSpaceCharge_1_cAliTPCSpaceCharge
   {
   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;
   } 
 
   

Date: 23/08/2010
Authors: Jim Thomas, Stefan Rossegger


Function Members (Methods)

public:
AliTPCSpaceCharge()
virtual~AliTPCSpaceCharge()
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)
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)
Float_tGetC0() const
Float_tGetC1() const
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 TH2*GetInputSpaceCharge()
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
virtual const char*TNamed::GetTitle() const
virtual UInt_tTObject::GetUniqueID() const
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()
voidInitSpaceChargeDistortion()
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 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)
TNamed&TNamed::operator=(const TNamed& rhs)
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(TH2* hisSpaceCharge)
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)
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
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
virtual voidGetCorrection(const Float_t* x, const Short_t roc, Float_t* dx)
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 { kRows
kColumns
kIterations
};
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 it the Look Up table was created
Double_tfLookUpDeltaEz[166][72]Array to store electric field integral (int Delta Ez)
Double_tfLookUpErOverEz[166][72]Array to store electric field integral (int Er/Ez)
TH2*fSpaceChargeHistogramHistogram with the input space charge histogram - used as an optional input

Class Charts

Inheritance Chart:
TNamed
AliTPCCorrection
AliTPCSpaceCharge

Function documentation

AliTPCSpaceCharge()
 default constructor

~AliTPCSpaceCharge()
 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 InitSpaceChargeDistortion()
 Initialization of the Lookup table which contains the solutions of the
 poisson problem

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 SetInputSpaceCharge(TH2* hisSpaceCharge)
{fSpaceChargeHistogram = hisSpaceCharge;}
const TH2 * GetInputSpaceCharge()
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 for conical
{fCorrectionFactor=correctionFactor;}
Float_t GetCorrectionFactor() const