ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/JetFitAnalyzer/interface/HistoFitter.h
Revision: 1.2
Committed: Thu Nov 26 21:06:02 2009 UTC (15 years, 5 months ago) by dnisson
Content type: text/plain
Branch: MAIN
Changes since 1.1: +22 -21 lines
Log Message:
Begin eliminating errors

File Contents

# User Rev Content
1 dnisson 1.1 // Original Author: David Nisson
2     // A histogram fitter
3    
4     #ifndef UserCode_JetFitAnalyzer_HistoFitter_h
5     #define UserCode_JetFitAnalyzer_HistoFitter_h
6    
7     class HistoFitter {
8     public:
9    
10 dnisson 1.2 static double fcn(int &, double *, double &, double *, int);
11    
12 dnisson 1.1 enum TroubleStage {
13     T_NULL = 0,
14     T_SIMPLEX,
15     T_MIGRAD,
16     T_MINOS
17     };
18    
19     struct VectorHisto {
20 dnisson 1.2 std::vector< std::vector<double> > bins;
21 dnisson 1.1 double Xlo, Xhi, Ylo, Yhi;
22     } energy;
23    
24     struct Trouble {
25     TroubleStage occ;
26     int istat;
27     };
28    
29     struct FitResults {
30     TH2 *rebinnedHisto;
31     std::vector< double > chisquare;
32     std::vector< std::vector<TString> > pars;
33     std::vector< std::vector<double> > pval;
34     std::vector< std::vector<double> > perr;
35     std::vector< std::vector<double> > plo;
36     std::vector< std::vector<double> > phi;
37     };
38    
39     class ModelDefinition {
40     public:
41     int numberOfGaussians();
42     void setNumberOfGaussians(int);
43     int maxNumberOfGaussians() {
44     return theMaxNumberOfGaussians;
45     }
46     void setMaxNumberOfGaussians(int newNumberOfGaussians) {
47     theMaxNumberOfGaussians = newNumberOfGaussians;
48     }
49    
50     double fitFunction(double, double, double *);
51    
52     TFormula *getFormula();
53     void setFormula(TFormula *);
54     void indivParameter(int, std::string&, double&, double&, double&, double&);
55     void setIndivParameter(int, std::string, double, double, double, double);
56 dnisson 1.2 unsigned indivEnergy();
57     void setIndivEnergy(unsigned);
58     unsigned indivMeanX();
59     void setIndivMeanX(unsigned);
60     unsigned indivMeanY();
61     void setIndivMeanY(unsigned);
62 dnisson 1.1 virtual double chisquareSigma(double) = 0;
63     double formulaIntegral(double, double, double, double,
64     double*, double, double, double*);
65     std::vector< std::vector< double > > subtractCurrentFit(VectorHisto);
66     void initParsFromModelDef(std::vector<TString> &,
67     double *, double *, double *, double *,
68     int, FitResults);
69     void findInitialValues(std::vector<TString> &,
70     double *, double *, double *, double *,
71     int);
72     double initNewN();
73     double initNewMeanX();
74     double initNewMeanY();
75     void initParameters(TH2 *, TMinuit *, std::vector<TString> &,
76     double *, double *, double *, double *,
77     int, FitResults);
78    
79    
80     private:
81     TFormula *theIndivFormula; // formula for individual Gaussian
82     std::vector<std::string> indivParNames;
83     std::vector<double> indivParStarts;
84     std::vector<double> indivParStartSteps;
85     std::vector<double> indivParLowerLimit;
86     std::vector<double> indivParUpperLimit;
87 dnisson 1.2 unsigned theIndivEnergy;
88     unsigned theIndivMeanX;
89     unsigned theIndivMeanY;
90 dnisson 1.1 int theNumberOfGaussians;
91     int theMaxNumberOfGaussians;
92     };
93    
94 dnisson 1.2 int getNumberOfDegreesOfFreedom(VectorHisto, int);
95    
96     FitResults fit_histo(TH2 *hist,
97     std::vector<Trouble> &t,
98     int start_theNumberOfGaussians = 1,
99 dnisson 1.1 double P_cutoff_val = 0.5);
100    
101     ModelDefinition& curr_ModelDefinition();
102     void set_ModelDefinition(ModelDefinition *_mdef);
103    
104 dnisson 1.2 double fitFunction_TF2(double *, double *);
105     protected:
106     ModelDefinition *mdef;
107     static ModelDefinition *static_mdef;
108     };
109 dnisson 1.1
110     #endif