package org.freehep.math.minuit;
import java.util.List;
/**
*
* @version $Id: SimplexParameters.java 8584 2006-08-10 23:06:37Z duns $
*/
class SimplexParameters
{
SimplexParameters(List<Pair<Double, MnAlgebraicVector>> simpl, int jh, int jl)
{
theSimplexParameters = simpl;
theJHigh =jh;
theJLow = jl;
}
void update(double y, MnAlgebraicVector p)
{
theSimplexParameters.set(jh(), new Pair<Double, MnAlgebraicVector>(y, p));
if(y < theSimplexParameters.get(jl()).first) theJLow = jh();
int jh = 0;
for(int i = 1; i < theSimplexParameters.size(); i++)
{
if (theSimplexParameters.get(i).first > theSimplexParameters.get(jh).first) jh = i;
}
theJHigh = jh;
return;
}
List<Pair<Double, MnAlgebraicVector>> simplex()
{
return theSimplexParameters;
}
Pair<Double, MnAlgebraicVector> get(int i)
{
return theSimplexParameters.get(i);
}
int jh()
{
return theJHigh;
}
int jl()
{
return theJLow;
}
double edm()
{
return theSimplexParameters.get(jh()).first - theSimplexParameters.get(jl()).first;
}
MnAlgebraicVector dirin()
{
MnAlgebraicVector dirin = new MnAlgebraicVector(theSimplexParameters.size() - 1);
for(int i = 0; i < theSimplexParameters.size() - 1; i++)
{
double pbig = theSimplexParameters.get(0).second.get(i);
double plit = pbig;
for(int j = 0; j < theSimplexParameters.size(); j++)
{
if(theSimplexParameters.get(j).second.get(i) < plit) plit = theSimplexParameters.get(j).second.get(i);
if(theSimplexParameters.get(j).second.get(i) > pbig) pbig = theSimplexParameters.get(j).second.get(i);
}
dirin.set(i, pbig - plit);
}
return dirin;
}
private List<Pair<Double, MnAlgebraicVector>> theSimplexParameters;
private int theJHigh;
private int theJLow;
}