X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONDigitizerV3.h;h=5c8a9c9877d6ed5fe14fb39a9fbc30154f8998d9;hb=db082d769c0f9984a3729617bcf56ccc3ac0cc6a;hp=b0acfb7e621354463ef137493f63df0ea1502ed8;hpb=ad26d4f6af64c548b0a309ebf2581b404c0f1286;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONDigitizerV3.h b/MUON/AliMUONDigitizerV3.h index b0acfb7e621..5c8a9c9877d 100644 --- a/MUON/AliMUONDigitizerV3.h +++ b/MUON/AliMUONDigitizerV3.h @@ -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 @@ -16,74 +16,86 @@ #include "AliDigitizer.h" #endif -#ifndef ROOT_TStopwatch -# include "TStopwatch.h" -#endif - class AliMUONCalibrationData; -class AliMUONData; -class AliMUONDigit; +class AliMUONVDigit; class AliMUONLogger; -class AliMUONTriggerEfficiencyCells; class TClonesArray; class TF1; class TString; +class AliMUONVDigitStore; +class AliLoader; +class AliMUONVTriggerStore; +class AliMUONTriggerElectronics; +class AliMUONVCalibParam; class AliMUONDigitizerV3 : public AliDigitizer { public: AliMUONDigitizerV3(AliRunDigitizer* manager=0, - 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, + Bool_t noiseOnly=kFALSE); + + /// Set calibration data + void SetCalibrationData(AliMUONCalibrationData* calibrationData) + {fCalibrationData = calibrationData;} + + /// 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 ApplyResponseToTrackerDigit(AliMUONDigit& digit, Bool_t addNoise); - void ApplyResponseToTriggerDigit(AliMUONDigit& digit); + void ApplyResponseToTrackerDigit(AliMUONVDigit& digit, Bool_t addNoise); -private: - AliMUONDigit* FindCorrespondingDigit(AliMUONDigit& digit) 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); + static TF1* NoiseFunction(); + + void CreateInputDigitStores(); + 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 - 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() - 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 - static const Double_t fgkNSigmas; ///< \brief number of sigmas above ped to use + 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; ///