#ifndef _Detector #define _Detector ////////////////////////////////////////////////////////////////////////// // // // Detector // // // // Class for description of silicon microstrip detector // // // ////////////////////////////////////////////////////////////////////////// #include "TMath.h" #include "fizika.h" #include "nrutil.h" #include "math.h" #include #include #include "TArray.h" #include "TArrayI.h" #include "TArrayF.h" #include "TArrayD.h" #include "TString.h" #include "EField.h" #include #include "TClonesArray.h" #include "TObjArray.h" #include "TRandom.h" #include "TMath.h" #include "TLine.h" #include "Trap.h" #include "TF2.h" #include "DStruct.h" extern double **a,*b,*y6,*y2,*y3,*y4,*y5; //Double_t **a,*b,*y6,*y2,*y3,*y4,*y5; class Detector : public TObject { private: Float_t StripPitch; //Strip pitch Float_t StripWidth; //Strip width Float_t Thickness; //Detector thickness Float_t Step; //Mesh step size Int_t NoStrips; //Number of strips Float_t Voltage; //Voltage TF2 *Neff; //effective dopping concentration TRandom *ran; //random number generator void CalDimension(); //calculation of dimensions public: EField Ramo; //weighting field EField Real; //electric field TArrayI StripPosition; //array with strip positions Int_t nx; //x-divisions Int_t ny; //y-divisions Int_t Multiplication;//pomnozevanje Float_t enp[3]; //entry point for the charge drift Float_t exp[3]; //exit point for the cahrge drift Int_t trapping; // Trapping simulation (yes=1, no=0) Trap *et; // Trapping for electrons Trap *ht; // Trapping for holes Int_t diff; // Diffusion simulation (yes=1, no=0) Int_t average; // Average (over how many events) Float_t Temperature; // Temperature 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 //_______________________________________________________________________________ Detector(); Detector( Float_t, TF2*, Float_t=50, Float_t=10, Int_t=3, Float_t=301 , Float_t=1); ~Detector(); // Double_t fdv() { return((Double_t) Neff1*1e-6*e_0*TMath::Power(Thickness-1,2)/(2*perm*perm0));}; // Double_t fdv(Double_t Neff) {return((Double_t) Neff*1e-6*TMath::Power(Thickness-1,2)/(2*perm*perm0));}; void Declaration(int); Double_t kappa(int ,int ,int); Double_t V(int ,int ,int); void CalPhyField(); void CalPhyField(Double_t *,Int_t =1); void CalPhyField(TH2F *uhis,Int_t =1,Int_t=0); void CalRamoField(); void CalRamoField(Double_t *,Int_t =1); void CalRamoField(TH2F *uhis,Int_t =1,Int_t=0); //Int_t *GetStripPosition() {return (StripPosition.GetArray());} Int_t GetNoStrips() {return (NoStrips);}; Float_t GetVoltage() {return(Voltage);}; TF2 * GetNeff() {return(Neff);} Float_t GetStripPitch() {return(StripPitch);}; Float_t GetStripWidth() {return(StripWidth);}; void SetVoltage(Float_t x,Int_t calnow=1) {Voltage=x; if(calnow) CalPhyField(); }; void SetNeff(TF2 *neff,Int_t calnow=1) {Neff=neff; if(calnow) CalPhyField(); }; void SetNoStrips(Int_t x) {NoStrips=x; CalDimension(); CalPhyField(); CalRamoField();}; void SetStripPitch(Float_t x) {StripPitch=x; CalDimension(); CalPhyField(); CalRamoField();}; void SetStripWidth(Float_t x) {StripWidth=x; CalDimension(); CalPhyField(); CalRamoField();}; void SetEntryPoint(Float_t x, Float_t y, Float_t z) {enp[0]=x; enp[1]=y; enp[2]=z;}; void SetExitPoint(Float_t x, Float_t y, Float_t z) {exp[0]=x; exp[1]=y; exp[2]=z;}; void ResetRnd(Int_t seed) {delete ran; ran=new TRandom(seed);}; TH2F *Draw(Char_t *option); void MipIR(Int_t=20, Int_t = 0, Float_t =0); void ShowMipIR(Int_t, Int_t =0, Float_t =0, Int_t=1, Int_t=0); void Drift(Double_t, Double_t,Float_t, DStruct *, Int_t = 0, Float_t =0,Double_t = 0); void CalM(DStruct *seg, Double_t *data); ClassDef(Detector,2) }; #endif