#ifndef _Dioda #define _Dioda ////////////////////////////////////////////////////////////////////////// // // // Dioda // // // // Description of the Diode // // // ////////////////////////////////////////////////////////////////////////// #include "fizika.h" #include "TObject.h" #include "TH1.h" #include "TMath.h" #include "TRandom.h" #include "TArray.h" #include "TArrayI.h" #include "TArrayF.h" #include "TGraph.h" #include "EField.h" #include #include #include "DStruct.h" #include "TMinuit.h" #include "Trap.h" #include "Elec.h" Double_t laser(Double_t *, Double_t *); class Dioda : public TObject { private: Int_t nx; //Width Of The Doide Int_t ny; //Thickness Of The Doide Float_t Voltage; //Voltage TF1 *Neff; //effective dopping concentration //Other Variables TRandom *ran; //Runge Kutta method for solving the filed void rk4(float *,float *,int,float,float,float*); Float_t rtbis(float, float, float); Float_t PoEqSolve(Float_t); Float_t dEX(Double_t ,Double_t *, Double_t *,Double_t=0.5); Double_t dEdx(Double_t); public: EField Real; //electric field EField Ramo; //weighting field TArrayF PhyPot; //electric potential TArrayF PhyField; //electric field TH1F *pos; // contribution of the holes to the total drift current TH1F *neg; // contribution of the electrons to the total drift current TH1F *sum; // total drift current Trap *et; // Trapping for electrons Trap *ht; // Trapping for holes Int_t udregion; Int_t diff; // Diffusion simulation (yes=1, no=0) Int_t MobMod; // Mobility Model Int_t average; // Average (over how many events) Float_t Temperature; // Temperature Int_t trapping; // Trapping simulation (yes=1, no=0) Float_t B; // Magnetic field; Int_t material; // material index - material=0 silicon, material = 1 diamond //Multiplication GK 14102008 Int_t Multiplication; //TArrayD PhyPot2D; //TArrayF RamoPot; // TArrayF RamoField; // TArrayD RamoPot2D; Dioda(TF1 *,Float_t=50,Int_t=50,Int_t=301); ~Dioda(); TGraph *Draw(char*); void GetField(); void GetField(TF1 *); void GetRamoField(); void GetRamoField(TH1F *rf); void SetVoltage(Float_t V) {Voltage=V; GetField();}; void ResetRnd(Int_t seed) {delete ran; ran=new TRandom(seed);}; //void Minimize(Int_t , Double_t *, Double_t *); // void fcn(Int_t &, Double_t *, Double_t &, Double_t *, Int_t ); // DRIFT SECTION OF THE PROGRAM void Drift(Double_t sx, Double_t sy, Float_t charg, DStruct *seg, Int_t =0,Float_t=0); void MipIR(Float_t *, Float_t *, Int_t); void LaserV(Float_t *, Float_t *, Int_t, Float_t=3.3); void Alpha(Float_t , Float_t , Float_t *); void Derivs(float x,float *,float *); Float_t GetVoltage() {return(Voltage);}; void CalM( DStruct *, Double_t *); ClassDef(Dioda,1) }; #endif