#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.