12#ifndef ALICEO2_HMPID_PARAM_H_
13#define ALICEO2_HMPID_PARAM_H_
18#include <TGeoManager.h>
37 for (Int_t
i = 0;
i < 7;
i++) {
45 void print(Option_t* opt =
"")
const;
69 static float r2d() {
return 57.2957795; }
99 static void lors2Pad(
float x,
float y, Int_t& pc, Int_t& px, Int_t& py);
106 static bool isDeadPad(Int_t padx, Int_t pady, Int_t ch);
108 inline void setChStatus(Int_t ch,
bool status = kTRUE);
109 inline void setSectStatus(Int_t ch, Int_t sect,
bool status);
110 inline void setPcStatus(Int_t ch, Int_t pc,
bool status);
142 return TMath::Sqrt(1 + 0.554 * (1239.84 / eV) * (1239.84 / eV) / ((1239.84 / eV) * (1239.84 / eV) - 5769)) - 0.0005 * (temp - 20);
144 static double nIdxWin(
double eV) {
return TMath::Sqrt(1 + 46.411 / (10.666 * 10.666 - eV * eV) + 228.71 / (18.125 * 18.125 - eV * eV)); }
145 static double nMgF2Idx(
double eV) {
return 1.7744 - 2.866e-3 * (1239.842609 / eV) + 5.5564e-6 * (1239.842609 / eV) * (1239.842609 / eV); }
146 static double nIdxGap(
double eV) {
return 1 + 0.12489e-6 / (2.62e-4 - eV * eV / 1239.84 / 1239.84); }
147 static double lAbsRad(
double eV) {
return (eV < 7.8) * (
gausPar(eV, 3.20491e16, -0.00917890, 0.742402) +
gausPar(eV, 3035.37, 4.81171, 0.626309)) + (eV >= 7.8) * 0.0001; }
148 static double lAbsWin(
double eV) {
return (eV < 8.2) * (818.8638 - 301.0436 * eV + 36.89642 * eV * eV - 1.507555 * eV * eV * eV) + (eV >= 8.2) * 0.0001; }
149 static double lAbsGap(
double eV) {
return (eV < 7.75) * 6512.399 + (eV >= 7.75) * 3.90743e-2 / (-1.655279e-1 + 6.307392e-2 * eV - 8.011441e-3 * eV * eV + 3.392126e-4 * eV * eV * eV); }
150 static double qEffCSI(
double eV) {
return (eV > 6.07267) * 0.344811 * (1 -
exp(-1.29730 * (eV - 6.07267))); }
151 static double gausPar(
double x,
double a1,
double a2,
double a3) {
return a1 * TMath::Exp(-0.5 * ((
x - a2) / a3) * ((
x - a2) / a3)); }
154 inline static double findTemp(
double tLow,
double tUp,
double y);
163 float qCut()
const {
return 100; }
172 static Int_t
stack(Int_t evt = -1, Int_t tid = -1);
190 double l[3] = {
x -
mX,
y -
mY,
z};
191 mM[
c]->LocalToMaster(l,
m);
202 mM[
c]->MasterToLocal(
m, l);
209 mM[
c]->MasterToLocalVect(
m, l);
210 float pt = TMath::Sqrt(l[0] * l[0] + l[1] * l[1]);
211 th = TMath::ATan(pt / l[2]);
212 ph = TMath::ATan2(l[1], l[0]);
223 double l[3] = {0, 0, 1};
224 mM[
c]->LocalToMasterVect(l,
n);
237 double sigLoc(
double trkTheta,
double trkPhi,
double ckovTh,
double ckovPh,
double beta);
238 double sigGeom(
double trkTheta,
double trkPhi,
double ckovTh,
double ckovPh,
double beta);
239 double sigCrom(
double trkTheta,
double trkPhi,
double ckovTh,
double ckovPh,
double beta);
240 double sigma2(
double trkTheta,
double trkPhi,
double ckovTh,
double ckovPh);
301 ClassDefNV(
Param, 1);
uint64_t exp(uint64_t base, uint8_t exp) noexcept
const GPUTPCGMMerger::trackCluster & a1
static float sizeHalfPadX()
static bool isDeadPad(Int_t padx, Int_t pady, Int_t ch)
static void idealPosition(Int_t iCh, TGeoHMatrix *m)
static float fgkMinPcX[6]
static Int_t inHVSector(float y)
static const double fgkSqrtK3y
static bool isInDead(float x, float y)
void setSectStatus(Int_t ch, Int_t sect, bool status)
void setRefIdx(double refRadIdx)
void setChStatus(Int_t ch, bool status=kTRUE)
static float fgkMaxPcX[6]
static const double fgkK4x
static double hinRad(float y)
void mars2Lors(Int_t c, double *m, double &x, double &y) const
static Param * instanceNoGeo()
static float fgkMinPcY[6]
static double nIdxWin(double eV)
static float maxPcY(Int_t iPc)
static const double fgkK1y
static double lAbsRad(double eV)
static const double fgkK4y
void setPcStatus(Int_t ch, Int_t pc, bool status)
void lors2MarsVec(Int_t c, double *m, double *l) const
static double lAbsGap(double eV)
static double lAbsWin(double eV)
double sigCrom(double trkTheta, double trkPhi, double ckovTh, double ckovPh, double beta)
static double sigmaCorrFact(Int_t iPart, double occupancy)
static double pitchAnodeCathode()
static float sizeHalfPadY()
static void lors2Pad(float x, float y, Int_t &pc, Int_t &px, Int_t &py)
void setInstanceType(bool inst)
double getEPhotMean() const
static float lorsY(Int_t pc, Int_t pady)
double meanIdxRad() const
void norm(Int_t c, double *n) const
static bool fgInstanceType
static const double fgkK2x
void point(Int_t c, double *p, Int_t plane) const
static Int_t radiator(float y)
static const double fgkK2y
static float minPcX(Int_t iPc)
void printChStatus(Int_t ch)
static float maxPcX(Int_t iPc)
TVector3 norm(Int_t c) const
static float fgkMaxPcY[6]
static Int_t stackCount(Int_t pid, Int_t evt)
static double qEffCSI(double eV)
void setNSigmas(Int_t sigmas)
void setTemp(double temp)
double meanIdxWin() const
void lors2Mars(Int_t c, double x, double y, double *m, Int_t pl=kPc) const
double sigGeom(double trkTheta, double trkPhi, double ckovTh, double ckovPh, double beta)
static bool isInside(float x, float y, float d=0)
static double nIdxGap(double eV)
static double nIdxRad(double eV, double temp)
static Param * instance()
void mars2LorsVec(Int_t c, double *m, double &th, double &ph) const
static const double fgkSqrtK3x
static const double fgkK1x
static double nMgF2Idx(double eV)
static double findTemp(double tLow, double tUp, double y)
void setEPhotMean(double ePhotMean)
void setThreshold(Int_t thres)
static float lorsX(Int_t pc, Int_t padx)
static float minPcY(Int_t iPc)
double sigLoc(double trkTheta, double trkPhi, double ckovTh, double ckovPh, double beta)
double sigma2(double trkTheta, double trkPhi, double ckovTh, double ckovPh)
TVector3 lors2Mars(Int_t c, double x, double y, Int_t pl=kPc) const
static bool isOverTh(float q)
static Param * fgInstance
static bool fgMapPad[160][144][7]
static Int_t stack(Int_t evt=-1, Int_t tid=-1)
static double gausPar(double x, double a1, double a2, double a3)
GLdouble GLdouble GLdouble z
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...