#ifndef ALIITSUSIMUPARAM_H
#define ALIITSUSIMUPARAM_H
#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);
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;
static const Float_t fgkPixThreshDefault;
static const Float_t fgkPixMinElToAddDefault;
static const Float_t fgkPixThrSigmaDefault;
static const Float_t fgkPixCouplColDefault;
static const Float_t fgkPixCouplRowDefault;
static const Float_t fgkPixEccDiffDefault;
static const Float_t fgkPixLorentzHoleWeightDefault;
static const UInt_t fgkPixCouplingOptDefault;
static const Float_t fgkDOverVDefault;
static const Float_t fgkGeVtoChargeDefault;
static const Float_t fgkTDefault;
static const Float_t fgkPixFakeRateDefault;
static const Bool_t fgkPixNoiseInAllMod;
static const Float_t fgkNsigmasDefault;
static const Int_t fgkNcompsDefault;
private:
Float_t fGeVcharge;
Float_t fDOverV;
Float_t fT;
UInt_t fNLayers;
UInt_t fNPix;
UInt_t fPixCouplOpt;
Float_t fPixCouplCol;
Float_t fPixCouplRow;
Bool_t fPixLorentzDrift;
Float_t fPixLorentzHoleWeight;
Bool_t fPixAddNoisyFlag;
Bool_t fPixRemoveDeadFlag;
Float_t fPixThreshDef;
Float_t fPixThrSigmaDef;
Float_t fPixBiasVoltageDef;
Float_t fPixNoiseDef;
Float_t fPixBaselineDef;
Float_t fPixMinElToAddDef;
Float_t fPixFakeRateDef;
Bool_t fPixNoiseInAllMod;
Float_t* fLrROCycleShift;
Float_t* fPixThresh;
Float_t* fPixThrSigma;
Float_t* fPixBiasVoltage;
Float_t* fPixSigma;
Float_t* fPixNoise;
Float_t* fPixBaseline;
TObjArray fRespFunParam;
ClassDef(AliITSUSimuParam,2);
};
#endif