/* Small macro for testing the raw response function used in AliEMCALRawUtils J.L. Klay (Cal Poly) */ const Double_t fgTimeTrigger = 1.5E-06; const Double_t fTau = 2.35; const Double_t fOrder = 2.; const Double_t fgPedestal = 32; const Double_t fTimeBinWidth = 100E-9; const Int_t fgOverflow = 0x3FF; const Double_t fHighLowGain = 16.; const Double_t fRawFormatTimeMax = 256*fTimeBinWidth; const Double_t fgFEENoise = 3.; void testRRF(const Double_t damp = 20, const Double_t dtime = 1e-09) { TH1I* adcHigh = new TH1I("adcHigh","adcHigh",256,0,255); TH1I* adcLow = new TH1I("adcLow","adcLow",256,0,255); TF1* signalF = new TF1("signal",RawResponseFunction, 0, 256, 5); signalF->SetParameter(0,damp); signalF->SetParameter(1,(dtime+fgTimeTrigger)/fTimeBinWidth); signalF->SetParameter(2,fTau); signalF->SetParameter(3,fOrder); signalF->SetParameter(4,fgPedestal); for(Int_t itime = 0; itime < 256; itime++) { Double_t signal = signalF->Eval(itime); Double_t noise = gRandom->Gaus(0.,fgFEENoise); signal = sqrt(signal*signal + noise*noise); cout << "itime = " << itime << " highgain = " << signal << " signalI = " << static_cast(signal +0.5); if(static_cast(signal +0.5) > fgOverflow) { adcHigh->SetBinContent(itime+1,fgOverflow); } else { adcHigh->SetBinContent(itime+1,static_cast(signal +0.5)); } signal /= fHighLowGain; cout << " lowgain = " << signal << " signalI = " << static_cast(signal +0.5) << endl; if(static_cast(signal +0.5) > fgOverflow) { adcLow->SetBinContent(itime+1,fgOverflow); } else { adcLow->SetBinContent(itime+1,static_cast(signal +0.5)); } } TCanvas *c1 = new TCanvas("c1","c1",20,20,600,1000); c1->Divide(1,3); c1->cd(1); signalF->Draw(); c1->cd(2); adcHigh->Draw(); c1->cd(3); adcLow->Draw(); } Double_t RawResponseFunction(Double_t *x, Double_t *par) { Double_t signal ; Double_t tau =par[2]; Double_t N =par[3]; Double_t ped = par[4]; Double_t xx = ( x[0] - par[1] + tau ) / tau ; if (xx <= 0) signal = ped ; else { signal = ped + par[0] * TMath::Power(xx , N) * TMath::Exp(N * (1 - xx )) ; } return signal ; }