import hep.aida.*;
import java.util.Random;
import hep.aida.ref.function.*;
public class Example8 {

   public static void main(String[] argv) {

      IAnalysisFactory     af     = IAnalysisFactory.create();
      IDataPointSetFactory dpsf   = af.createDataPointSetFactory(null);
      IDataPointSet dataPointSet = dpsf.create("dummy","Simulacia linearnej zavislosti",2);

      Random r = new Random(1234567);
      for ( int i = 0; i<10; i++ ) {
        double x = 0.2*(i+1);
        double y = (1+0.05*r.nextGaussian()) * (3.5*x);
        double error =0.05*Math.abs(y);
        dataPointSet.addPoint();
        dataPointSet.point(i).coordinate(0).setValue(x);
        dataPointSet.point(i).coordinate(1).setValue(y);
        dataPointSet.point(i).coordinate(1).setErrorPlus(error);
      }
      IFunction f1 = new AbstractIFunction("Proportionality", 1, 1) {
            public double value(double[] v) { return p[0]*v[0]; }
      };
      f1.setParameters(new double[] {1. } );


      IFitFactory fitFactory = af.createFitFactory();
      IFitter fitter = fitFactory.createFitter("chi2","jminuit","noClone=\"true\"");
      IFitResult result = fitter.fit(dataPointSet,f1);
      System.out.println("quality= "+result.quality());
      System.out.println("p[0]= "+result.fittedParameters()[0]);
      IPlotter plotter = af.createPlotterFactory().create("Plot IDataPointSets");
      plotter.region(0).setXLimits(0.,2.2);
      plotter.region(0).plot(dataPointSet);
      plotter.currentRegion().plot(result.fittedFunction());
      plotter.show();
   }
}


