double constante(double* x, double* par) {
  double y = par[0];
  return y;
}

double miaGaus(double* x, double* par) {
  double y = par[0]*exp(-(x[0]-par[1])*(x[0]-par[1])/(2.*par[2]*par[2]));
  return y;
}

void Fit() {
  TH1F histo("histo", "istogramma con gaussiana" , 100, -40.,40.);
  const int max=1000;
  const float mean=10;
  const float sigma=8;
  for (int i=0; i<max; ++i) 
    histo.Fill(gRandom->Gaus(mean, sigma));

  // histo.Fit("gaus");
  // histo.DrawCopy();

  TF1 mioConst("mioConst", constante, -40., 40., 1);
  mioConst.SetParameter(0,10.);
  mioConst.SetParName(0,"costante");

  TF1 miaGausRoot("miaGausRoot", miaGaus, -40., 40., 3);
  miaGausRoot.SetParLimits(2,0.,100000.); // il parametro 0 e' compreso tra (0,10000.)
  // double parameter[3]={100.,10.,12.};
  // mioConst.SetParameters(parameter);
  miaGausRoot.SetParameter(0,100.);
  miaGausRoot.SetParameter(1,1.);
  miaGausRoot.SetParameter(2,1.);
  //miaGausRoot.DrawCopy();

  histo.Fit("miaGausRoot");
  histo.DrawCopy();
  // cout << "il valore ottenuto dal fit e' " << mioConst.GetParameter(0) << endl;
}