19 ParameterSet(
const TString & inputName,
const double & inputStep,
const double & inputMini,
const double & inputMaxi) :
24 std::cout <<
"setting name = " << inputName << std::endl;
46 virtual double scale(
const double &
pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const = 0;
50 std::cout <<
"ERROR: the resetParameters method must be defined in each scale function" << std::endl;
51 std::cout <<
"Please add it to the scaleFunction you are using" << std::endl;
55 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
const T & parScale,
const std::vector<int> & parScaleOrder,
const int muonType) = 0;
56 virtual void setParameters(
double* Start,
double* Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
57 const T & parResol,
const std::vector<int> & parResolOrder,
58 const std::vector<double> & parStep,
59 const std::vector<double> & parMin,
60 const std::vector<double> & parMax,
63 std::cout <<
"The method setParameters must be implemented for this scale function" << std::endl;
66 virtual int parNum()
const {
return parNum_; }
70 virtual void setPar(
double* Start,
double* Step,
double* Mini,
double* Maxi,
int* ind,
71 TString* parname,
const T & parScale,
const std::vector<int> & parScaleOrder,
72 double* thisStep,
double* thisMini,
double* thisMaxi, TString* thisParName ) {
73 for(
int iPar=0; iPar<this->parNum_; ++iPar ) {
74 Start[iPar] = parScale[iPar];
75 Step[iPar] = thisStep[iPar];
76 Mini[iPar] = thisMini[iPar];
77 Maxi[iPar] = thisMaxi[iPar];
78 ind[iPar] = parScaleOrder[iPar];
79 parname[iPar] = thisParName[iPar];
82 virtual void setPar(
double* Start,
double* Step,
double* Mini,
double* Maxi,
int* ind,
83 TString* parname,
const T & parResol,
const std::vector<int> & parResolOrder,
const std::vector<ParameterSet> & parSet ) {
84 if(
int(parSet.size()) != this->parNum_ ) {
85 std::cout <<
"Error: wrong number of parameter initializations = " << parSet.size() <<
". Number of parameters is " << this->parNum_ << std::endl;
88 for(
int iPar=0; iPar<this->parNum_; ++iPar ) {
89 Start[iPar] = parResol[iPar];
90 Step[iPar] = parSet[iPar].step;
91 Mini[iPar] = parSet[iPar].mini;
92 Maxi[iPar] = parSet[iPar].maxi;
93 ind[iPar] = parResolOrder[iPar];
94 parname[iPar] = parSet[iPar].name;
115 double scale(
const double &
pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const override {
return pt; }
117 void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
const T & parScale,
const std::vector<int> & parScaleOrder,
const int muonType)
override {}
127 double scale(
const double &
pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const override {
128 double ampl(0),
phase(0), twist(0), ampl2(0), freq2(0), phase2(0);
131 if ( eta < parScale[4] ) {
132 ampl = parScale[1];
phase = parScale[2]; ampl2 = parScale[21]; freq2 = parScale[22]; phase2 = parScale[23];
133 twist = parScale[3]*(eta-parScale[4])+parScale[7]*(parScale[4]-parScale[8])+parScale[11]*parScale[8];
135 }
else if ( parScale[4] <= eta && eta < parScale[8] ) {
136 ampl = parScale[5];
phase = parScale[6];
137 twist = parScale[7]*(eta-parScale[8])+parScale[11]*parScale[8] ;
139 }
else if ( parScale[8] <= eta && eta < parScale[12] ) {
140 ampl = parScale[9];
phase = parScale[10];
141 twist = parScale[11]*
eta;
143 }
else if ( parScale[12] <= eta && eta < parScale[16] ) {
144 ampl = parScale[13];
phase = parScale[14];
145 twist = parScale[15]*(eta-parScale[12])+parScale[11]*parScale[12];
147 }
else if ( parScale[16] < eta ) {
148 ampl = parScale[17];
phase = parScale[18]; ampl2 = parScale[24]; freq2 = parScale[25]; phase2 = parScale[26];
149 twist = parScale[19]*(eta-parScale[16])+parScale[15]*(parScale[16]-parScale[12])+parScale[11]*parScale[12];
153 double curv = (1.+parScale[0])*((
double)chg/pt
156 -ampl2*
sin((
int)freq2*phi+phase2)
158 return 1./((double)chg*curv);
163 for(
int i=0;
i<this->parNum_; ++
i ) {
164 scaleVec->push_back(0);
168 TString* parname,
const T & parScale,
const std::vector<int> & parScaleOrder,
const int muonType)
override {
170 double thisStep[] = {0.000001,
171 0.000001, 0.01, 0.000001, 0.01,
172 0.000001, 0.01, 0.000001, 0.01,
173 0.000001, 0.01, 0.000001, 0.01,
174 0.000001, 0.01, 0.000001, 0.01,
175 0.000001, 0.01, 0.000001,
177 0.000001, 0.01, 0.01,
178 0.000001, 0.01, 0.01};
180 TString thisParName[] = {
"Curv global scale" 181 ,
"Phi ampl eta vbwd" ,
"Phi phase eta vbwd" ,
"Twist eta vbwd",
"vbwd/bwd bndry" 182 ,
"Phi ampl eta bwd" ,
"Phi phase eta bwd" ,
"Twist eta bwd",
"bwd/bar bndry" 183 ,
"Phi ampl eta bar" ,
"Phi phase eta bar" ,
"Twist eta bar",
"bar/fwd bndry" 184 ,
"Phi ampl eta fwd" ,
"Phi phase eta fwd" ,
"Twist eta fwd",
"fwd/vfwd bndry" 185 ,
"Phi ampl eta vfwd" ,
"Phi phase eta vfwd" ,
"Twist eta vfwd" 186 ,
"Charge depend bias" 187 ,
"Phi ampl eta vbwd (2nd harmon.)",
"Phi freq. eta vbwd (2nd harmon.)",
"Phi phase eta vbwd (2nd harmon.)" 188 ,
"Phi ampl eta vfwd (2nd harmon.)",
"Phi freq. eta vfwd (2nd harmon.)",
"Phi phase eta vfwd (2nd harmon.)"};
190 if( muonType == 1 ) {
191 double thisMini[] = {-0.1, -0.3, -3.1416, -0.3, -2.6, -0.3, -3.1416, -0.3, -2.6, -0.3, -3.1416, -0.3, 0., -0.3, -3.1416, -0.3, 0. , -0.3, -3.1416, -0.3, -0.1, -0.3, 1., -3.1416, -0.3, 1., -3.1416};
192 double thisMaxi[] = { 0.1, 0.3, 3.1416, 0.3, 0. , 0.3, 3.1416, 0.3, 0. , 0.3, 3.1416, 0.3, 2.6 , 0.3, 3.1416, 0.3, 2.6 , 0.3, 3.1416, 0.3, 0.1, 0.3, 5., 3.1416, 0.3, 5., 3.1416};
193 this->setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
195 double thisMini[] = {-0.1, -0.3, -3.1416, -0.3, -2.6, -0.3, -3.1416, -0.3, -2.6, -0.3, -3.1416, -0.3, 0., -0.3, -3.1416, -0.3, 0. , -0.3, -3.1416, -0.3, -0.1, -0.3, 1., -3.1416, -0.3, 1., -3.1416};
196 double thisMaxi[] = { 0.1, 0.3, 3.1416, 0.3, 0. , 0.3, 3.1416, 0.3, 0. , 0.3, 3.1416, 0.3, 2.6 , 0.3, 3.1416, 0.3, 2.6 , 0.3, 3.1416, 0.3, 0.1, 0.3, 5., 3.1416, 0.3, 5., 3.1416};
197 this->setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
200 void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
201 const T & parScale,
const std::vector<int> & parScaleOrder,
202 const std::vector<double> & parStep,
203 const std::vector<double> & parMin,
204 const std::vector<double> & parMax,
205 const int muonType)
override 207 if( (
int(parStep.size()) != this->parNum_) || (
int(parMin.size()) != this->parNum_) || (
int(parMax.size()) != this->parNum_) ) {
208 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
209 std::cout <<
"parNum = " << this->parNum_ << std::endl;
210 std::cout <<
"parStep.size() = " << parStep.size() << std::endl;
211 std::cout <<
"parMin.size() = " << parMin.size() << std::endl;
212 std::cout <<
"parMax.size() = " << parMax.size() << std::endl;
215 std::vector<ParameterSet> parSet(this->parNum_);
217 parSet[0] =
ParameterSet(
"Curv global scale", parStep[0], parMin[0], parMax[0] );
218 parSet[1] =
ParameterSet(
"Phi ampl vbwd", parStep[1], parMin[1], parMax[1] );
219 parSet[2] =
ParameterSet(
"Phi phase vbwd", parStep[2], parMin[2], parMax[2] );
220 parSet[3] =
ParameterSet(
"Twist vbwd", parStep[3], parMin[3], parMax[3] );
221 parSet[4] =
ParameterSet(
"vbwd/bwd bndry", parStep[4], parMin[4], parMax[4] );
222 parSet[5] =
ParameterSet(
"Phi ampl bwd", parStep[5], parMin[5], parMax[5] );
223 parSet[6] =
ParameterSet(
"Phi phase bwd", parStep[6], parMin[6], parMax[6] );
224 parSet[7] =
ParameterSet(
"Twist bwd", parStep[7], parMin[7], parMax[7] );
225 parSet[8] =
ParameterSet(
"bwd/bar bndry", parStep[8], parMin[8], parMax[8] );
226 parSet[9] =
ParameterSet(
"Phi ampl bar", parStep[9], parMin[9], parMax[9] );
227 parSet[10] =
ParameterSet(
"Phi phase bar", parStep[10],parMin[10],parMax[10] );
228 parSet[11] =
ParameterSet(
"Twist bar", parStep[11],parMin[11],parMax[11] );
229 parSet[12] =
ParameterSet(
"bar/fwd bndry", parStep[12],parMin[12],parMax[12] );
230 parSet[13] =
ParameterSet(
"Phi ampl fwd", parStep[13],parMin[13],parMax[13] );
231 parSet[14] =
ParameterSet(
"Phi phase fwd", parStep[14],parMin[14],parMax[14] );
232 parSet[15] =
ParameterSet(
"Twist fwd", parStep[15],parMin[15],parMax[15] );
233 parSet[16] =
ParameterSet(
"fwd/vfwd bndry", parStep[16],parMin[16],parMax[16] );
234 parSet[17] =
ParameterSet(
"Phi ampl vfwd", parStep[17],parMin[17],parMax[17] );
235 parSet[18] =
ParameterSet(
"Phi phase vfwd", parStep[18],parMin[18],parMax[18] );
236 parSet[19] =
ParameterSet(
"Twist vfwd", parStep[19],parMin[19],parMax[19] );
237 parSet[20] =
ParameterSet(
"Charge depend bias", parStep[20],parMin[20],parMax[20] );
238 parSet[21] =
ParameterSet(
"Phi ampl vbwd (2nd)", parStep[21],parMin[21],parMax[21] );
239 parSet[22] =
ParameterSet(
"Phi freq vbwd (2nd)", parStep[22],parMin[22],parMax[22] );
240 parSet[23] =
ParameterSet(
"Phi phase vbwd (2nd)",parStep[23],parMin[23],parMax[23] );
241 parSet[24] =
ParameterSet(
"Phi ampl vfwd (2nd)", parStep[24],parMin[24],parMax[24] );
242 parSet[25] =
ParameterSet(
"Phi freq vfwd (2nd)", parStep[25],parMin[25],parMax[25] );
243 parSet[26] =
ParameterSet(
"Phi phase vfwd (2nd)",parStep[26],parMin[26],parMax[26] );
246 std::cout <<
"setting parameters" << std::endl;
247 for(
int i=0;
i<this->parNum_; ++
i ) {
249 <<
", parMin["<<
i<<
"] = " << parMin[
i]
250 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
252 this->setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, parSet );
268 double scale(
const double &
pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const override {
270 double p0 = parScale[0];
272 if ( eta<-2.1 && eta>-2.4 && phi<-2.35619449019 && phi>-3.14159265359 ) deltaK = parScale[1];
273 else if ( eta<-2.1 && eta>-2.4 && phi<-1.57079632679 && phi>-2.35619449019 ) deltaK = parScale[2];
274 else if ( eta<-2.1 && eta>-2.4 && phi<-0.785398163397 && phi>-1.57079632679 ) deltaK = parScale[3];
275 else if ( eta<-2.1 && eta>-2.4 && phi<0.0 && phi>-0.785398163397 ) deltaK = parScale[4];
276 else if ( eta<-2.1 && eta>-2.4 && phi<0.785398163397 && phi>0.0 ) deltaK = parScale[5];
277 else if ( eta<-2.1 && eta>-2.4 && phi<1.57079632679 && phi>0.785398163397 ) deltaK = parScale[6];
278 else if ( eta<-2.1 && eta>-2.4 && phi<2.35619449019 && phi>1.57079632679 ) deltaK = parScale[7];
279 else if ( eta<-2.1 && eta>-2.4 && phi<3.14159265359 && phi>2.35619449019 ) deltaK = -(parScale[1]+parScale[2]+parScale[3]+parScale[4]+parScale[5]+parScale[6]+parScale[7]);
281 else if ( eta<-1.5 && eta>-2.1 && phi<-2.35619449019 && phi>-3.14159265359 ) deltaK = parScale[8];
282 else if ( eta<-1.5 && eta>-2.1 && phi<-1.57079632679 && phi>-2.35619449019 ) deltaK = parScale[9];
283 else if ( eta<-1.5 && eta>-2.1 && phi<-0.785398163397 && phi>-1.57079632679 ) deltaK = parScale[10];
284 else if ( eta<-1.5 && eta>-2.1 && phi<0.0 && phi>-0.785398163397 ) deltaK = parScale[11];
285 else if ( eta<-1.5 && eta>-2.1 && phi<0.785398163397 && phi>0.0 ) deltaK = parScale[12];
286 else if ( eta<-1.5 && eta>-2.1 && phi<1.57079632679 && phi>0.785398163397 ) deltaK = parScale[13];
287 else if ( eta<-1.5 && eta>-2.1 && phi<2.35619449019 && phi>1.57079632679 ) deltaK = parScale[14];
288 else if ( eta<-1.5 && eta>-2.1 && phi<3.14159265359 && phi>2.35619449019 ) deltaK = -(parScale[8]+parScale[9]+parScale[10]+parScale[11]+parScale[12]+parScale[13]+parScale[14]);
290 else if ( eta<-0.9 && eta>-1.5 && phi<-2.35619449019 && phi>-3.14159265359 ) deltaK = parScale[15];
291 else if ( eta<-0.9 && eta>-1.5 && phi<-1.57079632679 && phi>-2.35619449019 ) deltaK = parScale[16];
292 else if ( eta<-0.9 && eta>-1.5 && phi<-0.785398163397 && phi>-1.57079632679 ) deltaK = parScale[17];
293 else if ( eta<-0.9 && eta>-1.5 && phi<0.0 && phi>-0.785398163397 ) deltaK = parScale[18];
294 else if ( eta<-0.9 && eta>-1.5 && phi<0.785398163397 && phi>0.0 ) deltaK = parScale[19];
295 else if ( eta<-0.9 && eta>-1.5 && phi<1.57079632679 && phi>0.785398163397 ) deltaK = parScale[20];
296 else if ( eta<-0.9 && eta>-1.5 && phi<2.35619449019 && phi>1.57079632679 ) deltaK = parScale[21];
297 else if ( eta<-0.9 && eta>-1.5 && phi<3.14159265359 && phi>2.35619449019 ) deltaK = -(parScale[15]+parScale[16]+parScale[17]+parScale[18]+parScale[19]+parScale[20]+parScale[21]);
299 else if ( eta<0.9 && eta>-0.9 && phi<-2.35619449019 && phi>-3.14159265359 ) deltaK = parScale[22];
300 else if ( eta<0.9 && eta>-0.9 && phi<-1.57079632679 && phi>-2.35619449019 ) deltaK = parScale[23];
301 else if ( eta<0.9 && eta>-0.9 && phi<-0.785398163397 && phi>-1.57079632679 ) deltaK = parScale[24];
302 else if ( eta<0.9 && eta>-0.9 && phi<0.0 && phi>-0.785398163397 ) deltaK = parScale[25];
303 else if ( eta<0.9 && eta>-0.9 && phi<0.785398163397 && phi>0.0 ) deltaK = parScale[26];
304 else if ( eta<0.9 && eta>-0.9 && phi<1.57079632679 && phi>0.785398163397 ) deltaK = parScale[27];
305 else if ( eta<0.9 && eta>-0.9 && phi<2.35619449019 && phi>1.57079632679 ) deltaK = parScale[28];
306 else if ( eta<0.9 && eta>-0.9 && phi<3.14159265359 && phi>2.35619449019 ) deltaK = -(parScale[22]+parScale[23]+parScale[24]+parScale[25]+parScale[26]+parScale[27]+parScale[28]);
308 else if ( eta<1.5 && eta>0.9 && phi<-2.35619449019 && phi>-3.14159265359 ) deltaK = parScale[29];
309 else if ( eta<1.5 && eta>0.9 && phi<-1.57079632679 && phi>-2.35619449019 ) deltaK = parScale[30];
310 else if ( eta<1.5 && eta>0.9 && phi<-0.785398163397 && phi>-1.57079632679 ) deltaK = parScale[31];
311 else if ( eta<1.5 && eta>0.9 && phi<0.0 && phi>-0.785398163397 ) deltaK = parScale[32];
312 else if ( eta<1.5 && eta>0.9 && phi<0.785398163397 && phi>0.0 ) deltaK = parScale[33];
313 else if ( eta<1.5 && eta>0.9 && phi<1.57079632679 && phi>0.785398163397 ) deltaK = parScale[34];
314 else if ( eta<1.5 && eta>0.9 && phi<2.35619449019 && phi>1.57079632679 ) deltaK = parScale[35];
315 else if ( eta<1.5 && eta>0.9 && phi<3.14159265359 && phi>2.35619449019 ) deltaK = -(parScale[29]+parScale[30]+parScale[31]+parScale[32]+parScale[33]+parScale[34]+parScale[35]);
317 else if ( eta<2.1 && eta>1.5 && phi<-2.35619449019 && phi>-3.14159265359 ) deltaK = parScale[36];
318 else if ( eta<2.1 && eta>1.5 && phi<-1.57079632679 && phi>-2.35619449019 ) deltaK = parScale[37];
319 else if ( eta<2.1 && eta>1.5 && phi<-0.785398163397 && phi>-1.57079632679 ) deltaK = parScale[38];
320 else if ( eta<2.1 && eta>1.5 && phi<0.0 && phi>-0.785398163397 ) deltaK = parScale[39];
321 else if ( eta<2.1 && eta>1.5 && phi<0.785398163397 && phi>0.0 ) deltaK = parScale[40];
322 else if ( eta<2.1 && eta>1.5 && phi<1.57079632679 && phi>0.785398163397 ) deltaK = parScale[41];
323 else if ( eta<2.1 && eta>1.5 && phi<2.35619449019 && phi>1.57079632679 ) deltaK = parScale[42];
324 else if ( eta<2.1 && eta>1.5 && phi<3.14159265359 && phi>2.35619449019 ) deltaK = -(parScale[36]+parScale[37]+parScale[38]+parScale[39]+parScale[40]+parScale[41]+parScale[42]);
326 else if ( eta<2.4 && eta>2.1 && phi<-2.35619449019 && phi>-3.14159265359 ) deltaK = parScale[43];
327 else if ( eta<2.4 && eta>2.1 && phi<-1.57079632679 && phi>-2.35619449019 ) deltaK = parScale[44];
328 else if ( eta<2.4 && eta>2.1 && phi<-0.785398163397 && phi>-1.57079632679 ) deltaK = parScale[45];
329 else if ( eta<2.4 && eta>2.1 && phi<0.0 && phi>-0.785398163397 ) deltaK = parScale[46];
330 else if ( eta<2.4 && eta>2.1 && phi<0.785398163397 && phi>0.0 ) deltaK = parScale[47];
331 else if ( eta<2.4 && eta>2.1 && phi<1.57079632679 && phi>0.785398163397 ) deltaK = parScale[48];
332 else if ( eta<2.4 && eta>2.1 && phi<2.35619449019 && phi>1.57079632679 ) deltaK = parScale[49];
333 else if ( eta<2.4 && eta>2.1 && phi<3.14159265359 && phi>2.35619449019 ) deltaK = -(parScale[43]+parScale[44]+parScale[45]+parScale[46]+parScale[47]+parScale[48]+parScale[49]);
335 std::cout <<
"This should really not happen, this muon has eta = " << eta <<
"and phi = " << phi << std::endl;
340 double curv = (double)chg/pt;
341 return 1./((double)chg*(1+p0)*(curv+deltaK));
346 for(
int i=0;
i<this->parNum_; ++
i ) {
347 scaleVec->push_back(0);
351 TString* parname,
const T & parScale,
const std::vector<int> & parScaleOrder,
const int muonType)
override {
353 double thisStep[] = {
355 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001
358 TString thisParName[] = {
360 "deltaK bin1",
"deltaK bin2",
"deltaK bin3",
"deltaK bin4",
"deltaK bin5",
"deltaK bin6",
"deltaK bin7",
"deltaK bin8",
"deltaK bin9",
"deltaK bin10",
"deltaK bin11",
"deltaK bin12",
"deltaK bin13",
"deltaK bin14",
"deltaK bin15",
"deltaK bin16",
"deltaK bin17",
"deltaK bin18",
"deltaK bin19",
"deltaK bin20",
"deltaK bin21",
"deltaK bin22",
"deltaK bin23",
"deltaK bin24",
"deltaK bin25",
"deltaK bin26",
"deltaK bin27",
"deltaK bin28",
"deltaK bin29",
"deltaK bin30",
"deltaK bin31",
"deltaK bin32",
"deltaK bin33",
"deltaK bin34",
"deltaK bin35",
"deltaK bin36",
"deltaK bin37",
"deltaK bin38",
"deltaK bin39",
"deltaK bin40",
"deltaK bin41",
"deltaK bin42",
"deltaK bin43",
"deltaK bin44",
"deltaK bin45",
"deltaK bin46",
"deltaK bin47",
"deltaK bin48",
"deltaK bin49" 363 if( muonType == 1 ) {
364 double thisMini[] = {
366 -0.005, -0.005, -0.005, -0.005, -0.005, -0.005, -0.005,
367 -0.005, -0.005, -0.005, -0.005, -0.005, -0.005, -0.005,
368 -0.005, -0.005, -0.005, -0.005, -0.005, -0.005, -0.005,
369 -0.005, -0.005, -0.005, -0.005, -0.005, -0.005, -0.005,
370 -0.005, -0.005, -0.005, -0.005, -0.005, -0.005, -0.005,
371 -0.005, -0.005, -0.005, -0.005, -0.005, -0.005, -0.005,
372 -0.005, -0.005, -0.005, -0.005, -0.005, -0.005, -0.005
374 double thisMaxi[] = {
376 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005,
377 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005,
378 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005,
379 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005,
380 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005,
381 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005,
382 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005
384 this->setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
386 double thisMini[] = {
388 -0.005, -0.005, -0.005, -0.005, -0.005, -0.005, -0.005,
389 -0.005, -0.005, -0.005, -0.005, -0.005, -0.005, -0.005,
390 -0.005, -0.005, -0.005, -0.005, -0.005, -0.005, -0.005,
391 -0.005, -0.005, -0.005, -0.005, -0.005, -0.005, -0.005,
392 -0.005, -0.005, -0.005, -0.005, -0.005, -0.005, -0.005,
393 -0.005, -0.005, -0.005, -0.005, -0.005, -0.005, -0.005,
394 -0.005, -0.005, -0.005, -0.005, -0.005, -0.005, -0.005
396 double thisMaxi[] = {
398 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005,
399 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005,
400 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005,
401 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005,
402 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005,
403 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005,
404 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005
406 this->setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
409 void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
410 const T & parScale,
const std::vector<int> & parScaleOrder,
411 const std::vector<double> & parStep,
412 const std::vector<double> & parMin,
413 const std::vector<double> & parMax,
414 const int muonType)
override 416 if( (
int(parStep.size()) != this->parNum_) || (
int(parMin.size()) != this->parNum_) || (
int(parMax.size()) != this->parNum_) ) {
417 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
418 std::cout <<
"parNum = " << this->parNum_ << std::endl;
419 std::cout <<
"parStep.size() = " << parStep.size() << std::endl;
420 std::cout <<
"parMin.size() = " << parMin.size() << std::endl;
421 std::cout <<
"parMax.size() = " << parMax.size() << std::endl;
424 std::vector<ParameterSet> parSet(this->parNum_);
426 parSet[0] =
ParameterSet(
"Curv global scale", parStep[0], parMin[0], parMax[0] );
427 parSet[1] =
ParameterSet(
"deltaK bin1", parStep[1], parMin[1], parMax[1] );
428 parSet[2] =
ParameterSet(
"deltaK bin2", parStep[2], parMin[2], parMax[2] );
429 parSet[3] =
ParameterSet(
"deltaK bin3", parStep[3], parMin[3], parMax[3] );
430 parSet[4] =
ParameterSet(
"deltaK bin4", parStep[4], parMin[4], parMax[4] );
431 parSet[5] =
ParameterSet(
"deltaK bin5", parStep[5], parMin[5], parMax[5] );
432 parSet[6] =
ParameterSet(
"deltaK bin6", parStep[6], parMin[6], parMax[6] );
433 parSet[7] =
ParameterSet(
"deltaK bin7", parStep[7], parMin[7], parMax[7] );
434 parSet[8] =
ParameterSet(
"deltaK bin9", parStep[8], parMin[8], parMax[8] );
435 parSet[9] =
ParameterSet(
"deltaK bin10", parStep[9], parMin[9], parMax[9] );
436 parSet[10] =
ParameterSet(
"deltaK bin11", parStep[10], parMin[10], parMax[10] );
437 parSet[11] =
ParameterSet(
"deltaK bin12", parStep[11], parMin[11], parMax[11] );
438 parSet[12] =
ParameterSet(
"deltaK bin13", parStep[12], parMin[12], parMax[12] );
439 parSet[13] =
ParameterSet(
"deltaK bin14", parStep[13], parMin[13], parMax[13] );
440 parSet[14] =
ParameterSet(
"deltaK bin15", parStep[14], parMin[14], parMax[14] );
441 parSet[15] =
ParameterSet(
"deltaK bin17", parStep[15], parMin[15], parMax[15] );
442 parSet[16] =
ParameterSet(
"deltaK bin18", parStep[16], parMin[16], parMax[16] );
443 parSet[17] =
ParameterSet(
"deltaK bin19", parStep[17], parMin[17], parMax[17] );
444 parSet[18] =
ParameterSet(
"deltaK bin20", parStep[18], parMin[18], parMax[18] );
445 parSet[19] =
ParameterSet(
"deltaK bin21", parStep[19], parMin[19], parMax[19] );
446 parSet[20] =
ParameterSet(
"deltaK bin22", parStep[20], parMin[20], parMax[20] );
447 parSet[21] =
ParameterSet(
"deltaK bin23", parStep[21], parMin[21], parMax[21] );
448 parSet[22] =
ParameterSet(
"deltaK bin25", parStep[22], parMin[22], parMax[22] );
449 parSet[23] =
ParameterSet(
"deltaK bin26", parStep[23], parMin[23], parMax[23] );
450 parSet[24] =
ParameterSet(
"deltaK bin27", parStep[24], parMin[24], parMax[24] );
451 parSet[25] =
ParameterSet(
"deltaK bin28", parStep[25], parMin[25], parMax[25] );
452 parSet[26] =
ParameterSet(
"deltaK bin29", parStep[26], parMin[26], parMax[26] );
453 parSet[27] =
ParameterSet(
"deltaK bin30", parStep[27], parMin[27], parMax[27] );
454 parSet[28] =
ParameterSet(
"deltaK bin31", parStep[28], parMin[28], parMax[28] );
455 parSet[29] =
ParameterSet(
"deltaK bin33", parStep[29], parMin[29], parMax[29] );
456 parSet[30] =
ParameterSet(
"deltaK bin34", parStep[30], parMin[30], parMax[30] );
457 parSet[31] =
ParameterSet(
"deltaK bin35", parStep[31], parMin[31], parMax[31] );
458 parSet[32] =
ParameterSet(
"deltaK bin36", parStep[32], parMin[32], parMax[32] );
459 parSet[33] =
ParameterSet(
"deltaK bin37", parStep[33], parMin[33], parMax[33] );
460 parSet[34] =
ParameterSet(
"deltaK bin38", parStep[34], parMin[34], parMax[34] );
461 parSet[35] =
ParameterSet(
"deltaK bin39", parStep[35], parMin[35], parMax[35] );
462 parSet[36] =
ParameterSet(
"deltaK bin41", parStep[36], parMin[36], parMax[36] );
463 parSet[37] =
ParameterSet(
"deltaK bin42", parStep[37], parMin[37], parMax[37] );
464 parSet[38] =
ParameterSet(
"deltaK bin43", parStep[38], parMin[38], parMax[38] );
465 parSet[39] =
ParameterSet(
"deltaK bin44", parStep[39], parMin[39], parMax[39] );
466 parSet[40] =
ParameterSet(
"deltaK bin45", parStep[40], parMin[40], parMax[40] );
467 parSet[41] =
ParameterSet(
"deltaK bin46", parStep[41], parMin[41], parMax[41] );
468 parSet[42] =
ParameterSet(
"deltaK bin47", parStep[42], parMin[42], parMax[42] );
469 parSet[43] =
ParameterSet(
"deltaK bin49", parStep[43], parMin[43], parMax[43] );
470 parSet[44] =
ParameterSet(
"deltaK bin50", parStep[44], parMin[44], parMax[44] );
471 parSet[45] =
ParameterSet(
"deltaK bin51", parStep[45], parMin[45], parMax[45] );
472 parSet[46] =
ParameterSet(
"deltaK bin52", parStep[46], parMin[46], parMax[46] );
473 parSet[47] =
ParameterSet(
"deltaK bin53", parStep[47], parMin[47], parMax[47] );
474 parSet[48] =
ParameterSet(
"deltaK bin54", parStep[48], parMin[48], parMax[48] );
475 parSet[49] =
ParameterSet(
"deltaK bin55", parStep[49], parMin[49], parMax[49] );
477 std::cout <<
"setting parameters" << std::endl;
478 for(
int i=0;
i<this->parNum_; ++
i ) {
480 <<
", parMin["<<
i<<
"] = " << parMin[
i]
481 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
483 this->setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, parSet );
501 virtual void smear(
double &
pt,
double &
eta,
double &
phi,
const double *
y,
const std::vector<double> & parSmear) = 0;
504 gRandom_ =
new TRandom();
511 theta = atan(1/cotgth_);
527 void smear(
double &
pt,
double &
eta,
double &
phi,
const double *
y,
const std::vector<double> & parSmear)
override { }
533 void smear(
double &
pt,
double &
eta,
double &
phi,
const double *
y,
const std::vector<double> & parSmear)
override {
534 pt = pt*(1.0+y[0]*parSmear[0]*
pt);
535 phi = phi*(1.0+y[1]*parSmear[1]);
536 double tmp = 2*atan(
exp(-eta));
537 cotgth_ =
cos(tmp)/
sin(tmp)*(1.0+y[2]*parSmear[2]);
544 void smear(
double &
pt,
double &
eta,
double &
phi,
const double *
y,
const std::vector<double> & parSmear)
override {
545 pt = pt*(1.0+y[0]*parSmear[0]*pt+y[1]*parSmear[1]*std::fabs(eta));
546 phi = phi*(1.0+y[2]*parSmear[2]);
547 double tmp = 2*atan(
exp(-eta));
548 cotgth_ =
cos(tmp)/
sin(tmp)*(1.0+y[3]*parSmear[3]);
555 void smear(
double &
pt,
double &
eta,
double &
phi,
const double *
y,
const std::vector<double> & parSmear)
override {
556 pt = pt*(1.0+y[0]*parSmear[0]*pt+y[1]*parSmear[1]*std::fabs(eta));
557 phi = phi*(1.0+y[2]*parSmear[2]);
558 double tmp = 2*atan(
exp(-eta));
559 cotgth_ =
cos(tmp)/
sin(tmp)*(1.0+y[3]*parSmear[3]+y[4]*parSmear[4]*std::fabs(eta));
568 void smear(
double &
pt,
double &
eta,
double &
phi,
const double *
y,
const std::vector<double> & parSmear)
override {
569 pt = pt*(1.0+y[0]*parSmear[0]*pt+y[1]*parSmear[1]*std::fabs(eta)+y[5]*parSmear[5]*
pow(pt,2));
570 phi = phi*(1.0+y[2]*parSmear[2]);
571 double tmp = 2*atan(
exp(-eta));
572 cotgth_ =
cos(tmp)/
sin(tmp)*(1.0+y[3]*parSmear[3]+y[4]*parSmear[4]*std::fabs(eta));
579 void smear(
double &
pt,
double &
eta,
double &
phi,
const double *
y,
const std::vector<double> & parSmear)
override {
580 pt = pt*(1.0+y[0]*parSmear[0]*pt+y[1]*parSmear[1]*std::fabs(eta)+y[5]*parSmear[5]*
pow(pt,2));
581 phi = phi*(1.0+y[2]*parSmear[2]+y[6]*parSmear[6]*
pt);
582 double tmp = 2*atan(
exp(-eta));
583 cotgth_ =
cos(tmp)/
sin(tmp)*(1.0+y[3]*parSmear[3]+y[4]*parSmear[4]*std::fabs(eta));
591 void smear(
double &
pt,
double &
eta,
double &
phi,
const double *
y,
const std::vector<double> & parSmear)
override {
592 double sigmaSmear = 0;
593 double sigmaPtAl = 0;
594 double sigmaPtMisal = 0;
595 double ptPart = parSmear[0] + parSmear[1]*1/pt + pt*parSmear[2];
596 double fabsEta = std::fabs(eta);
598 sigmaPtAl = parSmear[14]*etaByPoints(eta, parSmear[15]);
600 if (std::fabs(eta)<=1.4){
601 sigmaPtMisal = ptPart + parSmear[3] + parSmear[4]*std::fabs(eta) + parSmear[5]*eta*
eta;
602 sigmaSmear =
sqrt(std::fabs(
pow(sigmaPtMisal,2)-
pow(sigmaPtAl,2)));
603 pt = pt*gRandom_->Gaus(1,sigmaSmear);
606 double par = parSmear[3] + parSmear[4]*1.4 + parSmear[5]*1.4*1.4 - (parSmear[6] + parSmear[7]*(1.4-parSmear[8]) + parSmear[9]*(1.4-parSmear[8])*(1.4-parSmear[8]));
607 sigmaPtMisal = par + ptPart + parSmear[6] + parSmear[7]*std::fabs((fabsEta-parSmear[8])) + parSmear[9]*(fabsEta-parSmear[8])*(fabsEta-parSmear[8]);
608 sigmaSmear =
sqrt(std::fabs(
pow(sigmaPtMisal,2)-
pow(sigmaPtAl,2)));
609 pt = pt*gRandom_->Gaus(1,sigmaSmear);
612 double par = parSmear[3] + parSmear[4]*1.4 + parSmear[5]*1.4*1.4 - (parSmear[10] + parSmear[11]*(1.4-parSmear[12]) + parSmear[13]*(1.4-parSmear[12])*(1.4-parSmear[12]));
613 sigmaPtMisal = par + ptPart + parSmear[10] + parSmear[11]*std::fabs((fabsEta-parSmear[12])) + parSmear[13]*(fabsEta-parSmear[12])*(fabsEta-parSmear[12]);
614 sigmaSmear =
sqrt(std::fabs(
pow(sigmaPtMisal,2)-
pow(sigmaPtAl,2)));
615 pt = pt*gRandom_->Gaus(1,sigmaSmear);
624 Double_t
eta = std::fabs(inEta);
625 if( 0. <= eta && eta <= 0.2 )
return 0.00942984;
626 else if( 0.2 < eta && eta <= 0.4 )
return 0.0104489;
627 else if( 0.4 < eta && eta <= 0.6 )
return 0.0110521;
628 else if( 0.6 < eta && eta <= 0.8 )
return 0.0117338;
629 else if( 0.8 < eta && eta <= 1.0 )
return 0.0138142;
630 else if( 1.0 < eta && eta <= 1.2 )
return 0.0165826;
631 else if( 1.2 < eta && eta <= 1.4 )
return 0.0183663;
632 else if( 1.4 < eta && eta <= 1.6 )
return 0.0169904;
633 else if( 1.6 < eta && eta <= 1.8 )
return 0.0173289;
634 else if( 1.8 < eta && eta <= 2.0 )
return 0.0205821;
635 else if( 2.0 < eta && eta <= 2.2 )
return 0.0250032;
636 else if( 2.2 < eta && eta <= 2.4 )
return 0.0339477;
638 else if( 2.4 < eta && eta <= 2.6 )
return border;
646 void smear(
double &
pt,
double &
eta,
double &
phi,
const double *
y,
const std::vector<double> & parSmear)
override 648 double sigmaSquared = sigmaPtDiff.squaredDiff(eta);
649 TF1
G(
"G",
"[0]*exp(-0.5*pow(x,2)/[1])", -5., 5.);
651 G.SetParameter (0,norm);
652 G.SetParameter (1,sigmaSquared);
653 pt = pt*(1-G.GetRandom());
678 virtual double sigmaPt(
const double &
pt,
const double &
eta,
const T & parval) = 0;
679 virtual double sigmaPtError(
const double & pt,
const double & eta,
const T & parval,
const T & parError)
683 virtual double sigmaPhi(
const double & pt,
const double & eta,
const T & parval) = 0;
684 virtual double sigmaCotgTh(
const double & pt,
const double & eta,
const T & parval) = 0;
685 virtual double covPt1Pt2(
const double &
pt1,
const double & eta1,
const double &
pt2,
const double & eta2,
const T & parval)
692 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
693 const T & parResol,
const std::vector<int> & parResolOrder,
const int muonType) {};
694 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
695 const T & parResol,
const std::vector<int> & parResolOrder,
696 const std::vector<double> & parStep,
697 const std::vector<double> & parMin,
698 const std::vector<double> & parMax,
701 std::cout <<
"The method setParameters must be implemented for this resolution function" << std::endl;
704 virtual int parNum()
const {
return parNum_; }
708 virtual void setPar(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind,
709 TString* parname,
const T & parResol,
const std::vector<int> & parResolOrder,
710 double* thisStep,
double* thisMini,
double* thisMaxi, TString* thisParName ) {
711 for(
int iPar=0; iPar<this->parNum_; ++iPar ) {
712 Start[iPar] = parResol[iPar];
713 Step[iPar] = thisStep[iPar];
714 Mini[iPar] = thisMini[iPar];
715 Maxi[iPar] = thisMaxi[iPar];
716 ind[iPar] = parResolOrder[iPar];
717 parname[iPar] = thisParName[iPar];
720 virtual void setPar(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind,
721 TString* parname,
const T & parResol,
const std::vector<int> & parResolOrder,
const std::vector<ParameterSet> & parSet ) {
722 if(
int(parSet.size()) != this->parNum_ ) {
723 std::cout <<
"Error: wrong number of parameter initializations = " << parSet.size() <<
". Number of parameters is " << this->parNum_ << std::endl;
726 for(
int iPar=0; iPar<this->parNum_; ++iPar ) {
727 Start[iPar] = parResol[iPar];
728 Step[iPar] = parSet[iPar].step;
729 Mini[iPar] = parSet[iPar].mini;
730 Maxi[iPar] = parSet[iPar].maxi;
731 ind[iPar] = parResolOrder[iPar];
732 parname[iPar] = parSet[iPar].name;
751 double sigmaPt(
const double &
pt,
const double &
eta,
const T & parval)
override {
return 0; }
752 double sigmaCotgTh(
const double &
pt,
const double &
eta,
const T & parval)
override {
return 0; }
753 double sigmaPhi(
const double &
pt,
const double &
eta,
const T & parval)
override {
return 0.; }
755 double sigmaPtError(
const double &
pt,
const double &
eta,
const T & parval,
const T & parError)
override {
return 0; }
756 void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
const T & parResol,
const std::vector<int> & parResolOrder,
const int muonType)
override {}
757 void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
758 const T & parResol,
const std::vector<int> & parResolOrder,
759 const std::vector<double> & parStep,
760 const std::vector<double> & parMin,
761 const std::vector<double> & parMax,
762 const int muonType)
override {}
774 if( eta < -2.0 )
return 1;
775 if( eta < -1.8 )
return 2;
776 if( eta < -1.6 )
return 3;
777 if( eta < -1.2 )
return 4;
778 if( eta < -0.8 )
return 5;
779 if( eta < 0. )
return 6;
780 if( eta < 0.8 )
return 7;
781 if( eta < 1.2 )
return 8;
782 if( eta < 1.6 )
return 9;
783 if( eta < 1.8 )
return 10;
784 if( eta < 2.0 )
return 11;
790 double sigmaPt(
const double &
pt,
const double &
eta,
const T & parval)
override 792 return (parval[0]*pt + parval[
etaBin(eta)]);
797 double sigmaPhi(
const double &
pt,
const double &
eta,
const T & parval)
override {
809 TString* parname,
const T & parResol,
const std::vector<int> & parResolOrder,
810 const int muonType)
override 812 std::vector<ParameterSet> parSet(this->parNum_);
814 parSet[0] =
ParameterSet(
"Pt res. sc.", 0.002, -0.1, 0.1 );
815 parSet[1] =
ParameterSet(
"eta bin 1", 0.00002, -0.01, 0.01 );
816 parSet[2] =
ParameterSet(
"eta bin 2", 0.00002, -0.01, 0.01 );
817 parSet[3] =
ParameterSet(
"eta bin 3", 0.00002, -0.01, 0.01 );
818 parSet[4] =
ParameterSet(
"eta bin 4", 0.00002, -0.01, 0.01 );
819 parSet[5] =
ParameterSet(
"eta bin 5", 0.00002, -0.01, 0.01 );
820 parSet[6] =
ParameterSet(
"eta bin 6", 0.00002, -0.01, 0.01 );
821 parSet[7] =
ParameterSet(
"eta bin 7", 0.00002, -0.01, 0.01 );
822 parSet[8] =
ParameterSet(
"eta bin 8", 0.00002, -0.01, 0.01 );
823 parSet[9] =
ParameterSet(
"eta bin 9", 0.00002, -0.01, 0.01 );
824 parSet[10] =
ParameterSet(
"eta bin 10", 0.00002, -0.01, 0.01 );
825 parSet[11] =
ParameterSet(
"eta bin 11", 0.00002, -0.01, 0.01 );
826 parSet[12] =
ParameterSet(
"eta bin 12", 0.00002, -0.01, 0.01 );
828 std::cout <<
"setting parameters" << std::endl;
829 this->setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
832 void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
833 const T & parResol,
const std::vector<int> & parResolOrder,
834 const std::vector<double> & parStep,
835 const std::vector<double> & parMin,
836 const std::vector<double> & parMax,
837 const int muonType)
override 839 if( (
int(parStep.size()) != this->parNum_) || (
int(parMin.size()) != this->parNum_) || (
int(parMax.size()) != this->parNum_) ) {
840 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
841 std::cout <<
"parNum = " << this->parNum_ << std::endl;
842 std::cout <<
"parStep.size() = " << parStep.size() << std::endl;
843 std::cout <<
"parMin.size() = " << parMin.size() << std::endl;
844 std::cout <<
"parMax.size() = " << parMax.size() << std::endl;
847 std::vector<ParameterSet> parSet(this->parNum_);
849 parSet[0] =
ParameterSet(
"Pt res. sc.", parStep[0], parMin[0], parMax[0] );
850 parSet[1] =
ParameterSet(
"eta bin 1", parStep[1], parMin[1], parMax[1] );
851 parSet[2] =
ParameterSet(
"eta bin 2", parStep[2], parMin[2], parMax[2] );
852 parSet[3] =
ParameterSet(
"eta bin 3", parStep[3], parMin[3], parMax[3] );
853 parSet[4] =
ParameterSet(
"eta bin 4", parStep[4], parMin[4], parMax[4] );
854 parSet[5] =
ParameterSet(
"eta bin 5", parStep[5], parMin[5], parMax[5] );
855 parSet[6] =
ParameterSet(
"eta bin 6", parStep[6], parMin[6], parMax[6] );
856 parSet[7] =
ParameterSet(
"eta bin 7", parStep[7], parMin[7], parMax[7] );
857 parSet[8] =
ParameterSet(
"eta bin 8", parStep[8], parMin[8], parMax[8] );
858 parSet[9] =
ParameterSet(
"eta bin 9", parStep[9], parMin[9], parMax[9] );
859 parSet[10] =
ParameterSet(
"eta bin 10", parStep[10], parMin[10], parMax[10] );
860 parSet[11] =
ParameterSet(
"eta bin 11", parStep[11], parMin[11], parMax[11] );
861 parSet[12] =
ParameterSet(
"eta bin 12", parStep[12], parMin[12], parMax[12] );
863 std::cout <<
"setting parameters" << std::endl;
864 for(
int i=0;
i<this->parNum_; ++
i ) {
866 <<
", parMin["<<
i<<
"] = " << parMin[
i]
867 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
869 this->setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
882 if( eta < -2.0 )
return 1;
883 if( eta < -1.8 )
return 2;
884 if( eta < -1.6 )
return 3;
885 if( eta < -1.2 )
return 4;
886 if( eta < -0.8 )
return 5;
887 if( eta < 0. )
return 6;
888 if( eta < 0.8 )
return 7;
889 if( eta < 1.2 )
return 8;
890 if( eta < 1.6 )
return 9;
891 if( eta < 1.8 )
return 10;
892 if( eta < 2.0 )
return 11;
898 double sigmaPt(
const double &
pt,
const double &
eta,
const T & parval)
override 905 double sigmaPhi(
const double &
pt,
const double &
eta,
const T & parval)
override {
918 TString* parname,
const T & parResol,
const std::vector<int> & parResolOrder,
919 const int muonType)
override 921 std::vector<ParameterSet> parSet(this->parNum_);
923 parSet[0] =
ParameterSet(
"Pt res. sc.", 0.0002, 0., 0.1 );
924 parSet[1] =
ParameterSet(
"eta bin 1", 0.00002, 0., 0.01 );
925 parSet[2] =
ParameterSet(
"eta bin 2", 0.00002, 0., 0.01 );
926 parSet[3] =
ParameterSet(
"eta bin 3", 0.00002, 0., 0.01 );
927 parSet[4] =
ParameterSet(
"eta bin 4", 0.00002, 0., 0.01 );
928 parSet[5] =
ParameterSet(
"eta bin 5", 0.00002, 0., 0.01 );
929 parSet[6] =
ParameterSet(
"eta bin 6", 0.00002, 0., 0.01 );
930 parSet[7] =
ParameterSet(
"eta bin 7", 0.00002, 0., 0.01 );
931 parSet[8] =
ParameterSet(
"eta bin 8", 0.00002, 0., 0.01 );
932 parSet[9] =
ParameterSet(
"eta bin 9", 0.00002, 0., 0.01 );
933 parSet[10] =
ParameterSet(
"eta bin 10", 0.00002, 0., 0.01 );
934 parSet[11] =
ParameterSet(
"eta bin 11", 0.00002, 0., 0.01 );
935 parSet[12] =
ParameterSet(
"eta bin 12", 0.00002, 0., 0.01 );
937 std::cout <<
"setting parameters" << std::endl;
938 this->setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
941 void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
942 const T & parResol,
const std::vector<int> & parResolOrder,
943 const std::vector<double> & parStep,
944 const std::vector<double> & parMin,
945 const std::vector<double> & parMax,
946 const int muonType)
override 948 if( (
int(parStep.size()) != this->parNum_) || (
int(parMin.size()) != this->parNum_) || (
int(parMax.size()) != this->parNum_) ) {
949 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
950 std::cout <<
"parNum = " << this->parNum_ << std::endl;
951 std::cout <<
"parStep.size() = " << parStep.size() << std::endl;
952 std::cout <<
"parMin.size() = " << parMin.size() << std::endl;
953 std::cout <<
"parMax.size() = " << parMax.size() << std::endl;
956 std::vector<ParameterSet> parSet(this->parNum_);
958 parSet[0] =
ParameterSet(
"Pt res. sc.", parStep[0], parMin[0], parMax[0] );
959 parSet[1] =
ParameterSet(
"eta bin 1", parStep[1], parMin[1], parMax[1] );
960 parSet[2] =
ParameterSet(
"eta bin 2", parStep[2], parMin[2], parMax[2] );
961 parSet[3] =
ParameterSet(
"eta bin 3", parStep[3], parMin[3], parMax[3] );
962 parSet[4] =
ParameterSet(
"eta bin 4", parStep[4], parMin[4], parMax[4] );
963 parSet[5] =
ParameterSet(
"eta bin 5", parStep[5], parMin[5], parMax[5] );
964 parSet[6] =
ParameterSet(
"eta bin 6", parStep[6], parMin[6], parMax[6] );
965 parSet[7] =
ParameterSet(
"eta bin 7", parStep[7], parMin[7], parMax[7] );
966 parSet[8] =
ParameterSet(
"eta bin 8", parStep[8], parMin[8], parMax[8] );
967 parSet[9] =
ParameterSet(
"eta bin 9", parStep[9], parMin[9], parMax[9] );
968 parSet[10] =
ParameterSet(
"eta bin 10", parStep[10], parMin[10], parMax[10] );
969 parSet[11] =
ParameterSet(
"eta bin 11", parStep[11], parMin[11], parMax[11] );
970 parSet[12] =
ParameterSet(
"eta bin 12", parStep[12], parMin[12], parMax[12] );
972 std::cout <<
"setting parameters" << std::endl;
973 for(
int i=0;
i<this->parNum_; ++
i ) {
975 <<
", parMin["<<
i<<
"] = " << parMin[
i]
976 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
978 this->setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
990 if( eta < -2.0 )
return 1;
991 if( eta < -1.8 )
return 2;
992 if( eta < -1.6 )
return 3;
993 if( eta < -1.2 )
return 4;
994 if( eta < -0.8 )
return 5;
995 if( eta < 0. )
return 6;
996 if( eta < 0.8 )
return 7;
997 if( eta < 1.2 )
return 8;
998 if( eta < 1.6 )
return 9;
999 if( eta < 1.8 )
return 10;
1000 if( eta < 2.0 )
return 11;
1006 double sigmaPt(
const double &
pt,
const double &
eta,
const T & parval)
override 1017 double covPt1Pt2(
const double &
pt1,
const double & eta1,
const double &
pt2,
const double & eta2,
const T & parval)
override 1027 return sqrt(
pow(pt*pt*parval[0]*parError[0],2) +
pow(parval[
etaBin(eta)]*parError[
etaBin(eta)],2) +
pow(parval[13]*parError[13],2) )/
r;
1031 TString* parname,
const T & parResol,
const std::vector<int> & parResolOrder,
1032 const int muonType)
override 1034 std::vector<ParameterSet> parSet(this->parNum_);
1036 parSet[0] =
ParameterSet(
"Pt res. sc.", 0.0002, 0., 0.1 );
1037 parSet[1] =
ParameterSet(
"eta bin 1", 0.00002, 0., 0.01 );
1038 parSet[2] =
ParameterSet(
"eta bin 2", 0.00002, 0., 0.01 );
1039 parSet[3] =
ParameterSet(
"eta bin 3", 0.00002, 0., 0.01 );
1040 parSet[4] =
ParameterSet(
"eta bin 4", 0.00002, 0., 0.01 );
1041 parSet[5] =
ParameterSet(
"eta bin 5", 0.00002, 0., 0.01 );
1042 parSet[6] =
ParameterSet(
"eta bin 6", 0.00002, 0., 0.01 );
1043 parSet[7] =
ParameterSet(
"eta bin 7", 0.00002, 0., 0.01 );
1044 parSet[8] =
ParameterSet(
"eta bin 8", 0.00002, 0., 0.01 );
1045 parSet[9] =
ParameterSet(
"eta bin 9", 0.00002, 0., 0.01 );
1046 parSet[10] =
ParameterSet(
"eta bin 10", 0.00002, 0., 0.01 );
1047 parSet[11] =
ParameterSet(
"eta bin 11", 0.00002, 0., 0.01 );
1048 parSet[12] =
ParameterSet(
"eta bin 12", 0.00002, 0., 0.01 );
1049 parSet[13] =
ParameterSet(
"cov(pt1,pt2)", 0.00002, 0., 0.01 );
1051 std::cout <<
"setting parameters" << std::endl;
1052 this->setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
1055 void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
1056 const T & parResol,
const std::vector<int> & parResolOrder,
1057 const std::vector<double> & parStep,
1058 const std::vector<double> & parMin,
1059 const std::vector<double> & parMax,
1060 const int muonType)
override 1062 if( (
int(parStep.size()) != this->parNum_) || (
int(parMin.size()) != this->parNum_) || (
int(parMax.size()) != this->parNum_) ) {
1063 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
1064 std::cout <<
"parNum = " << this->parNum_ << std::endl;
1065 std::cout <<
"parStep.size() = " << parStep.size() << std::endl;
1066 std::cout <<
"parMin.size() = " << parMin.size() << std::endl;
1067 std::cout <<
"parMax.size() = " << parMax.size() << std::endl;
1070 std::vector<ParameterSet> parSet(this->parNum_);
1072 parSet[0] =
ParameterSet(
"Pt res. sc.", parStep[0], parMin[0], parMax[0] );
1073 parSet[1] =
ParameterSet(
"eta bin 1", parStep[1], parMin[1], parMax[1] );
1074 parSet[2] =
ParameterSet(
"eta bin 2", parStep[2], parMin[2], parMax[2] );
1075 parSet[3] =
ParameterSet(
"eta bin 3", parStep[3], parMin[3], parMax[3] );
1076 parSet[4] =
ParameterSet(
"eta bin 4", parStep[4], parMin[4], parMax[4] );
1077 parSet[5] =
ParameterSet(
"eta bin 5", parStep[5], parMin[5], parMax[5] );
1078 parSet[6] =
ParameterSet(
"eta bin 6", parStep[6], parMin[6], parMax[6] );
1079 parSet[7] =
ParameterSet(
"eta bin 7", parStep[7], parMin[7], parMax[7] );
1080 parSet[8] =
ParameterSet(
"eta bin 8", parStep[8], parMin[8], parMax[8] );
1081 parSet[9] =
ParameterSet(
"eta bin 9", parStep[9], parMin[9], parMax[9] );
1082 parSet[10] =
ParameterSet(
"eta bin 10", parStep[10], parMin[10], parMax[10] );
1083 parSet[11] =
ParameterSet(
"eta bin 11", parStep[11], parMin[11], parMax[11] );
1084 parSet[12] =
ParameterSet(
"eta bin 12", parStep[12], parMin[12], parMax[12] );
1085 parSet[13] =
ParameterSet(
"cov(pt1,pt2)",parStep[13], parMin[13], parMax[13] );
1087 std::cout <<
"setting parameters" << std::endl;
1088 for(
int i=0;
i<this->parNum_; ++
i ) {
1090 <<
", parMin["<<
i<<
"] = " << parMin[
i]
1091 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
1093 this->setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
1135 lowerLimit_(lowerLimit), upperLimit_(upperLimit) {}
1138 delete functionForIntegral_;
1140 virtual double operator()(
const double * parval,
const double &
mass,
const double &
eta )
const = 0;
1141 virtual double operator()(
const double * parval,
const double & mass,
const double & eta1,
const double & eta2 )
const 1143 return operator()(parval, mass, eta1);
1145 virtual int parNum()
const {
return parNum_; }
1147 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
const std::vector<double>::const_iterator & parBgrIt,
const std::vector<int>::const_iterator & parBgrOrderIt,
const int muonType) = 0;
1151 TF1 * backgroundFunctionForIntegral =
new TF1(
"backgroundFunctionForIntegral", functionForIntegral_,
1152 lowerLimit_, upperLimit_, this->parNum_);
1153 return( backgroundFunctionForIntegral );
1155 virtual double fracVsEta(
const double * parval,
const double & eta1,
const double & eta2)
const {
return 1.; }
1162 virtual void setPar(
double* Start,
double* Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
1163 const std::vector<double>::const_iterator & parBgrIt,
const std::vector<int>::const_iterator & parBgrOrderIt,
1164 double* thisStep,
double* thisMini,
double* thisMaxi, TString* thisParName ) {
1165 for(
int iPar=0; iPar<this->parNum_; ++iPar ) {
1166 Start[iPar] = *(parBgrIt+iPar);
1167 Step[iPar] = thisStep[iPar];
1168 Mini[iPar] = thisMini[iPar];
1169 Maxi[iPar] = thisMaxi[iPar];
1170 ind[iPar] = *(parBgrOrderIt+iPar);
1178 const std::vector<double>::const_iterator & parBgrIt ) :
1181 parval_ =
new double[function_->parNum()];
1182 for(
int i=0;
i < function_->parNum(); ++
i ) {
1183 parval_[
i] = *(parBgrIt+
i);
1193 return( (*function_)(parval_, *mass, 0.) );
1215 { this->parNum_ = 2; }
1219 double b = parval[1];
1221 double norm = -(a*lowerLimit_ + b*lowerLimit_*lowerLimit_/2.);
1223 if( -a/b > upperLimit_ ) norm += a*upperLimit_ + b*upperLimit_*upperLimit_/2.;
1224 else norm += -a*a/(2*
b);
1226 if( mass < -a/b && norm != 0 )
return (a + b*mass)/norm;
1229 void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
const std::vector<double>::const_iterator & parBgrIt,
const std::vector<int>::const_iterator & parBgrOrderIt,
const int muonType)
override {
1230 double thisStep[] = {0.01, 0.01};
1231 TString thisParName[] = {
"Constant",
"Linear"};
1232 if( muonType == 1 ) {
1233 double thisMini[] = {0.0, -300.};
1234 double thisMaxi[] = {1.0, 0.};
1235 this->setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
1237 double thisMini[] = {0.0, -300.};
1238 double thisMaxi[] = {1.0, 0.};
1239 this->setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
1254 { this->parNum_ = 2; }
1257 double Bgrp2 = parval[1];
1258 double norm = -(
exp(-Bgrp2*upperLimit_) -
exp(-Bgrp2*lowerLimit_))/Bgrp2;
1259 if( norm != 0 )
return exp(-Bgrp2*mass)/norm;
1262 void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
const std::vector<double>::const_iterator & parBgrIt,
const std::vector<int>::const_iterator & parBgrOrderIt,
const int muonType)
override {
1263 double thisStep[] = {0.01, 0.01};
1264 TString thisParName[] = {
"Bgr fraction",
"Bgr slope"};
1265 if( muonType == 1 ) {
1266 double thisMini[] = {0.0, 0.};
1267 double thisMaxi[] = {1.0, 10.};
1268 this->setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
1270 double thisMini[] = {0.0, 0.};
1271 double thisMaxi[] = {1.0, 10.};
1272 this->setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
1360 { this->parNum_ = 4; }
1363 double Bgrp2 = parval[1] + parval[2]*eta*
eta;
1364 double norm = -(
exp(-Bgrp2*upperLimit_) -
exp(-Bgrp2*lowerLimit_))/Bgrp2;
1365 if( norm != 0 )
return exp(-Bgrp2*mass)/norm;
1368 void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
const std::vector<double>::const_iterator & parBgrIt,
const std::vector<int>::const_iterator & parBgrOrderIt,
const int muonType)
override {
1369 double thisStep[] = {0.01, 0.01, 0.01, 0.01};
1370 TString thisParName[] = {
"Bgr fraction",
"Bgr slope",
"Bgr slope eta^2 dependence",
"background fraction eta dependence"};
1371 if( muonType == 1 ) {
1372 double thisMini[] = {0.0, 0., 0., -1.};
1373 double thisMaxi[] = {1.0, 10., 10., 1.};
1374 this->setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
1376 double thisMini[] = {0.0, 0., -1., -1.};
1377 double thisMaxi[] = {1.0, 10., 1., 1.};
1378 this->setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
1398 { this->parNum_ = 3; }
1401 double b = parval[1];
1403 double a = 1 + parval[2]*eta*
eta;
1405 double norm = -(a*lowerLimit_ + b*lowerLimit_*lowerLimit_/2.);
1407 if( -a/b > upperLimit_ ) norm += a*upperLimit_ + b*upperLimit_*upperLimit_/2.;
1408 else norm += -a*a/(2*
b);
1410 if( mass < -a/b && norm != 0 )
return (a + b*mass)/norm;
1413 void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
const std::vector<double>::const_iterator & parBgrIt,
const std::vector<int>::const_iterator & parBgrOrderIt,
const int muonType)
override {
1414 double thisStep[] = {0.01, 0.01, 0.01};
1415 TString thisParName[] = {
"Bgr fraction",
"Constant",
"Linear"};
1416 if( muonType == 1 ) {
1417 double thisMini[] = {0.0, 0., -300.};
1418 double thisMaxi[] = {1.0, 300., 0.};
1419 this->setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
1421 double thisMini[] = {0.0, 0., -300.};
1422 double thisMaxi[] = {1.0, 300., 0.};
1423 this->setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
1438 double operator()(
const double * parval,
const double &
mass,
const double &
eta )
const override {
return 0.;}
1439 double operator()(
const double * parval,
const double &
mass,
const double & eta1,
const double & eta2 )
const override 1442 if( fabs(eta1) <= 1.3 && fabs(eta2) <= 1.3 ) {
1445 else if( (fabs(eta1) <= 1.6 && fabs(eta1) > 1.3) && (fabs(eta2) <= 1.6 && fabs(eta2) > 1.3) ) {
1448 else if( fabs(eta1) > 1.6 && fabs(eta2) > 1.6 ) {
1451 else if( (fabs(eta1) <= 1.3 && (fabs(eta2) > 1.3 && fabs(eta2) <= 1.6)) ||
1452 (fabs(eta2) <= 1.3 && (fabs(eta1) > 1.3 && fabs(eta1) <= 1.6)) ) {
1455 else if( (fabs(eta1) <= 1.3 && fabs(eta2) > 1.6) ||
1456 (fabs(eta2) <= 1.3 && fabs(eta1) > 1.6) ) {
1459 else if( ((fabs(eta1) > 1.3 && fabs(eta1) <= 1.6) && fabs(eta2) > 1.6) ||
1460 ((fabs(eta2) > 1.3 && fabs(eta2) <= 1.6) && fabs(eta1) > 1.6) ) {
1464 std::cout <<
"WARNING: this should not happen for eta1 = " << eta1 <<
" and eta2 = " << eta2 << std::endl;
1468 double norm = -(
exp(-Bgrp2*upperLimit_) -
exp(-Bgrp2*lowerLimit_))/Bgrp2;
1469 if( norm != 0 )
return exp(-Bgrp2*mass)/norm;
1473 void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
const std::vector<double>::const_iterator & parBgrIt,
const std::vector<int>::const_iterator & parBgrOrderIt,
const int muonType)
override {
1474 double thisStep[] = {0.01, 0.01};
1475 TString thisParName[] = {
"Bgr fraction",
"Bgr slope"};
1476 if( muonType == 1 ) {
1477 double thisMini[] = {0.0, 0.};
1478 double thisMaxi[] = {1.0, 10.};
1479 this->setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
1481 double thisMini[] = {0.0, 0.};
1482 double thisMaxi[] = {1.0, 10.};
1483 this->setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
1487 double fracVsEta(
const double * parval,
const double & eta1,
const double & eta2)
const override 1489 if( fabs(eta1) <= 1.3 && fabs(eta2) <= 1.3 ) {
1490 return (1.-0.910903);
1492 else if( (fabs(eta1) <= 1.6 && fabs(eta1) > 1.3) && (fabs(eta2) <= 1.6 && fabs(eta2) > 1.3) ) {
1493 return (1.-0.801469);
1495 else if( fabs(eta1) > 1.6 && fabs(eta2) > 1.6 ) {
1496 return (1.-0.658196);
1498 else if( (fabs(eta1) <= 1.3 && (fabs(eta2) > 1.3 && fabs(eta2) <= 1.6)) ||
1499 (fabs(eta2) <= 1.3 && (fabs(eta1) > 1.3 && fabs(eta1) <= 1.6)) ) {
1500 return (1.-0.873411);
1502 else if( (fabs(eta1) <= 1.3 && fabs(eta2) > 1.6) ||
1503 (fabs(eta2) <= 1.3 && fabs(eta1) > 1.6) ) {
1504 return (1.-0.784674);
1506 else if( ((fabs(eta1) > 1.3 && fabs(eta1) <= 1.6) && fabs(eta2) > 1.6) ||
1507 ((fabs(eta2) > 1.3 && fabs(eta2) <= 1.6) && fabs(eta1) > 1.6) ) {
1508 return (1.-0.714398);
1511 std::cout <<
"WARNING: this should not happen for eta1 = " << eta1 <<
" and eta2 = " << eta2 << std::endl;
1512 return (1.-0.658196);
1526 double operator()(
const double * parval,
const double &
mass,
const double &
eta )
const override {
return 0.;}
1527 double operator()(
const double * parval,
const double &
mass,
const double & eta1,
const double & eta2 )
const override 1530 if( (fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 0. && fabs(eta2) < 0.9) ) {
1533 else if( (fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) ) {
1536 else if( (fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) ) {
1537 Bgrp2 = (-0.333728);
1539 else if( (fabs(eta1) >= 1.5 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.5 && fabs(eta2) < 1.6) ) {
1542 else if( (fabs(eta1) >= 1.6 && fabs(eta1) < 1.7) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.7) ) {
1545 else if( (fabs(eta1) >= 1.7 && fabs(eta1) < 1.8) && (fabs(eta2) >= 1.7 && fabs(eta2) < 1.8) ) {
1546 Bgrp2 = (-0.959101);
1548 else if( (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9) ) {
1551 else if( (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0) ) {
1552 Bgrp2 = (-0.921581);
1554 else if( (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.) ) {
1555 Bgrp2 = (-0.664338);
1557 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 0.9 && fabs(eta2) < 1.3)) ||
1558 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 0.9 && fabs(eta1) < 1.3)) ) {
1561 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 1.3 && fabs(eta2) < 1.5)) ||
1562 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 1.3 && fabs(eta1) < 1.5)) ) {
1563 Bgrp2 = (-0.250272);
1565 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 1.5 && fabs(eta2) < 1.6)) ||
1566 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 1.5 && fabs(eta1) < 1.6)) ) {
1569 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.7)) ||
1570 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1.7)) ) {
1573 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 1.7 && fabs(eta2) < 1.8)) ||
1574 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 1.7 && fabs(eta1) < 1.8)) ) {
1577 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9)) ||
1578 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9)) ) {
1581 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
1582 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
1585 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
1586 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
1589 else if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 1.3 && fabs(eta2) < 1.5)) ||
1590 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 1.3 && fabs(eta1) < 1.5)) ) {
1593 else if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 1.5 && fabs(eta2) < 1.6)) ||
1594 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 1.5 && fabs(eta1) < 1.6)) ) {
1597 else if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.7)) ||
1598 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1.7)) ) {
1599 Bgrp2 = (-0.516479);
1601 else if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 1.7 && fabs(eta2) < 1.8)) ||
1602 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 1.7 && fabs(eta1) < 1.8)) ) {
1603 Bgrp2 = (-0.361401);
1605 else if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9)) ||
1606 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9)) ) {
1609 else if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
1610 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
1613 else if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
1614 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
1617 else if( ((fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 1.5 && fabs(eta2) < 1.6)) ||
1618 ((fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) && (fabs(eta1) >= 1.5 && fabs(eta1) < 1.6)) ) {
1621 else if( ((fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.7)) ||
1622 ((fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1.7)) ) {
1625 else if( ((fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 1.7 && fabs(eta2) < 1.8)) ||
1626 ((fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) && (fabs(eta1) >= 1.7 && fabs(eta1) < 1.8)) ) {
1627 Bgrp2 = (-0.148616);
1629 else if( ((fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9)) ||
1630 ((fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) && (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9)) ) {
1631 Bgrp2 = (-0.413175);
1633 else if( ((fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
1634 ((fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
1635 Bgrp2 = (-0.230031);
1637 else if( ((fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
1638 ((fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
1639 Bgrp2 = (-0.122756);
1641 else if( ((fabs(eta1) >= 1.5 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.7)) ||
1642 ((fabs(eta2) >= 1.5 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1.7)) ) {
1645 else if( ((fabs(eta1) >= 1.5 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.7 && fabs(eta2) < 1.8)) ||
1646 ((fabs(eta2) >= 1.5 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.7 && fabs(eta1) < 1.8)) ) {
1647 Bgrp2 = (-0.0985001);
1649 else if( ((fabs(eta1) >= 1.5 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9)) ||
1650 ((fabs(eta2) >= 1.5 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9)) ) {
1651 Bgrp2 = (-0.402548);
1653 else if( ((fabs(eta1) >= 1.5 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
1654 ((fabs(eta2) >= 1.5 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
1657 else if( ((fabs(eta1) >= 1.5 && fabs(eta1) < 1.6) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
1658 ((fabs(eta2) >= 1.5 && fabs(eta2) < 1.6) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
1661 else if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.7) && (fabs(eta2) >= 1.7 && fabs(eta2) < 1.8)) ||
1662 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.7) && (fabs(eta1) >= 1.7 && fabs(eta1) < 1.8)) ) {
1663 Bgrp2 = (-0.436959);
1665 else if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.7) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9)) ||
1666 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.7) && (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9)) ) {
1667 Bgrp2 = (-0.506041);
1669 else if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.7) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
1670 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.7) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
1673 else if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.7) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
1674 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.7) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
1675 Bgrp2 = (-0.365653);
1677 else if( ((fabs(eta1) >= 1.7 && fabs(eta1) < 1.8) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9)) ||
1678 ((fabs(eta2) >= 1.7 && fabs(eta2) < 1.8) && (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9)) ) {
1681 else if( ((fabs(eta1) >= 1.7 && fabs(eta1) < 1.8) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
1682 ((fabs(eta2) >= 1.7 && fabs(eta2) < 1.8) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
1683 Bgrp2 = (-0.730701);
1685 else if( ((fabs(eta1) >= 1.7 && fabs(eta1) < 1.8) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
1686 ((fabs(eta2) >= 1.7 && fabs(eta2) < 1.8) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
1689 else if( ((fabs(eta1) >= 1.8 && fabs(eta1) < 1.9) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
1690 ((fabs(eta2) >= 1.8 && fabs(eta2) < 1.9) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
1693 else if( ((fabs(eta1) >= 1.8 && fabs(eta1) < 1.9) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
1694 ((fabs(eta2) >= 1.8 && fabs(eta2) < 1.9) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
1695 Bgrp2 = (-0.687263);
1697 else if( ((fabs(eta1) >= 1.9 && fabs(eta1) < 2.0) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
1698 ((fabs(eta2) >= 1.9 && fabs(eta2) < 2.0) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
1699 Bgrp2 = (-0.722394);
1702 std::cout <<
"WARNING: this should not happen for eta1 = " << eta1 <<
" and eta2 = " << eta2 << std::endl;
1706 double norm = -(
exp(-Bgrp2*upperLimit_) -
exp(-Bgrp2*lowerLimit_))/Bgrp2;
1707 if( norm != 0 )
return exp(-Bgrp2*mass)/norm;
1711 void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
const std::vector<double>::const_iterator & parBgrIt,
const std::vector<int>::const_iterator & parBgrOrderIt,
const int muonType)
override {
1712 double thisStep[] = {0.01, 0.01};
1713 TString thisParName[] = {
"Bgr fraction",
"Bgr slope"};
1714 if( muonType == 1 ) {
1715 double thisMini[] = {0.0, 0.};
1716 double thisMaxi[] = {1.0, 10.};
1717 this->setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
1719 double thisMini[] = {0.0, 0.};
1720 double thisMaxi[] = {1.0, 10.};
1721 this->setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
1725 double fracVsEta(
const double * parval,
const double & eta1,
const double & eta2)
const override 1727 if( (fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 0. && fabs(eta2) < 0.9) ) {
1728 return (1.-0.915365);
1730 if( (fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) ) {
1731 return (1.-0.914149);
1733 if( (fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) ) {
1734 return (1.-0.855918);
1736 if( (fabs(eta1) >= 1.5 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.5 && fabs(eta2) < 1.6) ) {
1737 return (1.-0.70221);
1739 if( (fabs(eta1) >= 1.6 && fabs(eta1) < 1.7) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.7) ) {
1740 return (1.-0.701489);
1742 if( (fabs(eta1) >= 1.7 && fabs(eta1) < 1.8) && (fabs(eta2) >= 1.7 && fabs(eta2) < 1.8) ) {
1743 return (1.-0.651162);
1745 if( (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9) ) {
1746 return (1.-0.639839);
1748 if( (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0) ) {
1749 return (1.-0.64915);
1751 if( (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.) ) {
1752 return (1.-0.687878);
1754 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 0.9 && fabs(eta2) < 1.3)) ||
1755 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 0.9 && fabs(eta1) < 1.3)) ) {
1756 return (1.-0.903486);
1758 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 1.3 && fabs(eta2) < 1.5)) ||
1759 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 1.3 && fabs(eta1) < 1.5)) ) {
1760 return (1.-0.882516);
1762 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 1.5 && fabs(eta2) < 1.6)) ||
1763 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 1.5 && fabs(eta1) < 1.6)) ) {
1764 return (1.-0.85477);
1766 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.7)) ||
1767 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1.7)) ) {
1768 return (1.-0.804919);
1770 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 1.7 && fabs(eta2) < 1.8)) ||
1771 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 1.7 && fabs(eta1) < 1.8)) ) {
1772 return (1.-0.75411);
1774 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9)) ||
1775 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9)) ) {
1776 return (1.-0.714128);
1778 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
1779 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
1780 return (1.-0.645403);
1782 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
1783 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
1784 return (1.-0.588049);
1786 if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 1.3 && fabs(eta2) < 1.5)) ||
1787 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 1.3 && fabs(eta1) < 1.5)) ) {
1788 return (1.-0.901123);
1790 if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 1.5 && fabs(eta2) < 1.6)) ||
1791 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 1.5 && fabs(eta1) < 1.6)) ) {
1792 return (1.-0.87852);
1794 if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.7)) ||
1795 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1.7)) ) {
1796 return (1.-0.862266);
1798 if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 1.7 && fabs(eta2) < 1.8)) ||
1799 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 1.7 && fabs(eta1) < 1.8)) ) {
1800 return (1.-0.846385);
1802 if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9)) ||
1803 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9)) ) {
1804 return (1.-0.825401);
1806 if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
1807 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
1808 return (1.-0.812449);
1810 if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
1811 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
1812 return (1.-0.753754);
1814 if( ((fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 1.5 && fabs(eta2) < 1.6)) ||
1815 ((fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) && (fabs(eta1) >= 1.5 && fabs(eta1) < 1.6)) ) {
1816 return (1.-0.794143);
1818 if( ((fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.7)) ||
1819 ((fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1.7)) ) {
1820 return (1.-0.761375);
1822 if( ((fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 1.7 && fabs(eta2) < 1.8)) ||
1823 ((fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) && (fabs(eta1) >= 1.7 && fabs(eta1) < 1.8)) ) {
1824 return (1.-0.765572);
1826 if( ((fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9)) ||
1827 ((fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) && (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9)) ) {
1828 return (1.-0.749438);
1830 if( ((fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
1831 ((fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
1832 return (1.-0.750941);
1834 if( ((fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
1835 ((fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
1836 return (1.-0.722832);
1838 if( ((fabs(eta1) >= 1.5 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.7)) ||
1839 ((fabs(eta2) >= 1.5 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1.7)) ) {
1840 return (1.-0.699723);
1842 if( ((fabs(eta1) >= 1.5 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.7 && fabs(eta2) < 1.8)) ||
1843 ((fabs(eta2) >= 1.5 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.7 && fabs(eta1) < 1.8)) ) {
1844 return (1.-0.734044);
1846 if( ((fabs(eta1) >= 1.5 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9)) ||
1847 ((fabs(eta2) >= 1.5 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9)) ) {
1848 return (1.-0.719434);
1850 if( ((fabs(eta1) >= 1.5 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
1851 ((fabs(eta2) >= 1.5 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
1852 return (1.-0.718889);
1854 if( ((fabs(eta1) >= 1.5 && fabs(eta1) < 1.6) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
1855 ((fabs(eta2) >= 1.5 && fabs(eta2) < 1.6) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
1856 return (1.-0.689382);
1858 if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.7) && (fabs(eta2) >= 1.7 && fabs(eta2) < 1.8)) ||
1859 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.7) && (fabs(eta1) >= 1.7 && fabs(eta1) < 1.8)) ) {
1860 return (1.-0.681106);
1862 if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.7) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9)) ||
1863 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.7) && (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9)) ) {
1864 return (1.-0.685783);
1866 if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.7) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
1867 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.7) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
1868 return (1.-0.695924);
1870 if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.7) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
1871 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.7) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
1872 return (1.-0.670977);
1874 if( ((fabs(eta1) >= 1.7 && fabs(eta1) < 1.8) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9)) ||
1875 ((fabs(eta2) >= 1.7 && fabs(eta2) < 1.8) && (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9)) ) {
1876 return (1.-0.654816);
1878 if( ((fabs(eta1) >= 1.7 && fabs(eta1) < 1.8) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
1879 ((fabs(eta2) >= 1.7 && fabs(eta2) < 1.8) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
1880 return (1.-0.670969);
1882 if( ((fabs(eta1) >= 1.7 && fabs(eta1) < 1.8) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
1883 ((fabs(eta2) >= 1.7 && fabs(eta2) < 1.8) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
1884 return (1.-0.659082);
1886 if( ((fabs(eta1) >= 1.8 && fabs(eta1) < 1.9) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
1887 ((fabs(eta2) >= 1.8 && fabs(eta2) < 1.9) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
1888 return (1.-0.648371);
1890 if( ((fabs(eta1) >= 1.8 && fabs(eta1) < 1.9) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
1891 ((fabs(eta2) >= 1.8 && fabs(eta2) < 1.9) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
1892 return (1.-0.659114);
1894 if( ((fabs(eta1) >= 1.9 && fabs(eta1) < 2.0) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
1895 ((fabs(eta2) >= 1.9 && fabs(eta2) < 2.0) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
1896 return (1.-0.660482);
1899 std::cout <<
"WARNING: this should not happen for eta1 = " << eta1 <<
" and eta2 = " << eta2 << std::endl;
1900 return (1.-0.687878);
1912 double operator()(
const double * parval,
const double &
mass,
const double &
eta )
const override {
return 0.;}
1913 double operator()(
const double * parval,
const double &
mass,
const double & eta1,
const double & eta2 )
const override 1916 if( (fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 0. && fabs(eta2) < 0.85) ) {
1919 else if( (fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) ) {
1922 else if( (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) ) {
1925 else if( (fabs(eta1) >= 1.6 && fabs(eta1) < 1000) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000) ) {
1926 Bgrp2 = (-0.386394);
1928 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 0.85 && fabs(eta2) < 1.25)) ||
1929 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 0.85 && fabs(eta1) < 1.25)) ) {
1932 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6)) ||
1933 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6)) ) {
1934 Bgrp2 = (-0.206566);
1936 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
1937 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
1940 else if( ((fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6)) ||
1941 ((fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) && (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6)) ) {
1944 else if( ((fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
1945 ((fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
1946 Bgrp2 = (-0.163569);
1948 else if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
1949 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
1953 double norm = -(
exp(-Bgrp2*upperLimit_) -
exp(-Bgrp2*lowerLimit_))/Bgrp2;
1954 if( norm != 0 )
return exp(-Bgrp2*mass)/norm;
1958 void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
const std::vector<double>::const_iterator & parBgrIt,
const std::vector<int>::const_iterator & parBgrOrderIt,
const int muonType)
override {
1959 double thisStep[] = {0.01, 0.01};
1960 TString thisParName[] = {
"Bgr fraction",
"Bgr slope"};
1961 if( muonType == 1 ) {
1962 double thisMini[] = {0.0, 0.};
1963 double thisMaxi[] = {1.0, 10.};
1964 this->setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
1966 double thisMini[] = {0.0, 0.};
1967 double thisMaxi[] = {1.0, 10.};
1968 this->setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
1972 double fracVsEta(
const double * parval,
const double & eta1,
const double & eta2)
const override 1974 if( (fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 0. && fabs(eta2) < 0.85) ) {
1975 return (1.-0.907727);
1977 if( (fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) ) {
1978 return (1.-0.907715);
1980 if( (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) ) {
1981 return (1.-0.912233);
1983 if( (fabs(eta1) >= 1.6 && fabs(eta1) < 1000) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000) ) {
1984 return (1.-0.876776);
1986 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 0.85 && fabs(eta2) < 1.25)) ||
1987 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 0.85 && fabs(eta1) < 1.25)) ) {
1988 return (1.-0.913046);
1990 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6)) ||
1991 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6)) ) {
1992 return (1.-0.916765);
1994 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
1995 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
1998 if( ((fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6)) ||
1999 ((fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) && (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6)) ) {
2000 return (1.-0.907471);
2002 if( ((fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
2003 ((fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
2004 return (1.-0.899253);
2006 if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
2007 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
2008 return (1.-0.879108);
2025 double operator()(
const double * parval,
const double &
mass,
const double &
eta )
const override {
return 0.;}
2026 double operator()(
const double * parval,
const double &
mass,
const double & eta1,
const double & eta2 )
const override 2030 if( (fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 0. && fabs(eta2) < 0.85) ) {
2033 else if( (fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) ) {
2036 else if( (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) ) {
2039 else if( (fabs(eta1) >= 1.6 && fabs(eta1) < 1000) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000) ) {
2042 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 0.85 && fabs(eta2) < 1.25)) ||
2043 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 0.85 && fabs(eta1) < 1.25)) ) {
2046 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6)) ||
2047 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6)) ) {
2048 Bgrp2 = (-0.337598);
2050 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
2051 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
2054 else if( ((fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6)) ||
2055 ((fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) && (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6)) ) {
2058 else if( ((fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
2059 ((fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
2062 else if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
2063 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
2066 else if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
2067 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
2071 double norm = -(
exp(-Bgrp2*upperLimit_) -
exp(-Bgrp2*lowerLimit_))/Bgrp2;
2072 if( norm != 0 )
return exp(-Bgrp2*mass)/norm;
2076 void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
const std::vector<double>::const_iterator & parBgrIt,
const std::vector<int>::const_iterator & parBgrOrderIt,
const int muonType)
override {
2077 double thisStep[] = {0.01, 0.01};
2078 TString thisParName[] = {
"Bgr fraction",
"Bgr slope"};
2079 if( muonType == 1 ) {
2080 double thisMini[] = {0.0, 0.};
2081 double thisMaxi[] = {1.0, 10.};
2082 this->setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
2084 double thisMini[] = {0.0, 0.};
2085 double thisMaxi[] = {1.0, 10.};
2086 this->setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
2090 double fracVsEta(
const double * parval,
const double & eta1,
const double & eta2)
const override 2094 if( (fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 0. && fabs(eta2) < 0.85) ) {
2095 return (1.-0.893683);
2097 if( (fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) ) {
2098 return (1.-0.888968);
2100 if( (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) ) {
2101 return (1.-0.885926);
2103 if( (fabs(eta1) >= 1.6 && fabs(eta1) < 1000) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000) ) {
2104 return (1.-0.866615);
2106 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 0.85 && fabs(eta2) < 1.25)) ||
2107 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 0.85 && fabs(eta1) < 1.25)) ) {
2108 return (1.-0.892856);
2110 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6)) ||
2111 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6)) ) {
2112 return (1.-0.884864);
2114 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
2115 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
2118 if( ((fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6)) ||
2119 ((fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) && (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6)) ) {
2120 return (1.-0.894739);
2122 if( ((fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
2123 ((fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
2124 return (1.-0.880597);
2126 if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
2127 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
2128 return (1.-0.869165);
2130 if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
2131 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
2132 return (1.-0.869165);
2145 double operator()(
const double * parval,
const double &
mass,
const double &
eta )
const override {
return 0.;}
2146 double operator()(
const double * parval,
const double &
mass,
const double & eta1,
const double & eta2 )
const override 2149 if( (fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 0. && fabs(eta2) < 0.85) ) {
2152 else if( (fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) ) {
2155 else if( (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) ) {
2158 else if( (fabs(eta1) >= 1.6 && fabs(eta1) < 1.8) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.8) ) {
2161 else if( (fabs(eta1) >= 1.8 && fabs(eta1) < 2.0) && (fabs(eta2) >= 1.8 && fabs(eta2) < 2.0) ) {
2162 Bgrp2 = (-0.498511);
2164 else if( (fabs(eta1) >= 2.0 && fabs(eta1) < 2.2) && (fabs(eta2) >= 2.0 && fabs(eta2) < 2.2) ) {
2165 Bgrp2 = (-0.897031);
2167 else if( (fabs(eta1) >= 2.2 && fabs(eta1) < 1000) && (fabs(eta2) >= 2.2 && fabs(eta2) < 1000) ) {
2170 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 0.85 && fabs(eta2) < 1.25)) ||
2171 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 0.85 && fabs(eta1) < 1.25)) ) {
2174 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6)) ||
2175 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6)) ) {
2176 Bgrp2 = (-0.337598);
2178 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
2179 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
2182 else if( ((fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6)) ||
2183 ((fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) && (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6)) ) {
2186 else if( ((fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
2187 ((fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
2190 else if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.8)) ||
2191 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1.8)) ) {
2194 else if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.8 && fabs(eta2) < 2.0)) ||
2195 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.8 && fabs(eta1) < 2.0)) ) {
2198 else if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 2.0 && fabs(eta2) < 2.2)) ||
2199 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 2.0 && fabs(eta1) < 2.2)) ) {
2202 else if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 2.2 && fabs(eta2) < 1000)) ||
2203 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 2.2 && fabs(eta1) < 1000)) ) {
2206 else if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.8) && (fabs(eta2) >= 1.8 && fabs(eta2) < 2.0)) ||
2207 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.8) && (fabs(eta1) >= 1.8 && fabs(eta1) < 2.0)) ) {
2208 Bgrp2 = (-0.723325);
2210 else if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.8) && (fabs(eta2) >= 2.0 && fabs(eta2) < 2.2)) ||
2211 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.8) && (fabs(eta1) >= 2.0 && fabs(eta1) < 2.2)) ) {
2214 else if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.8) && (fabs(eta2) >= 2.2 && fabs(eta2) < 1000)) ||
2215 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.8) && (fabs(eta1) >= 2.2 && fabs(eta1) < 1000)) ) {
2218 else if( ((fabs(eta1) >= 1.8 && fabs(eta1) < 2.0) && (fabs(eta2) >= 2.0 && fabs(eta2) < 2.2)) ||
2219 ((fabs(eta2) >= 1.8 && fabs(eta2) < 2.0) && (fabs(eta1) >= 2.0 && fabs(eta1) < 2.2)) ) {
2222 else if( ((fabs(eta1) >= 1.8 && fabs(eta1) < 2.0) && (fabs(eta2) >= 2.2 && fabs(eta2) < 1000)) ||
2223 ((fabs(eta2) >= 1.8 && fabs(eta2) < 2.0) && (fabs(eta1) >= 2.2 && fabs(eta1) < 1000)) ) {
2226 else if( ((fabs(eta1) >= 2.0 && fabs(eta1) < 2.2) && (fabs(eta2) >= 2.2 && fabs(eta2) < 1000)) ||
2227 ((fabs(eta2) >= 2.0 && fabs(eta2) < 2.2) && (fabs(eta1) >= 2.2 && fabs(eta1) < 1000)) ) {
2231 double norm = -(
exp(-Bgrp2*upperLimit_) -
exp(-Bgrp2*lowerLimit_))/Bgrp2;
2232 if( norm != 0 )
return exp(-Bgrp2*mass)/norm;
2235 void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
const std::vector<double>::const_iterator & parBgrIt,
const std::vector<int>::const_iterator & parBgrOrderIt,
const int muonType)
override {
2236 double thisStep[] = {0.01, 0.01};
2237 TString thisParName[] = {
"Bgr fraction",
"Bgr slope"};
2238 if( muonType == 1 ) {
2239 double thisMini[] = {0.0, 0.};
2240 double thisMaxi[] = {1.0, 10.};
2241 this->setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
2243 double thisMini[] = {0.0, 0.};
2244 double thisMaxi[] = {1.0, 10.};
2245 this->setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
2249 double fracVsEta(
const double * parval,
const double & eta1,
const double & eta2)
const override 2251 if( (fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 0. && fabs(eta2) < 0.85) ) {
2252 return (1.-0.893683);
2254 if( (fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) ) {
2255 return (1.-0.888968);
2257 if( (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) ) {
2258 return (1.-0.885926);
2260 if( (fabs(eta1) >= 1.6 && fabs(eta1) < 1.8) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.8) ) {
2261 return (1.-0.892823);
2263 if( (fabs(eta1) >= 1.8 && fabs(eta1) < 2.0) && (fabs(eta2) >= 1.8 && fabs(eta2) < 2.0) ) {
2264 return (1.-0.888735);
2266 if( (fabs(eta1) >= 2.0 && fabs(eta1) < 2.2) && (fabs(eta2) >= 2.0 && fabs(eta2) < 2.2) ) {
2267 return (1.-0.87497);
2269 if( (fabs(eta1) >= 2.2 && fabs(eta1) < 1000) && (fabs(eta2) >= 2.2 && fabs(eta2) < 1000) ) {
2270 return (1.-0.895275);
2272 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 0.85 && fabs(eta2) < 1.25)) ||
2273 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 0.85 && fabs(eta1) < 1.25)) ) {
2274 return (1.-0.892856);
2276 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6)) ||
2277 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6)) ) {
2278 return (1.-0.884864);
2280 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
2281 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
2282 return (1.-0.834572);
2284 if( ((fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6)) ||
2285 ((fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) && (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6)) ) {
2286 return (1.-0.894739);
2288 if( ((fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
2289 ((fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
2290 return (1.-0.880597);
2292 if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.8)) ||
2293 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1.8)) ) {
2294 return (1.-0.892911);
2296 if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.8 && fabs(eta2) < 2.0)) ||
2297 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.8 && fabs(eta1) < 2.0)) ) {
2298 return (1.-0.880506);
2300 if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 2.0 && fabs(eta2) < 2.2)) ||
2301 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 2.0 && fabs(eta1) < 2.2)) ) {
2302 return (1.-0.885718);
2304 if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 2.2 && fabs(eta2) < 1000)) ||
2305 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 2.2 && fabs(eta1) < 1000)) ) {
2306 return (1.-0.853141);
2308 if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.8) && (fabs(eta2) >= 1.8 && fabs(eta2) < 2.0)) ||
2309 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.8) && (fabs(eta1) >= 1.8 && fabs(eta1) < 2.0)) ) {
2310 return (1.-0.88822);
2312 if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.8) && (fabs(eta2) >= 2.0 && fabs(eta2) < 2.2)) ||
2313 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.8) && (fabs(eta1) >= 2.0 && fabs(eta1) < 2.2)) ) {
2314 return (1.-0.87028);
2316 if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.8) && (fabs(eta2) >= 2.2 && fabs(eta2) < 1000)) ||
2317 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.8) && (fabs(eta1) >= 2.2 && fabs(eta1) < 1000)) ) {
2318 return (1.-0.869603);
2320 if( ((fabs(eta1) >= 1.8 && fabs(eta1) < 2.0) && (fabs(eta2) >= 2.0 && fabs(eta2) < 2.2)) ||
2321 ((fabs(eta2) >= 1.8 && fabs(eta2) < 2.0) && (fabs(eta1) >= 2.0 && fabs(eta1) < 2.2)) ) {
2322 return (1.-0.877922);
2324 if( ((fabs(eta1) >= 1.8 && fabs(eta1) < 2.0) && (fabs(eta2) >= 2.2 && fabs(eta2) < 1000)) ||
2325 ((fabs(eta2) >= 1.8 && fabs(eta2) < 2.0) && (fabs(eta1) >= 2.2 && fabs(eta1) < 1000)) ) {
2326 return (1.-0.865997);
2328 if( ((fabs(eta1) >= 2.0 && fabs(eta1) < 2.2) && (fabs(eta2) >= 2.2 && fabs(eta2) < 1000)) ||
2329 ((fabs(eta2) >= 2.0 && fabs(eta2) < 2.2) && (fabs(eta1) >= 2.2 && fabs(eta1) < 1000)) ) {
2330 return (1.-0.886109);
2346 double operator()(
const double * parval,
const double &
mass,
const double &
eta )
const override {
return 0.;}
2347 double operator()(
const double * parval,
const double &
mass,
const double & eta1,
const double & eta2 )
const override 2350 if( (eta1 >= -100. && eta1 < -0.8) && (eta2 >= -100. && eta2 < -0.8) ) {
2351 Bgrp2 = (-0.0512353);
2353 else if( (eta1 >= -100. && eta1 < -0.8) && (eta2 >= -0.8 && eta2 < 0.) ) {
2354 Bgrp2 = (-0.0448482);
2356 else if( (eta1 >= -100. && eta1 < -0.8) && (eta2 >= 0. && eta2 < 0.8) ) {
2357 Bgrp2 = (-0.0193726);
2359 else if( (eta1 >= -100. && eta1 < -0.8) && (eta2 >= 0.8 && eta2 < 100.) ) {
2360 Bgrp2 = (0.0225765);
2362 else if( (eta1 >= -0.8 && eta1 < 0.) && (eta2 >= -100. && eta2 < -0.8) ) {
2363 Bgrp2 = (-0.0822936);
2365 else if( (eta1 >= -0.8 && eta1 < 0.) && (eta2 >= -0.8 && eta2 < 0.) ) {
2366 Bgrp2 = (-0.0676357);
2368 else if( (eta1 >= -0.8 && eta1 < 0.) && (eta2 >= 0. && eta2 < 0.8) ) {
2369 Bgrp2 = (-0.0591544);
2371 else if( (eta1 >= -0.8 && eta1 < 0.) && (eta2 >= 0.8 && eta2 < 100.) ) {
2372 Bgrp2 = (-0.0235858);
2374 else if( (eta1 >= 0. && eta1 < 0.8) && (eta2 >= -100. && eta2 < -0.8) ) {
2375 Bgrp2 = (-0.0317051);
2377 else if( (eta1 >= 0. && eta1 < 0.8) && (eta2 >= -0.8 && eta2 < 0.) ) {
2380 else if( (eta1 >= 0. && eta1 < 0.8) && (eta2 >= 0. && eta2 < 0.8) ) {
2381 Bgrp2 = (-0.0747737);
2383 else if( (eta1 >= 0. && eta1 < 0.8) && (eta2 >= 0.8 && eta2 < 100.) ) {
2384 Bgrp2 = (-0.0810139);
2386 else if( (eta1 >= 0.8 && eta1 < 100.) && (eta2 >= -100. && eta2 < -0.8) ) {
2387 Bgrp2 = (0.0229602);
2389 else if( (eta1 >= 0.8 && eta1 < 100.) && (eta2 >= -0.8 && eta2 < 0.) ) {
2390 Bgrp2 = (-0.0224212);
2392 else if( (eta1 >= 0.8 && eta1 < 100.) && (eta2 >= 0. && eta2 < 0.8) ) {
2393 Bgrp2 = (-0.0446273);
2395 else if( (eta1 >= 0.8 && eta1 < 100.) && (eta2 >= 0.8 && eta2 < 100.) ) {
2396 Bgrp2 = (-0.0554561);
2399 std::cout <<
"WARNING, backgroundFunctionType11: this should not happen for eta1 = " << eta1 <<
" and eta2 = " << eta2 << std::endl;
2402 double norm = (
exp(Bgrp2*upperLimit_) -
exp(Bgrp2*lowerLimit_))/Bgrp2;
2403 if( norm != 0 )
return exp(Bgrp2*mass)/norm;
2407 void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
const std::vector<double>::const_iterator & parBgrIt,
const std::vector<int>::const_iterator & parBgrOrderIt,
const int muonType)
override {
2408 double thisStep[] = {0.01, 0.01};
2409 TString thisParName[] = {
"Bgr fraction",
"Bgr slope"};
2410 if( muonType == 1 ) {
2411 double thisMini[] = {-1.0, 10.};
2412 double thisMaxi[] = {1.0 , 10.};
2413 this->setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
2415 double thisMini[] = {-1.0, 10.};
2416 double thisMaxi[] = { 1.0, 10.};
2417 this->setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
2421 double fracVsEta(
const double * parval,
const double & eta1,
const double & eta2)
const override 2423 if( (eta1 >= -100. && eta1 < -0.8) && (eta2 >= -100. && eta2 < -0.8) ) {
2424 return (1.-0.966316);
2426 if( (eta1 >= -100. && eta1 < -0.8) && (eta2 >= -0.8 && eta2 < 0.) ) {
2427 return (1.-0.966875);
2429 if( (eta1 >= -100. && eta1 < -0.8) && (eta2 >= 0. && eta2 < 0.8) ) {
2430 return (1.-0.955311);
2432 if( (eta1 >= -100. && eta1 < -0.8) && (eta2 >= 0.8 && eta2 < 100.) ) {
2433 return (1.-0.928771);
2435 if( (eta1 >= -0.8 && eta1 < 0.) && (eta2 >= -100. && eta2 < -0.8) ) {
2436 return (1.-0.983255);
2438 if( (eta1 >= -0.8 && eta1 < 0.) && (eta2 >= -0.8 && eta2 < 0.) ) {
2439 return (1.-0.982203);
2441 if( (eta1 >= -0.8 && eta1 < 0.) && (eta2 >= 0. && eta2 < 0.8) ) {
2442 return (1.-0.972127);
2444 if( (eta1 >= -0.8 && eta1 < 0.) && (eta2 >= 0.8 && eta2 < 100.) ) {
2445 return (1.-0.962929);
2447 if( (eta1 >= 0. && eta1 < 0.8) && (eta2 >= -100. && eta2 < -0.8) ) {
2448 return (1.-0.965597);
2450 if( (eta1 >= 0. && eta1 < 0.8) && (eta2 >= -0.8 && eta2 < 0.) ) {
2451 return (1.-0.969461);
2453 if( (eta1 >= 0. && eta1 < 0.8) && (eta2 >= 0. && eta2 < 0.8) ) {
2454 return (1.-0.979922);
2456 if( (eta1 >= 0. && eta1 < 0.8) && (eta2 >= 0.8 && eta2 < 100.) ) {
2457 return (1.-0.984247);
2459 if( (eta1 >= 0.8 && eta1 < 100.) && (eta2 >= -100. && eta2 < -0.8) ) {
2460 return (1.-0.934252);
2462 if( (eta1 >= 0.8 && eta1 < 100.) && (eta2 >= -0.8 && eta2 < 0.) ) {
2463 return (1.-0.952914);
2465 if( (eta1 >= 0.8 && eta1 < 100.) && (eta2 >= 0. && eta2 < 0.8) ) {
2466 return (1.-0.960191);
2468 if( (eta1 >= 0.8 && eta1 < 100.) && (eta2 >= 0.8 && eta2 < 100.) ) {
2469 return (1.-0.966175);
2472 std::cout <<
"WARNING, backgroundFunctionType11: this should not happen for eta1 = " << eta1 <<
" and eta2 = " << eta2 << std::endl;
2479 #endif // FUNCTIONS_H
void setParameters(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const std::vector< double >::const_iterator &parBgrIt, const std::vector< int >::const_iterator &parBgrOrderIt, const int muonType) override
This method is used to differentiate parameters among the different functions.
void setParameters(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const T &parScale, const std::vector< int > &parScaleOrder, const int muonType) override
This method is used to differentiate parameters among the different functions.
backgroundFunctionType9(const double &lowerLimit, const double &upperLimit)
scaleFunctionBase< double * > * scaleFunctionService(const int identifier)
Service to build the scale functor corresponding to the passed identifier.
double sigmaCotgTh(const double &pt, const double &eta, const T &parval) override
backgroundFunctionType1(const double &lowerLimit, const double &upperLimit)
Returns ( sigmaPt/Pt(data)^2 - sigmaPt/Pt(MC)^2 )
Exponential binned in eta, much finer binning then type6.
double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const override
double sigmaPtError(const double &pt, const double &eta, const T &parval, const T &parError) override
double operator()(const double *parval, const double &mass, const double &eta1, const double &eta2) const override
virtual TF1 * functionForIntegral(const std::vector< double >::const_iterator &parBgrIt) const
double operator()(const double *parval, const double &mass, const double &eta) const override
double operator()(const double *mass, const double *) const
double etaByPoints(const double &inEta, const double &border)
void smear(double &pt, double &eta, double &phi, const double *y, const std::vector< double > &parSmear) override
double fracVsEta(const double *parval, const double &eta1, const double &eta2) const override
double sigmaCotgTh(const double &pt, const double &eta, const T &parval) override
void setParameters(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const std::vector< double >::const_iterator &parBgrIt, const std::vector< int >::const_iterator &parBgrOrderIt, const int muonType) override
This method is used to differentiate parameters among the different functions.
Sin< T >::type sin(const T &t)
int etaBin(const double &eta)
void setParameters(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const std::vector< double >::const_iterator &parBgrIt, const std::vector< int >::const_iterator &parBgrOrderIt, const int muonType) override
This method is used to differentiate parameters among the different functions.
double sigmaPhi(const double &pt, const double &eta, const T &parval) override
backgroundFunctionType11(const double &lowerLimit, const double &upperLimit)
Geom::Theta< T > theta() const
double sigmaPt(const double &pt, const double &eta, const T &parval) override
double operator()(const double *parval, const double &mass, const double &eta) const override
void setParameters(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const std::vector< double >::const_iterator &parBgrIt, const std::vector< int >::const_iterator &parBgrOrderIt, const int muonType) override
This method is used to differentiate parameters among the different functions.
virtual void setPar(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const T &parResol, const std::vector< int > &parResolOrder, const std::vector< ParameterSet > &parSet)
double fracVsEta(const double *parval, const double &eta1, const double &eta2) const override
void smear(double &pt, double &eta, double &phi, const double *y, const std::vector< double > &parSmear) override
virtual void setPar(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const T &parResol, const std::vector< int > &parResolOrder, double *thisStep, double *thisMini, double *thisMaxi, TString *thisParName)
This method sets the parameters.
resolutionFunctionType0()
virtual ~scaleFunctionBase()=0
backgroundFunctionType4(const double &lowerLimit, const double &upperLimit)
virtual void setParameters(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const T &parResol, const std::vector< int > &parResolOrder, const std::vector< double > &parStep, const std::vector< double > &parMin, const std::vector< double > &parMax, const int muonType)
void smear(double &pt, double &eta, double &phi, const double *y, const std::vector< double > &parSmear) override
void smearEta(double &eta)
double fracVsEta(const double *parval, const double &eta1, const double &eta2) const override
int etaBin(const double &eta)
backgroundFunctionType5(const double &lowerLimit, const double &upperLimit)
double fracVsEta(const double *parval, const double &eta1, const double &eta2) const override
void smear(double &pt, double &eta, double &phi, const double *y, const std::vector< double > &parSmear) override
double operator()(const double *parval, const double &mass, const double &eta) const override
backgroundFunctionType2(const double &lowerLimit, const double &upperLimit)
void setParameters(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const T &parResol, const std::vector< int > &parResolOrder, const int muonType) override
This method is used to differentiate parameters among the different functions.
void resetParameters(std::vector< double > *scaleVec) const override
This method is used to reset the scale parameters to neutral values (useful for iterations > 0) ...
backgroundFunctionType10(const double &lowerLimit, const double &upperLimit)
virtual double operator()(const double *parval, const double &mass, const double &eta1, const double &eta2) const
void setParameters(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const std::vector< double >::const_iterator &parBgrIt, const std::vector< int >::const_iterator &parBgrOrderIt, const int muonType) override
This method is used to differentiate parameters among the different functions.
virtual ~backgroundFunctionBase()
const backgroundFunctionBase * function_
resolutionFunctionType46()
virtual double fracVsEta(const double *parval, const double &eta1, const double &eta2) const
void setParameters(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const T &parScale, const std::vector< int > &parScaleOrder, const std::vector< double > &parStep, const std::vector< double > &parMin, const std::vector< double > &parMax, const int muonType) override
resolutionFunctionBase< std::vector< double > > * resolutionFunctionVecService(const int identifier)
Service to build the resolution functor corresponding to the passed identifier when receiving a std::...
Exponential with eta dependence.
virtual int parNum() const
void setParameters(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const std::vector< double >::const_iterator &parBgrIt, const std::vector< int >::const_iterator &parBgrOrderIt, const int muonType) override
This method is used to differentiate parameters among the different functions.
double sigmaPt(const double &pt, const double &eta, const T &parval) override
virtual void setPar(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const T &parScale, const std::vector< int > &parScaleOrder, double *thisStep, double *thisMini, double *thisMaxi, TString *thisParName)
This method sets the parameters.
double fracVsEta(const double *parval, const double &eta1, const double &eta2) const override
void smear(double &pt, double &eta, double &phi, const double *y, const std::vector< double > &parSmear) override
double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const override
Cos< T >::type cos(const T &t)
virtual void setPar(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const T &parResol, const std::vector< int > &parResolOrder, const std::vector< ParameterSet > &parSet)
void setParameters(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const T &parScale, const std::vector< int > &parScaleOrder, const std::vector< double > &parStep, const std::vector< double > &parMin, const std::vector< double > &parMax, const int muonType) override
Tan< T >::type tan(const T &t)
double operator()(const double *parval, const double &mass, const double &eta) const override
virtual double covPt1Pt2(const double &pt1, const double &eta1, const double &pt2, const double &eta2, const T &parval)
backgroundFunctionBase(const double &lowerLimit, const double &upperLimit)
double sigmaPtError(const double &pt, const double &eta, const T &parval, const T &parError) override
virtual void setParameters(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const T &parResol, const std::vector< int > &parResolOrder, const std::vector< double > &parStep, const std::vector< double > &parMin, const std::vector< double > &parMax, const int muonType)
void resetParameters(std::vector< double > *scaleVec) const override
This method is used to reset the scale parameters to neutral values (useful for iterations > 0) ...
double sigmaPtError(const double &pt, const double &eta, const T &parval, const T &parError) override
void smear(double &pt, double &eta, double &phi, const double *y, const std::vector< double > &parSmear) override
ParameterSet(const TString &inputName, const double &inputStep, const double &inputMini, const double &inputMaxi)
smearFunctionBase * smearFunctionService(const int identifier)
Service to build the smearing functor corresponding to the passed identifier.
double operator()(const double *parval, const double &mass, const double &eta1, const double &eta2) const override
void setParameters(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const T &parResol, const std::vector< int > &parResolOrder, const std::vector< double > &parStep, const std::vector< double > &parMin, const std::vector< double > &parMax, const int muonType) override
double operator()(const double *parval, const double &mass, const double &eta) const override
void setParameters(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const std::vector< double >::const_iterator &parBgrIt, const std::vector< int >::const_iterator &parBgrOrderIt, const int muonType) override
This method is used to differentiate parameters among the different functions.
double sigmaPhi(const double &pt, const double &eta, const T &parval) override
double sigmaPtError(const double &pt, const double &eta, const T &parval, const T &parError) override
scaleFunctionBase< std::vector< double > > * scaleFunctionVecService(const int identifier)
Service to build the scale functor corresponding to the passed identifier when receiving a std::vecto...
resolutionFunctionType45()
double operator()(const double *parval, const double &mass, const double &eta) const override
double sigmaPhi(const double &pt, const double &eta, const T &parval) override
void setParameters(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const T &parScale, const std::vector< int > &parScaleOrder, const int muonType) override
This method is used to differentiate parameters among the different functions.
void setParameters(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const T &parResol, const std::vector< int > &parResolOrder, const int muonType) override
This method is used to differentiate parameters among the different functions.
double covPt1Pt2(const double &pt1, const double &eta1, const double &pt2, const double &eta2, const T &parval) override
double sigmaCotgTh(const double &pt, const double &eta, const T &parval) override
void setParameters(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const T &parResol, const std::vector< int > &parResolOrder, const int muonType) override
This method is used to differentiate parameters among the different functions.
double operator()(const double *parval, const double &mass, const double &eta) const override
double operator()(const double *parval, const double &mass, const double &eta) const override
double fracVsEta(const double *parval, const double &eta1, const double &eta2) const override
void resetParameters(std::vector< double > *scaleVec) const override
This method is used to reset the scale parameters to neutral values (useful for iterations > 0) ...
FunctionForIntegral(const backgroundFunctionBase *function, const std::vector< double >::const_iterator &parBgrIt)
void setParameters(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const T &parResol, const std::vector< int > &parResolOrder, const int muonType) override
This method is used to differentiate parameters among the different functions.
void smear(double &pt, double &eta, double &phi, const double *y, const std::vector< double > &parSmear) override
void setParameters(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const std::vector< double >::const_iterator &parBgrIt, const std::vector< int >::const_iterator &parBgrOrderIt, const int muonType) override
This method is used to differentiate parameters among the different functions.
FunctionForIntegral * functionForIntegral_
int etaBin(const double &eta)
std::vector< std::vector< double > > tmp
Linear with eta dependence.
virtual int parNum() const
double operator()(const double *parval, const double &mass, const double &eta1, const double &eta2) const override
void setParameters(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const T &parScale, const std::vector< int > &parScaleOrder, const int muonType) override
This method is used to differentiate parameters among the different functions.
double operator()(const double *parval, const double &mass, const double &eta) const override
resolutionFunctionBase< double * > * resolutionFunctionService(const int identifier)
Service to build the resolution functor corresponding to the passed identifier.
Exponential binned in eta (Z, Run2012C PromptReco-v1 + PromptReco-v2)
double operator()(const double *parval, const double &mass, const double &eta1, const double &eta2) const override
virtual void setParameters(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const T &parResol, const std::vector< int > &parResolOrder, const int muonType)
This method is used to differentiate parameters among the different functions.
double sigmaCotgTh(const double &pt, const double &eta, const T &parval) override
void setParameters(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const T &parResol, const std::vector< int > &parResolOrder, const std::vector< double > &parStep, const std::vector< double > &parMin, const std::vector< double > &parMax, const int muonType) override
backgroundFunctionType7(const double &lowerLimit, const double &upperLimit)
void setParameters(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const std::vector< double >::const_iterator &parBgrIt, const std::vector< int >::const_iterator &parBgrOrderIt, const int muonType) override
This method is used to differentiate parameters among the different functions.
double sigmaPt(const double &pt, const double &eta, const T &parval) override
void setParameters(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const T &parResol, const std::vector< int > &parResolOrder, const std::vector< double > &parStep, const std::vector< double > &parMin, const std::vector< double > &parMax, const int muonType) override
double operator()(const double *parval, const double &mass, const double &eta) const override
double operator()(const double *parval, const double &mass, const double &eta1, const double &eta2) const override
resolutionFunctionType47()
void setParameters(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const T &parResol, const std::vector< int > &parResolOrder, const std::vector< double > &parStep, const std::vector< double > &parMin, const std::vector< double > &parMax, const int muonType) override
virtual void resetParameters(std::vector< double > *scaleVec) const
This method is used to reset the scale parameters to neutral values (useful for iterations > 0) ...
virtual ~smearFunctionBase()=0
backgroundFunctionBase * backgroundFunctionService(const int identifier, const double &lowerLimit, const double &upperLimit)
Service to build the background functor corresponding to the passed identifier.
double sigmaPt(const double &pt, const double &eta, const T &parval) override
double operator()(const double *parval, const double &mass, const double &eta1, const double &eta2) const override
virtual int parNum() const
virtual double sigmaPtError(const double &pt, const double &eta, const T &parval, const T &parError)
virtual void setPar(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const std::vector< double >::const_iterator &parBgrIt, const std::vector< int >::const_iterator &parBgrOrderIt, double *thisStep, double *thisMini, double *thisMaxi, TString *thisParName)
This method sets the parameters.
void setParameters(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const std::vector< double >::const_iterator &parBgrIt, const std::vector< int >::const_iterator &parBgrOrderIt, const int muonType) override
This method is used to differentiate parameters among the different functions.
virtual ~resolutionFunctionBase()=0
void smear(double &pt, double &eta, double &phi, const double *y, const std::vector< double > &parSmear) override
backgroundFunctionType6(const double &lowerLimit, const double &upperLimit)
backgroundFunctionType8(const double &lowerLimit, const double &upperLimit)
Power< A, B >::type pow(const A &a, const B &b)
double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const override
double sigmaPhi(const double &pt, const double &eta, const T &parval) override
Exponential binned in eta.