00001 // @(#)root/minuit2:$Id: Quad12FMain.cxx 20880 2007-11-19 11:23:41Z rdm $ 00002 // Authors: M. Winkler, F. James, L. Moneta, A. Zsenei 2003-2005 00003 00004 /********************************************************************** 00005 * * 00006 * Copyright (c) 2005 LCG ROOT Math team, CERN/PH-SFT * 00007 * * 00008 **********************************************************************/ 00009 00010 #include "Quad12F.h" 00011 #include "Minuit2/FunctionMinimum.h" 00012 #include "Minuit2/MnMigrad.h" 00013 #include "Minuit2/MnUserParameters.h" 00014 #include "Minuit2/MnPrint.h" 00015 // #include "TimingUtilities/PentiumTimer.h" 00016 00017 // StackAllocator gStackAllocator; 00018 00019 using namespace ROOT::Minuit2; 00020 00021 int main() { 00022 00023 Quad12F fcn; 00024 00025 // PentiumTimer stopwatch; 00026 // stopwatch.start(); 00027 00028 // long long int start = stopwatch.lap().ticks(); 00029 // long long int stop = stopwatch.lap().ticks(); 00030 // std::cout<<"stop-start: "<<stop - start<<std::endl; 00031 // start = stopwatch.lap().ticks(); 00032 { 00033 //test constructor 00034 MnUserParameters upar; 00035 upar.Add("x", 1., 0.1); 00036 upar.Add("y", 1., 0.1); 00037 upar.Add("z", 1., 0.1); 00038 upar.Add("w", 1., 0.1); 00039 upar.Add("x0", 1., 0.1); 00040 upar.Add("y0", 1., 0.1); 00041 upar.Add("z0", 1., 0.1); 00042 upar.Add("w0", 1., 0.1); 00043 upar.Add("x1", 1., 0.1); 00044 upar.Add("y1", 1., 0.1); 00045 upar.Add("z1", 1., 0.1); 00046 upar.Add("w1", 1., 0.1); 00047 00048 MnMigrad migrad(fcn, upar); 00049 FunctionMinimum min = migrad(); 00050 std::cout<<"minimum: "<<min<<std::endl; 00051 } 00052 // stop = stopwatch.lap().ticks(); 00053 // std::cout<<"stop-start: "<<stop - start<<std::endl; 00054 /* 00055 00056 { 00057 //test constructor 00058 std::vector<double> par(8); 00059 std::vector<double> err(8); 00060 for(int i = 0; i < 8; i++) { 00061 par[i] = 1.; 00062 err[i] = 0.1; 00063 } 00064 MnMigrad migrad(fcn, par, err); 00065 FunctionMinimum min = migrad(); 00066 std::cout<<"minimum: "<<min<<std::endl; 00067 } 00068 00069 { 00070 //test edm Value 00071 std::vector<double> par(8); 00072 std::vector<double> err(8); 00073 for(int i = 0; i < 8; i++) { 00074 par[i] = 1.; 00075 err[i] = 0.1; 00076 } 00077 MnMigrad migrad(fcn, par, err); 00078 double edm = 1.e-1; 00079 FunctionMinimum min = migrad(20, edm); 00080 std::cout<<"minimum: "<<min<<std::endl; 00081 } 00082 00083 { 00084 //test # of iterations 00085 std::vector<double> par(4); 00086 std::vector<double> err(4); 00087 for(int i = 0; i < 4; i++) { 00088 par[i] = 1.; 00089 err[i] = 0.1; 00090 } 00091 MnMigrad migrad(fcn, par, err); 00092 int niter = 2; 00093 FunctionMinimum min = migrad(niter, 1.e-5); 00094 std::cout<<"minimum: "<<min<<std::endl; 00095 } 00096 */ 00097 00098 return 0; 00099 }