/// \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
+#include "TArrayI.h"
+
class AliMUONCalibrationData;
-class AliMUONData;
-class AliMUONDigit;
+class AliMUONVDigit;
+class AliMUONLogger;
class TClonesArray;
+class TF1;
class TString;
+class AliMUONVDigitStore;
+class AliLoader;
+class AliMUONVTriggerStore;
+class AliMUONTriggerElectronics;
+class AliMUONVCalibParam;
+class AliMUONRecoParam;
+class AliMUONTriggerChamberEfficiency;
+class AliMUONTriggerUtilities;
class AliMUONDigitizerV3 : public AliDigitizer
{
public:
- enum ETriggerCodeVersion
- {
- kTriggerDecision=-1,
- kTriggerElectronics
- };
+ AliMUONDigitizerV3(AliDigitizationInput* digInput=0,
+ Int_t generateNoisyDigits=1);
- AliMUONDigitizerV3(AliRunDigitizer* manager=0,
- ETriggerCodeVersion=kTriggerDecision);
virtual ~AliMUONDigitizerV3();
- virtual void Exec(Option_t* opt="");
+ virtual void Digitize(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,
+ Bool_t noiseOnly=kFALSE,
+ const TString& calibrationMode="NOGAIN");
+
+ /// Set calibration (and recoparam) data
+ void SetCalibrationData(AliMUONCalibrationData* calibrationData, AliMUONRecoParam* recoParam);
+
+ /// Set the number of sigmas for pedestal cut
+ static void SetNSigmas(Double_t nsigmas=4.0) { fgNSigmas = nsigmas; }
+
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 ApplyResponseToDigit(AliMUONDigit& digit);
+ void ApplyResponseToTrackerDigit(AliMUONVDigit& digit, Bool_t addNoise);
+ void ApplyResponseToTriggerDigit(AliMUONVDigit& digit);
- Int_t FindDigitIndex(TClonesArray& array, const AliMUONDigit& digit);
-
- AliMUONData* GetDataAccess(const TString& folderName);
+ AliLoader* GetLoader(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);
+ static TF1* NoiseFunction();
+
+ void CreateInputDigitStores();
+
+ void BuildTriggerStatusMap();
+ Int_t GetArrayIndex(Int_t cathode, Int_t trigCh, Int_t localCircuit);
+
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 fIsInitialized; ///< are we initialized ?
+ AliMUONCalibrationData* fCalibrationData; //!< pointer to access calib parameters
+ AliMUONTriggerElectronics* fTriggerProcessor; ///< pointer to the trigger part of the job
+ 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 Double_t fgNSigmas; ///< \brief number of sigmas above ped to use
+ /// for noise-only digit generation and zero-suppression
+ AliMUONLogger* fLogger; //!< to keep track of messages
+ AliMUONVTriggerStore* fTriggerStore; //!< trigger objects
+ AliMUONVDigitStore* fDigitStore; //!< temporary digits
+ AliMUONVDigitStore* fOutputDigitStore; //!< digits we'll output to disk
+ TObjArray* fInputDigitStores; //!< input digit stores (one per input file
+ AliMUONRecoParam* fRecoParam; //!< reco params (to know how to decalibrate) (not owner)
+ AliMUONTriggerChamberEfficiency* fTriggerEfficiency; //!< trigger efficiency map
+ AliMUONTriggerUtilities* fTriggerUtilities; //!< Trigger utilities for masks
+ TArrayI fEfficiencyResponse; //!< Local board efficiency response
- ClassDef(AliMUONDigitizerV3,2) // MUON Digitizer V3-2
+ ClassDef(AliMUONDigitizerV3,11) // MUON Digitizer V3-11
};
#endif