- Disentangle masks effect from trigger chamber efficiency estimation.
[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 #include "TArrayI.h"
20
21 class AliMUONCalibrationData;
22 class AliMUONVDigit;
23 class AliMUONLogger;
24 class TClonesArray;
25 class TF1;
26 class TString;
27 class AliMUONVDigitStore;
28 class AliLoader;
29 class AliMUONVTriggerStore;
30 class AliMUONTriggerElectronics;
31 class AliMUONVCalibParam;
32 class AliMUONTriggerChamberEfficiency;
33 class AliMUONTriggerUtilities;
34
35 class AliMUONDigitizerV3 : public AliDigitizer
36 {
37 public:
38   AliMUONDigitizerV3(AliRunDigitizer* manager=0, 
39                      Int_t generateNoisyDigits=1);
40   
41   virtual ~AliMUONDigitizerV3();
42
43   virtual void Exec(Option_t* opt="");
44   
45   virtual Bool_t Init();
46
47   static Int_t DecalibrateTrackerDigit(const AliMUONVCalibParam& pedestals,
48                                        const AliMUONVCalibParam& gains,
49                                        Int_t channel,
50                                        Float_t charge,
51                                        Bool_t addNoise=kFALSE,
52                                        Bool_t noiseOnly=kFALSE);
53   
54   /// Set calibration data
55   void SetCalibrationData(AliMUONCalibrationData* calibrationData) 
56                           {fCalibrationData = calibrationData;}
57
58   /// Set the number of sigmas for pedestal cut
59   static void SetNSigmas(Double_t nsigmas=4.0) { fgNSigmas = nsigmas; }
60
61 private:
62   /// Not implemented
63   AliMUONDigitizerV3(const AliMUONDigitizerV3& other);
64   /// Not implemented
65   AliMUONDigitizerV3& operator=(const AliMUONDigitizerV3& other);
66     
67   void ApplyResponse(const AliMUONVDigitStore& store, AliMUONVDigitStore& filteredStore);
68
69   void ApplyResponseToTrackerDigit(AliMUONVDigit& digit, Bool_t addNoise);
70   void ApplyResponseToTriggerDigit(AliMUONVDigit& digit);
71
72   AliLoader* GetLoader(const TString& foldername);
73   
74 private:  
75
76   void GenerateNoisyDigits(AliMUONVDigitStore& digitStore);
77   void GenerateNoisyDigitsForOneCathode(AliMUONVDigitStore& digitStore, 
78                                         Int_t detElemId, Int_t cathode);
79   void GenerateNoisyDigitsForTrigger(AliMUONVDigitStore& digitStore);
80
81   void MergeWithSDigits(AliMUONVDigitStore*& digitStore,
82                         const AliMUONVDigitStore& input,
83                         Int_t mask);
84   
85   static TF1* NoiseFunction();
86   
87   void CreateInputDigitStores();
88   
89   void BuildTriggerStatusMap();
90   Int_t GetArrayIndex(Int_t cathode, Int_t trigCh, Int_t localCircuit);
91
92 private:
93   Bool_t fIsInitialized; ///< are we initialized ?
94   AliMUONCalibrationData* fCalibrationData; //!< pointer to access calib parameters
95   AliMUONTriggerElectronics* fTriggerProcessor; ///< pointer to the trigger part of the job
96   TF1* fNoiseFunctionTrig; //!< function to get noise disribution on trig. chambers
97   Int_t fGenerateNoisyDigits; //!< whether or not we should generate noise-only digits for tracker (1) and trigger (2)
98   static Double_t fgNSigmas; ///< \brief number of sigmas above ped to use 
99   /// for noise-only digit generation and zero-suppression
100   AliMUONLogger* fLogger; //!< to keep track of messages
101   AliMUONVTriggerStore* fTriggerStore; //!< trigger objects
102   AliMUONVDigitStore* fDigitStore; //!< temporary digits
103   AliMUONVDigitStore* fOutputDigitStore; //!< digits we'll output to disk
104   TObjArray* fInputDigitStores; //!< input digit stores (one per input file
105   AliMUONTriggerChamberEfficiency* fTriggerEfficiency; //!< trigger efficiency map
106   AliMUONTriggerUtilities* fTriggerUtilities; //!< Trigger utilities for masks
107   TArrayI fEfficiencyResponse; //!< Local board efficiency response
108   
109   ClassDef(AliMUONDigitizerV3,10) // MUON Digitizer V3-9
110 };
111
112 #endif