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


///////////////////////////////////////////////////////////////////
//                                                               //
// Class to store the parameters used in the simulation ITS      //
//                                                               //
///////////////////////////////////////////////////////////////////
#include <TRandom.h>
#include <TObject.h>
#include <TObjArray.h>
#include <TMath.h>
#include <TF1.h>
#include "AliMathBase.h"
class AliITSUParamList;

class AliITSUSimuParam : public TObject {

 public:
  enum {kNoCouplingPix,kOldCouplingPix,kNewCouplingPix,kMaxCouplingOptPix};
  //
  AliITSUSimuParam();
  AliITSUSimuParam(UInt_t nLayers,UInt_t nPix);
  AliITSUSimuParam(const AliITSUSimuParam& simpar);
  // assignment operator 
  AliITSUSimuParam& operator=(const AliITSUSimuParam& source);
  ~AliITSUSimuParam();
  //
  void     SetNPix(Int_t np);
  void     SetNLayers(Int_t nl);
  //
  Double_t ApplyPixBaselineAndNoise(UInt_t mod) const;
  Double_t CalcProbNoiseOverThreshold(UInt_t mod) const;
  //
  void     SetLrROCycleShift(Double_t v=0, Int_t lr=-1);
  Double_t GetLrROCycleShift(Int_t lr)                                    const  {return fLrROCycleShift ? fLrROCycleShift[lr]:0;}
  //
  void     SetPixThreshold(Double_t thresh, Double_t sigma, int mod=-1);
  void     SetPixMinElToAdd(Double_t nel)                                        {fPixMinElToAddDef = nel;}
  void     GetPixThreshold(UInt_t mod, Double_t& thresh, Double_t& sigma) const;
  Double_t GetPixThreshold(UInt_t mod)                                    const;
  Double_t GetPixMinElToAdd()                                             const  {return fPixMinElToAddDef;}
  //
  void     SetPixFakeRate(Double_t frate)                                        { fPixFakeRateDef = frate;}
  Double_t GetPixFakeRate()                                               const  {return fPixFakeRateDef;}
  //
  void     SetPixNoiseInAllMod(Bool_t ison)                                      {fPixNoiseInAllMod = ison;}
  Bool_t   GetPixNoiseInAllMod()                                          const  {return fPixNoiseInAllMod;}
  //
  void     SetPixNoise(Double_t noise, Double_t baseline, Int_t mod=-1);
  void     GetPixNoise(UInt_t mod,Double_t &noise, Double_t &baseline)    const;
  //
  void     SetPixBiasVoltage(Double_t bias=18.182,Int_t mod=-1);
  Double_t GetPixBiasVoltage(UInt_t mod)                                  const;
  // 
  void     SetGeVToCharge(Double_t gc=fgkNcompsDefault)                          {fGeVcharge = gc;}
  Double_t GetGeVToCharge()                                               const  {return fGeVcharge;}
  Double_t GeVToCharge(Double_t gev)                                      const  {return gev/fGeVcharge;}
  //
  void     SetPixCouplingOption(UInt_t opt);
  UInt_t   GetPixCouplingOption()                                         const  {return fPixCouplOpt;}

  void     SetPixCouplingParam(Double_t col, Double_t row)                       {fPixCouplCol = col; fPixCouplRow = row;}
  void     GetPixCouplingParam(Double_t &col, Double_t &row)              const  {col = fPixCouplCol; row = fPixCouplRow;}

  void     SetPixLorentzDrift(Bool_t ison)                                       {fPixLorentzDrift=ison;}
  Bool_t   GetPixLorentzDrift()                                           const  {return fPixLorentzDrift;}
  void     SetPixLorentzHoleWeight(Double_t weight)                               {fPixLorentzHoleWeight=weight;}
  Double_t GetPixLorentzHoleWeight()                                      const  {return fPixLorentzHoleWeight;}
  
  void     SetPixAddNoisyFlag(Bool_t value)                                      {fPixAddNoisyFlag = value;}
  Bool_t   GetPixAddNoisyFlag()                                           const  {return fPixAddNoisyFlag;}
  void     SetPixRemoveDeadFlag(Bool_t value)                                    {fPixRemoveDeadFlag = value;}
  Bool_t   GetPixRemoveDeadFlag()                                         const  {return fPixRemoveDeadFlag;}
  //
  Double_t LorentzAngleElectron(Double_t bz)                              const;
  Double_t LorentzAngleHole(Double_t bz)                                  const;
  //
  Int_t    GetNRespFunParams()                                            const  {return fRespFunParam.GetEntriesFast();}
  const    AliITSUParamList* GetRespFunParams(Int_t i)                    const  {return (const AliITSUParamList*)fRespFunParam[i];}
  const    AliITSUParamList* FindRespFunParams(Int_t detId)               const;
  void     AddRespFunParam(AliITSUParamList* pr);
  //
  virtual void Print(Option_t *opt = "")                                  const; 
  //
  static Double_t CalcProbNoiseOverThreshold(double base, double noise, double thresh);
  static Double_t GenerateNoiseQFunction(double prob, double mean, double sigma);
  //
 protected:

  static const Float_t fgkPixBiasVoltageDefault;//default for fPixBiasVoltage
  static const Float_t fgkPixThreshDefault; //default for fThresh
  static const Float_t fgkPixMinElToAddDefault; // default min number of electrons to add to sdigit
  static const Float_t fgkPixThrSigmaDefault; //default for fSigma
  static const Float_t fgkPixCouplColDefault; //default for fPixCouplCol
  static const Float_t fgkPixCouplRowDefault; //default for fPixCouplRow
  static const Float_t fgkPixEccDiffDefault;//default for fPixEccDiff
  static const Float_t fgkPixLorentzHoleWeightDefault;//default for fPixLorentzHoleWeight
  static const UInt_t  fgkPixCouplingOptDefault;  // type of pixel Coupling (old or new)
  static const Float_t fgkDOverVDefault;             // default distance over voltage 
  static const Float_t fgkGeVtoChargeDefault;        // default energy to ionize (free an electron) in GeV
  static const Float_t fgkTDefault;                  // default temperature
  static const Float_t fgkPixFakeRateDefault;        // default monopix fake rate
  static const Bool_t  fgkPixNoiseInAllMod;          // default switch to add digital noise to every chip
  
  static const Float_t fgkNsigmasDefault; //default for fNsigmas
  static const Int_t   fgkNcompsDefault; //default for fNcomps

 private:
  //
  Float_t    fGeVcharge;          // Energy to ionize (free an electron) in GeV
  Float_t    fDOverV;             // The parameter d/v where d is the disance over which the the potential v is applied d/v [cm/volts]
  Float_t    fT;                  // The temperature of the Si in Degree K.
  //
  UInt_t     fNLayers;             // number of layers  
  UInt_t     fNPix;                // number of Pix type detectors
  UInt_t     fPixCouplOpt;         // Pix Coupling Option
  Float_t    fPixCouplCol;         // Pix Coupling parameter along the cols
  Float_t    fPixCouplRow;         // Pix Coupling parameter along the rows
  Bool_t     fPixLorentzDrift;     // Flag to decide whether to simulate the Lorentz Drift or not in Pix
  Float_t    fPixLorentzHoleWeight;// Lorentz Angle is computed for Pix as average of Hole and Electron
  //                                    this parameter gives the relative weights between the two
  Bool_t     fPixAddNoisyFlag;     // Flag saying whether noisy pixels should be added to digits
  Bool_t     fPixRemoveDeadFlag;   // Flag saying whether dead pixels should be removed from digits
  //
  Float_t    fPixThreshDef;        // Pix Threshold value
  Float_t    fPixThrSigmaDef;      // Pix Threshold fluctuation
  Float_t    fPixBiasVoltageDef;   // Bias Voltage for the Pix
  Float_t    fPixNoiseDef;         // Pix electronic noise: sigma
  Float_t    fPixBaselineDef;      // Pix electronic noise: baseline
  Float_t    fPixMinElToAddDef;    // min number of electrons to add
  Float_t    fPixFakeRateDef;      // Fake rate for the monopix
  Bool_t     fPixNoiseInAllMod;    // Add digital noise to every chip
  //
  Float_t*   fLrROCycleShift; //[fNLayers] optional RO cycle shift for each layer (in fraction of RO cycle length if abs<1)
                              // if abs>1, then each chip will have random phase
  Float_t*   fPixThresh;      //[fNPix] Pix Threshold value
  Float_t*   fPixThrSigma;    //[fNPix] Pix Threshold fluctuation
  Float_t*   fPixBiasVoltage; //[fNPix] Bias Voltage for the Pix
  Float_t*   fPixSigma;       //[fNPix] Pix threshold fluctuations spread
  Float_t*   fPixNoise;       //[fNPix] Pix electronic noise: sigma
  Float_t*   fPixBaseline;    //[fNPix] Pix electronic noise: baseline
  //
  TObjArray  fRespFunParam;   // set of parameterizations for response function (AliITSUParamList)

  ClassDef(AliITSUSimuParam,2);  // ITSU simulataion params
};


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