ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/csander/ToyMC/minuit.cpp
Revision: 1.1.1.1 (vendor branch)
Committed: Tue Nov 4 13:41:08 2008 UTC (16 years, 5 months ago) by csander
Branch: ToyMc, MAIN
CVS Tags: start, HEAD
Changes since 1.1: +0 -0 lines
Error occurred while calculating annotation data.
Log Message:
program using toyMC to studie gamma jet calibration (using root and LVMini)

File Contents

# Content
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