#ifndef PNDAHMULTIPEAKANALYSIS_H_ #define PNDAHMULTIPEAKANALYSIS_H_ #include "TH2D.h" #include "boost/tuple/tuple.hpp" #define ZERO 0.4 class PndAhMultipeakAnalysis { public: PndAhMultipeakAnalysis(); PndAhMultipeakAnalysis(TH2D *); virtual ~PndAhMultipeakAnalysis(); TH2D * GetProcessedHistogram() {return isFirstFilter ? fBaseHist : fReturnHist;} double getNormalizedContrast(const TH2D *, int, int, int, int); void addArbitraryFiltermask(double (*weightingFuntion)(double[])); // Add a filter to the base histogram which is a function pointer provided as argument void addThresholdCut(int); // If the content of basehistogram is smaller than threshold, returnhist's value at the given point is set to 0 void addThresholdCut(TH2D *, int); // If the content of histogram provided as a argument is below threshold, the corresponding bin is set to 0 void addSurroundingEightThreshold(); // Manipulates fReturnHist! boost::tuple getMeansTwoOrders(int, int); void secondOrderMeanFilter(double orderOneWeight = 0.8, double orderTwoWeight = 0.7); void combineNeighbors(); boost::tuple getHighestBinOfHit(std::vector, std::vector); static double func_wednesdaysIdea(double data[]); static double func_diagonallyEnabledLaplacianFilter(double data[]); protected: void copyOriginalToReturn(); // fReturnHist = fBaseHist private: int fVerbose; bool isFirstFilter; TH2D * fBaseHist; TH2D * fReturnHist; void initializeNewHistogram(); enum cardinals {kW, kSW, kS, kSE, kE, kNE, kN, kNW, kC, kWW, kWSW, kSWSW, kSSW, kSS, kSSE, kSESE, kESE, kEE, kENE, kNENE, kNNE, kNN, kNNW, kNWNW, kWNW}; }; #endif /* PNDAHMULTIPEAKANALYSIS_H_ */