#ifndef _EField #define _EField ////////////////////////////////////////////////////////////////////////// // // // ElectricField Class // // // // Class for callculation of electric field in silicon // // // ////////////////////////////////////////////////////////////////////////// #include "TMath.h" #include "nrutil.h" #include "math.h" #include #include #include "TArray.h" #include "TArrayI.h" #include "TArrayF.h" #include "TArrayD.h" #include "TH1.h" #include "TH2.h" #include "TF2.h" #include "TClonesArray.h" #include "TObjArray.h" class EField : public TObject { private: Int_t nx; Int_t ny; TArrayI StripPosition; TArrayD Efx; TArrayD Efy; TArrayD Ef; TArrayD U; public: Float_t ThE; EField(TArrayD,Int_t,Int_t,TArrayI); EField(Double_t *,Int_t,Int_t,TArrayI); EField(); ~EField(); void CalField(Float_t=1,Int_t=1); void CalFieldXY(float ,float,float *); void GetHisto(TH2F *,Int_t); Double_t *GetEfx() {return (Efx.GetArray());}; Double_t *GetEfy() {return (Efy.GetArray());}; Double_t *GetEf() {return (Ef.GetArray());}; Double_t *GetU() {return (U.GetArray());}; void SetEfy(Int_t i, Double_t val) {Efy[i]=val;}; void SetEfx(Int_t i, Double_t val) {Efx[i]=val;}; void SetEf(Int_t i, Double_t val) {Ef[i]=val;}; void SetU(Int_t i, Double_t val) {U[i]=val;}; Int_t GetNX() {return(nx);}; Int_t GetNY() {return(ny);}; Int_t GetNoStrips() {return(StripPosition.GetSize()/2);} Int_t *GetStripPosition() {return(StripPosition.GetArray());} Float_t DriftVelocity(Float_t,Float_t, Float_t, Double_t, Int_t = 0); Float_t DriftVelocity(Float_t,Float_t,Float_t, Float_t, Double_t, Int_t = 0); Double_t Mobility(Float_t,Float_t,Float_t,Float_t,Double_t, Int_t = 0); Double_t Mobility(Float_t,Float_t ,Float_t ,Double_t , Int_t = 0); //avalanche multiplification GK 14.10.2008 inline Double_t alpha(Double_t E) {return 2.3e-1*TMath::Exp(-6.78*(2e7/(E*1e6)-1));}; inline Double_t beta(Double_t E) {return 1.3e-3*TMath::Exp(-13.2*(2e7/(E*1e6)-1));}; ClassDef(EField,1) }; #endif