Lowest Free Energy Path (LFEP) Algorithm (Mahmoud Moradi, 8/16/2013)
Finds the minimum free energy path between the minima in a 2D free energy map.
The algorithm is based on:
B. Ensing, A. Laio, M. Parrinello, M. L. Klein, "A recipe for the computation
of the free energy barrier and the lowest free energy path of concerted reactions."
J. Phys. Chem. B 2005, 109, 6676-6687

To compile:
> make
To test the bindary with the given example (free energy file: fe.txt; initial guess for minima: minima)
> make test
To clean:
> make clean

How to run:
./lfep -f fe.txt -m minima < prm

Options:
--freeenergy filename or -f filename
filename of a text file with free energy data points
--minima filename or -m filename
filename of a text file with a list of minima (the initial guess) to be used for the path

The program reads the rest of the parameters from standard input (e.g., "prm" file above)

Basic Rules:
Only the identifier words and the words/numbers followed by them (formatted exactly as discussed below) are read.

"RANGE [ real, real ], [ real, real ]"
[Xmin,Xmax],[Ymin,Ymax]: range of x and y to be considered for the calculations
default: "[0,1],[0,1]"

"BINS [ integer , integer ]"
[Nx , Ny]: Nx*Ny is the number of bins for the free energy map
default: "[64,64]"

"MINIMAFILE string"
filename to output the minima
default: "minima.txt"

"PATHFILE string"
filename to output the LFE path
default: "path.txt"

"SMOOTHPATHFILE string"
filename to output the smoothed LFE path (using Rational Bezier Spline Curve)
default: "smoothpath.txt"

"WEIGHT real"
path smoothing algorithm parameter: weight of the minima used in the path (the weighting is relative to the other points along the path)
default: "10.0"
"SPLINE real"
default: "0.001"
path smoothing algorithm parameter: dt; number of points on the path = 1.0/dt

"SIGMA real real"
sigma_x sigma_y: the search for minima will be (+/-sigma_x,+/-sigma_y) around the initial guess
default: "1.0 1.0"

"STEPS integer integer"
small_step large_step: the length of the steps taken (in terms of bin size). The two are usually the same but if you have a very detailed map you can use a larger number for the large_step. It will search based on the large step but move based on the small step.
default: 2 2
"ANGLES real real"
angle_step angle_range: On a circle centered around the current point it searches +/-angle_range around the angle that directs towards the next target minimum in the list. It doesn't look for all the points, it only takes angle_steps. So the number of points searched is 2*angle_step/angle_range. Both angles are in degrees.
default: 10 90

