]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONDigitizerV3.h
Coding conventions (Laurent)
[u/mrichter/AliRoot.git] / MUON / AliMUONDigitizerV3.h
1 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
2 * See cxx source for full Copyright notice                               */
3
4 // $Id$
5
6 /// \ingroup sim
7 /// \class AliMUONDigitizerV3
8 /// \brief Digitizer (from SDigit to Digit), performing digit de-calibration.
9 ///
10 /// \author Laurent Aphecetche
11
12 #ifndef ALIMUONDIGITIZERV3_H
13 #define ALIMUONDIGITIZERV3_H
14
15 #ifndef ALIDIGITIZER_H
16 #include "AliDigitizer.h"
17 #endif
18
19 #ifndef ROOT_TStopwatch
20 #  include "TStopwatch.h"
21 #endif
22
23 class AliMUONCalibrationData;
24 class AliMUONData;
25 class AliMUONDigit;
26 class AliMUONTriggerEfficiencyCells;
27 class TClonesArray;
28 class TF1;
29 class TString;
30
31 class AliMUONDigitizerV3 : public AliDigitizer
32 {
33 public:
34   enum ETriggerCodeVersion
35   {
36     kTriggerDecision=-1,
37     kTriggerElectronics
38   };
39   
40   AliMUONDigitizerV3(AliRunDigitizer* manager=0, 
41                      ETriggerCodeVersion=kTriggerDecision,
42                      Bool_t useTriggerEfficiency=kFALSE,
43                      Bool_t generateNoisyDigits=kTRUE);
44   virtual ~AliMUONDigitizerV3();
45
46   virtual void Exec(Option_t* opt="");
47   
48   virtual Bool_t Init();
49
50 private:
51     
52   AliMUONDigitizerV3(const AliMUONDigitizerV3& other);
53   AliMUONDigitizerV3& operator=(const AliMUONDigitizerV3& other);
54   
55   void AddOrUpdateDigit(TClonesArray& array, 
56                         const AliMUONDigit& digit);
57     
58   void ApplyResponse();
59
60   void ApplyResponseToTrackerDigit(AliMUONDigit& digit, Bool_t addNoise);
61   void ApplyResponseToTriggerDigit(AliMUONDigit& digit, AliMUONData* data);
62
63 private:  
64   AliMUONDigit* FindCorrespondingDigit(AliMUONDigit& digit,AliMUONData* data) const;
65   
66   Int_t FindDigitIndex(TClonesArray& array, const AliMUONDigit& digit) const;
67
68   void GenerateNoisyDigits();
69   void GenerateNoisyDigitsForOneCathode(Int_t detElemId, Int_t cathode);
70
71   AliMUONData* GetDataAccess(const TString& folderName);
72
73   Bool_t MergeDigits(const AliMUONDigit& src, AliMUONDigit& srcAndDest);
74
75   void MergeWithSDigits(AliMUONData& outputData, const AliMUONData& inputData, 
76                         Int_t mask);
77   
78 private:
79   Bool_t fIsInitialized; // are we initialized ?
80   AliMUONData* fOutputData; //! pointer to access digits
81   AliMUONCalibrationData* fCalibrationData; //! pointer to access calib parameters
82   TTask* fTriggerProcessor; // pointer to the trigger part of the job
83   ETriggerCodeVersion fTriggerCodeVersion; // which version of trigger job
84   Bool_t fUseTriggerEfficiency; // whether or not we should apply trigger efficiency
85   AliMUONTriggerEfficiencyCells* fTriggerEfficiency; // trigger efficiency map  
86   mutable TStopwatch fFindDigitIndexTimer; //! counting time spent in FindDigitIndex
87   TStopwatch fGenerateNoisyDigitsTimer; //! counting time spent in GenerateNoisyDigits()
88   TStopwatch fExecTimer; //! couting time spent in Exec()  
89   TF1* fNoiseFunction; //! function to randomly get signal above n*sigma_ped
90   Bool_t fGenerateNoisyDigits; //! whether or not we should generate noise-only digits for tracker
91   static const Double_t fgkNSigmas; // number of sigmas above ped to use 
92   // for noise-only digit generation and zero-suppression
93
94   ClassDef(AliMUONDigitizerV3,3) // MUON Digitizer V3-3
95 };
96
97 #endif