ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/JetFitAnalyzer/interface/JetFitAnalyzer.h
Revision: 1.3
Committed: Fri Nov 13 03:57:48 2009 UTC (15 years, 5 months ago) by dnisson
Content type: text/plain
Branch: MAIN
Changes since 1.2: +100 -1 lines
Log Message:
Merged jetfit.cpp and jetfit.h into JetFitAnalyzer class

File Contents

# Content
1 #ifndef UserCode_JetFitAnalyzer_JetFitAnalyzer_h
2 #define UserCode_JetFitAnalyzer_JetFitAnalyzer_h
3
4 // system include files
5 #include <memory>
6
7 // user include files
8 #include "FWCore/Framework/interface/Frameworkfwd.h"
9 #include "FWCore/Framework/interface/EDAnalyzer.h"
10
11 #include "FWCore/Framework/interface/Event.h"
12 #include "FWCore/Framework/interface/MakerMacros.h"
13
14 #include "FWCore/ParameterSet/interface/ParameterSet.h"
15
16 #include "UserCode/JetFitAnalyzer/interface/jetfit.h"
17
18 #include "TH2.h"
19
20 #include <string>
21 #include <vector>
22
23 #include <TFormula.h>
24 #include <TString.h>
25 #include <TMinuit.h>
26 #include <TH2.h>
27
28 class JetFitAnalyzer : public edm::EDAnalyzer {
29 public:
30 explicit JetFitAnalyzer(const edm::ParameterSet&);
31 ~JetFitAnalyzer();
32
33
34 enum TroubleStage {
35 T_NULL = 0,
36 T_SIMPLEX,
37 T_MIGRAD,
38 T_MINOS
39 };
40
41 struct VectorHisto {
42 vector< vector<double> > bins;
43 double Xlo, Xhi, Ylo, Yhi;
44 } energy;
45
46 struct Trouble {
47 TroubleStage occ;
48 int istat;
49 };
50
51 struct FitResults {
52 TH2 *rebinnedHisto;
53 std::vector< double > chisquare;
54 std::vector< std::vector<TString> > pars;
55 std::vector< std::vector<double> > pval;
56 std::vector< std::vector<double> > perr;
57 std::vector< std::vector<double> > plo;
58 std::vector< std::vector<double> > phi;
59 };
60
61 class ModelDefinition {
62 public:
63 int numberOfGaussians();
64 void setNumberOfGaussians(int);
65
66 double fitFunction(double, double, double *);
67
68 TFormula *getFormula();
69 void setFormula(TFormula *);
70 void indivParameter(int, std::string&, double&, double&, double&, double&);
71 void setIndivParameter(int, std::string, double, double, double, double);
72 void get_special_par(int, int, double&, double&, double&, double&);
73 void set_special_par(int, int, double, double, double, double);
74 unsigned get_n_special_par_sets();
75 int get_indiv_max_E();
76 void set_indiv_max_E(int);
77 int get_indiv_max_x();
78 void set_indiv_max_x(int);
79 int get_indiv_max_y();
80 void set_indiv_max_y(int);
81 virtual double chisquare_error(double) = 0;
82 double formula_int(double, double, double, double,
83 double*, double, double, double*);
84 void par_init(TH2 *, TMinuit *, std::vector<TString> &,
85 double *, double *, double *, double *,
86 int, FitResults);
87
88
89 private:
90 TFormula *indiv_formula; // formula for individual Gaussian
91 std::vector<std::string> indiv_par_names;
92 std::vector<double> indiv_par_starts;
93 std::vector<double> indiv_par_start_steps;
94 std::vector<double> indiv_par_lo;
95 std::vector<double> indiv_par_hi;
96 std::vector< std::vector<double> > special_par_starts;
97 std::vector< std::vector<double> > special_par_start_steps;
98 std::vector< std::vector<double> > special_par_lo;
99 std::vector< std::vector<double> > special_par_hi;
100 int indiv_max_E;
101 int indiv_max_x;
102 int indiv_max_y;
103 int theNumberOfGaussians;
104 };
105
106 FitResults fit_histo(TH2 *hist, std::vector<Trouble> &t,
107 void (*cc_minuit)(TMinuit *, TH2 *, int) = 0,
108 int start_ngauss = 0,
109 int rebinX = 1, int rebinY = 1,
110 double P_cutoff_val = 0.5);
111
112 ModelDefinition& curr_ModelDefinition();
113 void set_ModelDefinition(ModelDefinition *_mdef);
114
115 bool get_ignorezero();
116 void set_ignorezero(bool);
117
118 double fit_fcn_TF2(double *, double *);
119
120 protected:
121 virtual void beginJob(const edm::EventSetup&);
122 virtual void analyze(const edm::Event&, const edm::EventSetup&);
123 virtual void endJob();
124 virtual TH2D * make_histo(const edm::Event&, const edm::EventSetup&) = 0;
125 virtual jetfit::model_def& make_model_def(const edm::Event&,
126 const edm::EventSetup&,
127 TH2 *hist) = 0;
128 virtual void analyze_results(jetfit::results, std::vector<jetfit::trouble>,
129 TH2 *) = 0;
130 void set_user_minuit(void (*_user_minuit)(TMinuit *, TH2 *, int) ) {
131 user_minuit = _user_minuit;
132 }
133
134 private:
135 // ----------member data ---------------------------
136 bool ignorezero_;
137 int rebinX_;
138 int rebinY_;
139 double P_cutoff_val_;
140 void (*user_minuit)(TMinuit *, TH2 *, int);
141 };
142
143 //
144 // constants, enums and typedefs
145 //
146
147 //
148 // static data member definitions
149 //
150
151 #endif