#ifndef HSHOWERDIGIPAR_H
#define HSHOWERDIGIPAR_H
#include "hparcond.h"
#include "TH1D.h"
#include "TH2D.h"
#include "TArrayF.h"
#include "TArrayD.h"
#include "TObjArray.h"
class HShowerDigiPar : public HParCond {
private:
TArrayF gain;
TArrayF threshold;
TArrayF effScaleMap;
TArrayD globalEff;
TArrayD chargeVsBeta[6][3];
Float_t fThickDet;
Int_t nMatrixRange;
Float_t fBoxSize;
Float_t fChargeSlope;
Float_t fPlaneDist;
Float_t fPadThreshold;
Float_t fUpdatePadThreshold;
Int_t chargeMatrixSize;
Float_t *pfChargeMatrix;
Int_t nGlobalEffBins;
Int_t nQvBxbins[6][3];
TH1D *phEff;
TH2D *ph2QvB[6][3];
TObjArray *pArrayQvB[6][3];
public:
HShowerDigiPar(const Char_t* name="ShowerDigiPar",
const Char_t* title="Digitisation parameters for Shower",
const Char_t* context="ShowerStandardDigiPar");
~HShowerDigiPar();
void clear(void);
Bool_t init(HParIo*, Int_t*);
void putParams(HParamList*);
Bool_t getParams(HParamList*);
Float_t getGain(Int_t sec, Int_t mod) { return gain.At(sec*3+mod); }
Float_t getThreshold(Int_t sec, Int_t mod) { return threshold.At(sec*3+mod); }
Float_t getThickDet() { return fThickDet; }
Int_t getMatrixRange() { return nMatrixRange; }
Float_t getBoxSize() { return fBoxSize; }
Float_t getChargeSlope() { return fChargeSlope; }
Float_t getPlaneDist() { return fPlaneDist; }
Float_t getPadThreshold() { return fPadThreshold; }
Float_t getUpdatePadThreshold() { return fUpdatePadThreshold; }
void setGain(Int_t sec, Int_t mod, Float_t fGain) { gain.AddAt(fGain,sec*3+mod); }
void setThreshold(Int_t sec, Int_t mod, Float_t fThres) { threshold.AddAt(fThres,sec*3+mod); }
void setThickDet(Float_t fThick) { fThickDet = fThick; }
void setMatrixRange(Int_t iRange) { nMatrixRange = iRange; }
void setBoxSize(Float_t fSize) { fBoxSize = fSize; }
void setChargeSlope(Float_t fSlope) { fChargeSlope = fSlope; }
void setPlaneDist(Float_t fDist) { fPlaneDist = fDist; }
void setPadThreshold(Float_t fThres) { fPadThreshold = fThres; }
void setUpdatePadThreshold(Float_t fThres) { fUpdatePadThreshold = fThres; }
void setEffScaleMap(TArrayF&);
TArrayF& getEffScaleMap() { return effScaleMap;}
void setGlobalEff(TArrayD&);
void setChargeVsBeta(Int_t, Int_t, TArrayD&);
Bool_t recreateHistograms();
const Float_t* getChargeMatrix() { return pfChargeMatrix; }
const TH1D* getEfficiencyHist() { return phEff; }
const TH2D* getQvBHist(Int_t sec, Int_t mod) { return ph2QvB[sec][mod]; }
Float_t getEfficiency(Int_t sec,Int_t mod,Int_t row,Int_t col, Float_t fBeta);
Bool_t checkEfficiency(Int_t sec,Int_t mod,Int_t row,Int_t col, Float_t fBeta);
Float_t getCharge(Int_t sec,Int_t mod, Float_t fBeta);
void removeHistograms(void);
void removeChargeHistograms(void);
void removeEfficiencyHistograms(void);
void removeQvBHistograms(void);
Float_t calcCharge(Float_t fCharge, Float_t fDist, Float_t fXd,
Float_t fYd, Float_t fXu, Float_t fYu);
void setChargeMatrix(Int_t nRange, const Float_t *pMatrix = NULL);
Bool_t initChargeMatrix(void);
Bool_t initEffHistogram(void);
Bool_t initSumVersBetaHistograms(void);
Int_t padIndex(Int_t sec,Int_t mod,Int_t row,Int_t col) {
return sec*3072 + mod*1024 + row*32 + col;
}
ClassDef(HShowerDigiPar,1)
};
#endif