Updated for separation of simulation and reconstruction classes
[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 AliMUONSimData;
25 class AliMUONDigit;
26 class AliMUONLogger;
27 class AliMUONTriggerEfficiencyCells;
28 class TClonesArray;
29 class TF1;
30 class TString;
31
32 class AliMUONDigitizerV3 : public AliDigitizer
33 {
34 public:
35   AliMUONDigitizerV3(AliRunDigitizer* manager=0, 
36                      Bool_t generateNoisyDigits=kTRUE);
37   virtual ~AliMUONDigitizerV3();
38
39   virtual void Exec(Option_t* opt="");
40   
41   virtual Bool_t Init();
42
43 private:
44   /// Not implemented
45   AliMUONDigitizerV3(const AliMUONDigitizerV3& other);
46   /// Not implemented
47   AliMUONDigitizerV3& operator=(const AliMUONDigitizerV3& other);
48   
49   void AddOrUpdateDigit(TClonesArray& array, 
50                         const AliMUONDigit& digit);
51     
52   void ApplyResponse();
53
54   void ApplyResponseToTrackerDigit(AliMUONDigit& digit, Bool_t addNoise);
55   void ApplyResponseToTriggerDigit(AliMUONDigit& digit);
56
57 private:  
58   AliMUONDigit* FindCorrespondingDigit(AliMUONDigit& digit) const;
59   
60   Int_t FindDigitIndex(TClonesArray& array, const AliMUONDigit& digit) const;
61
62   void GenerateNoisyDigits();
63   void GenerateNoisyDigitsForOneCathode(Int_t detElemId, Int_t cathode);
64
65   AliMUONSimData* GetDataAccess(const TString& folderName);
66
67   Bool_t MergeDigits(const AliMUONDigit& src, AliMUONDigit& srcAndDest);
68
69   void MergeWithSDigits(AliMUONSimData& outputData, const AliMUONSimData& inputData, 
70                         Int_t mask);
71   
72 private:
73   Bool_t fIsInitialized; ///< are we initialized ?
74   AliMUONSimData* fOutputData; //!< pointer to access digits
75   AliMUONCalibrationData* fCalibrationData; //!< pointer to access calib parameters
76   TTask* fTriggerProcessor; ///< pointer to the trigger part of the job
77   AliMUONTriggerEfficiencyCells* fTriggerEfficiency; ///< trigger efficiency map  
78   mutable TStopwatch fFindDigitIndexTimer; //!< counting time spent in FindDigitIndex
79   TStopwatch fGenerateNoisyDigitsTimer; //!< counting time spent in GenerateNoisyDigits()
80   TStopwatch fExecTimer; //!< couting time spent in Exec()  
81   TF1* fNoiseFunction; //!< function to randomly get signal above n*sigma_ped
82   Bool_t fGenerateNoisyDigits; //!< whether or not we should generate noise-only digits for tracker
83   static const Double_t fgkNSigmas; ///< \brief number of sigmas above ped to use 
84   /// for noise-only digit generation and zero-suppression
85   AliMUONLogger* fLogger; //!< to keep track of messages
86   
87   ClassDef(AliMUONDigitizerV3,4) // MUON Digitizer V3-3
88 };
89
90 #endif