-//__________________________________________________________________
-Double_t AliPHOS::RawResponseFunction(Double_t *x, Double_t *par)
-{
- // Shape of the electronics raw reponse:
- // It is a semi-gaussian, 2nd order Gamma function of the general form
- // v(t) = n**n * Q * A**n / C *(t/tp)**n * exp(-n * t/tp) with
- // tp : peaking time par[0]
- // n : order of the function
- // C : integrating capacitor in the preamplifier
- // A : open loop gain of the preamplifier
- // Q : the total APD charge to be measured Q = C * energy
-
- Double_t signal ;
- Double_t xx = x[0] - ( fgTimeTrigger + par[3] ) ;
-
- if (xx < 0 || xx > fgTimeMax)
- signal = 0. ;
- else {
- Double_t fac = par[0] * TMath::Power(fgOrder, fgOrder) * TMath::Power(par[1], fgOrder) / fgCapa ;
- signal = fac * par[2] * TMath::Power(xx / fgTimePeak, fgOrder) * TMath::Exp(-fgOrder * (xx / fgTimePeak)) ;
- }
- return signal ;
-}
-
-//__________________________________________________________________
-Double_t AliPHOS::RawResponseFunctionMax(Double_t charge, Double_t gain)
-{
- return ( charge * TMath::Power(fgOrder, fgOrder) * TMath::Power(gain, fgOrder)
- / ( fgCapa * TMath::Exp(fgOrder) ) );
-
-}
-
-//__________________________________________________________________
-Bool_t AliPHOS::RawSampledResponse(Double_t dtime, Double_t damp, Int_t * adcH, Int_t * adcL) const
-{
- // for a start time dtime and an amplitude damp given by digit,
- // calculates the raw sampled response AliPHOS::RawResponseFunction
- // Input: dtime - signal start time
- // damp - signal amplitude (energy)
- // Output: adcH - array[fkTimeBins] of 10-bit samples for high-gain channel
- // adcL - array[fkTimeBins] of 10-bit samples for low-gain channel
-
- const Int_t kRawSignalOverflow = 0x3FF ;
- Bool_t lowGain = kFALSE ;
-
- TF1 signalF("signal", RawResponseFunction, 0, GetRawFormatTimeMax(), 4);
-
- for (Int_t iTime = 0; iTime < GetRawFormatTimeBins(); iTime++) {
- signalF.SetParameter(0, GetRawFormatHighCharge() ) ;
- signalF.SetParameter(1, GetRawFormatHighGain() ) ;
- signalF.SetParameter(2, damp) ;
- signalF.SetParameter(3, dtime) ;
- Double_t time = iTime * GetRawFormatTimeMax() / GetRawFormatTimeBins() ;
- Double_t signal = signalF.Eval(time) ;
- if ( static_cast<Int_t>(signal+0.5) > kRawSignalOverflow ){ // larger than 10 bits
- signal = kRawSignalOverflow ;
- lowGain = kTRUE ;
- }
- adcH[iTime] = static_cast<Int_t>(signal + 0.5) ;
-
- signalF.SetParameter(0, GetRawFormatLowCharge() ) ;
- signalF.SetParameter(1, GetRawFormatLowGain() ) ;
- signal = signalF.Eval(time) ;
- if ( static_cast<Int_t>(signal+0.5) > kRawSignalOverflow) // larger than 10 bits
- signal = kRawSignalOverflow ;
- adcL[iTime] = static_cast<Int_t>(0.5 + signal ) ;
-
- }
- return lowGain ;
-}
-