1 #include "../include/vertexfuncmaxfinderclassicstepper.h"
2 #include "../../util/inc/vector3.h"
3 #include "../include/vertexfunction.h"
5 namespace vertex_lcfi {
namespace ZVTOP
7 VertexFuncMaxFinderClassicStepper::VertexFuncMaxFinderClassicStepper()
11 Vector3 VertexFuncMaxFinderClassicStepper::findNearestMaximum(
const Vector3 & StartPoint, VertexFunction* VertexFunction)
14 _Function = VertexFunction;
15 _CurrentPos = StartPoint;
16 _CurrentValue = _Function->valueAt(_CurrentPos);
18 double step=4.0/1000.0;
26 _minimiseAlongAxis(
Vector3(step,0,0));
27 _minimiseAlongAxis(
Vector3(0,step,0));
28 _minimiseAlongAxis(
Vector3(0,0,step));
30 }
while (start != _CurrentPos && iterations < 1000);
31 if (1000 == iterations) std::cerr <<
"Max Finding: Outer loop too many iterations" << std::endl;
32 }
while (step<1.5/1000.0);
36 void VertexFuncMaxFinderClassicStepper::_minimiseAlongAxis(
const Vector3 & Step)
42 double Forward = _Function->valueAt(_CurrentPos+Step);
43 double Backward = _Function->valueAt(_CurrentPos-Step);
45 if (Forward != Backward)
47 if (Forward > Backward)
58 oldvalue = _CurrentValue;
60 _CurrentPos = _CurrentPos+(Step*direction);
61 _CurrentValue = _Function->valueAt(_CurrentPos);
63 if (_CurrentValue < oldvalue || iterations>1000)
68 std::cerr <<
"Max Finding - Too Many Iterations" <<std::endl;
69 _CurrentPos = startpos;
71 _CurrentValue = oldvalue;