#include "Elec.h"
ClassImp(Elec)
Elec::Elec(Double_t x1,Double_t x2 ,Double_t x3,Double_t x4,Double_t x5,Double_t x6,Double_t x7,Double_t x8,Double_t x9,Double_t x10,Int_t met)
{
Cp=x1; Rp=x2; IntTime=x3; Crc=x4; R1rc=x5; R2rc=x6; Ccr=x7; R1cr=x8; R2cr=x9; PeakTime=x10; Method=met;
}
Elec::~Elec()
{
Clear();
}
Double_t Elec::Trapez(TH1F *histo,Int_t i,Double_t tau)
{
Double_t f1=0,f2=0,h=0,t1=0,t2=0;
if(i==1) return(histo->GetBinContent(i)*histo->GetBinWidth(i)/2); else
{
t1=histo->GetBinCenter(i-1); f1=histo->GetBinContent(i-1)*TMath::Exp(t1/tau);
t2=histo->GetBinCenter(i); f2=histo->GetBinContent(i)*TMath::Exp(t2/tau);
h=histo->GetBinWidth(i); //printf("tutut %d,t1=%e,t2=%e,f1=%e,f2=%e\n",i,t1,t2,f1,f2);
return(h*0.5*(f1+f2));
}
}
Double_t Elec::Simpson(TH1F *histo,Int_t i,Double_t tau)
{
Double_t f1=0,f2=0,f3=0,h=0,t1=0,t2=0,t3=0;
if(i<3 || i%2==0) return(Trapez(histo,i,tau)); else {
h=histo->GetBinWidth(i);
t1=histo->GetBinCenter(i-2); f1=histo->GetBinContent(i-2)*TMath::Exp(t1/tau);
t2=histo->GetBinCenter(i-1); f2=histo->GetBinContent(i-1)*TMath::Exp(t2/tau);
t3=histo->GetBinCenter(i); f3=histo->GetBinContent(i)*TMath::Exp(t3/tau);
return(h * (0.33333333333*f1 +1.333333333*f2 + 0.3333333333333*f3)-Trapez(histo,i-1,tau));
}
}
void Elec::Revpreamp(Double_t C, Double_t R, TH1F *histo,Double_t unit)
{
Int_t i;
Double_t tau=R*C*unit;
Float_t prev,nextprev;;
Int_t start;
//start=histo->GetXaxis()->FindBin(0);
prev=histo->GetBinContent(1);
histo->SetBinContent(1,(Float_t) tau*((histo->GetBinContent(2)-histo->GetBinContent(1))/(histo->GetBinWidth(1)) + histo->GetBinContent(1)/tau));
start=2;
//printf("%e %en", histo->GetBinWidth(1), tau);
for(i=start;i<histo->GetNbinsX()-1;i++)
// histo->SetBinContent(i,(Float_t) tau*((histo->GetBinContent(i+1)-histo->GetBinContent(i-1))/(histo->GetBinWidth(i)) + histo->GetBinContent(i)/tau));
{
nextprev=histo->GetBinContent(i);
histo->SetBinContent(i,(Float_t) tau*((histo->GetBinContent(i+1)-prev)/(2*histo->GetBinWidth(i)) + histo->GetBinContent(i)/tau));
prev=nextprev;
}
}
void Elec::preamp(Double_t C, Double_t R, TH1F *histo,Double_t cut, Int_t method)
{
static double e_0 = 1.60217733e-19;
Double_t suma=0;
Double_t tau=R*C;
Double_t t;
Int_t i;
TH1F *whisto=new TH1F();
histo->Copy(*whisto);
if(cut==-1111) cut=histo->GetNbinsX()*histo->GetBinWidth(1);
for(i=1;i<histo->GetNbinsX()-1;i++)
{
t=whisto->GetBinCenter(i);
if(t<=cut)
{
if(method==0) suma+=Trapez(whisto,i,tau);
if(method==1) suma+=Simpson(whisto,i,tau);
}
histo->SetBinContent(i,(Float_t) (1/C*suma*TMath::Exp(-t/tau)));
// printf("%d,t=%e,suma=%e,tau=%e,tapez=%en",i,t,suma,tau,Trapez(histo,i,tau));
}
delete whisto;
}
void Elec::RCshape(Double_t C, Double_t R1, Double_t R2,TH1F *histo, Int_t method)
{
Double_t suma=0;
Double_t tau=(R1*R2)*C/(R1+R2);
Double_t tau1=R1*C;
Double_t t;
Int_t i;
TH1F *whisto=new TH1F();
histo->Copy(*whisto);
for(i=1;i<histo->GetNbinsX()-1;i++)
{
t=whisto->GetBinCenter(i);
if(method==0) suma+=Trapez(whisto,i,tau);
if(method==1) suma+=Simpson(whisto,i,tau);
histo->SetBinContent(i,(Float_t) (1/tau1*suma*TMath::Exp(-t/tau)));
}
delete whisto;
}
void Elec::CRshape(Double_t C, Double_t R1, Double_t R2,TH1F *histo, Int_t method)
{
Double_t suma=0;
Double_t tau=(R1*R2)*C/(R1+R2);
Double_t tau1=R1*C;
Double_t t,f;
Int_t i;
TH1F *whisto=new TH1F();
histo->Copy(*whisto);
for(i=1;i<histo->GetNbinsX()-1;i++)
{
t=whisto->GetBinCenter(i);
f=whisto->GetBinContent(i);
if(method==0) suma+=Trapez(whisto,i,tau);
if(method==1) suma+=Simpson(whisto,i,tau);
histo->SetBinContent(i,f-(1/tau-1/tau1)*suma*TMath::Exp(-t/tau));
}
delete whisto;
}
ROOT page - Class index - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.