ROOT logo
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
* See cxx source for full Copyright notice                               */

// $Id$

/// \ingroup sim
/// \class AliMUONDigitizerV3
/// \brief Digitizer (from SDigit to Digit), performing digit de-calibration.
///
//  Author Laurent Aphecetche

#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");
  
  /// 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 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; ///< 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,11) // MUON Digitizer V3-11
};

#endif
 AliMUONDigitizerV3.h:1
 AliMUONDigitizerV3.h:2
 AliMUONDigitizerV3.h:3
 AliMUONDigitizerV3.h:4
 AliMUONDigitizerV3.h:5
 AliMUONDigitizerV3.h:6
 AliMUONDigitizerV3.h:7
 AliMUONDigitizerV3.h:8
 AliMUONDigitizerV3.h:9
 AliMUONDigitizerV3.h:10
 AliMUONDigitizerV3.h:11
 AliMUONDigitizerV3.h:12
 AliMUONDigitizerV3.h:13
 AliMUONDigitizerV3.h:14
 AliMUONDigitizerV3.h:15
 AliMUONDigitizerV3.h:16
 AliMUONDigitizerV3.h:17
 AliMUONDigitizerV3.h:18
 AliMUONDigitizerV3.h:19
 AliMUONDigitizerV3.h:20
 AliMUONDigitizerV3.h:21
 AliMUONDigitizerV3.h:22
 AliMUONDigitizerV3.h:23
 AliMUONDigitizerV3.h:24
 AliMUONDigitizerV3.h:25
 AliMUONDigitizerV3.h:26
 AliMUONDigitizerV3.h:27
 AliMUONDigitizerV3.h:28
 AliMUONDigitizerV3.h:29
 AliMUONDigitizerV3.h:30
 AliMUONDigitizerV3.h:31
 AliMUONDigitizerV3.h:32
 AliMUONDigitizerV3.h:33
 AliMUONDigitizerV3.h:34
 AliMUONDigitizerV3.h:35
 AliMUONDigitizerV3.h:36
 AliMUONDigitizerV3.h:37
 AliMUONDigitizerV3.h:38
 AliMUONDigitizerV3.h:39
 AliMUONDigitizerV3.h:40
 AliMUONDigitizerV3.h:41
 AliMUONDigitizerV3.h:42
 AliMUONDigitizerV3.h:43
 AliMUONDigitizerV3.h:44
 AliMUONDigitizerV3.h:45
 AliMUONDigitizerV3.h:46
 AliMUONDigitizerV3.h:47
 AliMUONDigitizerV3.h:48
 AliMUONDigitizerV3.h:49
 AliMUONDigitizerV3.h:50
 AliMUONDigitizerV3.h:51
 AliMUONDigitizerV3.h:52
 AliMUONDigitizerV3.h:53
 AliMUONDigitizerV3.h:54
 AliMUONDigitizerV3.h:55
 AliMUONDigitizerV3.h:56
 AliMUONDigitizerV3.h:57
 AliMUONDigitizerV3.h:58
 AliMUONDigitizerV3.h:59
 AliMUONDigitizerV3.h:60
 AliMUONDigitizerV3.h:61
 AliMUONDigitizerV3.h:62
 AliMUONDigitizerV3.h:63
 AliMUONDigitizerV3.h:64
 AliMUONDigitizerV3.h:65
 AliMUONDigitizerV3.h:66
 AliMUONDigitizerV3.h:67
 AliMUONDigitizerV3.h:68
 AliMUONDigitizerV3.h:69
 AliMUONDigitizerV3.h:70
 AliMUONDigitizerV3.h:71
 AliMUONDigitizerV3.h:72
 AliMUONDigitizerV3.h:73
 AliMUONDigitizerV3.h:74
 AliMUONDigitizerV3.h:75
 AliMUONDigitizerV3.h:76
 AliMUONDigitizerV3.h:77
 AliMUONDigitizerV3.h:78
 AliMUONDigitizerV3.h:79
 AliMUONDigitizerV3.h:80
 AliMUONDigitizerV3.h:81
 AliMUONDigitizerV3.h:82
 AliMUONDigitizerV3.h:83
 AliMUONDigitizerV3.h:84
 AliMUONDigitizerV3.h:85
 AliMUONDigitizerV3.h:86
 AliMUONDigitizerV3.h:87
 AliMUONDigitizerV3.h:88
 AliMUONDigitizerV3.h:89
 AliMUONDigitizerV3.h:90
 AliMUONDigitizerV3.h:91
 AliMUONDigitizerV3.h:92
 AliMUONDigitizerV3.h:93
 AliMUONDigitizerV3.h:94
 AliMUONDigitizerV3.h:95
 AliMUONDigitizerV3.h:96
 AliMUONDigitizerV3.h:97
 AliMUONDigitizerV3.h:98
 AliMUONDigitizerV3.h:99
 AliMUONDigitizerV3.h:100
 AliMUONDigitizerV3.h:101
 AliMUONDigitizerV3.h:102
 AliMUONDigitizerV3.h:103
 AliMUONDigitizerV3.h:104
 AliMUONDigitizerV3.h:105
 AliMUONDigitizerV3.h:106
 AliMUONDigitizerV3.h:107
 AliMUONDigitizerV3.h:108
 AliMUONDigitizerV3.h:109
 AliMUONDigitizerV3.h:110
 AliMUONDigitizerV3.h:111
 AliMUONDigitizerV3.h:112
 AliMUONDigitizerV3.h:113
 AliMUONDigitizerV3.h:114