DemoFumili.cxx

Go to the documentation of this file.
00001 // @(#)root/minuit2:$Id: DemoFumili.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 "GaussDataGen.h"
00011 #include "GaussianModelFunction.h"
00012 #include "Minuit2/MnFumiliMinimize.h"
00013 #include "Minuit2/FumiliStandardChi2FCN.h"
00014 #include "Minuit2/FunctionMinimum.h"
00015 #include "Minuit2/MnUserParameterState.h"
00016 #include "Minuit2/MnPrint.h"
00017 #include "Minuit2/MnMigrad.h"
00018 
00019 #include <iostream>
00020 
00021 using namespace ROOT::Minuit2;
00022 
00023 int main() {
00024 
00025   // generate the data (100 data points)
00026   GaussDataGen gdg(100);
00027 
00028   std::vector<double> pos = gdg.Positions();
00029   std::vector<double> meas = gdg.Measurements();
00030   std::vector<double> var = gdg.Variances();
00031 
00032   
00033 
00034   // Estimate initial starting values for parameters
00035   double x = 0.;
00036   double x2 = 0.;
00037   double norm = 0.;
00038   double dx = pos[1]-pos[0];
00039   double area = 0.;
00040   for(unsigned int i = 0; i < meas.size(); i++) {
00041     norm += meas[i];
00042     x += (meas[i]*pos[i]);
00043     x2 += (meas[i]*pos[i]*pos[i]);
00044     area += dx*meas[i];
00045   }
00046   double mean = x/norm;
00047   double rms2 = x2/norm - mean*mean;
00048   double rms = rms2 > 0. ? sqrt(rms2) : 1.;
00049 
00050 
00051   // create parameters
00052   MnUserParameters upar;
00053   upar.Add("mean", mean, 0.1);
00054   upar.Add("sigma", rms, 0.1);
00055   upar.Add("area", area, 0.1);
00056 
00057 
00058 
00059   // create FCN function for Fumili using model function 
00060   GaussianModelFunction modelFunction;
00061   FumiliStandardChi2FCN fFCN(modelFunction, meas, pos, var);
00062   
00063   { 
00064 
00065     std::cout << "Minimize using FUMILI : \n" << std::endl; 
00066     MnFumiliMinimize fumili(fFCN, upar); 
00067 
00068     
00069     // Minimize
00070     FunctionMinimum min = fumili();
00071 
00072     // output
00073     std::cout<<"minimum: "<<min<<std::endl;
00074   }
00075 
00076   {
00077 
00078     std::cout << "Minimize using MIGRAD : \n" << std::endl; 
00079     MnMigrad migrad(fFCN, upar);
00080 
00081     // Minimize
00082     FunctionMinimum min = migrad();
00083 
00084     // output
00085     std::cout<<"minimum: "<<min<<std::endl;
00086   }
00087 
00088 
00089   return 0;
00090 }

Generated on Tue Jul 5 14:37:12 2011 for ROOT_528-00b_version by  doxygen 1.5.1