ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/csander/ToyMC/minuit.cpp
Revision: 1.1
Committed: Tue Nov 4 13:41:08 2008 UTC (16 years, 5 months ago) by csander
Branch point for: ToyMc, MAIN
Log Message:
Initial revision

File Contents

# User Rev Content
1 csander 1.1 // @(#)root/minuit2:$Id$
2     // Author: L. Moneta 12/2005
3     /**
4     test of a pure minimization passing a user FCN class directly to the
5     TFitterMinuit
6    
7     */
8     #include "TH1.h"
9     #include "TF1.h"
10     #include "TRandom3.h"
11     #include "TVirtualFitter.h"
12     #include "TStyle.h"
13     #include "Minuit2/FCNBase.h"
14     #include "TFitterMinuit.h"
15     #include "TSystem.h"
16     #include "TStopwatch.h"
17    
18     #include <vector>
19     #include <iostream>
20    
21     class MyFCN : public ROOT::Minuit2::FCNBase {
22    
23     public:
24    
25     MyFCN(double a = 100, double b = 1) : fA(a), fB(b) {}
26    
27     double operator() (const std::vector<double> & x) const {
28     // Rosebrock function
29     return fA*(x[1] - x[0]*x[0])*(x[1] - x[0]*x[0]) + fB*(1 - x[0])*(1 - x[0]);
30     }
31    
32     double Up() const { return 1.; }
33    
34     private:
35    
36     double fA;
37     double fB;
38    
39     };
40    
41     int testMinimize() {
42    
43     gSystem->Load("libMinuit2");
44    
45     TFitterMinuit * minuit = new TFitterMinuit();
46    
47     MyFCN fcn;
48     minuit->SetMinuitFCN(&fcn);
49     // starting values
50     double startX = -1.2;
51     double startY = 1.0;
52     // if not limited (vhigh <= vlow)
53     minuit->SetParameter(0,"x",startX,0.1,0,0);
54     minuit->SetParameter(1,"y",startY,0.1,0,0);
55     minuit->SetPrintLevel(3);
56     // create Minimizer (default is Migrad)
57     minuit->CreateMinimizer();
58     int iret = minuit->Minimize();
59     if (iret != 0) {
60     return iret;
61     }
62    
63     std::cout << "\nTest performances........\n\n";
64    
65     // test performances
66     int nMin = 10000;
67     TStopwatch w;
68     w.Start();
69     for (int i = 0; i < nMin; ++i) {
70     minuit->Clear();
71     // reset -everything
72     //minuit->SetMinuitFCN(&fcn);
73     minuit->SetParameter(0,"x",startX,0.1,0,0);
74     minuit->SetParameter(1,"y",startY,0.1,0,0);
75     minuit->SetPrintLevel(0);
76     // create Minimizer (default is Migrad)
77     minuit->CreateMinimizer();
78     iret = minuit->Minimize();
79     if (iret != 0) {
80     std::cout << "Minimization failed - exit " ;
81     return iret;
82     }
83     }
84     w.Stop();
85     std::cout << "\nTime: \t" << w.RealTime() << " , " << w.CpuTime() << std::endl;
86     return 0;
87     }
88    
89     #ifndef __CINT__
90     int main() {
91     int iret = testMinimize();
92     if (iret != 0) {
93     std::cerr << "ERROR: Minimize test failed !" << std::endl;
94     return iret;
95     }
96     return 0;
97     }
98     #endif