/* *ExponentialCoreNorm .java * * Created on September 6, 2002, 3:28 PM */ package hep.aida.ref.function; /** * * @author serbo */ /** * Normalised Exponential (E) distribution in the form: * f = (1/N)*exp((x-origin)/exponent)) has 2 parameters, * Normalization Amplitude N is calculated by the "normalizationAmplitude" method */ public class ExponentialCoreNorm extends FunctionCore { protected boolean providesNormalization; public ExponentialCoreNorm(String str) { super(1, 1, new double[] {1.} ); setTitle("ExponentialCoreNorm::"+str); providesNormalization = true; String[] names = new String[] { "exponent" }; setParameterNames(names); } public ExponentialCoreNorm(String str, double[] pVal) { super(1, 1, pVal); setTitle("ExponentialCoreNorm::"+str); providesNormalization = true; String[] names = new String[] { "exponent" }; setParameterNames(names); } // Value of the function WITHOUT Normalization factor (as if N=1) public double functionValue(double[] var) { double val = Math.exp(var[0]*p[0]); return val; } // Each concrete FunctionCore has to implement those methods that deal with Gradients and Normalization public boolean providesGradient() { return true; } public double[] gradient(double[] var) { return new double[] { functionValue(var)*p[0] }; } public boolean providesParameterGradient() { return true; } public double[] parameterGradient(double[] var) { return new double[] { functionValue(var)*var[0] }; } public boolean providesNormalization() { return providesNormalization; } public double normalizationAmplitude(double[] xMin, double[] xMax) { double val = 0; val = (functionValue(new double[] {xMax[0]}) - functionValue(new double[] {xMin[0]}))/p[0]; //System.out.println("\t val="+val+"\t xMin="+xMin[0]+"\t xMax="+xMax[0]+"\t par="+p[0]); return val; } }