ROOT logo
#ifndef ALIPHOSSIMPARAM_H
#define ALIPHOSSIMPARAM_H
/* Copyright(c) 2007, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                          */

/* $Id: AliPHOSSimParam.h 23530 2008-01-25 06:46:13Z prsnko $ */
                                              
// Base class for the PHOS simulation parameters.
// Do not use in the reconstruction; use derivative classes instead.

#include "TNamed.h"
#include "TMath.h"

class AliPHOSSimParam : public TNamed {

public:

  AliPHOSSimParam();
  AliPHOSSimParam(const AliPHOSSimParam& recoParam);
  AliPHOSSimParam& operator = (const AliPHOSSimParam& recoParam);
  virtual ~AliPHOSSimParam() {}

  static AliPHOSSimParam * GetInstance() ;

  //Parameters used in conversion of deposited energy to APD response [see AliPHOSv1 for details]
  void SetMeanLightYield(Float_t ly=47000.){fLightYieldMean=ly; //recalculate now dependencies
                                            fLightFactor = fLightYieldMean * fIntrinsicAPDEfficiency ; 
                                            fAPDFactor   = (13.418/fLightYieldMean/100.) * 300. ; }
  void SetAPDEfficiency(Float_t eff=0.02655){fIntrinsicAPDEfficiency=eff;
                                             fLightFactor = fLightYieldMean * fIntrinsicAPDEfficiency ;}
  Float_t GetLightFactor(void) const { return fLightFactor ;}
  Float_t GetAPDFactor(void) const { return fAPDFactor ;}

  //Parameters use in EMC noise calculation [see AliPHOSDigitizer for details]
  Float_t GetAPDNoise() const { return fAPDNoise;  }          //RMS of APD noise
  void SetAPDNoise(Float_t noise=0.012){fAPDNoise = noise;  }

  //Parameters to apply non-lineary on cell level
  Bool_t IsCellNonlinearityOn() const {return fCellNonLineaityOn;}
  void SetCellNonLinearity(Bool_t on=kTRUE){fCellNonLineaityOn=on;} //default: on=kFALSE
  Double_t GetCellNonLineairyA(void) const {return fCellNonLineaityA; }
  Double_t GetCellNonLineairyB(void) const {return fCellNonLineaityB; }
  Double_t GetCellNonLineairyC(void) const {return fCellNonLineaityC; }
  void SetCellNonLineairyA(Double_t a=0.30) {fCellNonLineaityA = a; }
  void SetCellNonLineairyB(Double_t b=0.109){fCellNonLineaityB = b; }
  void SetCellNonLineairyC(Double_t c=0.955){fCellNonLineaityC = c; }



  Float_t GetEmcDigitsThreshold() const { return fEMCDigitThreshold ; }  //Minimal energy to keep digit
  void SetEMCDigitsThreshold(Float_t thresh=0.01){fEMCDigitThreshold=thresh;} 

  //Parameters for energy digitization [see AliPHOSDigitizer for details]
  void SetADCchannelW(Float_t width=0.005){fEMCADCchannel=width ;} //EMC channel width
  Float_t GetADCchannelW(void) const {return fEMCADCchannel; }

  void SetEDigitizationOn(Bool_t on=kTRUE){fDigitizeE=on ;}   //Use digitization in simulation or left it
  Bool_t IsEDigitizationOn(void)const {return fDigitizeE ;}   //for Digits2Raw->Digits procedure

  //Parameters for EMC TOF resolution [see AliPHOSDigitizer::TimeResolution()]
  Float_t GetTOFa()const{return fTOFa ;}  //constant term
  Float_t GetTOFb()const{return fTOFb ;}  //stohastic term
  void SetTOFparameters(Float_t a=0.5e-9, Float_t b=1.5e-9){fTOFa=a; fTOFb=b; }

  //Parameters for CPV noise and digitization  [see AliPHOSDigitizer for details] 
  Float_t GetCPVNoise() const {return fCPVNoise ;}           //RMS of CPV noise in
  void SetCPVNoise(Float_t noise=0.01){ fCPVNoise = noise ;} //CPV popugais

  Float_t GetCpvDigitsThreshold() const {return fCPVDigitThreshold ;}           //Minimal energy to keep digit in
  void SetCpvDigitsThreshold(Float_t thresh=0.09){fCPVDigitThreshold = thresh;} //CPV popugais

  Float_t GetADCpedestalCpv() const {return fADCpedestalCpv ;}      //CPV pedestal value 
  void SetADCpedestalCpv(Float_t ped=0.012){ fADCpedestalCpv=ped ;} //in CPV popugais

  Float_t GetADCchanelCpv() const {return fADCchanelCpv;}     //Price of one ADC channel 
  void SetADCchanelCpv(Float_t w=0.0012) {fADCchanelCpv=w; }  //for CPV

  Int_t GetNADCcpv() const {return fNADCcpv ;}                         //Max number of channels
  void SettNADCcpv(Int_t n=12) { fNADCcpv=(Int_t)TMath::Power(2,n) ; } //in CPV  ADC

  //Mark streams for mixing as streams contaning Digits (true) or SDigits (false)
  //Streamt numbering the same as in StreamManager
  void    SetStreamDigits(Int_t i){if(i<10)fDStream[i]=kTRUE;}
  Bool_t  IsStreamDigits(Int_t i){return fDStream[i]; }

  //Parameters for RAW embedding
  void SetEMCSubtractPedestals(Bool_t subtract) { fEMCSubtractPedestals = subtract;}
  Bool_t  EMCSubtractPedestals()      const { return fEMCSubtractPedestals;    }

  void SetGlobalAltroOffset(Int_t offset)  { fGlobalAltroOffset = offset ; }
  Int_t   GetGlobalAltroOffset()      const { return fGlobalAltroOffset ;  }

  void SetGlobalAltroThreshold(Int_t ZSth) { fGlobalAltroThreshold = ZSth; }
  Int_t   GetGlobalAltroThreshold()   const { return fGlobalAltroThreshold;}

  void SetSampleQualityCut(Float_t qcut) { fEMCSampleQualityCut=qcut; }
  Float_t GetEMCSampleQualityCut()    const { return fEMCSampleQualityCut; }

private:

  AliPHOSSimParam(Int_t i); //True constructor which should be called by GetInstance()

private:

  //Parameters used in conversion of deposited energy to APD response (AliPHOSv1)
  Float_t  fLightYieldMean ;        //Average number of photoelectrons per GeV
  Float_t  fIntrinsicAPDEfficiency; //APD efficiency including geometric coverage
  Float_t  fLightFactor ;           //Average number of photons collected by APD per GeV deposited energy
  Float_t  fAPDFactor ;             //factor relating light yield and APD response 
 
  //Parameters used in electronic noise calculation and thresholds for EMC (AliPHOSDigitizer)
  Float_t fAPDNoise;            //RMS of APD noise
  Float_t fEMCDigitThreshold ;  //minimal energy to keep digit 
  Float_t fEMCADCchannel ;      //width of ADC channel in GeV
  Float_t fTOFa  ;              //constant term of TOF resolution 
  Float_t fTOFb  ;              //stohastic term of TOF resolution 
  Float_t fCellNonLineaityA ;   //Amp of cel non-linearity
  Float_t fCellNonLineaityB ;   //Energy scale of cel non-linearity
  Float_t fCellNonLineaityC ;   //Overall calibration

  //Parameters used for RAW embedding
  Bool_t  fEMCSubtractPedestals;   // true if pedestal should be subtracted (in non-ZS)
  Int_t   fGlobalAltroOffset ;     // Offset used in ALTRO chips in SZ runs
  Int_t   fGlobalAltroThreshold ;  // Threshold used in ALTRO chips in SZ runs
  Float_t fEMCSampleQualityCut;    // Cut on pulse shape fit quality

  //CPV parameters
  Float_t fADCpedestalCpv ;    //Pedestal value
  Float_t fADCchanelCpv ;      //ADC channel width
  Float_t fCPVNoise ;          //RMS of CPV noise 
  Float_t fCPVDigitThreshold ; //Minimal energy to keep digit 
  Int_t   fNADCcpv ;           //Max number of channels in CPV ADC
 
  Bool_t fDStream[10] ;   //Mark mixing stream contains digits or SDigits
  Bool_t fDigitizeE ;     //Use energy digitization in simulation or left to Digits2Raw()
  Bool_t fCellNonLineaityOn ;  //Model scintillator non-linearity in AliPHOSDigitizer
  
  static AliPHOSSimParam * fgSimParam ; // pointer to the unique instance of the class

  ClassDef(AliPHOSSimParam,3)
};

#endif
 AliPHOSSimParam.h:1
 AliPHOSSimParam.h:2
 AliPHOSSimParam.h:3
 AliPHOSSimParam.h:4
 AliPHOSSimParam.h:5
 AliPHOSSimParam.h:6
 AliPHOSSimParam.h:7
 AliPHOSSimParam.h:8
 AliPHOSSimParam.h:9
 AliPHOSSimParam.h:10
 AliPHOSSimParam.h:11
 AliPHOSSimParam.h:12
 AliPHOSSimParam.h:13
 AliPHOSSimParam.h:14
 AliPHOSSimParam.h:15
 AliPHOSSimParam.h:16
 AliPHOSSimParam.h:17
 AliPHOSSimParam.h:18
 AliPHOSSimParam.h:19
 AliPHOSSimParam.h:20
 AliPHOSSimParam.h:21
 AliPHOSSimParam.h:22
 AliPHOSSimParam.h:23
 AliPHOSSimParam.h:24
 AliPHOSSimParam.h:25
 AliPHOSSimParam.h:26
 AliPHOSSimParam.h:27
 AliPHOSSimParam.h:28
 AliPHOSSimParam.h:29
 AliPHOSSimParam.h:30
 AliPHOSSimParam.h:31
 AliPHOSSimParam.h:32
 AliPHOSSimParam.h:33
 AliPHOSSimParam.h:34
 AliPHOSSimParam.h:35
 AliPHOSSimParam.h:36
 AliPHOSSimParam.h:37
 AliPHOSSimParam.h:38
 AliPHOSSimParam.h:39
 AliPHOSSimParam.h:40
 AliPHOSSimParam.h:41
 AliPHOSSimParam.h:42
 AliPHOSSimParam.h:43
 AliPHOSSimParam.h:44
 AliPHOSSimParam.h:45
 AliPHOSSimParam.h:46
 AliPHOSSimParam.h:47
 AliPHOSSimParam.h:48
 AliPHOSSimParam.h:49
 AliPHOSSimParam.h:50
 AliPHOSSimParam.h:51
 AliPHOSSimParam.h:52
 AliPHOSSimParam.h:53
 AliPHOSSimParam.h:54
 AliPHOSSimParam.h:55
 AliPHOSSimParam.h:56
 AliPHOSSimParam.h:57
 AliPHOSSimParam.h:58
 AliPHOSSimParam.h:59
 AliPHOSSimParam.h:60
 AliPHOSSimParam.h:61
 AliPHOSSimParam.h:62
 AliPHOSSimParam.h:63
 AliPHOSSimParam.h:64
 AliPHOSSimParam.h:65
 AliPHOSSimParam.h:66
 AliPHOSSimParam.h:67
 AliPHOSSimParam.h:68
 AliPHOSSimParam.h:69
 AliPHOSSimParam.h:70
 AliPHOSSimParam.h:71
 AliPHOSSimParam.h:72
 AliPHOSSimParam.h:73
 AliPHOSSimParam.h:74
 AliPHOSSimParam.h:75
 AliPHOSSimParam.h:76
 AliPHOSSimParam.h:77
 AliPHOSSimParam.h:78
 AliPHOSSimParam.h:79
 AliPHOSSimParam.h:80
 AliPHOSSimParam.h:81
 AliPHOSSimParam.h:82
 AliPHOSSimParam.h:83
 AliPHOSSimParam.h:84
 AliPHOSSimParam.h:85
 AliPHOSSimParam.h:86
 AliPHOSSimParam.h:87
 AliPHOSSimParam.h:88
 AliPHOSSimParam.h:89
 AliPHOSSimParam.h:90
 AliPHOSSimParam.h:91
 AliPHOSSimParam.h:92
 AliPHOSSimParam.h:93
 AliPHOSSimParam.h:94
 AliPHOSSimParam.h:95
 AliPHOSSimParam.h:96
 AliPHOSSimParam.h:97
 AliPHOSSimParam.h:98
 AliPHOSSimParam.h:99
 AliPHOSSimParam.h:100
 AliPHOSSimParam.h:101
 AliPHOSSimParam.h:102
 AliPHOSSimParam.h:103
 AliPHOSSimParam.h:104
 AliPHOSSimParam.h:105
 AliPHOSSimParam.h:106
 AliPHOSSimParam.h:107
 AliPHOSSimParam.h:108
 AliPHOSSimParam.h:109
 AliPHOSSimParam.h:110
 AliPHOSSimParam.h:111
 AliPHOSSimParam.h:112
 AliPHOSSimParam.h:113
 AliPHOSSimParam.h:114
 AliPHOSSimParam.h:115
 AliPHOSSimParam.h:116
 AliPHOSSimParam.h:117
 AliPHOSSimParam.h:118
 AliPHOSSimParam.h:119
 AliPHOSSimParam.h:120
 AliPHOSSimParam.h:121
 AliPHOSSimParam.h:122
 AliPHOSSimParam.h:123
 AliPHOSSimParam.h:124
 AliPHOSSimParam.h:125
 AliPHOSSimParam.h:126
 AliPHOSSimParam.h:127
 AliPHOSSimParam.h:128
 AliPHOSSimParam.h:129
 AliPHOSSimParam.h:130
 AliPHOSSimParam.h:131
 AliPHOSSimParam.h:132
 AliPHOSSimParam.h:133
 AliPHOSSimParam.h:134
 AliPHOSSimParam.h:135
 AliPHOSSimParam.h:136
 AliPHOSSimParam.h:137
 AliPHOSSimParam.h:138
 AliPHOSSimParam.h:139
 AliPHOSSimParam.h:140
 AliPHOSSimParam.h:141
 AliPHOSSimParam.h:142
 AliPHOSSimParam.h:143