e63929716a85309d176019f3145240e39ca42d3f
[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 class AliMUONCalibrationData;
20 class AliMUONVDigit;
21 class AliMUONLogger;
22 class AliMUONTriggerEfficiencyCells;
23 class TClonesArray;
24 class TF1;
25 class TString;
26 class AliMUONVDigitStore;
27 class AliLoader;
28 class AliMUONVTriggerStore;
29 class AliMUONTriggerElectronics;
30 class AliMUONVCalibParam;
31
32 class AliMUONDigitizerV3 : public AliDigitizer
33 {
34 public:
35   AliMUONDigitizerV3(AliRunDigitizer* manager=0, 
36                      Int_t generateNoisyDigits=1);
37   virtual ~AliMUONDigitizerV3();
38
39   virtual void Exec(Option_t* opt="");
40   
41   virtual Bool_t Init();
42
43   static Int_t DecalibrateTrackerDigit(const AliMUONVCalibParam& pedestals,
44                                        const AliMUONVCalibParam& gains,
45                                        Int_t channel,
46                                        Float_t charge,
47                                        Bool_t addNoise=kFALSE);
48   
49 private:
50   /// Not implemented
51   AliMUONDigitizerV3(const AliMUONDigitizerV3& other);
52   /// Not implemented
53   AliMUONDigitizerV3& operator=(const AliMUONDigitizerV3& other);
54     
55   void ApplyResponse(const AliMUONVDigitStore& store, AliMUONVDigitStore& filteredStore);
56
57   void ApplyResponseToTrackerDigit(AliMUONVDigit& digit, Bool_t addNoise);
58   void ApplyResponseToTriggerDigit(const AliMUONVDigitStore& digitStore, AliMUONVDigit& digit);
59
60   AliLoader* GetLoader(const TString& foldername);
61   
62 private:  
63
64   AliMUONVDigit* FindCorrespondingDigit(const AliMUONVDigitStore& digitStore,
65                                        AliMUONVDigit& digit) const;
66
67   void GenerateNoisyDigits(AliMUONVDigitStore& digitStore);
68   void GenerateNoisyDigitsForOneCathode(AliMUONVDigitStore& digitStore, 
69                                         Int_t detElemId, Int_t cathode);
70   void GenerateNoisyDigitsForTrigger(AliMUONVDigitStore& digitStore);
71
72   void MergeWithSDigits(AliMUONVDigitStore*& digitStore,
73                         const AliMUONVDigitStore& input,
74                         Int_t mask);
75   
76 private:
77   Bool_t fIsInitialized; ///< are we initialized ?
78   AliMUONCalibrationData* fCalibrationData; //!< pointer to access calib parameters
79   AliMUONTriggerElectronics* fTriggerProcessor; ///< pointer to the trigger part of the job
80   AliMUONTriggerEfficiencyCells* fTriggerEfficiency; ///< trigger efficiency map  
81   TF1* fNoiseFunction; //!< function to randomly get signal above n*sigma_ped
82   TF1* fNoiseFunctionTrig; //!< function to get noise disribution on trig. chambers
83   Int_t fGenerateNoisyDigits; //!< whether or not we should generate noise-only digits for tracker (1) and trigger (2)
84   static const Double_t fgkNSigmas; ///< \brief number of sigmas above ped to use 
85   /// for noise-only digit generation and zero-suppression
86   AliMUONLogger* fLogger; //!< to keep track of messages
87   AliMUONVTriggerStore* fTriggerStore; //!< trigger objects
88   AliMUONVDigitStore* fDigitStore; //!< temporary digits
89   AliMUONVDigitStore* fOutputDigitStore; //!< digits we'll output to disk
90   
91   ClassDef(AliMUONDigitizerV3,6) // MUON Digitizer V3-5
92 };
93
94 #endif