MINT2
HyperBinningMakerPhaseBinning.h
Go to the documentation of this file.
1 #ifndef HYPERBINNINGMAKERPHASEBINNING_HH
2 #define HYPERBINNINGMAKERPHASEBINNING_HH
3 
4 // HyperPlot includes
5 #include "Mint/MessageService.h"
7 #include "Mint/LoadingBar.h"
8 #include "Mint/CyclicPhaseBins.h"
9 
10 // Root includes
11 #include "TMath.h"
12 
13 // std includes
14 #include <complex>
15 
16 
17 
18 
39 
40  private:
41 
44 
47  double _walkSizeFrac;
48 
51 
52  private:
53 
54  int splitByCoord(int volumeNumber, int dimension, HyperPoint& coord);
59  //Functions for determining the bin boundaries / bin number from a given bin number / phase.
60 
61  int getBinNumFromFunc(HyperPoint& point);
63  int getBinNumFromFuncVal(double phase);
65  double getLowBinBoundary(double phase);
67  double getHighBinBoundary(double phase);
69  double closestBinBoundary(double val);
72  //Functions to evaluate derivatives and second derivatives of the phase motion
73 
78  HyperPoint getGradPos(HyperPoint& point, double funcValAtPoint);
82  double getSecondDerivative(HyperPoint& point, HyperPoint& vector, double funcValAtPoint, double& deriv);
85  int splitDimFromGrad(int volumeNumber, HyperPoint gradient);
89  virtual int gradientSplit(int binNumber , int& dimension);
95  int systematicSplit (int volumeNumber, int dimension, double valAtCenter, HyperPoint gradient);
104  HyperPointSet getSplitCorners( int volumeNumber );
106  HyperPointSet getSplitFaces ( int volumeNumber );
108  HyperPointSet getSplitEdges ( int volumeNumber );
111  HyperPoint orderAndTestSplitPoints(HyperPointSet& points, HyperPoint& point, double valAtPoint, HyperPoint gradient);
115  int randomWalkSplit(int volumeNumber, int dimension);
119  void walkOrthogonal(HyperPoint& point, HyperCuboid& walkLimits);
122  void walk(HyperPoint& point, HyperCuboid& walkLimits);
127  public:
128 
129  HyperBinningMakerPhaseBinning(const HyperCuboid& binningRange, HyperFunction* func);
132  virtual void makeBinning();
135  void setNumBinPairs(int binpairs);
138  void setBinEdges(std::vector<double> binEdges);
141  virtual int gradientSplitAll();
142 
143 
146 };
147 
148 #endif
149 
virtual int gradientSplit(int binNumber, int &dimension)
int splitByCoord(int volumeNumber, int dimension, HyperPoint &coord)
HyperPointSet getSplitFaces(int volumeNumber)
HyperPointSet getSplitEdges(int volumeNumber)
int systematicSplit(int volumeNumber, int dimension, double valAtCenter, HyperPoint gradient)
HyperPoint orderAndTestSplitPoints(HyperPointSet &points, HyperPoint &point, double valAtPoint, HyperPoint gradient)
void walkOrthogonal(HyperPoint &point, HyperCuboid &walkLimits)
double getSecondDerivative(HyperPoint &point, HyperPoint &vector, double funcValAtPoint, double &deriv)
int splitDimFromGrad(int volumeNumber, HyperPoint gradient)
void walk(HyperPoint &point, HyperCuboid &walkLimits)
void setBinEdges(std::vector< double > binEdges)
int randomWalkSplit(int volumeNumber, int dimension)
HyperPoint getGradPos(HyperPoint &point, double funcValAtPoint)
HyperPointSet getSplitCorners(int volumeNumber)
HyperBinningMakerPhaseBinning(const HyperCuboid &binningRange, HyperFunction *func)