/* * PndAhHoughTransform.h * * Created on: May 14, 2013 * Author: Andreas Herten */ #ifndef PNDAHHOUGHTRANSFORM_H_ #define PNDAHHOUGHTRANSFORM_H_ #include "TH2D.h" class PndAhHoughTransform { public: PndAhHoughTransform(); PndAhHoughTransform(std::vector, std::vector, std::vector); PndAhHoughTransform(std::vector, std::vector, std::vector, double __maxAngle = 360., double __everyXDegrees = 30., bool __verbose = false, bool __keepHitOriginInfo = false); void SetXData(std::vector __x) {fVX = __x;}; void SetYData(std::vector __y) {fVY = __y;}; void SetRData(std::vector __r) {fVR = __r;}; void SetMaxAngle(double __maxAngle = 360.) {fMaxAngle = __maxAngle;}; // void SetAngleRange(); void SetAngleGranularity(double __everyXDegrees = 30.) {fEveryXDegrees = __everyXDegrees;}; void SetVerbose(bool __verbose = false) {fVerbose = __verbose;}; void SetHoughTransformingFunction(); void SetKeepHitOriginInfo(bool __keepInfo) {fKeepHitOriginInfo = __keepInfo;}; void StartEverything(); void SetManualHistLimits(double, double); TH2D * GetHistogram(bool useAutoLimits = true, TString histName = "HoughHist", TString histTitle = "HT histogram"); std::vector > Getrs() { return fVVrs;}; std::vector > > GetrsWithOriginInfo() { return fVpVrs;}; std::vector GetAngles() {return fVAngles;}; virtual ~PndAhHoughTransform(); protected: void DoEverything(); void DoGenerateAngles(); // void DoConformalMapping(); void DoHoughTransform(); // helper functions template std::vector > generateAllrsForAllXYRs (std::vector<_InputType>, std::vector<_InputType>, std::vector<_InputType>, std::vector<_InputType>); std::vector > > generateAllrsForAllXYRsWithOrigin (std::vector<_InputType>, std::vector<_InputType>, std::vector<_InputType>, std::vector<_InputType>); template std::vector<_DataType> generateAllrsForOneXYR(_InputIterator, _InputIterator, _DataType, _DataType, _DataType); template _DataType function_houghTrafo(_DataType (*trafoFunction)(_DataType, _DataType, _DataType, _DataType), _DataType, _DataType, _DataType, _DataType); template static _DataType function_generic_houghTrafo(_DataType, _DataType, _DataType, _DataType); private: void DoSetAutoHistLimits(); std::vector fVX; std::vector fVY; std::vector fVR; std::vector fVAngles; std::vector > fVVrs; std::vector, unsigned int> > fVpVrs; // outer vector: per hit, pair: vector of r per alpha_i and hit id double fMaxAngle; double fEveryXDegrees; double fYMin, fYMax; bool fKeepHitOriginInfo; // template double (*functionPointer_houghTrafo)(double, double, double, double); // (x, y, r; alpha) bool fHistLimitsAreSet; bool fVerbose; }; // class PndAhHoughOptions { // public: // PndAhHoughOptions(); // virtual ~PndAhHoughOptions(); // }; #endif /* PNDAHHOUGHTRANSFORM_H_ */