#ifndef HPARTICLEBTPAR_H
#define HPARTICLEBTPAR_H
#include "TArrayF.h"
#include "hparcond.h"
#include <iostream>
using namespace std;
class HParamList;
class HParticleBtPar : public HParCond {
protected:
Float_t fNSigma;
Int_t fSizeMatrix;
Float_t fPhiOffsetPar;
Float_t fMinimumSigmaVal;
Int_t fMaximumType;
TArrayI fRingFitPar;
TArrayF fChargeThres;
TArrayF fGeomConst;
TArrayI fRingSeg;
TArrayF fSharedCharge;
TArrayF fSigmaGaus;
TArrayF fParThetaAngle;
TArrayF fPhiOffset;
TArrayF fSigmaRange;
TArrayI fClusterLimits;
TArrayF fVertexPos;
TArrayI fRichSeg;
TArrayI fNeighbourPad;
TArrayF fTF2ParMean;
TArrayF fTF2ParSigma;
TArrayF fLeptonSelection;
public:
HParticleBtPar(const Char_t* name ="ParticleBtPar",
const Char_t* title ="Parameters for particle back tracking to RICH",
const Char_t* context="ParticleBtParProduction");
~HParticleBtPar();
Int_t getNRingSegments() { return fRingFitPar[0]; }
Int_t getNVertex() { return fRingFitPar[1]; }
Int_t getNParMean() { return fRingFitPar[2]; }
Int_t getNParSigma() { return fRingFitPar[3]; }
Float_t* getChargeThres() { return &fChargeThres[0];}
Float_t* getChargeThresMax() { return &fChargeThres[6];}
Float_t getNSigma() { return fNSigma;}
Int_t getMaximumType() { return fMaximumType;}
Int_t getSizeMatrix() { return fSizeMatrix;}
Int_t getRingSegStep() { return fRingSeg[0];}
Int_t getRingSegOffset() { return fRingSeg[1];}
Float_t* getSharedChargeDiagonal() { return &fSharedCharge[0];}
Float_t* getSharedChargeVertical() { return &fSharedCharge[3];}
Float_t* getSharedChargeHorizontal() { return &fSharedCharge[6];}
Float_t* getSigmaGaus() { return &fSigmaGaus[0];}
Float_t* getSigmaGausRange() { return &fSigmaGaus[2];}
Float_t getParThetaAngleMin() { return fParThetaAngle[0];}
Float_t getParThetaAngleMax() { return fParThetaAngle[1];}
Float_t getSigmaRange() { return fSigmaRange[0];}
Float_t getSigmaRangeSmall() { return fSigmaRange[1];}
Float_t getSigmaRangeMax() { return fSigmaRange[2];}
Float_t getSigmaRangePadError() { return fSigmaRange[3];}
Float_t* getPhiOffset() { return &fPhiOffset[0];}
Float_t* getPhiOffset2() { return &fPhiOffset[6];}
Float_t getOffsetPar() { return fPhiOffsetPar;}
Float_t getPadWidthX() { return fGeomConst[0];}
Float_t getPadWidthY() { return fGeomConst[1];}
Float_t getThetaAngleMin() { return fGeomConst[2];}
Float_t getThetaAngleMax() { return fGeomConst[3];}
Int_t getClusMaximaLimit() { return fClusterLimits[0];}
Int_t getClusSizeLimit() { return fClusterLimits[1];}
Float_t getVertexPosMin() { return fVertexPos[0];}
Float_t getVertexPosMax() { return fVertexPos[1];}
Float_t getVertexStep() { return fVertexPos[2];}
Int_t getNRichSeg() { return fRichSeg[0];}
Int_t getRichSegBorderX() { return fRichSeg[1];}
Int_t getRichSegBorderY() { return fRichSeg[2];}
Int_t getNeighbourPad(Int_t par) { return fNeighbourPad[0+par];}
Float_t getMinimumSigmaValue() { return fMinimumSigmaVal;}
Double_t getTF2ParMean(Int_t ringSeg, Int_t vertex, Int_t par) { return fTF2ParMean[ringSeg*(15*8)+vertex*8+par];}
Double_t getTF2ParSigma(Int_t ringSeg, Int_t vertex, Int_t par) { return fTF2ParSigma[ringSeg*(15*13)+vertex*13+par];}
Float_t getBetaRPCLimit() { return fLeptonSelection[0];}
Float_t getBetaTOFLimit() { return fLeptonSelection[1];}
Float_t getMDCdEdxLimit() { return fLeptonSelection[2];}
void setNRingSegments(Int_t val) { fRingFitPar[0] = val; }
void setNVertex(Int_t val) { fRingFitPar[1] = val; }
void setNParMean(Int_t val) { fRingFitPar[2] = val; }
void setNParSigma(Int_t val) { fRingFitPar[3] = val; }
void setChargeThres(Float_t* pars) { for(Int_t i=0;i<6;i++) fChargeThres[i] = pars[i];}
void setChargeThresMax(Float_t* pars) { for(Int_t i=0;i<6;i++) fChargeThres[i+6] = pars[i];}
void setNSigma(Float_t val) { fNSigma = val;}
void setMaximumType(Int_t val) { fMaximumType = val;}
void setSizeMatrix(Int_t val) { fSizeMatrix = val;}
void setRingSegStep(Int_t val) { fRingSeg[0] = val;}
void setRingSegOffset(Int_t val) { fRingSeg[1] = val;}
void setSharedChargeDiagonal(Float_t* pars) { for(Int_t i=0;i<3;i++) fSharedCharge[0+i] = pars[i];}
void setSharedChargeVertical(Float_t* pars) { for(Int_t i=0;i<3;i++) fSharedCharge[3+i] = pars[i];}
void setSharedChargeHorizontal(Float_t* pars) { for(Int_t i=0;i<3;i++) fSharedCharge[6+i] = pars[i];}
void setSigmaGaus(Float_t val1,Float_t val2) { fSigmaGaus[0] = val1; fSigmaGaus[1] = val2;}
void setSigmaGausRange(Float_t val1,Float_t val2) { fSigmaGaus[2] = val1; fSigmaGaus[3] = val2;}
void setParThetaAngleMin(Float_t val) { fParThetaAngle[0] = val;}
void setParThetaAngleMax(Float_t val) { fParThetaAngle[1] = val;}
void setSigmaRange(Float_t val) { fSigmaRange[0] = val;}
void setSigmaRangeSmall(Float_t val) { fSigmaRange[1] = val;}
void setSigmaRangeMax(Float_t val) { fSigmaRange[2] = val;}
void setSigmaRangePadError(Float_t val) { fSigmaRange[3] = val;}
void setPhiOffset(Float_t* pars) { for(Int_t i=0;i<6;i++) fPhiOffset[0+i] = pars[i];}
void setPhiOffset2(Float_t* pars) { for(Int_t i=0;i<6;i++) fPhiOffset[6+i] = pars[i];}
void setOffsetPar(Float_t val) { fPhiOffsetPar = val;}
void setPadWidthX(Float_t val) { fGeomConst[0] = val;}
void setPadWidthY(Float_t val) { fGeomConst[1] = val;}
void setThetaAngleMin(Float_t val) { fGeomConst[2] = val;}
void setThetaAngleMax(Float_t val) { fGeomConst[3] = val;}
void setClusMaximaLimit(Int_t val) { fClusterLimits[0] = val;}
void setClusSizeLimit(Int_t val) { fClusterLimits[1] = val;}
void setVertexPosMin(Float_t val) { fVertexPos[0] = val;}
void setVertexPosMax(Float_t val) { fVertexPos[1] = val;}
void setVertexStep(Float_t val) { fVertexPos[2] = val;}
void setNRichSeg(Int_t val) { fRichSeg[0] = val;}
void setRichSegBorderX(Int_t val) { fRichSeg[1] = val;}
void setRichSegBorderY(Int_t val) { fRichSeg[2] = val;}
void setNeighbourPad(Int_t val,Int_t par) { fNeighbourPad[0+par] = val;}
void setMinimumSigmaValue(Float_t val) { fMinimumSigmaVal = val;}
void setTF2ParMean(Int_t ringSeg, Int_t vertex, Int_t par, Double_t val) { fTF2ParMean[(ringSeg*15*8)+(vertex*8)+par] = val;}
void setTF2ParSigma(Int_t ringSeg, Int_t vertex, Int_t par, Double_t val) { fTF2ParSigma[ringSeg*(15*13)+vertex*13+par] = val;}
void setBetaRPCLimit(Float_t val ) { fLeptonSelection[0] = val;}
void setBetaTOFLimit(Float_t val ) { fLeptonSelection[1] = val;}
void setMDCdEdxLimit(Float_t val ) { fLeptonSelection[2] = val;}
void putParams(HParamList*);
Bool_t getParams(HParamList*);
void clear();
ClassDef(HParticleBtPar,1)
};
#endif /*!HPARTICEBTPAR_H*/