00001 // @(#)root/minuit2:$Id: Quad4FMain.cxx 24400 2008-06-20 07:28:49Z moneta $ 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 "Quad4F.h" 00011 #include "Minuit2/FunctionMinimum.h" 00012 #include "Minuit2/MnMigrad.h" 00013 #include "Minuit2/MnHesse.h" 00014 #include "Minuit2/MnUserParameters.h" 00015 #include "Minuit2/MnPrint.h" 00016 // #include "TimingUtilities/PentiumTimer.h" 00017 00018 // StackAllocator gStackAllocator; 00019 00020 using namespace ROOT::Minuit2; 00021 00022 int main() { 00023 00024 Quad4F fcn; 00025 00026 // PentiumTimer stopwatch; 00027 // stopwatch.start(); 00028 00029 // long long int start = stopwatch.lap().ticks(); 00030 // long long int stop = stopwatch.lap().ticks(); 00031 // std::cout<<"stop-start: "<<stop - start<<std::endl; 00032 // start = stopwatch.lap().ticks(); 00033 { 00034 //test constructor 00035 MnUserParameters upar; 00036 upar.Add("x", 1., 0.1); 00037 upar.Add("y", 1., 0.1); 00038 upar.Add("z", 1., 0.1); 00039 upar.Add("w", 1., 0.1); 00040 00041 MnMigrad migrad(fcn, upar); 00042 FunctionMinimum min = migrad(); 00043 std::cout<<"minimum: "<<min<<std::endl; 00044 } 00045 { 00046 // use analytical derivatives 00047 Quad4FGrad gfcn; 00048 00049 MnUserParameters upar; 00050 upar.Add("x", 1., 0.1); 00051 upar.Add("y", 1., 0.1); 00052 upar.Add("z", 1., 0.1); 00053 upar.Add("w", 1., 0.1); 00054 00055 MnMigrad migrad(gfcn, upar); 00056 FunctionMinimum min = migrad(); 00057 std::cout<<"minimum with grad calculation : "<<min<<std::endl; 00058 00059 // try to run hesse 00060 MnHesse hesse; 00061 hesse( gfcn, min); 00062 std::cout<<"minimum after hesse: "<<min<<std::endl; 00063 } 00064 00065 // stop = stopwatch.lap().ticks(); 00066 // std::cout<<"stop-start: "<<stop - start<<std::endl; 00067 /* 00068 00069 { 00070 //test constructor 00071 std::vector<double> par(4); 00072 std::vector<double> err(4); 00073 for(int i = 0; i < 4; i++) { 00074 par[i] = 1.; 00075 err[i] = 0.1; 00076 } 00077 MnMigrad migrad(fcn, par, err); 00078 FunctionMinimum min = migrad(); 00079 std::cout<<"minimum: "<<min<<std::endl; 00080 } 00081 00082 { 00083 //test edm Value 00084 std::vector<double> par(4); 00085 std::vector<double> err(4); 00086 for(int i = 0; i < 4; i++) { 00087 par[i] = 1.; 00088 err[i] = 0.1; 00089 } 00090 MnMigrad migrad(fcn, par, err); 00091 double edm = 1.e-1; 00092 FunctionMinimum min = migrad(20, edm); 00093 std::cout<<"minimum: "<<min<<std::endl; 00094 } 00095 00096 { 00097 //test # of iterations 00098 std::vector<double> par(4); 00099 std::vector<double> err(4); 00100 for(int i = 0; i < 4; i++) { 00101 par[i] = 1.; 00102 err[i] = 0.1; 00103 } 00104 MnMigrad migrad(fcn, par, err); 00105 int niter = 2; 00106 FunctionMinimum min = migrad(niter, 1.e-5); 00107 std::cout<<"minimum: "<<min<<std::endl; 00108 } 00109 */ 00110 00111 return 0; 00112 }