1 |
#include "RooAbsPdf.h"
|
2 |
#include "RooAddPdf.h"
|
3 |
#include "RooRealVar.h"
|
4 |
#include "RooExponential.h"
|
5 |
#include "RooCMSShape.h"
|
6 |
#include "RooGenericPdf.h"
|
7 |
|
8 |
class CBackgroundModel
|
9 |
{
|
10 |
public:
|
11 |
CBackgroundModel():model(0){}
|
12 |
virtual ~CBackgroundModel() { delete model; }
|
13 |
RooAbsPdf *model;
|
14 |
};
|
15 |
|
16 |
class CExponential : public CBackgroundModel
|
17 |
{
|
18 |
public:
|
19 |
CExponential(RooRealVar &m, const Bool_t pass);
|
20 |
~CExponential();
|
21 |
RooRealVar *t;
|
22 |
};
|
23 |
|
24 |
class CErfExpo : public CBackgroundModel
|
25 |
{
|
26 |
public:
|
27 |
CErfExpo(RooRealVar &m, const Bool_t pass);
|
28 |
~CErfExpo();
|
29 |
RooRealVar *alfa, *beta, *gamma, *peak;
|
30 |
};
|
31 |
|
32 |
class CDoubleExp : public CBackgroundModel
|
33 |
{
|
34 |
public:
|
35 |
CDoubleExp(RooRealVar &m, const Bool_t pass);
|
36 |
~CDoubleExp();
|
37 |
RooExponential *exp1, *exp2;
|
38 |
RooRealVar *t1, *t2, *frac;
|
39 |
};
|
40 |
|
41 |
class CLinearExp : public CBackgroundModel
|
42 |
{
|
43 |
public:
|
44 |
CLinearExp(RooRealVar &m, const Bool_t pass);
|
45 |
~CLinearExp();
|
46 |
RooRealVar *a, *t;
|
47 |
};
|
48 |
|
49 |
class CQuadraticExp : public CBackgroundModel
|
50 |
{
|
51 |
public:
|
52 |
CQuadraticExp(RooRealVar &m, const Bool_t pass);
|
53 |
~CQuadraticExp();
|
54 |
RooRealVar *a1, *a2, *t;
|
55 |
};
|
56 |
|
57 |
//--------------------------------------------------------------------------------------------------
|
58 |
CExponential::CExponential(RooRealVar &m, const Bool_t pass)
|
59 |
{
|
60 |
char name[10];
|
61 |
if(pass) sprintf(name,"%s","Pass");
|
62 |
else sprintf(name,"%s","Fail");
|
63 |
|
64 |
char vname[50];
|
65 |
|
66 |
sprintf(vname,"t%s",name);
|
67 |
if(pass)
|
68 |
t = new RooRealVar(vname,vname,-0.1,-1.,0.);
|
69 |
else
|
70 |
t = new RooRealVar(vname,vname,-0.1,-1.,0.);
|
71 |
|
72 |
sprintf(vname,"background%s",name);
|
73 |
model = new RooExponential(vname,vname,m,*t);
|
74 |
}
|
75 |
|
76 |
CExponential::~CExponential()
|
77 |
{
|
78 |
delete t;
|
79 |
}
|
80 |
|
81 |
//--------------------------------------------------------------------------------------------------
|
82 |
CErfExpo::CErfExpo(RooRealVar &m, const Bool_t pass)
|
83 |
{
|
84 |
char name[10];
|
85 |
if(pass) sprintf(name,"%s","Pass");
|
86 |
else sprintf(name,"%s","Fail");
|
87 |
|
88 |
char vname[50];
|
89 |
|
90 |
if(pass) {
|
91 |
sprintf(vname,"alfa%s",name); alfa = new RooRealVar(vname,vname,50,5,200);
|
92 |
sprintf(vname,"beta%s",name); beta = new RooRealVar(vname,vname,0.01,0,10);
|
93 |
sprintf(vname,"gamma%s",name); gamma = new RooRealVar(vname,vname,0.1,0,1);
|
94 |
} else {
|
95 |
sprintf(vname,"alfa%s",name); alfa = new RooRealVar(vname,vname,50,5,200);
|
96 |
sprintf(vname,"beta%s",name); beta = new RooRealVar(vname,vname,0.01,0,10);
|
97 |
sprintf(vname,"gamma%s",name); gamma = new RooRealVar(vname,vname,0.1,0,1);
|
98 |
}
|
99 |
|
100 |
sprintf(vname,"peak%s",name);
|
101 |
peak = new RooRealVar(vname,vname,91.1876,85,97);
|
102 |
peak->setVal(91.1876);
|
103 |
peak->setConstant(kTRUE);
|
104 |
|
105 |
sprintf(vname,"background%s",name);
|
106 |
model = new RooCMSShape(vname,vname,m,*alfa,*beta,*gamma,*peak);
|
107 |
}
|
108 |
|
109 |
CErfExpo::~CErfExpo()
|
110 |
{
|
111 |
delete alfa;
|
112 |
delete beta;
|
113 |
delete gamma;
|
114 |
delete peak;
|
115 |
}
|
116 |
|
117 |
//--------------------------------------------------------------------------------------------------
|
118 |
CDoubleExp::CDoubleExp(RooRealVar &m, const Bool_t pass)
|
119 |
{
|
120 |
char name[10];
|
121 |
if(pass) sprintf(name,"%s","Pass");
|
122 |
else sprintf(name,"%s","Fail");
|
123 |
|
124 |
char vname[50];
|
125 |
|
126 |
if(pass) {
|
127 |
sprintf(vname,"t1%s",name); t1 = new RooRealVar(vname,vname,-0.20,-1.,0.);
|
128 |
sprintf(vname,"t2%s",name); t2 = new RooRealVar(vname,vname,-0.05,-1.,0.);
|
129 |
sprintf(vname,"frac%s",name); frac = new RooRealVar(vname,vname, 0.50, 0.,1.);
|
130 |
} else {
|
131 |
sprintf(vname,"t1%s",name); t1 = new RooRealVar(vname,vname,-0.20,-1.,0.);
|
132 |
sprintf(vname,"t2%s",name); t2 = new RooRealVar(vname,vname,-0.05,-1.,0.);
|
133 |
sprintf(vname,"frac%s",name); frac = new RooRealVar(vname,vname, 0.50, 0.,1.);
|
134 |
}
|
135 |
|
136 |
sprintf(vname,"exp1%s",name);
|
137 |
exp1 = new RooExponential(vname,vname,m,*t1);
|
138 |
sprintf(vname,"exp2%s",name);
|
139 |
exp2 = new RooExponential(vname,vname,m,*t2);
|
140 |
sprintf(vname,"background%s",name);
|
141 |
model = new RooAddPdf(vname,vname,RooArgList(*exp1,*exp2),RooArgList(*frac));
|
142 |
}
|
143 |
|
144 |
CDoubleExp::~CDoubleExp()
|
145 |
{
|
146 |
delete exp1;
|
147 |
delete exp2;
|
148 |
delete t1;
|
149 |
delete t2;
|
150 |
delete frac;
|
151 |
}
|
152 |
|
153 |
//--------------------------------------------------------------------------------------------------
|
154 |
CLinearExp::CLinearExp(RooRealVar &m, const Bool_t pass)
|
155 |
{
|
156 |
char name[10];
|
157 |
if(pass) sprintf(name,"%s","Pass");
|
158 |
else sprintf(name,"%s","Fail");
|
159 |
|
160 |
char aname[50];
|
161 |
sprintf(aname,"a%s",name);
|
162 |
a = new RooRealVar(aname,aname,-0,-10.,10.);
|
163 |
//a->setConstant(kTRUE);
|
164 |
|
165 |
char tname[50];
|
166 |
sprintf(tname,"t%s",name);
|
167 |
t = new RooRealVar(tname,tname,-1e-6,-10.,0.);
|
168 |
//t->setConstant(kTRUE);
|
169 |
|
170 |
char formula[200];
|
171 |
sprintf(formula,"(1+%s*m)*exp(%s*m)",aname,tname);
|
172 |
|
173 |
char vname[50]; sprintf(vname,"background%s",name);
|
174 |
model = new RooGenericPdf(vname,vname,formula,RooArgList(m,*a,*t));
|
175 |
}
|
176 |
|
177 |
CLinearExp::~CLinearExp()
|
178 |
{
|
179 |
delete a;
|
180 |
delete t;
|
181 |
}
|
182 |
|
183 |
//--------------------------------------------------------------------------------------------------
|
184 |
CQuadraticExp::CQuadraticExp(RooRealVar &m, const Bool_t pass)
|
185 |
{
|
186 |
char name[10];
|
187 |
if(pass) sprintf(name,"%s","Pass");
|
188 |
else sprintf(name,"%s","Fail");
|
189 |
|
190 |
char a1name[50];
|
191 |
sprintf(a1name,"a1%s",name);
|
192 |
a1 = new RooRealVar(a1name,a1name,0,-10,10.);
|
193 |
//a1->setConstant(kTRUE);
|
194 |
|
195 |
char a2name[50];
|
196 |
sprintf(a2name,"a2%s",name);
|
197 |
a2 = new RooRealVar(a2name,a2name,0.0,-10,10);
|
198 |
//a2->setConstant(kTRUE);
|
199 |
|
200 |
char tname[50];
|
201 |
sprintf(tname,"t%s",name);
|
202 |
t = new RooRealVar(tname,tname,-1e-6,-10.,0.);
|
203 |
//t->setConstant(kTRUE);
|
204 |
|
205 |
char formula[200];
|
206 |
sprintf(formula,"(1+%s*m+%s*m*m)*exp(%s*m)",a1name,a2name,tname);
|
207 |
|
208 |
char vname[50]; sprintf(vname,"background%s",name);
|
209 |
model = new RooGenericPdf(vname,vname,formula,RooArgList(m,*a1,*a2,*t));
|
210 |
}
|
211 |
|
212 |
CQuadraticExp::~CQuadraticExp()
|
213 |
{
|
214 |
delete a1;
|
215 |
delete a2;
|
216 |
delete t;
|
217 |
}
|