Elaborating split mode to write data only to the split files
[u/mrichter/AliRoot.git] / PHOS / AliPHOSDigitizer.h
1 #ifndef ALIPHOSDigitizer_H
2 #define ALIPHOSDigitizer_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 //_________________________________________________________________________
9 //  Task Class for making SDigits in PHOS      
10 // Class performs digitization of Summable digits (in the PHOS case this is just
11 // sum of contributions of all primary particles into given cell). 
12 // In addition it performs mixing of summable digits from different events.
13 //                  
14 //*-- Author: Dmitri Peressounko(SUBATECH & KI)
15
16
17 // --- ROOT system ---
18 #include "TObjString.h"
19 class TArrayI ;
20 class TClonesArray ; 
21
22 // --- Standard library ---
23
24 // --- AliRoot header files ---
25 #include "AliDigitizer.h"
26 class AliPHOSSDigitizer ;
27 class AliRunDigitizer ;
28
29 class AliPHOSDigitizer: public AliDigitizer {
30
31 public:
32   AliPHOSDigitizer() ;          // ctor
33   AliPHOSDigitizer(const char *headerFile, const char * name = "Default", const Bool_t toSplit = kFALSE ) ; 
34   AliPHOSDigitizer(AliRunDigitizer * ard) ;
35   AliPHOSDigitizer(const AliPHOSDigitizer & dtizer) 
36                   {( (AliPHOSDigitizer &)dtizer ).Copy(*this) ;} 
37   virtual ~AliPHOSDigitizer() ;       
38
39   void    Digitize(const Int_t event) ;            // Make Digits from SDigits 
40   void    Exec(Option_t *option);                  // Supervising method
41
42   //CPV parameters
43   const Float_t GetCPVNoise()     const { return fCPVNoise ;}
44   const Float_t GetCPVThreshold() const { return fCPVDigitThreshold ;}
45   const Float_t GetCPVchannel()   const { return fADCchanelCpv; }
46   const Float_t GetCPVpedestal()  const { return fADCpedestalCpv; }
47
48   void    SetCPVNoise(Float_t CPVNoise)          {fCPVNoise = CPVNoise;}
49   void    SetCPVThreshold(Float_t CPVThreshold)  {fCPVDigitThreshold= CPVThreshold;}
50   void    SetNCPVchannels(Int_t n)     { fNADCcpv = n; }
51   void    SetCPVchannel(Float_t width) { fADCchanelCpv = width; }
52   void    SetCPVpedestal(Float_t ped)  { fADCpedestalCpv = ped; }
53
54
55   //EMC parameters
56   const Float_t GetEMCThreshold() const { return fEMCDigitThreshold;}
57   const Float_t GetEMCchannel()   const { return fADCchanelEmc; }
58   const Float_t GetEMCpedestal()  const { return fADCpedestalEmc; }  
59   const Float_t GetPinNoise()     const { return fPinNoise;}
60   const Float_t GetTimeResolution() const { return fTimeResolution ; }
61
62   void   SetEMCThreshold(Float_t EMCThreshold)  {fEMCDigitThreshold = EMCThreshold;}
63   void   SetPinNoise(Float_t PinNoise )         {fPinNoise = PinNoise;}
64   void   SetNEMCchannels(Int_t n)      { fNADCemc = n; }
65   void   SetEMCchannel(Float_t width)  { fADCchanelEmc = width; }
66   void   SetEMCpedestal(Float_t ped)   { fADCpedestalEmc = ped ; }  
67   void   SetTimeResolution(Float_t res){ fTimeResolution = res ; }  
68
69   //General
70   const Int_t   GetDigitsInRun()  const { return fDigitsInRun ;}  
71   //  const TString GetHitsFileName() const { return fHitsFileName ; }
72   //  const TString GetSDigitsFileName() const { return fSDigitsFileName ; }
73
74   void    MixWith(const char* HeaderFile) ; // Add another one file to mix
75   void    Print(Option_t* option)const ;
76   // void    Reset() ;   //restarts starts event processing from 0 event(s)
77   //  void    SetSplitFile(const TString splitFileName = "PHOS.Digits.root") ;
78   // void    SetSDigitsBranch(const char* file) ;
79
80   AliPHOSDigitizer & operator = (const AliPHOSDigitizer & rvalue)  {
81     // assignement operator requested by coding convention but not needed
82     abort() ;
83     return *this ; 
84   }
85
86 private:
87
88   Bool_t  Init() ; 
89   void    InitParameters() ; 
90   void    PrintDigits(Option_t * option) ;
91   void    WriteDigits(Int_t evt) ;            // Writes Digits for particular event
92   Float_t TimeOfNoise(void) ;                 // Calculate time signal generated by noise
93   //Calculate the time of crossing of the threshold by front edge
94   Float_t FrontEdgeTime(TClonesArray * ticks) ; 
95   //Calculate digitized signal with gived ADC parameters
96   Int_t   DigitizeEnergy(Float_t energy, Int_t absId) ;
97
98 private:
99
100   //  TString fHitsFileName ;           // file name that contains the original hits
101   //  TString fSDigitsFileName ;        // file name that contains the original SDigits
102   Bool_t  fDefaultInit;             //! Says if the task was created by defaut ctor (only parameters are initialized)
103   Int_t   fEmcCrystals ;            // Number of EMC crystalls in the given geometry
104
105   Float_t fPinNoise ;               // Electronics noise in EMC
106   Float_t fEMCDigitThreshold  ;     // Threshold for storing digits in EMC
107
108   Float_t fCPVNoise ;               // Noise in CPV
109   Float_t fCPVDigitThreshold  ;     // Threshold for storing digits in CPV
110
111   Int_t fDigitsInRun ;              //! Total number of digits in one run
112
113   Float_t fTimeResolution ;         // Time resolution of FEE electronics
114   Float_t fTimeThreshold ;          // Threshold to start timing for given crystall
115   Float_t fTimeSignalLength ;       // Length of the timing signal 
116
117   Float_t fADCchanelEmc ;           // width of one ADC channel in GeV
118   Float_t fADCpedestalEmc ;         //
119   Int_t   fNADCemc ;                // number of channels in EMC ADC
120
121   Float_t fADCchanelCpv ;           // width of one ADC channel in CPV 'popugais'
122   Float_t fADCpedestalCpv ;         // 
123   Int_t   fNADCcpv ;                // number of channels in CPV ADC
124
125   Bool_t  fToSplit ;                //! Do we work in the split mode
126   TFile * fSplitFile ;              //! file in which Digits will eventually be stored
127
128
129   ClassDef(AliPHOSDigitizer,1)  // description 
130
131 };
132
133
134 #endif // AliPHOSDigitizer_H