00001
00002
00003
00004
00005
00006
00007 package Sct.function;
00008
00009 import hep.aida.*;
00010
00015 public abstract class GenericFunction implements IFunction {
00016 protected int dim;
00017 protected String title;
00018 protected double[] params;
00019 protected String[] paramNames;
00020 protected String[] varNames;
00021
00023 public GenericFunction(int dimension, int params) {
00024 dim = dimension;
00025 varNames = new String[dimension];
00026 this.params = new double[params];
00027 paramNames = new String[params];
00028 title = getName();
00029 }
00030
00031 public hep.aida.IAnnotation annotation() {
00032 return null;
00033 }
00034
00035 public String codeletString() {
00036 return "codelet:" + this.getClass().getName() + ":file:";
00037 }
00038
00039 public int dimension() {
00040 return dim;
00041 }
00042
00043 public double[] gradient(double[] values) {
00044 return null;
00045 }
00046
00047 public int indexOfParameter(String str) {
00048 for (int i=0; i<params.length; i++) {
00049 if (paramNames[i].equals(str)) return i;
00050 }
00051 return -1;
00052 }
00053
00054 public boolean isEqual(hep.aida.IFunction iFunction) {
00055 return this==iFunction;
00056 }
00057
00058 public int numberOfParameters() {
00059 return params.length;
00060 }
00061
00062 public double parameter(String str) {
00063 return params[indexOfParameter(str)];
00064 }
00065
00066 public String[] parameterNames() {
00067 return paramNames;
00068 }
00069
00070 public double[] parameters() {
00071 return params;
00072 }
00073
00074 public boolean providesGradient() {
00075 return false;
00076 }
00077
00078 public void setParameter(String str, double param) throws java.lang.IllegalArgumentException {
00079 params[indexOfParameter(str)] = param;
00080 }
00081
00082 public void setParameters(double[] values) {
00083 if (values.length == params.length) params = values;
00084 }
00085
00086 public String variableName(int param) {
00087 return varNames[param];
00088 }
00089
00090 public String[] variableNames() {
00091 return varNames;
00092 }
00093
00094 public String title() {
00095 return title;
00096 }
00097
00098 public void setTitle(String title) {
00099 this.title = title;
00100 }
00101
00102 public abstract String getName();
00103 }