source: trunk/MagicSoft/Mars/mjobs/MJOptimize.h@ 7138

Last change on this file since 7138 was 7121, checked in by tbretz, 20 years ago
*** empty log message ***
File size: 4.3 KB
Line 
1#ifndef MARS_MJOptimize
2#define MARS_MJOptimize
3
4#ifndef MARS_MJob
5#include "MJob.h"
6#endif
7
8#ifndef ROOT_TArrayD
9#include <TArrayD.h>
10#endif
11
12class TMinuit;
13
14class MAlphaFitter;
15
16class MEvtLoop;
17class MParList;
18class MFilter;
19class MFilterList;
20class MFitParameters;
21class MFitParametersCalc;
22
23class MHMatrix;
24class MGeomCam;
25class MRead;
26class MReadTree;
27
28class MJOptimize : public MJob
29{
30public:
31 enum Optimizer_t
32 {
33 kMigrad, // Minimize by the method of Migrad
34 kSimplex, // Minimize by the method of Simplex
35 kMinimize, // Migrad + Simplex (if Migrad fails)
36 kMinos, // Minos error determination
37 kImprove, // Local minimum search
38 kSeek, // Minimize by the method of Monte Carlo
39 kNone // Skip optimization
40 };
41
42private:
43 Int_t fDebug; // -1 no output, 0 MJOptimize output, 1 PrintStatistics output
44 Int_t fNumEvents;
45
46 TList fRules;
47 TList fFilter;
48
49 void AddPoint(TList *l, Int_t idx, Float_t val) const;
50 TList *GetPlots() const;
51
52 MEvtLoop *fEvtLoop; //!
53
54 // Minuit Interface
55 static void fcn(Int_t &npar, Double_t *gin, Double_t &f, Double_t *par, Int_t iflag);
56 Double_t Fcn(const TArrayD &par, TMinuit *minuit=0);
57
58 Int_t Minuit(TMinuit &minuit, const char *cmd) const;
59 Int_t Migrad(TMinuit &minuit) const { return Minuit(minuit, "MIGRAD"); }
60 Int_t Simplex(TMinuit &minuit) const { return Minuit(minuit, "SIMPLEX"); }
61 Int_t Minimize(TMinuit &minuit) const { return Minuit(minuit, "MINIMIZE"); }
62 Int_t Seek(TMinuit &minuit) const { return Minuit(minuit, "SEEK"); }
63 Int_t Improve(TMinuit &minuit) const { return Minuit(minuit, "IMPROVE"); }
64 Int_t Minos(TMinuit &minuit) const { return Minuit(minuit, "MINOS"); }
65
66 TArrayD fParameters; //!
67 TArrayD fLimLo; //!
68 TArrayD fLimUp; //!
69 TArrayD fStep; //!
70
71 Optimizer_t fType;
72 UInt_t fNumMaxCalls;
73 Float_t fTolerance;
74 Int_t fTestTrain;
75
76 Bool_t Optimize(MEvtLoop &evtloop);
77
78protected:
79 TList fPreCuts;
80
81 TList fNamesOn;
82 TList fNamesOff;
83
84 TString fNameOut;
85
86 void AddRulesToMatrix(MHMatrix &m) const;
87 void SetupFilters(MFilterList &list, MFilter *filter=0) const;
88 Bool_t AddSequences(MRead &read, TList &list) const;
89 Bool_t FillMatrix(MReadTree &read, MParList &l, Bool_t userules=kFALSE);
90
91public:
92 MJOptimize();
93
94 // I/O
95 void AddSequenceOn(const char *fname, const char *dir="");
96 void AddSequenceOff(const char *fname, const char *dir="");
97
98 void ResetSequences();
99
100 // Interface for filter cuts
101 Int_t AddParameter(const char *rule);
102 void AddFilter(const char *rule);
103 void AddPreCut(const char *rule);
104 void AddPreCut(MFilter *f);
105
106 // Steering of optimization
107 void SetNumEvents(UInt_t n);
108 void SetDebug(UInt_t n);
109 void SetNameOut(const char *name="") { fNameOut = name; }
110 void SetOptimizer(Optimizer_t o);
111 void SetNumMaxCalls(UInt_t num=0) { fNumMaxCalls=num; }
112 void SetTolerance(Float_t tol=0) { fTolerance=tol; }
113 void EnableTestTrain(Int_t b=2) { fTestTrain=b; }
114
115 // Parameter access
116 void SetParameters(const TArrayD &par);
117 void SetParameter(Int_t idx, Double_t start, Double_t lo=0, Double_t up=0, Double_t step=-1)
118 {
119 if (fParameters.GetSize()<=idx)
120 {
121 fParameters.Set(idx+1);
122 fLimLo.Set(idx+1);
123 fLimUp.Set(idx+1);
124 fStep.Set(idx+1);
125 }
126
127 fParameters[idx] = start;
128 fLimLo[idx] = lo;
129 fLimUp[idx] = up;
130 if (step<=0)
131 fStep[idx] = start==0 ? 0.1 : TMath::Abs(start*0.15);
132 else
133 fStep[idx] = step;
134 }
135 void FixParameter(Int_t idx, Double_t start, Double_t lo=0, Double_t up=0, Double_t step=-1)
136 {
137 if (fParameters.GetSize()<=idx)
138 {
139 fParameters.Set(idx+1);
140 fLimLo.Set(idx+1);
141 fLimUp.Set(idx+1);
142 fStep.Set(idx+1);
143 }
144
145 fParameters[idx] = start;
146 fLimLo[idx] = 0;
147 fLimUp[idx] = 0;
148 fStep[idx] = 0;
149 }
150
151 const TArrayD &GetParameters() const { return fParameters; }
152
153 // Generalized optimizing routines
154 Bool_t Optimize(MParList &list);
155
156 ClassDef(MJOptimize, 0) // Class for optimization of the Supercuts
157};
158
159#endif
Note: See TracBrowser for help on using the repository browser.