#ifndef ALITPCSPACECHARGE3D_H
#define ALITPCSPACECHARGE3D_H
#include "AliTPCCorrection.h"
class TH3F;
class TH3;
class AliTPCSpaceCharge3D : public AliTPCCorrection {
public:
AliTPCSpaceCharge3D();
virtual ~AliTPCSpaceCharge3D();
virtual void Init();
virtual void Update(const TTimeStamp &timeStamp);
virtual void SetOmegaTauT1T2(Float_t omegaTau,Float_t t1,Float_t t2) {
fT1=t1; fT2=t2;
const Double_t wt0=t2*omegaTau; fC0=1./(1.+wt0*wt0);
const Double_t wt1=t1*omegaTau; fC1=wt1/(1.+wt1*wt1);
};
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) {fCorrectionFactor=correctionFactor;}
Float_t GetCorrectionFactor() const {return fCorrectionFactor;}
void SetSCDataFileName(TString fname);
const char* GetSCDataFileName() { return fSCDataFileName.Data(); }
void InitSpaceCharge3DDistortion();
void InitSpaceCharge3DDistortionCourse();
void ForceInitSpaceCharge3DDistortion() { fInitLookUp=kFALSE; InitSpaceCharge3DDistortion(); }
void InitSpaceCharge3DPoisson(Int_t kRows, Int_t kColumns, Int_t kPhiSlices, Int_t kIterations);
void ForceInitSpaceCharge3DPoisson(Int_t kRows, Int_t kColumns, Int_t kPhiSlices, Int_t kIterations) { fInitLookUp=kFALSE; InitSpaceCharge3DPoisson(kRows,kColumns,kPhiSlices,kIterations); }
Float_t GetSpaceChargeDensity(Float_t r, Float_t phi, Float_t z, Int_t mode);
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);
void WriteChargeDistributionToFile(const char* fname = "SC-Alice.root");
virtual void Print(const Option_t* option="") const;
void SetInputSpaceCharge(TH3 * hisSpaceCharge3D, TH2 * hisRPhi, TH2* hisRZ, Double_t norm);
void SetInputSpaceCharge3D(TH3 * hisSpaceCharge3D){fSpaceChargeHistogram3D= hisSpaceCharge3D;}
const TH3 * GetInputSpaceCharge3D(){return fSpaceChargeHistogram3D;}
const TH2 * GetInputSpaceChargeRPhi(){return fSpaceChargeHistogramRPhi;}
const TH2 * GetInputSpaceChargeRZ(){return fSpaceChargeHistogramRZ;}
virtual void GetCorrection(const Float_t x[],const Short_t roc,Float_t dx[]);
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);
private:
enum {kNRows= 90 };
enum {kNPhiSlices= 144 };
enum {kNColumns= 130 };
AliTPCSpaceCharge3D(const AliTPCSpaceCharge3D &);
AliTPCSpaceCharge3D &operator=(const AliTPCSpaceCharge3D &);
Float_t fC0;
Float_t fC1;
Float_t fCorrectionFactor;
Bool_t fInitLookUp;
TMatrixF *fLookUpErOverEz[kNPhi];
TMatrixF *fLookUpEphiOverEz[kNPhi];
TMatrixF *fLookUpDeltaEz[kNPhi];
TString fSCDataFileName;
TString fSCLookUpPOCsFileName3D;
TString fSCLookUpPOCsFileNameRZ;
TString fSCLookUpPOCsFileNameRPhi;
TMatrixF *fSCdensityDistribution[kNPhi];
TMatrixD *fSCdensityInRZ;
TMatrixD *fSCdensityInRPhiA;
TMatrixD *fSCdensityInRPhiC;
TH3 * fSpaceChargeHistogram3D;
TH2 * fSpaceChargeHistogramRPhi;
TH2 * fSpaceChargeHistogramRZ;
ClassDef(AliTPCSpaceCharge3D,2);
};
#endif
AliTPCSpaceCharge3D.h:100 AliTPCSpaceCharge3D.h:101 AliTPCSpaceCharge3D.h:102 AliTPCSpaceCharge3D.h:103 AliTPCSpaceCharge3D.h:104 AliTPCSpaceCharge3D.h:105 AliTPCSpaceCharge3D.h:106 AliTPCSpaceCharge3D.h:107 AliTPCSpaceCharge3D.h:108