2 Small macro for testing the raw response function used in
8 const Double_t fgTimeTrigger = 1.5E-06;
9 const Double_t fTau = 2.35;
10 const Double_t fOrder = 2.;
11 const Double_t fgPedestal = 32;
12 const Double_t fTimeBinWidth = 100E-9;
13 const Int_t fgOverflow = 0x3FF;
14 const Double_t fHighLowGain = 16.;
15 const Double_t fRawFormatTimeMax = 256*fTimeBinWidth;
16 const Double_t fgFEENoise = 3.;
19 void testRRF(const Double_t damp = 20, const Double_t dtime = 1e-09) {
21 TH1I* adcHigh = new TH1I("adcHigh","adcHigh",256,0,255);
22 TH1I* adcLow = new TH1I("adcLow","adcLow",256,0,255);
24 TF1* signalF = new TF1("signal",RawResponseFunction, 0, 256, 5);
25 signalF->SetParameter(0,damp);
26 signalF->SetParameter(1,(dtime+fgTimeTrigger)/fTimeBinWidth);
27 signalF->SetParameter(2,fTau);
28 signalF->SetParameter(3,fOrder);
29 signalF->SetParameter(4,fgPedestal);
31 for(Int_t itime = 0; itime < 256; itime++) {
32 Double_t signal = signalF->Eval(itime);
34 Double_t noise = gRandom->Gaus(0.,fgFEENoise);
35 signal = sqrt(signal*signal + noise*noise);
37 cout << "itime = " << itime << " highgain = " << signal << " signalI = " << static_cast<Int_t>(signal +0.5);
39 if(static_cast<Int_t>(signal +0.5) > fgOverflow) {
40 adcHigh->SetBinContent(itime+1,fgOverflow);
42 adcHigh->SetBinContent(itime+1,static_cast<Int_t>(signal +0.5));
45 signal /= fHighLowGain;
47 cout << " lowgain = " << signal << " signalI = " << static_cast<Int_t>(signal +0.5) << endl;
49 if(static_cast<Int_t>(signal +0.5) > fgOverflow) {
50 adcLow->SetBinContent(itime+1,fgOverflow);
52 adcLow->SetBinContent(itime+1,static_cast<Int_t>(signal +0.5));
56 TCanvas *c1 = new TCanvas("c1","c1",20,20,600,1000);
67 Double_t RawResponseFunction(Double_t *x, Double_t *par)
72 Double_t ped = par[4];
73 Double_t xx = ( x[0] - par[1] + tau ) / tau ;
78 signal = ped + par[0] * TMath::Power(xx , N) * TMath::Exp(N * (1 - xx )) ;