put back previous default value, although decission needs to be made to which one...
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALRawResponse.cxx
1 // -*- mode: c++ -*-
2
3 /**************************************************************************
4  * This file is property of and copyright by the Experimental Nuclear     *
5  * Physics Group, Dep. of Physics                                         *
6  * University of Oslo, Norway, 2007                                       *
7  *                                                                        *
8  * Author: Per Thomas Hille <perthi@fys.uio.no> for the ALICE HLT Project.*
9  * Contributors are mentioned in the code where appropriate.              *
10  * Please report bugs to perthi@fys.uio.no                                *
11  *                                                                        *
12  * Permission to use, copy, modify and distribute this software and its   *
13  * documentation strictly for non-commercial purposes is hereby granted   *
14  * without fee, provided that the above copyright notice appears in all   *
15  * copies and that both the copyright notice and this permission notice   *
16  * appear in the supporting documentation. The authors make no claims     *
17  * about the suitability of this software for any purpose. It is          *
18  * provided "as is" without express or implied warranty.                  *
19  **************************************************************************/
20
21 #include "TF1.h"
22 #include "TMath.h"
23 #include <TRandom.h>
24
25 #include "AliEMCALRawResponse.h"
26 #include "AliCaloConstants.h"
27
28 using namespace CALO;
29 using namespace EMCAL;
30 using namespace ALTRO;
31
32 Double_t AliEMCALRawResponse::fgTimeTrigger  = 600E-9 ;   // the time of the trigger as approximately seen in the data
33 Int_t    AliEMCALRawResponse::fgThreshold         = 1;
34 Int_t    AliEMCALRawResponse::fgPedestalValue     = 0;  // pedestal value for digits2raw, default generate ZS data
35 Double_t AliEMCALRawResponse::fgFEENoise          = 3.; // 3 ADC channels of noise (sampled)
36
37
38
39 ClassImp(AliEMCALRawResponse)
40
41
42 AliEMCALRawResponse::AliEMCALRawResponse()
43 {
44   //comment
45 }
46
47 AliEMCALRawResponse::~AliEMCALRawResponse()
48 {
49
50 }
51
52
53 Double_t 
54 AliEMCALRawResponse::RawResponseFunction(Double_t *x, Double_t *par)
55 {
56   // step response of the emcal electronincs
57   Double_t signal = 0.;
58   Double_t tau    = par[2];
59   Double_t n      = par[3];
60   Double_t ped    = par[4];
61   Double_t xx     = ( x[0] - par[1] + tau ) / tau ;
62   if (xx <= 0) 
63     signal = ped ;  
64   else 
65     {  
66       signal = ped + par[0] * TMath::Power(xx , n) * TMath::Exp(n * (1 - xx )) ; 
67     }
68   return signal ;  
69 }
70
71
72 Bool_t  
73 AliEMCALRawResponse::RawSampledResponse(const Double_t dtime, const Double_t damp, Int_t * adcH, 
74                                             Int_t * adcL, const Int_t keyErr)
75 {
76   // step response of the emcal electronincs
77   Bool_t lowGain = kFALSE ; 
78   TF1 signalF("signal", RawResponseFunction, 0, TIMEBINS, 5);
79   signalF.SetParameter(0, damp) ; 
80   signalF.SetParameter(1, (dtime + fgTimeTrigger)/ TIMEBINWITH) ; 
81   signalF.SetParameter(2, TAU) ; 
82   signalF.SetParameter(3, ORDER);
83   signalF.SetParameter(4, fgPedestalValue);
84         
85   Double_t signal=0.0, noise=0.0;
86   for (Int_t iTime = 0; iTime <  TIMEBINS; iTime++) {
87     signal = signalF.Eval(iTime) ;  
88     
89     if(keyErr>0) {
90       noise = gRandom->Gaus(0.,fgFEENoise);
91       signal += noise; 
92     }
93           
94     adcH[iTime] =  static_cast<Int_t>(signal + 0.5) ;
95     if ( adcH[iTime] > MAXBINVALUE ){  // larger than 10 bits 
96       adcH[iTime] = MAXBINVALUE ;
97       lowGain = kTRUE ; 
98     }
99     signal /= HGLGFACTOR;
100     adcL[iTime] =  static_cast<Int_t>(signal + 0.5) ;
101     if ( adcL[iTime] > MAXBINVALUE )  // larger than 10 bits 
102       adcL[iTime] = MAXBINVALUE ;
103   }
104   return lowGain ; 
105 }
106