コード例 #1
0
Double_t GetRand(TF1 *func, Double_t X_MIN, Double_t X_MAX, int seed )
{
	Double_t Y_MAX;
	Y_MAX = func->GetMaximum();
	//std::cout << "Y_MAX=" << Y_MAX << std::endl;
	TRandom2* r = new TRandom3(seed);
	
	Double_t x =0;
	Double_t y   = r->Uniform();
	Double_t f_y = 3e+6;
	
	while(1)
	{
		x   = r->Uniform(X_MIN, X_MAX);
		//std::cout << "x=" << x << std::endl;
		y   = r->Uniform(0, Y_MAX);
		//std::cout << "y=" << y << std::endl;
		f_y = func->Eval(x);
		//std::cout << "f_y=" << f_y << std::endl;

		if(f_y > y)
			break;
	}
	//std::cout << "x budur=" << x << std::endl;
	return x;

}
コード例 #2
0
void ThreeDFit() {
     
  const int n = 1000; 
  double x[n], y[n], z[n], v[n]; 
  double ev = 0.1;

  // generate the data
  TRandom2 r; 
  for (int i = 0; i < n; ++i) { 
     x[i] = r.Uniform(0,10);
     y[i] = r.Uniform(0,10);
     z[i] = r.Uniform(0,10); 
     v[i] = sin(x[i] ) + cos(y[i]) + z[i] + r.Gaus(0,ev);         
  }

  // create a 3d binned data structure
  ROOT::Fit::BinData data(n,3); 
  double xx[3];
  for(int i = 0; i < n; ++i) {
     xx[0] = x[i]; 
     xx[1] = y[i]; 
     xx[2] = z[i]; 
     // add the 3d-data coordinate, the predictor value (v[i])  and its errors
     data.Add(xx, v[i], ev); 
  }

  TF3 * f3 = new TF3("f3","[0] * sin(x) + [1] * cos(y) + [2] * z",0,10,0,10,0,10);
  f3->SetParameters(2,2,2);
  ROOT::Fit::Fitter fitter;
  // wrapped the TF1 in a IParamMultiFunction interface for teh Fitter class
  ROOT::Math::WrappedMultiTF1 wf(*f3,3);
  fitter.SetFunction(wf); 
  //
  bool ret = fitter.Fit(data); 
  if (ret) { 
     const ROOT::Fit::FitResult & res = fitter.Result(); 
     // print result (should be around 1) 
     res.Print(std::cout);
     // copy all fit result info (values, chi2, etc..) in TF3
     f3->SetFitResult(res);
     // test fit p-value (chi2 probability)
     double prob = res.Prob();
     if (prob < 1.E-2) 
        Error("exampleFit3D","Bad data fit - fit p-value is %f",prob);
     else
        std::cout << "Good fit : p-value  = " << prob << std::endl;

  }
  else 
     Error("exampleFit3D","3D fit failed");
}