ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitHzz4l/Efficiency/interface/ZSignals.h
Revision: 1.1
Committed: Tue Jun 12 21:31:43 2012 UTC (12 years, 11 months ago) by dkralph
Content type: text/plain
Branch: MAIN
CVS Tags: compiled, HEAD
Log Message:
First commit: A tag and probe selector for id, iso, or trigger efficiencies and a port of Kevin's fitting code.

File Contents

# Content
1 #include "TROOT.h"
2 #include "TH1D.h"
3 #include "RooDataSet.h"
4 #include "RooRealVar.h"
5 #include "RooAbsPdf.h"
6 #include "RooBreitWigner.h"
7 #include "RooCBShape.h"
8 #include "RooGaussian.h"
9 #include "RooFFTConvPdf.h"
10 #include "RooDataHist.h"
11 #include "RooHistPdf.h"
12 #include "RooVoigtianShape.h"
13 #include "RooKeysPdf.h"
14
15 class CSignalModel
16 {
17 public:
18 CSignalModel():model(0){}
19 virtual ~CSignalModel(){ delete model; }
20 RooAbsPdf *model;
21 };
22
23 class CBreitWignerConvCrystalBall : public CSignalModel
24 {
25 public:
26 CBreitWignerConvCrystalBall(RooRealVar &m, const Bool_t pass);
27 ~CBreitWignerConvCrystalBall();
28 RooRealVar *mass, *width;
29 RooBreitWigner *bw;
30 RooRealVar *mean, *sigma, *alpha, *n;
31 RooCBShape *cb;
32 };
33
34 class CMCTemplateConvGaussian : public CSignalModel
35 {
36 public:
37 CMCTemplateConvGaussian(RooRealVar &m, TH1D* hist, const Bool_t pass, RooRealVar *sigma0=0, int intOrder=1);
38 ~CMCTemplateConvGaussian();
39 RooRealVar *mean, *sigma;
40 RooGaussian *gaus;
41 TH1D *inHist;
42 RooDataHist *dataHist;
43 RooHistPdf *histPdf;
44 };
45
46 class CVoigtianCBShape : public CSignalModel
47 {
48 public:
49 CVoigtianCBShape(RooRealVar &m, const Bool_t pass);
50 ~CVoigtianCBShape();
51 RooRealVar *mass, *width;
52 RooRealVar *sigma, *alpha, *n;
53 };
54
55 class CMCDatasetConvGaussian : public CSignalModel
56 {
57 public:
58 CMCDatasetConvGaussian(RooRealVar &m, TTree* tree, const Bool_t pass, RooRealVar *sigma0=0);
59 ~CMCDatasetConvGaussian();
60 RooRealVar *mean, *sigma;
61 RooGaussian *gaus;
62 TTree *inTree;
63 RooDataSet *dataSet;
64 RooKeysPdf *keysPdf;
65 };
66
67 //--------------------------------------------------------------------------------------------------
68 CBreitWignerConvCrystalBall::CBreitWignerConvCrystalBall(RooRealVar &m, const Bool_t pass)
69 {
70 char name[10];
71 if(pass) sprintf(name,"%s","Pass");
72 else sprintf(name,"%s","Fail");
73
74 char vname[50];
75
76 sprintf(vname,"mass%s",name);
77 mass = new RooRealVar(vname,vname,91,80,100);
78 mass->setVal(91.1876);
79 mass->setConstant(kTRUE);
80
81 sprintf(vname,"width%s",name);
82 width = new RooRealVar(vname,vname,2.5,0.1,10);
83 width->setVal(2.4952);
84 width->setConstant(kTRUE);
85
86 sprintf(vname,"bw%s",name);
87 bw = new RooBreitWigner(vname,vname,m,*mass,*width);
88
89 if(pass) {
90 sprintf(vname,"mean%s",name); mean = new RooRealVar(vname,vname,0,-10,10);
91 sprintf(vname,"sigma%s",name); sigma = new RooRealVar(vname,vname,1,0.1,5);
92 sprintf(vname,"alpha%s",name); alpha = new RooRealVar(vname,vname,5,0,20);
93 sprintf(vname,"n%s",name); n = new RooRealVar(vname,vname,1,0,10);
94 } else {
95 sprintf(vname,"mean%s",name); mean = new RooRealVar(vname,vname,0,-10,10);
96 sprintf(vname,"sigma%s",name); sigma = new RooRealVar(vname,vname,1,0.1,5);
97 sprintf(vname,"alpha%s",name); alpha = new RooRealVar(vname,vname,5,0,20);
98 sprintf(vname,"n%s",name); n = new RooRealVar(vname,vname,1,0,10);
99 }
100 // n->setVal(1.0);
101 // n->setConstant(kTRUE);
102
103 sprintf(vname,"cb%s",name);
104 cb = new RooCBShape(vname,vname,m,*mean,*sigma,*alpha,*n);
105
106 sprintf(vname,"signal%s",name);
107 model = new RooFFTConvPdf(vname,vname,m,*bw,*cb);
108 }
109
110 CBreitWignerConvCrystalBall::~CBreitWignerConvCrystalBall()
111 {
112 delete mass;
113 delete width;
114 delete bw;
115 delete mean;
116 delete sigma;
117 delete alpha;
118 delete n;
119 delete cb;
120 }
121
122 //--------------------------------------------------------------------------------------------------
123 CMCTemplateConvGaussian::CMCTemplateConvGaussian(RooRealVar &m, TH1D* hist, const Bool_t pass, RooRealVar *sigma0, int intOrder)
124 {
125 char name[10];
126 if(pass) sprintf(name,"%s","Pass");
127 else sprintf(name,"%s","Fail");
128
129 char vname[50];
130
131 if(pass) {
132 sprintf(vname,"mean%s",name); mean = new RooRealVar(vname,vname,0,-10,10);
133 if(sigma0) { sigma = sigma0; }
134 else { sprintf(vname,"sigma%s",name); sigma = new RooRealVar(vname,vname,2,0,5); }
135 sprintf(vname,"gaus%s",name); gaus = new RooGaussian(vname,vname,m,*mean,*sigma);
136 } else {
137 sprintf(vname,"mean%s",name); mean = new RooRealVar(vname,vname,0,-10,10);
138 if(sigma0) { sigma = sigma0; }
139 else { sprintf(vname,"sigma%s",name); sigma = new RooRealVar(vname,vname,2,0,5); }
140 sprintf(vname,"gaus%s",name); gaus = new RooGaussian(vname,vname,m,*mean,*sigma);
141 }
142
143
144 sprintf(vname,"inHist_%s",hist->GetName());
145 inHist = (TH1D*)hist->Clone(vname);
146
147 sprintf(vname,"dataHist%s",name); dataHist = new RooDataHist(vname,vname,RooArgSet(m),inHist);
148 sprintf(vname,"histPdf%s",name); histPdf = new RooHistPdf(vname,vname,m,*dataHist,intOrder);
149 sprintf(vname,"signal%s",name); model = new RooFFTConvPdf(vname,vname,m,*histPdf,*gaus);
150 }
151
152 CMCTemplateConvGaussian::~CMCTemplateConvGaussian()
153 {
154 delete mean;
155 //delete sigma;
156 delete gaus;
157 delete inHist;
158 delete dataHist;
159 delete histPdf;
160 }
161
162 //--------------------------------------------------------------------------------------------------
163 CVoigtianCBShape::CVoigtianCBShape(RooRealVar &m, const Bool_t pass)
164 {
165 char name[10];
166 if(pass) sprintf(name,"%s","Pass");
167 else sprintf(name,"%s","Fail");
168
169 char vname[50];
170
171 sprintf(vname,"mass%s",name);
172 mass = new RooRealVar(vname,vname,91,80,100);
173
174 sprintf(vname,"width%s",name);
175 width = new RooRealVar(vname,vname,2.5,0.1,10);
176 width->setVal(2.4952);
177 width->setConstant(kTRUE);
178
179 if(pass) {
180 sprintf(vname,"sigma%s",name); sigma = new RooRealVar(vname,vname,1,0.1,10);
181 sprintf(vname,"alpha%s",name); alpha = new RooRealVar(vname,vname,5,0,20);
182 } else {
183 sprintf(vname,"sigma%s",name); sigma = new RooRealVar(vname,vname,1,0.1,10);
184 sprintf(vname,"alpha%s",name); alpha = new RooRealVar(vname,vname,5,0,20);
185 }
186
187 sprintf(vname,"n%s",name);
188 n = new RooRealVar(vname,vname,1,0,10);
189 n->setVal(1.0);
190
191 sprintf(vname,"signal%s",name);
192 model = new RooVoigtianShape(vname,vname,m,*mass,*sigma,*alpha,*n,*width,0);
193 }
194
195 CVoigtianCBShape::~CVoigtianCBShape()
196 {
197 delete mass;
198 delete width;
199 delete sigma;
200 delete alpha;
201 delete n;
202 }
203
204 //--------------------------------------------------------------------------------------------------
205 CMCDatasetConvGaussian::CMCDatasetConvGaussian(RooRealVar &m, TTree* tree, const Bool_t pass, RooRealVar *sigma0)
206 {
207 char name[10];
208 if(pass) sprintf(name,"%s","Pass");
209 else sprintf(name,"%s","Fail");
210
211 char vname[50];
212
213 if(pass) {
214 sprintf(vname,"mean%s",name); mean = new RooRealVar(vname,vname,0,-10,10);
215 if(sigma0) { sigma = sigma0; }
216 else { sprintf(vname,"sigma%s",name); sigma = new RooRealVar(vname,vname,2,0,5); }
217 sprintf(vname,"gaus%s",name); gaus = new RooGaussian(vname,vname,m,*mean,*sigma);
218 } else {
219 sprintf(vname,"mean%s",name); mean = new RooRealVar(vname,vname,0,-10,10);
220 if(sigma0) { sigma = sigma0; }
221 else { sprintf(vname,"sigma%s",name); sigma = new RooRealVar(vname,vname,2,0,5); }
222 sprintf(vname,"gaus%s",name); gaus = new RooGaussian(vname,vname,m,*mean,*sigma);
223 }
224
225 sprintf(vname,"inTree_%s",tree->GetName());
226 inTree = (TTree*)tree->Clone(vname);
227
228 sprintf(vname,"dataSet%s",name); dataSet = new RooDataSet(vname,vname,inTree,RooArgSet(m));
229 sprintf(vname,"keysPdf%s",name); keysPdf = new RooKeysPdf(vname,vname,m,*dataSet,RooKeysPdf::NoMirror,1);
230 sprintf(vname,"signal%s",name); model = new RooFFTConvPdf(vname,vname,m,*keysPdf,*gaus);
231 }
232
233 CMCDatasetConvGaussian::~CMCDatasetConvGaussian()
234 {
235 delete mean;
236 delete sigma;
237 delete gaus;
238 delete inTree;
239 delete dataSet;
240 delete keysPdf;
241 }