Пример #1
0
  // -------------------------------------------
  // Constructor
  // -------------------------------------------
  public MultiFit(
      double[] image,
      ArrayList<Peak> params,
      double tolerance,
      int imageSizeX,
      int imageSizeY,
      boolean zFitting) {
    assert (tolerance < 1.0e-1);
    assert (image != null && image.length == (imageSizeX * imageSizeY));

    this.tolerance = tolerance;

    this.imgData = image;
    this.imgSizeX = imageSizeX;
    this.imgSizeY = imageSizeY;

    this.fgData = new double[image.length];
    this.bgData = new double[image.length];
    this.bgCounts = new int[image.length];

    this.fits = new ArrayList<FitPeak>(params.size());
    for (Peak p : params) {
      FitPeak newFit = new FitPeak(p, 10);
      if (newFit.peak.hasStatus(PeakStatus.RUNNING)) {
        newFit.error = 0.0;
        newFit.errorOld = 0.0;
      } else {
        newFit.error = newFit.peak.getIError();
        newFit.errorOld = newFit.error;
      }

      if (zFitting) {
        calcWidthsFromZ(newFit);
      } else {
        newFit.peak.setXWidth(1.0 / (2.0 * Math.pow(newFit.peak.getXWidth(), 2)));
        newFit.peak.setYWidth(1.0 / (2.0 * Math.pow(newFit.peak.getYWidth(), 2)));
      }
      newFit.xc = (int) newFit.peak.getXCenter();
      newFit.yc = (int) newFit.peak.getYCenter();

      // possible bug casting fromm double to int in original version
      newFit.wx = calcWidth(newFit.peak.getXWidth(), -10);
      newFit.wy = calcWidth(newFit.peak.getYWidth(), -10);
      // todo these are annoying constants
      newFit.setClampHeight(1000.0);
      newFit.setClampBackground(100.0);
      newFit.setClampXCenter(1.0);
      newFit.setClampYCenter(1.0);
      newFit.setClampXWidth(0.3);
      newFit.setClampYWidth(0.3);
      newFit.setClampZCenter(0.1);

      this.fits.add(newFit);
    }
    calcFit();
    calcError();
  }