//#define RHDB #ifndef _MeasureWF #define _MeasureWF ////////////////////////////////////////////////////////////////////////// // // // Meassure // // // // Managing Measured WaveForms // // // ////////////////////////////////////////////////////////////////////////// #include "TObject.h" #include "TH1.h" #include "TMath.h" //#include #include "TArray.h" #include "TArrayI.h" #include "TArrayF.h" #include "TGraph.h" #include #include #include "TH1F.h" #include "TClonesArray.h" #include "TPaveText.h" #include "TText.h" #include "Elec.h" #ifdef RHDB #include "D:\Users\Gregor\Delo\HHRHDB\MySqlHHRHDB.h" #endif class MeasureWF : public TObject { private: Int_t Multiple; //Number of Voltages Float_t Frequency; //Frequency of trigger TClonesArray *histo; //-> TArrayF Voltages; //Array of Voltages TArrayF Current; //Array of Currents TArrayF Temperature; //Array of Temperatures TArrayF Date; //Date of the Measurement (or simulation) TArrayF Frequencies; //Array of Frequnecies Float_t AnnealTime; void ReadTCTForm(TString, Int_t,Float_t=-1111, Float_t=-1111, Int_t=0); public: TPaveText *pt; //! Double_t CAP; //! Capacitance of the diode TString Header; //Header of the file //stuff added to patch position sensitive TCT bool DrawMode; Char_t suffix[10]; Char_t prefix[10]; #ifdef RHDB HHRHDBResults *res; //! DBGetString(Char_t *,Char_t *,Char_t *); void DBResult(Char_t *); void DBComment(Char_t *x) {res->SetComment(x);} void DBPrint() {res->Print();} void DBSet(Int_t i,Float_t x) {res->ep[i]=x;} Int_t DBSend() {res->Print(); res->CreateEntry(false,false); return(res->WriteEntry());} // void DBSetTau(Float_t x) {DBSet(10,x);} // void DBSetSign(Float_t x) {if(x<0) DBSet(3,-10); else DBSet(3,10);} #endif // MeasureWF(Char_t *,Int_t,Int_t,Int_t,Float_t,Float_t); MeasureWF(Int_t=60); MeasureWF(Char_t *,Int_t=5001,Float_t=0); MeasureWF(Int_t,Char_t *,Float_t=0); virtual ~MeasureWF(); void AddHisto(Int_t,Float_t,TH1F *); //voltage index, voltage, histogram void AddHisto(Float_t,TH1F *); //voltage, histogram //Voltage Current Section inline void SetAnnealTime(Float_t x) {AnnealTime=x;} inline Float_t GetAnnealTime() {return AnnealTime;} void SetVoltages(Float_t *voltages) {Voltages.Adopt(Multiple,voltages);}; void SetVoltage(Int_t index, Float_t voltage) {Voltages[index]=voltage;}; void SetHistoTime(int ind,Float_t start); void SetHistoTime(int num,Float_t *start); Float_t GetVoltage(Int_t index) {return(Voltages[index]);} Int_t GetIndex(Float_t Volt) {for(Int_t i=0;iAt(number))->Copy(*his);}; //voltage index, histogram to copy original to void GetHistogram(Float_t voltage,TH1F *his) {for(Int_t i=0;iAt(i))->Copy(*his);}; //voltage, histogram TH1F *GetHA(Float_t voltage) {Int_t index=0; for(Int_t i=0;iAt(index));}; inline TH1F *operator()(Float_t voltage) {return(GetHA(voltage));}; inline TH1F *operator()(Int_t index) {return((TH1F *)histo->At(index));}; //TH1F *GetHA(Int_t index) {return((TH1F *)histo->At(index));}; void ScaleHisto(Int_t number, Float_t fac) {((TH1F *)histo->At(number))->Scale(fac);}; //voltage index , factor to scale //Integral Section void GetIntegral(Float_t*,Float_t=1,Float_t=-1111,Float_t =-1111); // in - array of integrals, scale , min time , high time void GetIntegral(Float_t*,Float_t*,Float_t=1,Float_t=-1111,Float_t =-1111); // in - array of voltages, in - array of integrals, scale , min time , high time Float_t Integral(Float_t,Float_t=-1111,Float_t =-1111); // voltage, mint, maxt of the integration Float_t Integral(Int_t,Float_t=-1111,Float_t =-1111); // index of the voltage, mint, maxt of the integration TGraph *CCE(Float_t=-1111,Float_t=-1111,Int_t=0,Int_t=1); //Draw CCE: start time, end time, model(sqrt,lin), option (time , T) TGraph *CCEFit(Float_t=-1111,Float_t=-1111,Float_t=1, Float_t=200, Int_t=0,Int_t=1); //Draw CCE: start time, end time, model(sqrt,lin), option (time , T) TGraph *CCEE(Elec *,Float_t=-1111,Int_t=0,Int_t=1); //Draw CCEE: electrinics, normalization, model(sqrt,lin), option (time , T) Float_t GetFDV(Float_t, Float_t,Float_t,Float_t,Float_t, Float_t,Int_t=0,Int_t=0); //Get FDV: start time, end time, intervals (4x), model, show Float_t GetFDV(Elec *,Float_t,Float_t,Float_t, Float_t,Int_t=0,Int_t=0); //Get FDV: electronics, intervals (4x), model, show TH1F *ChargeShape(Float_t); TH1F *EShaping(Elec *,Int_t); TH1F *EShaping(Elec *el,Float_t Volt) {if(GetIndex(Volt)!=-1) return(EShaping(el,GetIndex(Volt))); else return(new TH1F()); } void CorrectBaseLine(Int_t=0); // General section Int_t GetEntries() {return(Multiple);}; // Peak section Int_t int2ascii(Char_t v[],Float_t,Int_t=1); Double_t Mobility(Float_t,Float_t ,Float_t ,Double_t, Int_t=0); void NormArray(Int_t,Float_t *); void Info(); Float_t GetTime(Float_t=3600); Float_t GetT() {Float_t sumT=0; for(Int_t i=0;i