AliRoot Core  3dc7879 (3dc7879)
TestRawResponse.C
Go to the documentation of this file.
1 
11 #if !defined(__CINT__) || defined(__MAKECINT__)
12 
13 #include <Riostream.h>
14 
15 //Root include files
16 #include <TF1.h>
17 #include <TRandom.h>
18 #include <TMath.h>
19 #include <TCanvas.h>
20 #include <TH1I.h>
21 
22 #endif
23 
24 // Response parameters
25 const Double_t fgTimeTrigger = 1.5E-06;
26 const Double_t fTau = 2.35;
27 const Double_t fOrder = 2.;
28 const Double_t fgPedestal = 32;
29 const Double_t fTimeBinWidth = 100E-9;
30 const Int_t fgOverflow = 0x3FF;
31 const Double_t fHighLowGain = 16.;
32 const Double_t fRawFormatTimeMax = 256*fTimeBinWidth;
33 const Double_t fgFEENoise = 3.;
34 
37 //
38 Double_t RawResponseFunction(Double_t *x, Double_t *par)
39 {
40  Double_t signal ;
41  Double_t tau =par[2];
42  Double_t N =par[3];
43  Double_t ped = par[4];
44  Double_t xx = ( x[0] - par[1] + tau ) / tau ;
45 
46  if (xx <= 0)
47  signal = ped ;
48  else
49  signal = ped + par[0] * TMath::Power(xx , N) * TMath::Exp(N * (1 - xx )) ;
50 
51  return signal ;
52 }
53 
57 void TestRawResponse(const Double_t damp = 20, const Double_t dtime = 1e-09)
58 {
59  TH1I* adcHigh = new TH1I("adcHigh","adcHigh",256,0,255);
60  TH1I* adcLow = new TH1I("adcLow","adcLow",256,0,255);
61 
62  TF1* signalF = new TF1("signal",RawResponseFunction, 0, 256, 5);
63  signalF->SetParameter(0,damp);
64  signalF->SetParameter(1,(dtime+fgTimeTrigger)/fTimeBinWidth);
65  signalF->SetParameter(2,fTau);
66  signalF->SetParameter(3,fOrder);
67  signalF->SetParameter(4,fgPedestal);
68 
69  for(Int_t itime = 0; itime < 256; itime++)
70  {
71  Double_t signal = signalF->Eval(itime);
72 
73  Double_t noise = gRandom->Gaus(0.,fgFEENoise);
74  signal = sqrt(signal*signal + noise*noise);
75 
76  cout << "itime = " << itime << " highgain = " << signal
77  << " signalI = " << static_cast<Int_t>(signal +0.5);
78 
79  if(static_cast<Int_t>(signal +0.5) > fgOverflow)
80  adcHigh->SetBinContent(itime+1,fgOverflow);
81  else
82  adcHigh->SetBinContent(itime+1,static_cast<Int_t>(signal +0.5));
83 
84  signal /= fHighLowGain;
85 
86  cout << " lowgain = " << signal << " signalI = " << static_cast<Int_t>(signal +0.5) << endl;
87 
88  if(static_cast<Int_t>(signal +0.5) > fgOverflow)
89  adcLow->SetBinContent(itime+1,fgOverflow);
90  else
91  adcLow->SetBinContent(itime+1,static_cast<Int_t>(signal +0.5));
92  }
93 
94  TCanvas *c1 = new TCanvas("c1","c1",20,20,600,1000);
95  c1->Divide(1,3);
96  c1->cd(1);
97  signalF->Draw();
98  c1->cd(2);
99  adcHigh->Draw();
100  c1->cd(3);
101  adcLow->Draw();
102 }
103 
const Double_t fgFEENoise
const Double_t fOrder
const Int_t fgOverflow
const Double_t fHighLowGain
const Double_t fgTimeTrigger
const Double_t fTimeBinWidth
const Double_t fgPedestal
const Double_t fTau
void TestRawResponse(const Double_t damp=20, const Double_t dtime=1e-09)
Double_t RawResponseFunction(Double_t *x, Double_t *par)
Response function.
const Double_t fRawFormatTimeMax