17#ifndef O2_MCH_PADSPEM_H_
18#define O2_MCH_PADSPEM_H_
29static const int MaxNeighbors =
33inline static T getNeighborListOf(T neigh,
PadIdx_t i)
35 return &neigh[MaxNeighbors *
i];
40 return &neigh[MaxNeighbors *
i];
44 return neigh[MaxNeighbors *
i];
65 return (pads ==
nullptr) ? 0 : pads->nPads;
81 Pads(
const double* x_,
const double* y_,
const double* dx_,
const double* dy_,
82 const double* q_,
const short* cathode,
const Mask_t* saturate_,
83 short cathID,
int chId,
PadIdx_t* mapCathPadIdxToPadIdx,
int nAllPads);
84 Pads(
const double* x_,
const double* y_,
const double* dx_,
85 const double* dy_,
const double* q_,
const short* cathode,
86 const Mask_t* saturate_,
int chId,
int nAllPads);
88 Pads(
double* x_,
double* y_,
double* dx_,
double* dy_,
int chId,
int nPads_);
91 inline const double*
getX()
const {
return x; };
92 inline const double*
getY()
const {
return y; };
93 inline const double*
getDX()
const {
return dx; };
94 inline const double*
getDY()
const {
return dy; };
95 inline const double*
getXInf()
const {
return x; };
96 inline const double*
getYInf()
const {
return y; };
97 inline const double*
getXSup()
const {
return dx; };
98 inline const double*
getYSup()
const {
return dy; };
129 std::vector<PadIdx_t>& localMaxIdx,
double Cij[]);
138 Pads*
extractLocalMax(std::vector<PadIdx_t>& localMaxIdx,
double dxMinPadSize,
double dyMinPadSize);
155 double* dx =
nullptr;
156 double* dy =
nullptr;
161 Mask_t* saturate =
nullptr;
163 double totalCharge = 0;
173 void allocate(
int size);
175 void copyPads(
const Pads* srcPads,
int srcIdx,
int destIdx,
int N,
Mask_t cathValue);
177 void removePad(
int index);
178 PadIdx_t* buildFirstNeighbors(
double* X,
double* Y,
double* DX,
double* DY,
181 bool assessRemanent(
double xyCheck,
double* xy,
double precision,
int N);
Clustering and fifting parameters.
const double * getX() const
double getMeanTotalCharge()
static void printNeighbors(const PadIdx_t *neigh, int N)
const Mask_t * getCathodes() const
const double * getXSup() const
void refineLocalMaxAndUpdateCij(const Pads &pads, std::vector< PadIdx_t > &localMaxIdx, double Cij[])
@ xydxdyMode
x, y, dx, dy pad coordinates
@ xyInfSupMode
xInf=x, xSup=dx, yInf=y, ySup=dy pad coordinates
void setCathodes(Mask_t cath_)
Pads * extractLocalMax(std::vector< PadIdx_t > &localMaxIdx, double dxMinPadSize, double dyMinPadSize)
static int getNbrOfPads(const Pads *pads)
void setSaturate(Mask_t val)
const double * getDY() const
void setCharges(double c)
int addIsolatedPadInGroups(Mask_t *cathToGrp, Mask_t *grpToGrp, int nGroups)
const double * getCharges() const
Pads * selectPads(int *index, int k)
Pads * extractLocalMaxOnCoarsePads(std::vector< PadIdx_t > &localMaxIdx)
void refineLocalMax(Pads &localMax, std::vector< PadIdx_t > &localMaxIdx)
const double * getYInf() const
const double * getY() const
int getNbrOfObsPads() const
Pads * extractLocalMaxOnCoarsePads_Remanent(std::vector< PadIdx_t > &localMaxIdx, double dxMinPadSize, double dyMinPadSize)
const double * getXInf() const
PadIdx_t * getFirstNeighbors()
const Mask_t * getSaturates() const
PadIdx_t * buildKFirstsNeighbors(int kernelSize)
double getTotalCharge() const
Pads * clipOnLocalMax(bool extractLocalMax)
double updateTotalCharge()
static constexpr double epsilonGeometry
int removePads(double qCut)
const double * getYSup() const
static void printPads(const char *title, const Pads &pads)
const double * getDX() const
GLenum GLint GLint * precision
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...