import hep.aida.*;
import java.util.Random;
import hep.aida.ref.function.*;
import sk.uniba.fmph.pocprak.ioutils.*;

public class Sila {
  static double[] time= new double[10000];
  static double[] deltav= new double[10000];

  static int nevent = 0;


  static void ReadData() throws Exception{
    double[] values;
    InTextFile in = InTextFile.open("narazy.txt");   //otvorenie textoveho suboru
    while (true){
      values = in.readlnDoubles();
      if(values==null) break;    //ak values==null nic nenacital je teda na konci suboru
      if(values.length==2){      //riadok je platny iba ak obsahuje dve cisla
        time[nevent]=values[0];
        deltav[nevent]=values[1];
        nevent++;
      }
    }
    in.close();   //zatvori textovy subor
  }




  public static void main(String[] args) throws Exception {
    Killer.createKiller();
    ReadData();
    //standardne riadky otvarajuce kniznicu JAIDA
    IAnalysisFactory af = IAnalysisFactory.create();
    IHistogramFactory hf = af.createHistogramFactory(null);

    //kreovanie prazdneho histogramu, 10 binov v intervale (10,20)
    IHistogram1D h = hf.createHistogram1D("Sila", 10, 10, 20);


    for (int i = 0; i < nevent; i++) {
      h.fill(time[i],particle.m*deltav[i]);   //plnenie histogramu
    }

    //definovanie fitovacej funkcie 1 premennej s troma fitovacimi parametrami
    IFunction f = new AbstractIFunction("const", 1, 1) {
            public double value(double[] v)
               { return p[0]; }
      };

    f.setParameters(new double[] {1.} ); //nastavenie pociatocnych hodnot parametrov

    //standardne dva riadky otvarajuce fitovaci kombajn
    IFitFactory fitFactory = af.createFitFactory();
    IFitter fitter = fitFactory.createFitter("chi2","jminuit","noClone=\"true\"");

    IFitResult result = fitter.fit(h,f);   //tu je spustenie fitovacieho kombajnu a vysledok

    IPlotterFactory pf = af.createPlotterFactory(); //otvorenie plotovacej fabriky

    IPlotterStyle style = pf.createPlotterStyle();
    style.dataStyle().setParameter("fillHistogramBars","false");//nebude vyfarbovat histogramy
    style.dataStyle().setParameter("functionLineColor","red"); //funkcie bude kreslit cervenou

    IPlotter plotter = pf.create();
    plotter.currentRegion().plot(h,style);//pouzije generovany style na kreslenie histogramu
    plotter.currentRegion().plot(result.fittedFunction(),style);//nakresli vysledok fitu

    plotter.show(); //vsetko zobrazi
  }
}
