Applying the trigger chamber response to the cluster and not to each pad
[u/mrichter/AliRoot.git] / MUON / AliMUONDigitizerV3.h
index 9fea4b7..73577ae 100644 (file)
@@ -7,7 +7,7 @@
 /// \class AliMUONDigitizerV3
 /// \brief Digitizer (from SDigit to Digit), performing digit de-calibration.
 ///
-/// \author Laurent Aphecetche
+//  Author Laurent Aphecetche
 
 #ifndef ALIMUONDIGITIZERV3_H
 #define ALIMUONDIGITIZERV3_H
 #include "AliDigitizer.h"
 #endif
 
-#ifndef ROOT_TStopwatch
-#  include "TStopwatch.h"
-#endif
-
 class AliMUONCalibrationData;
-class AliMUONData;
-class AliMUONDigit;
-class AliMUONTriggerEfficiencyCells;
+class AliMUONVDigit;
+class AliMUONLogger;
 class TClonesArray;
 class TF1;
 class TString;
+class AliMUONVDigitStore;
+class AliLoader;
+class AliMUONVTriggerStore;
+class AliMUONTriggerElectronics;
+class AliMUONVCalibParam;
 
 class AliMUONDigitizerV3 : public AliDigitizer
 {
 public:
-  enum ETriggerCodeVersion
-  {
-    kTriggerDecision=-1,
-    kTriggerElectronics
-  };
-  
   AliMUONDigitizerV3(AliRunDigitizer* manager=0, 
-                     ETriggerCodeVersion=kTriggerDecision,
-                     Bool_t useTriggerEfficiency=kFALSE,
-                     Bool_t generateNoisyDigits=kTRUE);
+                     Int_t generateNoisyDigits=1);
   virtual ~AliMUONDigitizerV3();
 
   virtual void Exec(Option_t* opt="");
   
   virtual Bool_t Init();
 
+  static Int_t DecalibrateTrackerDigit(const AliMUONVCalibParam& pedestals,
+                                       const AliMUONVCalibParam& gains,
+                                       Int_t channel,
+                                       Float_t charge,
+                                       Bool_t addNoise=kFALSE);
+  
 private:
-    
+  /// Not implemented
   AliMUONDigitizerV3(const AliMUONDigitizerV3& other);
+  /// Not implemented
   AliMUONDigitizerV3& operator=(const AliMUONDigitizerV3& other);
-  
-  void AddOrUpdateDigit(TClonesArray& array, 
-                        const AliMUONDigit& digit);
     
-  void ApplyResponse();
+  void ApplyResponse(const AliMUONVDigitStore& store, AliMUONVDigitStore& filteredStore);
 
-  void ApplyResponseToTrackerDigit(AliMUONDigit& digit, Bool_t addNoise);
-  void ApplyResponseToTriggerDigit(AliMUONDigit& digit, AliMUONData* data);
+  void ApplyResponseToTrackerDigit(AliMUONVDigit& digit, Bool_t addNoise);
 
-private:  
-  AliMUONDigit* FindCorrespondingDigit(AliMUONDigit& digit,AliMUONData* data) const;
+  AliLoader* GetLoader(const TString& foldername);
   
-  Int_t FindDigitIndex(TClonesArray& array, const AliMUONDigit& digit) const;
-
-  void GenerateNoisyDigits();
-  void GenerateNoisyDigitsForOneCathode(Int_t detElemId, Int_t cathode);
-
-  AliMUONData* GetDataAccess(const TString& folderName);
+private:  
 
-  Bool_t MergeDigits(const AliMUONDigit& src, AliMUONDigit& srcAndDest);
+  void GenerateNoisyDigits(AliMUONVDigitStore& digitStore);
+  void GenerateNoisyDigitsForOneCathode(AliMUONVDigitStore& digitStore, 
+                                        Int_t detElemId, Int_t cathode);
+  void GenerateNoisyDigitsForTrigger(AliMUONVDigitStore& digitStore);
 
-  void MergeWithSDigits(AliMUONData& outputData, const AliMUONData& inputData, 
+  void MergeWithSDigits(AliMUONVDigitStore*& digitStore,
+                        const AliMUONVDigitStore& input,
                         Int_t mask);
   
 private:
   Bool_t fIsInitialized; ///< are we initialized ?
-  AliMUONData* fOutputData; //!< pointer to access digits
   AliMUONCalibrationData* fCalibrationData; //!< pointer to access calib parameters
-  TTask* fTriggerProcessor; ///< pointer to the trigger part of the job
-  ETriggerCodeVersion fTriggerCodeVersion; ///< which version of trigger job
-  Bool_t fUseTriggerEfficiency; ///< whether or not we should apply trigger efficiency
-  AliMUONTriggerEfficiencyCells* fTriggerEfficiency; ///< trigger efficiency map  
-  mutable TStopwatch fFindDigitIndexTimer; //!< counting time spent in FindDigitIndex
-  TStopwatch fGenerateNoisyDigitsTimer; //!< counting time spent in GenerateNoisyDigits()
-  TStopwatch fExecTimer; //!< couting time spent in Exec()  
+  AliMUONTriggerElectronics* fTriggerProcessor; ///< pointer to the trigger part of the job
   TF1* fNoiseFunction; //!< function to randomly get signal above n*sigma_ped
-  Bool_t fGenerateNoisyDigits; //!< whether or not we should generate noise-only digits for tracker
+  TF1* fNoiseFunctionTrig; //!< function to get noise disribution on trig. chambers
+  Int_t fGenerateNoisyDigits; //!< whether or not we should generate noise-only digits for tracker (1) and trigger (2)
   static const Double_t fgkNSigmas; ///< \brief number of sigmas above ped to use 
   /// for noise-only digit generation and zero-suppression
-
-  ClassDef(AliMUONDigitizerV3,3) // MUON Digitizer V3-3
+  AliMUONLogger* fLogger; //!< to keep track of messages
+  AliMUONVTriggerStore* fTriggerStore; //!< trigger objects
+  AliMUONVDigitStore* fDigitStore; //!< temporary digits
+  AliMUONVDigitStore* fOutputDigitStore; //!< digits we'll output to disk
+  
+  ClassDef(AliMUONDigitizerV3,6) // MUON Digitizer V3-5
 };
 
 #endif