#ifndef ALIMUONDIGITIZERV3_H
#define ALIMUONDIGITIZERV3_H
#ifndef ALIDIGITIZER_H
#include "AliDigitizer.h"
#endif
#include "TArrayI.h"
class AliMUONCalibrationData;
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:
AliMUONDigitizerV3(AliDigitizationInput* digInput=0,
Int_t generateNoisyDigits=1);
virtual ~AliMUONDigitizerV3();
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");
void SetCalibrationData(AliMUONCalibrationData* calibrationData, AliMUONRecoParam* recoParam);
static void SetNSigmas(Double_t nsigmas=4.0) { fgNSigmas = nsigmas; }
private:
AliMUONDigitizerV3(const AliMUONDigitizerV3& other);
AliMUONDigitizerV3& operator=(const AliMUONDigitizerV3& other);
void ApplyResponse(const AliMUONVDigitStore& store, AliMUONVDigitStore& filteredStore);
void ApplyResponseToTrackerDigit(AliMUONVDigit& digit, Bool_t addNoise);
void ApplyResponseToTriggerDigit(AliMUONVDigit& digit);
AliLoader* GetLoader(const TString& foldername);
private:
void GenerateNoisyDigits(AliMUONVDigitStore& digitStore);
void GenerateNoisyDigitsForOneCathode(AliMUONVDigitStore& digitStore,
Int_t detElemId, Int_t cathode);
void GenerateNoisyDigitsForTrigger(AliMUONVDigitStore& digitStore);
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;
AliMUONCalibrationData* fCalibrationData;
AliMUONTriggerElectronics* fTriggerProcessor;
TF1* fNoiseFunctionTrig;
Int_t fGenerateNoisyDigits;
static Double_t fgNSigmas;
AliMUONLogger* fLogger;
AliMUONVTriggerStore* fTriggerStore;
AliMUONVDigitStore* fDigitStore;
AliMUONVDigitStore* fOutputDigitStore;
TObjArray* fInputDigitStores;
AliMUONRecoParam* fRecoParam;
AliMUONTriggerChamberEfficiency* fTriggerEfficiency;
AliMUONTriggerUtilities* fTriggerUtilities;
TArrayI fEfficiencyResponse;
ClassDef(AliMUONDigitizerV3,11)
};
#endif