18#ifndef O2_MCH_CLUSTER_H_
19#define O2_MCH_CLUSTER_H_
21#include <gsl/gsl_blas.h>
22#include <gsl/gsl_linalg.h>
42 ClusterPEM(
const double*
x,
const double*
y,
const double* dx,
const double* dy,
43 const double* q,
const short* cathodes,
const short*
saturated,
72 return (pads[
c] ==
nullptr ?
nullptr : pads[
c]->
getCharges());
83 return (projectedPads ==
nullptr ? -1 : projectedPads->
getNbrOfPads());
93 return mapCathPadIdxToPadIdx[
c];
117 int singleCathPlaneID = -1;
118 int nbrOfCathodePlanes = 0;
119 Pads* pads[2] = {
nullptr,
nullptr};
120 int nbrSaturated = 0;
122 PadIdx_t* mapCathPadIdxToPadIdx[2] = {
126 Pads* projectedPads =
nullptr;
129 int nbrOfProjGroups = 0;
131 Groups_t* cathGroup[2] = {
nullptr,
nullptr};
132 int nbrOfCathGroups = 0;
138 MapKToIJ_t* mapKToIJ =
146 void computeProjectedPads(
const Pads& pad0InfSup,
const Pads& pad1InfSup,
147 int maxNbrOfProjPads,
PadIdx_t* aloneIPads,
149 int includeAlonePads);
151 int getConnectedComponentsOfProjPadsWOSinglePads();
156 int assignPadsToGroupFromProj(
int nGrp);
159 int assignGroupToCathPads();
160 void updateProjectionGroups();
162 int renumberGroupsFromMap(
Groups_t* grpToGrp,
int nGrp);
164 int renumberGroups(
Groups_t* grpToGrp,
int nGrp);
166 void removeLowChargedGroups(
int nGroups);
168 int filterFitModelOnSmallChargedSeeds(Pads& pads,
double* theta,
int K,
169 Mask_t* maskFilteredTheta);
172 int filterFitModelOnClusterRegion(Pads& pads,
double* theta,
int K,
173 Mask_t* maskFilteredTheta);
175 int filterFitModelOnSpaceVariations(
const double* theta0,
int K0,
176 double* theta,
int K,
177 Mask_t* maskFilteredTheta);
178 Pads* findLocalMaxWithRefinement(
double* thetaL,
int nbrOfPadsInTheGroupCath);
179 Pads* findLocalMaxWithoutRefinement(
double* thetaL,
int nbrOfPadsInTheGroupCath);
185 int checkConsistencyMapKToIJ(
const char* intersectionMatrix,
186 const MapKToIJ_t* mapKToIJ,
189 const PadIdx_t* aloneJPads,
int N0,
int N1,
194 int laplacian2D(
const Pads& pads_,
PadIdx_t* neigh,
int chId,
195 PadIdx_t* sortedLocalMax,
int kMax,
double* smoothQ);
configStandalone Reconstruction rec_tpc multiplier for the combined cluster track error during track following area in cm for the search of for z only used if decrease removal by when above this local occupancy rowx Shift of TPC revert cluster flag edge bit distance to edge exceeds this ZOffset for secondary multiple of radius max P of electron K BB bands crossing max P of electron p BB bands crossing max P of electron d BB bands crossing max P of electron t BB bands crossing min accepted dEdxMaxTPC of the track Additive extra cluster error for Y2 if edge flag set Additive extra cluster error for Y2 if single set Additive extra cluster error for Y2 if or single set Additive extra cluster error for Z2 if or single set Extra errors to add to track when crossing depending on addErrorsCECrossing Inner portion of y range in sector that is not used in searching for extrapolated track candidates factor2YS for track merging factor2K for track merging Margin in cm of Y position when rejecting edge clusters based on uncorrected track Y Max fraction of shared clusters for tracklet Except pad from cluster finding if total number of charges in a fragment is above this Except pad from cluster finding if number of consecutive charges in a fragment is above this Threshold where a timebin is considered saturated
std::pair< int, int > getNxNy(int c)
const double * getCharges(int c)
int findLocalMaxWithBothCathodes(double *thetaOut, int kMax)
int findLocalMaxWithPEMFullRefinement(double *thetaL, int nbrOfPadsInTheGroupCath)
int getNbrOfProjectedPads()
const Pads * getProjectedPads()
int buildProjectedGeometry(int includeAlonePads)
double * projectChargeOnProjGeometry(int includeAlonePads)
const PadIdx_t * getMapCathPadToPad(int c)
int getNbrOfPadsInGroup(int g)
int findLocalMaxWithPEM2Lev(double *thetaL, int nbrOfPadsInTheGroupCath)
const Groups_t * getCathGroup(int c)
std::pair< double, double > computeChargeBarycenter(int plane)
Groups_t * getProjPadGroup()
int findLocalMaxWithPEM(double *thetaL, int nbrOfPadsInTheGroupCath)
int getNbrOfObsPads(int c)
double getTotalCharge(int c)
const Pads * getPads(int c)
static int getNbrOfPads(const Pads *pads)
const double * getCharges() const
int getNbrOfObsPads() const
double getTotalCharge() const
std::pair< int, double * > DataBlock_t
gsl_matrix * moore_penrose_pinv(gsl_matrix *A, double rcond)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...