@Override
  public double valueOf(double[] pars) {
    double chi2 = 0.0;
    function.setParameters(pars);
    for (int loop = 0; loop < vectorX.getSize(); loop++) {
      double xv = vectorX.getValue(loop);
      double yv = vectorY.getValue(loop);
      // System.err.println(" DATA VALUES = " + xv + "  " + yv);
      if (xv >= function.getMin() && xv <= function.getMax()) {
        double fv = function.eval(xv);
        // System.err.println(" FUNCTION VALUE " + fv);
        if (yv != 0) {
          // System.err.println("adding to chi2 " + chi2
          // + "  " + (yv-fv)*(yv-fv)/fv + " x = " + xv
          // + " y = " + yv + " fv = " + fv);
          // double chi2step  = (yv-fv)*(yv-fv)/fv;
          // double chi2step2 = (yv-fv)*(yv-fv)/yv;
          // System.out.println(" CHI TEST " + chi2step + "  "
          //        + chi2step2);
          chi2 += (yv - fv) * (yv - fv);
        }
      }
    }

    // function.show();
    // System.err.println("\n************ CHI 2 = " + chi2);
    return chi2;
  }
 public FitterFunction(double[] x, double[] y, Function1D func) {
   vectorX = new DataVector();
   vectorY = new DataVector();
   vectorX.set(x);
   vectorY.set(y);
   function = func;
 }