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;
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;
110 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
return pt; }
112 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) {}
120 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
121 return ( (parScale[0] + parScale[1]*pt)*pt );
125 scaleVec->push_back(1);
127 scaleVec->push_back(0);
130 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) {
131 double thisStep[] = {0.001, 0.01};
132 TString thisParName[] = {
"Pt offset",
"Pt slope"};
133 if( muonType == 1 ) {
134 double thisMini[] = {0.97, -0.1};
135 double thisMaxi[] = {1.03, 0.1};
136 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
138 double thisMini[] = {0.97, -0.1};
139 double thisMaxi[] = {1.03, 0.1};
140 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
144 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
145 const T & parResol,
const std::vector<int> & parResolOrder,
146 const std::vector<double> & parStep,
147 const std::vector<double> & parMin,
148 const std::vector<double> & parMax,
151 if( (
int(parStep.size()) != this->
parNum_) || (int(parMin.size()) != this->
parNum_) || (int(parMax.size()) != this->
parNum_) ) {
152 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
154 std::cout <<
"parStep.size() = " << parStep.size() << std::endl;
155 std::cout <<
"parMin.size() = " << parMin.size() << std::endl;
156 std::cout <<
"parMax.size() = " << parMax.size() << std::endl;
159 std::vector<ParameterSet> parSet(this->
parNum_);
162 parSet[0] =
ParameterSet(
"Pt offset", parStep[0], parMin[0], parMax[0] );
163 parSet[1] =
ParameterSet(
"Pt slope" , parStep[1], parMin[1], parMax[1] );
166 std::cout <<
"setting parameters" << std::endl;
169 <<
", parMin["<<
i<<
"] = " << parMin[
i]
170 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
172 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
181 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
182 return ( (parScale[0] + parScale[1]*std::fabs(eta))*pt );
186 scaleVec->push_back(1);
188 scaleVec->push_back(0);
191 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) {
192 double thisStep[] = {0.001, 0.01};
193 TString thisParName[] = {
"Eta offset",
"Eta slope"};
194 if( muonType == 1 ) {
195 double thisMini[] = {0.9, -0.3};
196 double thisMaxi[] = {1.1, 0.3};
197 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
199 double thisMini[] = {0.97, -0.1};
200 double thisMaxi[] = {1.03, 0.1};
201 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
211 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
212 return( (parScale[0] + parScale[1]*
sin(parScale[2]*phi + parScale[3]))*pt );
216 scaleVec->push_back(1);
218 scaleVec->push_back(0);
221 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) {
222 double thisStep[] = {0.001, 0.01, 0.01, 0.01};
223 TString thisParName[] = {
"Phi offset",
"Phi ampl",
"Phi freq",
"Phi phase"};
224 if( muonType == 1 ) {
225 double thisMini[] = {0.9, -0.1, -0.1, -0.1};
226 double thisMaxi[] = {1.1, 0.1, 0.1, 0.1};
227 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
229 double thisMini[] = {0.97, -0.05, 6, -3.14};
230 double thisMaxi[] = {1.03, 0.05, 0.1, 3.14};
231 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
241 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
242 return( (parScale[0] + parScale[1]*pt +
243 parScale[2]*std::fabs(eta))*pt );
247 scaleVec->push_back(1);
249 scaleVec->push_back(0);
252 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) {
253 double thisStep[] = {0.001, 0.01, 0.01};
254 TString thisParName[] = {
"Pt offset",
"Pt slope",
"Eta slope"};
255 if( muonType == 1 ) {
256 double thisMini[] = {0.9, -0.1, -0.1};
257 double thisMaxi[] = {1.1, 0.1, 0.1};
258 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
260 double thisMini[] = {0.97, -0.02, -0.02};
261 double thisMaxi[] = {1.03, 0.02, 0.02};
262 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
272 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
273 return( (parScale[0] + parScale[1]*pt +
274 parScale[2]*
sin(phi))*pt );
278 scaleVec->push_back(1);
280 scaleVec->push_back(0);
283 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) {
284 double thisStep[] = {0.001, 0.01, 0.01};
285 TString thisParName[] = {
"Pt offset",
"Pt slope",
"Phi ampl"};
286 if( muonType == 1 ) {
287 double thisMini[] = {0.9, -0.1, -0.3};
288 double thisMaxi[] = {1.1, 0.1, 0.3};
289 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
291 double thisMini[] = {0.97, -0.02, -0.3};
292 double thisMaxi[] = {1.03, 0.02, 0.3};
293 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
303 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
304 return (parScale[0] + parScale[1]*std::fabs(eta) +
305 parScale[2]*
sin(phi))*pt;
311 scaleVec->push_back(0);
315 TString* parname,
const T & parScale,
const std::vector<int> & parScaleOrder,
const int muonType) {
316 double thisStep[] = {0.001, 0.01, 0.01};
317 TString thisParName[] = {
"Eta offset",
"Eta slope",
"Phi ampl"};
318 if( muonType == 1 ) {
319 double thisMini[] = {0.9, -0.1, -0.3};
320 double thisMaxi[] = {1.1, 0.1, 0.3};
321 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
323 double thisMini[] = {0.97, -0.02, -0.3};
324 double thisMaxi[] = {1.03, 0.02, 0.3};
325 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
329 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
330 const T & parScale,
const std::vector<int> & parScaleOrder,
331 const std::vector<double> & parStep,
332 const std::vector<double> & parMin,
333 const std::vector<double> & parMax,
336 if( (
int(parStep.size()) != this->
parNum_) || (int(parMin.size()) != this->
parNum_) || (int(parMax.size()) != this->
parNum_) ) {
337 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
339 std::cout <<
"parStep.size() = " << parStep.size() << std::endl;
340 std::cout <<
"parMin.size() = " << parMin.size() << std::endl;
341 std::cout <<
"parMax.size() = " << parMax.size() << std::endl;
344 std::vector<ParameterSet> parSet(this->
parNum_);
346 parSet[0] =
ParameterSet(
"Eta offset", parStep[0], parMin[0], parMax[0] );
347 parSet[1] =
ParameterSet(
"Eta slope", parStep[1], parMin[1], parMax[1] );
348 parSet[2] =
ParameterSet(
"Phi ampl", parStep[2], parMin[2], parMax[2] );
350 std::cout <<
"setting parameters" << std::endl;
353 <<
", parMin["<<
i<<
"] = " << parMin[
i]
354 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
356 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, parSet );
366 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
367 return( (parScale[0] + parScale[1]*pt +
368 parScale[2]*std::fabs(eta) +
369 parScale[3]*
sin(phi))*pt );
373 scaleVec->push_back(1);
375 scaleVec->push_back(0);
379 TString* parname,
const T & parScale,
const std::vector<int> & parScaleOrder,
const int muonType) {
380 double thisStep[] = {0.001, 0.01, 0.01, 0.01};
381 TString thisParName[] = {
"Pt offset",
"Pt slope",
"Eta slope",
"Phi ampl"};
382 if( muonType == 1 ) {
383 double thisMini[] = {0.9, -0.1, -0.3, -0.3};
384 double thisMaxi[] = {1.1, 0.1, 0.3, 0.3};
385 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
387 double thisMini[] = {0.97, -0.02, -0.3, -0.3};
388 double thisMaxi[] = {1.03, 0.02, 0.3, 0.3};
389 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
399 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
400 return( (parScale[0] + parScale[1]*pt +
401 parScale[2]*std::fabs(eta) +
402 parScale[3]*eta*eta)*pt );
406 scaleVec->push_back(1);
408 scaleVec->push_back(0);
411 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) {
412 double thisStep[] = {0.00001, 0.000001, 0.0000001, 0.0000001};
413 TString thisParName[] = {
"Pt offset",
"Pt slope",
"Eta slope",
"Eta quadr"};
414 if( muonType == 1 ) {
415 double thisMini[] = {0.9, -0.3, -0.3, -0.3};
416 double thisMaxi[] = {1.1, 0.3, 0.3, 0.3};
417 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
421 double thisMini[] = {0.9, -0.002, -0.01, -0.005};
422 double thisMaxi[] = {1.1, 0.002, 0.01, 0.005};
423 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
433 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
434 return( (parScale[0] +
exp(parScale[1]*pt))*pt );
438 scaleVec->push_back(1);
440 scaleVec->push_back(0);
443 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) {
444 double thisStep[] = {0.001, 0.01};
445 TString thisParName[] = {
"Pt offset",
"Pt expon"};
446 double thisMini[] = {0.97, -0.1};
447 double thisMaxi[] = {1.03, 0.1};
448 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
457 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
458 return( (parScale[0] + parScale[1]*pt +
459 parScale[2]*pt*pt)*pt );
463 scaleVec->push_back(1);
465 scaleVec->push_back(0);
468 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) {
469 double thisStep[] = {0.001, 0.01, 0.01};
470 TString thisParName[] = {
"Pt offset",
"Pt slope",
"Pt quadr"};
471 double thisMini[] = {0.97, -0.1, -0.001};
472 double thisMaxi[] = {1.03, 0.1, 0.001};
473 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
509 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
510 return( (parScale[0] + parScale[1]*pt + (
double)chg*parScale[4]*eta +
511 (
double)chg*parScale[2]*
sin(phi+parScale[3]))*pt );
515 scaleVec->push_back(1);
517 scaleVec->push_back(0);
520 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) {
521 double thisStep[] = {0.001, 0.01, 0.01, 0.1,0.01};
522 TString thisParName[] = {
"Pt scale",
"Pt slope",
"Phi ampl",
"Phi phase",
"Eta coeff"};
523 double thisMini[] = {0.9, -0.1, -0.02, -3.1416,-0.2};
524 double thisMaxi[] = {1.1, 0.1, 0.02, 3.1416,0.2};
526 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
570 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
571 return( (parScale[0] + parScale[1]*pt +
572 parScale[2]*std::fabs(eta) +
573 parScale[3]*eta*eta +
574 (
double)chg*parScale[4]*
sin(phi+parScale[5]))*pt );
578 scaleVec->push_back(1);
580 scaleVec->push_back(0);
583 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) {
584 double thisStep[] = {0.001, 0.01, 0.01, 0.01, 0.01, 0.1};
585 TString thisParName[] = {
"Pt scale",
"Pt slope",
"Eta slope",
"Eta quadr",
"Phi ampl",
"Phi phase"};
586 double thisMini[] = {0.97, -0.1, -0.2, -0.2, -0.02, 0.0};
587 double thisMaxi[] = {1.03, 0.1, 0.2, 0.2, 0.02, 3.1416};
588 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
602 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
604 return( (parScale[0] + parScale[1]*pt +
605 parScale[2]*std::fabs(eta) +
606 parScale[3]*eta*eta +
607 parScale[4]*
sin(phi+parScale[5]))*pt );
610 return( (parScale[0] + parScale[1]*pt +
611 parScale[2]*std::fabs(eta) +
612 parScale[3]*eta*eta +
613 parScale[6]*
sin(phi+parScale[7]))*pt );
618 scaleVec->push_back(1);
620 scaleVec->push_back(0);
623 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) {
624 double thisStep[] = {0.001, 0.01, 0.01, 0.01, 0.01, 0.1, 0.01, 0.1};
625 TString thisParName[] = {
"Pt scale",
"Pt slope",
"Eta slope",
"Eta quadr",
"Phi ampl+",
"Phi phase+",
"Phi ampl-",
"Phi phase-"};
626 double thisMini[] = {0.99, -0.01, -0.02, -0.02, -0.02, 0.0, -0.02, 0.0};
627 double thisMaxi[] = {1.01, 0.01, 0.02, 0.02, 0.02, 3.1416, 0.02, 3.1416};
628 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
638 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
647 return( ( parScale[0] +
648 parScale[1]*pt + parScale[2]*pt*pt + parScale[3]*pt*pt*pt +
649 parScale[4]*std::fabs(eta) + parScale[5]*eta*eta + parScale[6]*std::fabs(eta*eta*eta) +
650 parScale[7]*eta*eta*eta*eta + parScale[8]*std::fabs(eta*eta*eta*eta*eta) +
651 parScale[9]*eta*eta*eta*eta*eta*eta )*pt );
655 scaleVec->push_back(1);
657 scaleVec->push_back(0);
660 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) {
661 double thisStep[] = {0.001,
663 0.01, 0.00001, 0.0000001, 0.00000001, 0.00000001, 0.000000001};
664 TString thisParName[] = {
"Pt offset",
665 "Pt slope",
"Pt quadr",
"Pt cubic",
666 "Eta slope",
"Eta quadr",
"Eta cubic",
"Eta quartic",
"Eta fifth grade",
"Eta sixth grade"};
667 if( muonType == 1 ) {
668 double thisMini[] = {0.9,
670 -0.3, -0.3, -0.01, -0.001, -0.0001, -0.00001};
671 double thisMaxi[] = {1.1,
673 0.3, 0.3, 0.01, 0.001, 0.0001, 0.00001};
674 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
676 double thisMini[] = {0.97,
677 -0.1, -0.001, -0.001,
678 -0.1, -0.1, -0.1, -0.0001, -0.00001, -0.000001};
679 double thisMaxi[] = {1.03,
681 0.1, 0.1, 0.1, 0.0001, 0.00001, 0.000001};
682 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
693 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
694 if( pt > parScale[0] ) {
695 return( ( parScale[1] + parScale[3]*std::fabs(eta) + parScale[4]*
pow(eta,2) )*pt );
698 return( ( parScale[2] + parScale[3]*std::fabs(eta) + parScale[4]*
pow(eta,2) )*pt );
706 scaleVec->push_back(1);
707 scaleVec->push_back(1);
709 scaleVec->push_back(0);
712 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) {
714 double thisStep[] = {0.001,
717 TString thisParName[] = {
"Pt offset",
718 "Pt slope 1",
"Pt slope 2",
719 "Eta slope",
"Eta quadr"};
720 if( muonType == 1 ) {
721 double thisMini[] = {30.,
724 double thisMaxi[] = {50.,
727 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
729 double thisMini[] = {30.,
732 double thisMaxi[] = {50.,
735 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
748 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
749 return (parScale[0] + parScale[1]*std::fabs(eta)+ parScale[2]*eta*eta + parScale[3]*pt + parScale[4]/(pt*pt))*pt;
753 scaleVec->push_back(1);
755 scaleVec->push_back(0);
758 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) {
759 double thisStep[] = {0.0000001, 0.00000001, 0.0000001, 0.00000001, 0.00000001};
760 TString thisParName[] = {
"offset",
"linearEta",
"parabEta",
"linearPt",
"coeffOverPt2"};
761 if( muonType == 1 ) {
762 double thisMini[] = {30.,
765 double thisMaxi[] = {50.,
768 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
770 double thisMini[] = {0.9, -0.000001, -0.000001, -0.00001, -0.00001};
771 double thisMaxi[] = { 1.1, 0.01, 0.001, 0.001, 0.1};
772 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
781 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
782 return (parScale[0]*std::fabs(eta)+ parScale[1]*eta*eta + pt/(parScale[2]*pt + parScale[3]))*pt;
787 scaleVec->push_back(1);
789 scaleVec->push_back(0);
792 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) {
793 double thisStep[] = {0.00000001, 0.000000001, 0.00000001, 0.00000001};
794 TString thisParName[] = {
"linearEta",
"parabEta",
"coeffPt",
"coeffOverPt"};
795 if( muonType == 1 ) {
796 double thisMini[] = {30.,
799 double thisMaxi[] = {50.,
802 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
804 double thisMini[] = {-0.000001, -0.000001, 0.8, -0.001};
805 double thisMaxi[] = { 0.01, 0.005, 1.2, 0.001};
806 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
814 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
816 if(std::fabs(eta)<0.2)
817 return parScale[0]*pt;
818 else if(std::fabs(eta)>0.2 && std::fabs(eta)<1.1)
819 return parScale[1]*pt;
820 else if(std::fabs(eta)>1.1 && std::fabs(eta)<1.5)
821 return parScale[2]*pt;
823 return parScale[3]*pt;
828 scaleVec->push_back(1);
832 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) {
833 double thisStep[] = {0.00000001, 0.000000001, 0.00000001, 0.00000001};
834 TString thisParName[] = {
"etaCentr",
"barrel",
"overlap",
"endcaps"};
835 if( muonType == 1 ) {
836 double thisMini[] = {30.,
839 double thisMaxi[] = {50.,
842 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
844 double thisMini[] = {0.9, 0.9, 0.9, 0.9};
845 double thisMaxi[] = {1.1, 1.1, 1.1, 1.1};
846 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
860 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
862 return( (parScale[0] + parScale[1]*
sin(parScale[2]*phi + parScale[3])+ parScale[4]*std::fabs(eta) + parScale[5]*eta*eta )*pt);
864 return( (parScale[0] + parScale[6]*
sin(parScale[7]*phi + parScale[8])+ parScale[4]*std::fabs(eta) + parScale[5]*eta*eta )*pt );
869 scaleVec->push_back(1);
871 scaleVec->push_back(0);
875 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
const T & parScale,
const
876 std::vector<int> & parScaleOrder,
const int muonType)
878 double thisStep[] = {0.001, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01};
879 TString thisParName[] = {
"Phi offset",
"Phi ampl Pos",
"Phi freq Pos",
"Phi phase Pos",
"Eta slope",
"Eta quadr",
"Phi ampl Neg",
"Phi freq Neg",
"Phi phase Neg"};
880 if( muonType == 1 ) {
881 double thisMini[] = {0.9, -0.1, -0.1, -0.1, -0.02, -0.02, -0.1, -0.1, -0.1};
882 double thisMaxi[] = {1.1, 0.1, 0.1, 0.1, 0.02, 0.02, 0.1, 0.1, 0.1};
883 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
885 double thisMini[] = {0.9, -0.1, -2.0, 0., -0.1, -0.01, -0.1, -2.0, 0. };
886 double thisMaxi[] = {1.1, 0.1, 2.0, 6.28, 0.1, 0.01, 0.1, 2.0, 3.14 };
888 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
898 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
899 if( pt < parScale[8] ) {
900 return( (parScale[0] + parScale[3] + parScale[6]*std::fabs(eta) + parScale[7]*eta*eta )*pt);
902 else if( pt < parScale[9] ) {
903 return( (parScale[1] + parScale[4] + parScale[6]*std::fabs(eta) + parScale[7]*eta*eta )*pt);
905 return( (parScale[2] + parScale[5] + parScale[6]*std::fabs(eta) + parScale[7]*eta*eta )*pt);
910 scaleVec->push_back(1);
911 scaleVec->push_back(1);
912 scaleVec->push_back(1);
914 scaleVec->push_back(0);
920 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
const T & parScale,
const
921 std::vector<int> & parScaleOrder,
const int muonType) {
926 double thisStep[] = {0.001, 0.01, 0.01, 0.1, 0.01, 0.01, 0.001, 0.001, 0.1, 0.1};
928 TString thisParName[] = {
"offset1",
"offset2",
"offset3",
"linearPt1",
"linearPt2",
"linearPt3",
929 "linearEta",
"parabEta",
"transition1",
"transition2"};
930 if( muonType == 1 ) {
931 double thisMini[] = {0.9, 0.9, 0.9, -1., -1., -1., -1., -1., 0., 0.};
932 double thisMaxi[] = {1.1, 1.1, 1.1, 1., 1., 1., 1., 1., 100., 100.};
933 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
935 double thisMini[] = {0.9, 0.9, 0.9, -1., -1., -1., -1., -1., 0., 0.};
936 double thisMaxi[] = {1.1, 1.1, 1.1, 1., 1., 1., 1., 1., 100., 100.};
938 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
955 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
956 double ptPart = parScale[0] + parScale[1]*pt;
960 parScale[3]*eta*eta +
961 parScale[4]*eta*eta*eta)*pt );
965 parScale[6]*eta*eta +
966 parScale[7]*(-eta*eta*eta))*pt );
970 scaleVec->push_back(1);
972 scaleVec->push_back(0);
975 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) {
976 double thisStep[] = {0.00001, 0.000001, 0.0000001, 0.0000001, 0.0000001, 0.0000001, 0.0000001, 0.0000001};
977 TString thisParName[] = {
"Pt offset",
"Pt slope",
"Eta slope pos eta",
"Eta quadr pos eta",
"Eta cubic pos eta",
"Eta slope neg eta",
"Eta quadr neg eta",
"Eta cubic neg eta"};
978 if( muonType == 1 ) {
979 double thisMini[] = {0.9, -0.3, -0.3, -0.3, -0.3, -0.3, -0.3, -0.3};
980 double thisMaxi[] = {1.1, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3};
981 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
983 double thisMini[] = {0.9, -0.002, -0.01, -0.005, -0.005, -0.01, -0.005, -0.005};
984 double thisMaxi[] = {1.1, 0.002, 0.01, 0.005, 0.005, 0.01, 0.005, 0.005};
985 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
997 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const
1003 return (parScale[0] + parScale[1]*TMath::Abs(phi)*
sin(2*phi + parScale[2]))*pt;
1006 return (parScale[0] + parScale[3]*TMath::Abs(phi)*
sin(2*phi + parScale[4]))*pt;
1009 else if( chg < 0 ) {
1011 return (parScale[0] - parScale[1+negChg]*TMath::Abs(phi)*
sin(2*phi + parScale[2+negChg]))*pt;
1014 return (parScale[0] - parScale[3+negChg]*TMath::Abs(phi)*
sin(2*phi + parScale[4+negChg]))*pt;
1017 std::cout <<
"Error: we should not be here." << std::endl;
1024 scaleVec->push_back(1);
1026 scaleVec->push_back(0);
1029 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)
1031 double thisStep[] = {0.0001, 0.0001, 0.01, 0.0001, 0.01};
1033 TString thisParName[] = {
"Phi offset",
1034 "amplitude pos phi",
"phase pos phi",
1035 "amplitude neg phi",
"phase neg phi"};
1040 if( muonType == 1 ) {
1041 double thisMini[] = {0.9, -0.3, -0.3, -0.3, -0.3};
1043 double thisMaxi[] = {1.1, 0.3, 0.3, 0.3, 0.3};
1045 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
1047 double thisMini[] = {0.9, -0.1, -3, -0.1, -3};
1049 double thisMaxi[] = {1.1, 0.1, 3, 0.1, 3};
1051 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
1064 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const
1070 return (parScale[0] + parScale[9]*
etaCorrection(eta) + parScale[10]*eta*eta + parScale[1]*TMath::Abs(phi)*
sin(2*phi + parScale[2]))*pt;
1073 return (parScale[0] + parScale[9]*
etaCorrection(eta) + parScale[10]*eta*eta + parScale[3]*TMath::Abs(phi)*
sin(2*phi + parScale[4]))*pt;
1076 else if( chg < 0 ) {
1078 return (parScale[0] + parScale[9]*
etaCorrection(eta) + parScale[10]*eta*eta - parScale[1+negChg]*TMath::Abs(phi)*
sin(2*phi + parScale[2+negChg]))*pt;
1081 return (parScale[0] + parScale[9]*
etaCorrection(eta) + parScale[10]*eta*eta - parScale[3+negChg]*TMath::Abs(phi)*
sin(2*phi + parScale[4+negChg]))*pt;
1084 std::cout <<
"Error: we should not be here." << std::endl;
1090 double fabsEta = std::fabs(eta);
1091 if( fabsEta < 0.2)
return -0.00063509;
1092 else if( fabsEta < 0.4 )
return -0.000585369;
1093 else if( fabsEta < 0.6 )
return -0.00077363;
1094 else if( fabsEta < 0.8 )
return -0.000547868;
1095 else if( fabsEta < 1.0 )
return -0.000954819;
1096 else if( fabsEta < 1.2 )
return -0.000162139;
1097 else if( fabsEta < 1.4 )
return 0.0026909;
1098 else if( fabsEta < 1.6 )
return 0.000684376;
1099 else if( fabsEta < 1.8 )
return -0.00174534;
1100 else if( fabsEta < 2.0 )
return -0.00177076;
1101 else if( fabsEta < 2.2 )
return 0.00117463;
1102 else if( fabsEta < 2.4 )
return 0.000985705;
1103 else if( fabsEta < 2.6 )
return 0.00163941;
1110 scaleVec->push_back(1);
1112 scaleVec->push_back(0);
1115 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)
1117 double thisStep[] = {0.0001,
1118 0.0001, 0.01, 0.0001, 0.01,
1119 0.0001, 0.01, 0.0001, 0.01,
1122 TString thisParName[] = {
"Phi offset",
1125 "amplitude pos charge pos phi",
"phase pos charge pos phi",
1126 "amplitude pos charge neg phi",
"phase pos charge neg phi",
1127 "amplitude neg charge pos phi",
"phase neg charge pos phi",
1128 "amplitude neg charge neg phi",
"phase neg charge neg phi",
1129 "amplitude of eta correction",
1131 if( muonType == 1 ) {
1132 double thisMini[] = {0.9,
1133 -0.3, -0.3, -0.3, -0.3,
1134 -0.3, -0.3, -0.3, -0.3,
1137 double thisMaxi[] = {1.1,
1142 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
1144 double thisMini[] = {0.9,
1149 double thisMaxi[] = {1.1,
1154 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
1158 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
1159 const T & parResol,
const std::vector<int> & parResolOrder,
1160 const std::vector<double> & parStep,
1161 const std::vector<double> & parMin,
1162 const std::vector<double> & parMax,
1165 if( (
int(parStep.size()) != this->
parNum_) || (int(parMin.size()) != this->
parNum_) || (int(parMax.size()) != this->
parNum_) ) {
1166 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
1168 std::cout <<
"parStep.size() = " << parStep.size() << std::endl;
1169 std::cout <<
"parMin.size() = " << parMin.size() << std::endl;
1170 std::cout <<
"parMax.size() = " << parMax.size() << std::endl;
1173 std::vector<ParameterSet> parSet(this->
parNum_);
1176 parSet[0] =
ParameterSet(
"Phi offset", parStep[0], parMin[0], parMax[0] );
1177 parSet[1] =
ParameterSet(
"amplitude pos charge pos phi", parStep[1], parMin[1], parMax[1] );
1178 parSet[2] =
ParameterSet(
"phase pos charge pos phi", parStep[2], parMin[2], parMax[2] );
1179 parSet[3] =
ParameterSet(
"amplitude pos charge neg phi", parStep[3], parMin[3], parMax[3] );
1180 parSet[4] =
ParameterSet(
"phase pos charge neg phi", parStep[4], parMin[4], parMax[4] );
1181 parSet[5] =
ParameterSet(
"amplitude neg charge pos phi", parStep[5], parMin[5], parMax[5] );
1182 parSet[6] =
ParameterSet(
"phase neg charge pos phi", parStep[6], parMin[6], parMax[6] );
1183 parSet[7] =
ParameterSet(
"amplitude neg charge neg phi", parStep[7], parMin[7], parMax[7] );
1184 parSet[8] =
ParameterSet(
"phase neg charge neg phi", parStep[8], parMin[8], parMax[8] );
1185 parSet[9] =
ParameterSet(
"amplitude of eta correction", parStep[9], parMin[9], parMax[9] );
1186 parSet[10] =
ParameterSet(
"quadratic eta", parStep[10], parMin[10], parMax[10] );
1188 std::cout <<
"setting parameters" << std::endl;
1191 <<
", parMin["<<
i<<
"] = " << parMin[
i]
1192 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
1194 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
1205 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const
1211 return (parScale[0] + parScale[9]*
etaCorrection(eta) + parScale[1]*TMath::Abs(phi)*
sin(2*phi + parScale[2]))*pt;
1214 return (parScale[0] + parScale[9]*
etaCorrection(eta) + parScale[3]*TMath::Abs(phi)*
sin(2*phi + parScale[4]))*pt;
1217 else if( chg < 0 ) {
1219 return (parScale[0] + parScale[9]*
etaCorrection(eta) - parScale[1+negChg]*TMath::Abs(phi)*
sin(2*phi + parScale[2+negChg]))*pt;
1222 return (parScale[0] + parScale[9]*
etaCorrection(eta) - parScale[3+negChg]*TMath::Abs(phi)*
sin(2*phi + parScale[4+negChg]))*pt;
1225 std::cout <<
"Error: we should not be here." << std::endl;
1231 if( eta < -2.6 )
return 0.;
1232 else if( eta < -2.4)
return 0.00205594;
1233 else if( eta < -2.2)
return 0.000880532;
1234 else if( eta < -2.0)
return 0.0013714;
1235 else if( eta < -1.8)
return -0.00153122;
1236 else if( eta < -1.6)
return -0.000894437;
1237 else if( eta < -1.4)
return 0.000883338;
1238 else if( eta < -1.2)
return 0.0027599;
1239 else if( eta < -1.0)
return 8.57009e-05;
1240 else if( eta < -0.8)
return -0.00092294;
1241 else if( eta < -0.6)
return -0.000492001;
1242 else if( eta < -0.4)
return -0.000948406;
1243 else if( eta < -0.2)
return -0.000478767;
1244 else if( eta < 0.0)
return -0.0006909;
1245 else if( eta < 0.2)
return -0.000579281;
1246 else if( eta < 0.4)
return -0.000691971;
1247 else if( eta < 0.6)
return -0.000598853;
1248 else if( eta < 0.8)
return -0.000603736;
1249 else if( eta < 1.0)
return -0.000986699;
1250 else if( eta < 1.2)
return -0.00040998;
1251 else if( eta < 1.4)
return 0.00262189;
1252 else if( eta < 1.6)
return 0.000485414;
1253 else if( eta < 1.8)
return -0.00259624;
1254 else if( eta < 2.0)
return -0.00201031;
1255 else if( eta < 2.2)
return 0.000977849;
1256 else if( eta < 2.5)
return 0.00109088;
1257 else if( eta < 2.6)
return 0.00122289;
1264 scaleVec->push_back(1);
1266 scaleVec->push_back(0);
1269 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)
1271 double thisStep[] = {0.0001,
1272 0.0001, 0.01, 0.0001, 0.01,
1273 0.0001, 0.01, 0.0001, 0.01,
1275 TString thisParName[] = {
"Phi offset",
1278 "amplitude pos charge pos phi",
"phase pos charge pos phi",
1279 "amplitude pos charge neg phi",
"phase pos charge neg phi",
1280 "amplitude neg charge pos phi",
"phase neg charge pos phi",
1281 "amplitude neg charge neg phi",
"phase neg charge neg phi",
1282 "amplitude of eta correction"};
1283 if( muonType == 1 ) {
1284 double thisMini[] = {0.9,
1285 -0.3, -0.3, -0.3, -0.3,
1286 -0.3, -0.3, -0.3, -0.3,
1288 double thisMaxi[] = {1.1,
1292 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
1294 double thisMini[] = {0.9,
1298 double thisMaxi[] = {1.1,
1302 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
1315 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const
1321 return (parScale[0] +
etaCorrection(eta, parScale) + parScale[1]*TMath::Abs(phi)*
sin(2*phi + parScale[2]))*pt;
1324 return (parScale[0] +
etaCorrection(eta, parScale) + parScale[3]*TMath::Abs(phi)*
sin(2*phi + parScale[4]))*pt;
1327 else if( chg < 0 ) {
1329 return (parScale[0] +
etaCorrection(eta, parScale) - parScale[1+negChg]*TMath::Abs(phi)*
sin(2*phi + parScale[2+negChg]))*pt;
1332 return (parScale[0] +
etaCorrection(eta, parScale) - parScale[3+negChg]*TMath::Abs(phi)*
sin(2*phi + parScale[4+negChg]))*pt;
1335 std::cout <<
"Error: we should not be here." << std::endl;
1341 if( eta < -2.06 )
return cubicEta(-2.06, parScale, 9);
1342 else if( eta < -1.06 )
return cubicEta(eta, parScale, 9);
1343 else if( eta < 1.1 )
return( parScale[13] + parScale[14]*eta );
1344 else if( eta < 2. )
return cubicEta(eta, parScale, 15);
1349 return( parScale[shift] + parScale[shift+1]*eta + parScale[shift+2]*eta*eta + parScale[shift+3]*eta*eta*eta );
1355 scaleVec->push_back(1);
1357 scaleVec->push_back(0);
1360 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)
1362 double thisStep[] = {0.0001,
1363 0.0001, 0.01, 0.0001, 0.01,
1364 0.0001, 0.01, 0.0001, 0.01,
1365 0.0001, 0.0001, 0.0001, 0.0001,
1367 0.0001, 0.0001, 0.0001, 0.0001};
1368 TString thisParName[] = {
"Phi offset",
1371 "amplitude pos charge pos phi",
"phase pos charge pos phi",
1372 "amplitude pos charge neg phi",
"phase pos charge neg phi",
1373 "amplitude neg charge pos phi",
"phase neg charge pos phi",
1374 "amplitude neg charge neg phi",
"phase neg charge neg phi",
1375 "etaNeg0",
"etaNeg1",
"etaNeg2",
"etaNeg3",
1376 "etaCent0",
"etaCent1",
1377 "etaPos0",
"etaPos1",
"etaPos2",
"etaPos3"};
1378 if( muonType == 1 ) {
1379 double thisMini[] = {0.9,
1380 -0.3, -0.3, -0.3, -0.3,
1381 -0.3, -0.3, -0.3, -0.3,
1382 -0.1, -1., -1., -1.,
1384 -0.1, -1., -1., -1.};
1385 double thisMaxi[] = {1.1,
1391 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
1393 double thisMini[] = {0.9,
1396 -0.1, -0.6, -0.5, -0.08,
1398 -0.1, -0.1, -0.4, -0.01};
1399 double thisMaxi[] = {1.1,
1402 0.1, 0.1, 0.1, 0.01,
1404 0.1, 0.8, 0.1, 0.2};
1405 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
1416 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
1417 double ptPart = parScale[0] + parScale[1]*pt;
1418 double fabsEta = std::fabs(eta);
1420 if( fabsEta > parScale[8] ) {
1424 parScale[3]*eta*eta)*pt );
1429 parScale[5]*eta*eta)*pt );
1432 return( (ptPart + parScale[6]*fabsEta + parScale[7]*eta*eta)*pt );
1436 scaleVec->push_back(1);
1438 scaleVec->push_back(0);
1441 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) {
1442 double thisStep[] = {0.00001, 0.000001, 0.0000001, 0.0000001, 0.0000001, 0.0000001, 0.0000001, 0.00001, 0.000001};
1443 TString thisParName[] = {
"Pt offset",
"Pt slope",
"Eta slope pos eta",
"Eta quadr pos eta",
"Eta slope neg eta",
"Eta quadr neg eta",
"Eta splope barrel",
"Eta quadr barrel",
"Eta corr region"};
1444 if( muonType == 1 ) {
1445 double thisMini[] = {0.9, -0.3, -0.3, -0.3, -0.3, -0.3, -0.3, 0.3, 0.};
1446 double thisMaxi[] = {1.1, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3};
1447 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
1449 double thisMini[] = {0.9, -0.002, -0.01, -0.005, -0.005, -0.01, -0.01, -0.005, 0.};
1450 double thisMaxi[] = {1.1, 0.002, 0.01, 0.005, 0.005, 0.01, 0.01, 0.005, 2.4};
1451 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
1464 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
1465 double ptPart = parScale[0] + parScale[1]*pt;
1466 double fabsEta = std::fabs(eta);
1468 if( fabsEta > parScale[12] ) {
1470 return( (ptPart+parScale[2]+
1471 parScale[3]*(fabsEta - parScale[5]) +
1472 parScale[4]*(fabsEta - parScale[5])*(fabsEta - parScale[5]))*pt );
1475 return( (ptPart+parScale[6]+
1476 parScale[7]*(fabsEta - parScale[9]) +
1477 parScale[8]*(fabsEta - parScale[9])*(fabsEta - parScale[9]))*pt );
1480 return( (ptPart + parScale[10]*fabsEta + parScale[11]*eta*eta)*pt );
1484 scaleVec->push_back(1);
1486 scaleVec->push_back(0);
1489 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) {
1490 double thisStep[] = {0.00001, 0.000001,
1491 0.000001, 0.0000001, 0.0000001, 0.0000001,
1492 0.000001, 0.0000001, 0.0000001, 0.0000001,
1493 0.0000001, 0.0000001,
1495 TString thisParName[] = {
"Pt offset",
"Pt slope",
1496 "Eta shift pos eta",
"Eta slope pos eta",
"Eta quadr pos eta",
"Eta center pos eta",
1497 "Eta shift neg eta",
"Eta slope neg eta",
"Eta quadr neg eta",
"Eta center neg eta",
1498 "Eta splope barrel",
"Eta quadr barrel",
1500 if( muonType == 1 ) {
1501 double thisMini[] = {0.9, -0.3,
1502 -0.3, -0.3, -0.3, -0.3,
1503 -0.3, -0.3, -0.3, -0.3,
1506 double thisMaxi[] = {1.1, 0.3,
1511 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
1513 double thisMini[] = {0.9, -0.002,
1514 -0.01, -0.01, -0.005, 0.,
1515 -0.01, -0.01, -0.005, 0.,
1518 double thisMaxi[] = {1.1, 0.002,
1519 0.01, 0.01, 0.005, 2.4,
1520 0.01, 0.01, 0.005, 2.4,
1523 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
1532 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
1533 return( (parScale[0] + parScale[1]*pt + (
double)chg*parScale[4]*eta +
1534 (
double)chg*parScale[2]*
sin(phi+parScale[3]))*pt );
1538 scaleVec->push_back(1);
1540 scaleVec->push_back(0);
1543 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
const T & parScale,
const
1544 std::vector<int> & parScaleOrder,
const int muonType) {
1545 double thisStep[] = {0.001, 0.01, 0.01, 0.1,0.01};
1546 TString thisParName[] = {
"Pt scale",
"Pt slope",
"Phi ampl",
"Phi phase",
"Eta coeff"};
1547 double thisMini[] = {0.9, -0.1, -0.02, -3.1416,-0.2};
1548 double thisMaxi[] = {1.1, 0.1, 0.02, 3.1416,0.2}; this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
1561 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
1562 return( (1+ parScale[0]*pt +
1563 (
double)chg*pt*parScale[1]*eta
1564 +parScale[2]*eta*eta +
1565 pt*(
double)chg*parScale[3]*
sin(phi+parScale[4]))*pt );
1571 scaleVec->push_back(0);
1576 TString* parname,
const T & parResol,
const std::vector<int> & parResolOrder,
1579 std::vector<ParameterSet> parSet(this->
parNum_);
1581 parSet[0] =
ParameterSet(
"Pt bias", 0.0001, -0.02, 0.02 );
1582 parSet[1] =
ParameterSet(
"Eta linear coeff", 0.01, -0.2, 0.2 );
1583 parSet[2] =
ParameterSet(
"Eta parabolic coeff", 0.0001, -0.02, 0.02 );
1584 parSet[3] =
ParameterSet(
"Phi ampl", 0.001, -0.02, 0.02 );
1585 parSet[4] =
ParameterSet(
"Phi phase", 0.1, -3.1416, 3.1416 );
1587 std::cout <<
"setting parameters" << std::endl;
1588 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
1591 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
1592 const T & parResol,
const std::vector<int> & parResolOrder,
1593 const std::vector<double> & parStep,
1594 const std::vector<double> & parMin,
1595 const std::vector<double> & parMax,
1598 if( (
int(parStep.size()) != this->
parNum_) || (int(parMin.size()) != this->
parNum_) || (int(parMax.size()) != this->
parNum_) ) {
1599 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
1601 std::cout <<
"parStep.size() = " << parStep.size() << std::endl;
1602 std::cout <<
"parMin.size() = " << parMin.size() << std::endl;
1603 std::cout <<
"parMax.size() = " << parMax.size() << std::endl;
1606 std::vector<ParameterSet> parSet(this->
parNum_);
1608 parSet[0] =
ParameterSet(
"Pt bias", parStep[0], parMin[0], parMax[0] );
1609 parSet[1] =
ParameterSet(
"Eta linear coeff", parStep[1], parMin[1], parMax[1] );
1610 parSet[2] =
ParameterSet(
"Eta parabolic coeff", parStep[2], parMin[2], parMax[2] );
1611 parSet[3] =
ParameterSet(
"Phi ampl", parStep[3], parMin[3], parMax[3] );
1612 parSet[4] =
ParameterSet(
"Phi phase", parStep[4], parMin[4], parMax[4] );
1614 std::cout <<
"setting parameters" << std::endl;
1617 <<
", parMin["<<
i<<
"] = " << parMin[
i]
1618 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
1620 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
1628 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & par)
const
1631 double etaCorr = 0.;
1632 if( (chg < 0 && eta > par[4]) || (chg > 0 &&
eta < -par[4]) ) {
1633 etaCorr = par[1]+par[2]*fabs(fabs(
eta)-par[4])+par[3]*(fabs(
eta)-par[4])*(fabs(
eta)-par[4]);
1640 ptCorr = 1+par[5]*(pt - par[7]) + par[6]*(pt - par[7])*(pt - par[7]);
1645 return par[0]*pt/(1 + etaCorr + ptCorr);
1651 scaleVec->push_back(1);
1653 scaleVec->push_back(0);
1656 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) {}
1658 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
1659 const T & parResol,
const std::vector<int> & parResolOrder,
1660 const std::vector<double> & parStep,
1661 const std::vector<double> & parMin,
1662 const std::vector<double> & parMax,
1665 if( (
int(parStep.size()) != this->
parNum_) || (int(parMin.size()) != this->
parNum_) || (int(parMax.size()) != this->
parNum_) ) {
1666 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
1668 std::cout <<
"parStep.size() = " << parStep.size() << std::endl;
1669 std::cout <<
"parMin.size() = " << parMin.size() << std::endl;
1670 std::cout <<
"parMax.size() = " << parMax.size() << std::endl;
1673 std::vector<ParameterSet> parSet(this->
parNum_);
1676 parSet[0] =
ParameterSet(
"Overall scale term", parStep[0], parMin[0], parMax[0] );
1677 parSet[1] =
ParameterSet(
"eta scale term ", parStep[1], parMin[1], parMax[1] );
1678 parSet[2] =
ParameterSet(
"multiplies eta", parStep[2], parMin[2], parMax[2] );
1679 parSet[3] =
ParameterSet(
"phase pos charge pos phi", parStep[3], parMin[3], parMax[3] );
1680 parSet[4] =
ParameterSet(
"amplitude pos charge neg phi", parStep[4], parMin[4], parMax[4] );
1681 parSet[5] =
ParameterSet(
"phase pos charge neg phi", parStep[5], parMin[5], parMax[5] );
1682 parSet[6] =
ParameterSet(
"amplitude neg charge pos phi", parStep[6], parMin[6], parMax[6] );
1683 parSet[7] =
ParameterSet(
"phase neg charge pos phi", parStep[7], parMin[7], parMax[7] );
1684 std::cout <<
"setting parameters" << std::endl;
1687 <<
", parMin["<<
i<<
"] = " << parMin[
i]
1688 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
1690 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
1698 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & par)
const
1701 double etaCorr = 0.;
1702 if( (chg < 0 && eta > par[4]) || (chg > 0 &&
eta < -par[4]) ) {
1703 etaCorr = par[1]+par[2]*fabs(fabs(
eta)-par[4])+par[3]*(fabs(
eta)-par[4])*(fabs(
eta)-par[4]);
1710 ptCorr = par[5]*(pt - par[7]) + par[6]*(pt - par[7])*(pt - par[7]);
1715 return par[0]*pt*(1 + etaCorr + ptCorr);
1721 scaleVec->push_back(1);
1723 scaleVec->push_back(0);
1726 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) {}
1728 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
1729 const T & parResol,
const std::vector<int> & parResolOrder,
1730 const std::vector<double> & parStep,
1731 const std::vector<double> & parMin,
1732 const std::vector<double> & parMax,
1735 if( (
int(parStep.size()) != this->
parNum_) || (int(parMin.size()) != this->
parNum_) || (int(parMax.size()) != this->
parNum_) ) {
1736 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
1738 std::cout <<
"parStep.size() = " << parStep.size() << std::endl;
1739 std::cout <<
"parMin.size() = " << parMin.size() << std::endl;
1740 std::cout <<
"parMax.size() = " << parMax.size() << std::endl;
1743 std::vector<ParameterSet> parSet(this->
parNum_);
1746 parSet[0] =
ParameterSet(
"Overall scale term", parStep[0], parMin[0], parMax[0] );
1747 parSet[1] =
ParameterSet(
"eta scale term ", parStep[1], parMin[1], parMax[1] );
1748 parSet[2] =
ParameterSet(
"multiplies eta", parStep[2], parMin[2], parMax[2] );
1749 parSet[3] =
ParameterSet(
"phase pos charge pos phi", parStep[3], parMin[3], parMax[3] );
1750 parSet[4] =
ParameterSet(
"amplitude pos charge neg phi", parStep[4], parMin[4], parMax[4] );
1751 parSet[5] =
ParameterSet(
"phase pos charge neg phi", parStep[5], parMin[5], parMax[5] );
1752 parSet[6] =
ParameterSet(
"amplitude neg charge pos phi", parStep[6], parMin[6], parMax[6] );
1753 parSet[7] =
ParameterSet(
"phase neg charge pos phi", parStep[7], parMin[7], parMax[7] );
1754 std::cout <<
"setting parameters" << std::endl;
1757 <<
", parMin["<<
i<<
"] = " << parMin[
i]
1758 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
1760 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
1768 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & par)
const
1770 double fabsEta = fabs(eta);
1771 double etaCorr = 0.;
1773 if( fabsEta < 0.8 ) etaCorr = par[8];
1774 else if( fabsEta < 1.2 ) etaCorr = par[9];
1775 else if( fabsEta < 1.4 ) etaCorr = par[10];
1776 else if( fabsEta < 1.6 ) etaCorr = par[11];
1777 else if( fabsEta < 1.8 ) etaCorr = par[12];
1778 else if( fabsEta < 2.0 ) etaCorr = par[13];
1779 else if( fabsEta < 2.2 ) etaCorr = par[14];
1780 else etaCorr = par[15];
1783 if( (chg < 0 && eta > par[4]) || (chg > 0 && eta < -par[4]) ) {
1784 etaCorr += par[1]+par[2]*fabs(fabsEta-par[4])+par[3]*(fabsEta-par[4])*(fabsEta-par[4]);
1788 double phiCorr = 0.;
1789 if( phi < -2.0 ) phiCorr = par[16];
1790 else if( phi < -1.6 ) phiCorr = par[17];
1791 else if( phi < -1.2 ) phiCorr = par[18];
1792 else if( phi < 1.2 ) phiCorr = par[19];
1793 else if( phi < 1.6 ) phiCorr = par[20];
1794 else if( phi < 2.0 ) phiCorr = par[21];
1800 ptCorr = par[5]*(pt - par[7]) + par[6]*(pt - par[7])*(pt - par[7]);
1803 return par[0]*pt*(1 + etaCorr + ptCorr + phiCorr);
1811 scaleVec->push_back(0);
1814 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) {}
1816 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
1817 const T & parResol,
const std::vector<int> & parResolOrder,
1818 const std::vector<double> & parStep,
1819 const std::vector<double> & parMin,
1820 const std::vector<double> & parMax,
1823 if( (
int(parStep.size()) != this->
parNum_) || (int(parMin.size()) != this->
parNum_) || (int(parMax.size()) != this->
parNum_) ) {
1824 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
1826 std::cout <<
"parStep.size() = " << parStep.size() << std::endl;
1827 std::cout <<
"parMin.size() = " << parMin.size() << std::endl;
1828 std::cout <<
"parMax.size() = " << parMax.size() << std::endl;
1831 std::vector<ParameterSet> parSet(this->
parNum_);
1833 parSet[0] =
ParameterSet(
"Overall scale term", parStep[0], parMin[0], parMax[0] );
1834 parSet[1] =
ParameterSet(
"eta scale term ", parStep[1], parMin[1], parMax[1] );
1835 parSet[2] =
ParameterSet(
"multiplies eta", parStep[2], parMin[2], parMax[2] );
1836 parSet[3] =
ParameterSet(
"phase pos charge pos phi", parStep[3], parMin[3], parMax[3] );
1837 parSet[4] =
ParameterSet(
"amplitude pos charge neg phi", parStep[4], parMin[4], parMax[4] );
1838 parSet[5] =
ParameterSet(
"phase pos charge neg phi", parStep[5], parMin[5], parMax[5] );
1839 parSet[6] =
ParameterSet(
"amplitude neg charge pos phi", parStep[6], parMin[6], parMax[6] );
1840 parSet[7] =
ParameterSet(
"phase neg charge pos phi", parStep[7], parMin[7], parMax[7] );
1842 parSet[8] =
ParameterSet(
"eta bin scale", parStep[8], parMin[8], parMax[8] );
1843 parSet[9] =
ParameterSet(
"eta bin scale", parStep[9], parMin[9], parMax[9] );
1844 parSet[10] =
ParameterSet(
"eta bin scale", parStep[10], parMin[10], parMax[10] );
1845 parSet[11] =
ParameterSet(
"eta bin scale", parStep[11], parMin[11], parMax[11] );
1846 parSet[12] =
ParameterSet(
"eta bin scale", parStep[12], parMin[12], parMax[12] );
1847 parSet[13] =
ParameterSet(
"eta bin scale", parStep[13], parMin[13], parMax[13] );
1848 parSet[14] =
ParameterSet(
"eta bin scale", parStep[14], parMin[14], parMax[14] );
1849 parSet[15] =
ParameterSet(
"eta bin scale", parStep[15], parMin[15], parMax[15] );
1851 parSet[16] =
ParameterSet(
"phi bin scale", parStep[16], parMin[16], parMax[16] );
1852 parSet[17] =
ParameterSet(
"phi bin scale", parStep[17], parMin[17], parMax[17] );
1853 parSet[18] =
ParameterSet(
"phi bin scale", parStep[18], parMin[18], parMax[18] );
1854 parSet[19] =
ParameterSet(
"phi bin scale", parStep[19], parMin[19], parMax[19] );
1855 parSet[20] =
ParameterSet(
"phi bin scale", parStep[20], parMin[20], parMax[20] );
1856 parSet[21] =
ParameterSet(
"phi bin scale", parStep[21], parMin[21], parMax[21] );
1859 std::cout <<
"setting parameters" << std::endl;
1862 <<
", parMin["<<
i<<
"] = " << parMin[
i]
1863 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
1865 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
1877 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
1878 double curv = (1.+parScale[0])*((
double)chg/pt-(parScale[1]*eta+parScale[2]*eta*
eta)-parScale[3]*
sin(phi+parScale[4]));
1879 return 1./((double)chg*curv);
1885 scaleVec->push_back(0);
1889 TString* parname,
const T & parScale,
const std::vector<int> & parScaleOrder,
const int muonType) {
1890 double thisStep[] = {0.000001, 0.000001, 0.000001, 0.000001, 0.01};
1891 TString thisParName[] = {
"Curv global scale",
"Eta slope",
"Eta parabolic" "Phi ampl",
"Phi phase"};
1892 if( muonType == 1 ) {
1893 double thisMini[] = {0.9, -0.1, -0.3, -0.3, -3.1416};
1894 double thisMaxi[] = {1.1, 0.1, 0.3, 0.3, 3.1416};
1895 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
1897 double thisMini[] = {0.97, -0.02, -0.3, -0.3, -3.1416};
1898 double thisMaxi[] = {1.03, 0.02, 0.3, 0.3, 3.1416};
1899 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
1902 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
1903 const T & parScale,
const std::vector<int> & parScaleOrder,
1904 const std::vector<double> & parStep,
1905 const std::vector<double> & parMin,
1906 const std::vector<double> & parMax,
1909 if( (
int(parStep.size()) != this->
parNum_) || (int(parMin.size()) != this->
parNum_) || (int(parMax.size()) != this->
parNum_) ) {
1910 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
1912 std::cout <<
"parStep.size() = " << parStep.size() << std::endl;
1913 std::cout <<
"parMin.size() = " << parMin.size() << std::endl;
1914 std::cout <<
"parMax.size() = " << parMax.size() << std::endl;
1917 std::vector<ParameterSet> parSet(this->
parNum_);
1919 parSet[0] =
ParameterSet(
"Curv global scale", parStep[0], parMin[0], parMax[0] );
1920 parSet[1] =
ParameterSet(
"Eta slope", parStep[1], parMin[1], parMax[1] );
1921 parSet[2] =
ParameterSet(
"Eta parabolic", parStep[2], parMin[2], parMax[2] );
1922 parSet[3] =
ParameterSet(
"Phi ampl", parStep[3], parMin[3], parMax[3] );
1923 parSet[4] =
ParameterSet(
"Phi phase", parStep[4], parMin[4], parMax[4] );
1925 std::cout <<
"setting parameters" << std::endl;
1928 <<
", parMin["<<
i<<
"] = " << parMin[
i]
1929 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
1931 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, parSet );
1943 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
1944 double curv = (1.+parScale[0])*((
double)chg/pt-(double)chg*parScale[1]-(parScale[2]*eta+parScale[3]*eta*eta)-parScale[4]*
sin(phi+parScale[5]));
1945 return 1./((double)chg*curv);
1951 scaleVec->push_back(0);
1955 TString* parname,
const T & parScale,
const std::vector<int> & parScaleOrder,
const int muonType) {
1956 double thisStep[] = {0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001};
1957 TString thisParName[] = {
"Curv global scale",
"Curv offset",
"Eta slope",
"Eta parabolic" "Phi ampl",
"Phi phase"};
1958 if( muonType == 1 ) {
1959 double thisMini[] = {0.9, -0.1, -0.1, -0.3, -0.3, -3.1416};
1960 double thisMaxi[] = {1.1, 0.1, 0.1, 0.3, 0.3, 3.1416};
1961 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
1963 double thisMini[] = {0.97, -0.02, -0.02, -0.3, -0.3, -3.1416};
1964 double thisMaxi[] = {1.03, 0.02, 0.02, 0.3, 0.3, 3.1416};
1965 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
1968 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
1969 const T & parScale,
const std::vector<int> & parScaleOrder,
1970 const std::vector<double> & parStep,
1971 const std::vector<double> & parMin,
1972 const std::vector<double> & parMax,
1975 if( (
int(parStep.size()) != this->
parNum_) || (int(parMin.size()) != this->
parNum_) || (int(parMax.size()) != this->
parNum_) ) {
1976 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
1978 std::cout <<
"parStep.size() = " << parStep.size() << std::endl;
1979 std::cout <<
"parMin.size() = " << parMin.size() << std::endl;
1980 std::cout <<
"parMax.size() = " << parMax.size() << std::endl;
1983 std::vector<ParameterSet> parSet(this->
parNum_);
1985 parSet[0] =
ParameterSet(
"Curv scale", parStep[0], parMin[0], parMax[0] );
1986 parSet[1] =
ParameterSet(
"Curv offset", parStep[1], parMin[1], parMax[1] );
1987 parSet[2] =
ParameterSet(
"Eta slope", parStep[2], parMin[2], parMax[2] );
1988 parSet[3] =
ParameterSet(
"Eta parabolic", parStep[3], parMin[3], parMax[3] );
1989 parSet[4] =
ParameterSet(
"Phi ampl", parStep[4], parMin[4], parMax[4] );
1990 parSet[5] =
ParameterSet(
"Phi phase", parStep[5], parMin[5], parMax[5] );
1992 std::cout <<
"setting parameters" << std::endl;
1995 <<
", parMin["<<
i<<
"] = " << parMin[
i]
1996 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
1998 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, parSet );
2010 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
2011 double ampl(0), phase(0);
2013 ampl = parScale[3]; phase = parScale[4];
2014 }
else if ( -2.1 <= eta && eta < -1.7 ) {
2015 ampl = parScale[5]; phase = parScale[6];
2016 }
else if ( -1.7 <= eta && eta < -0.9 ) {
2017 ampl = parScale[7]; phase = parScale[8];
2018 }
else if ( -0.9 <= eta && eta <= +0.9 ) {
2019 ampl = parScale[9]; phase = parScale[10];
2020 }
else if ( +0.9 < eta && eta <= +1.7 ) {
2021 ampl = parScale[11]; phase = parScale[12];
2022 }
else if ( +1.7 < eta && eta <= 2.1 ) {
2023 ampl = parScale[13]; phase = parScale[14];
2024 }
else if ( +2.1 < eta ) {
2025 ampl = parScale[15]; phase = parScale[16];
2028 double curv = (1.+parScale[0])*((
double)chg/pt
2029 -(parScale[1]*eta+parScale[2]*eta*eta*
eta)
2030 -ampl*
sin(phi+phase)
2031 -0.5*(double)chg*parScale[17]);
2032 return 1./((double)chg*curv);
2038 scaleVec->push_back(0);
2042 TString* parname,
const T & parScale,
const std::vector<int> & parScaleOrder,
const int muonType) {
2043 double thisStep[] = {0.000001, 0.000001, 0.000001, 0.000001, 0.01, 0.000001, 0.01, 0.000001, 0.01,0.000001, 0.01, 0.000001, 0.01, 0.000001};
2044 TString thisParName[] = {
"Curv global scale" ,
"Eta slope",
"Eta parabolic",
2045 "Phi ampl eta<-2.1" ,
"Phi phase eta<-2.1",
2046 "Phi ampl -2.1<eta<-1.7",
"Phi phase -2.1<eta<-1.7",
2047 "Phi ampl -1.7<eta<-0.9",
"Phi phase -1.7<eta<-0.9",
2048 "Phi ampl |eta|<0.9" ,
"Phi phase |eta|<0.9",
2049 "Phi ampl 0.9<eta<1.7" ,
"Phi phase 0.9<eta<1.7",
2050 "Phi ampl 1.7<eta<2.1" ,
"Phi phase 1.7<eta<2.1",
2051 "Phi ampl eta>+2.1" ,
"Phi phase eta>+2.1",
2052 "Charge depend bias" };
2054 if( muonType == 1 ) {
2055 double thisMini[] = {0.9, -0.1, -0.3, -0.3, -3.1416, -0.3, -3.1416, -0.3, -3.1416, -0.3, -3.1416, -0.3, -3.1416, -0.3, -3.1416, -0.3, -3.1416, -0.1};
2056 double thisMaxi[] = {1.1, 0.1, 0.3, 0.3, 3.1416, 0.3, 3.1416, 0.3, 3.1416, 0.3, 3.1416, 0.3, 3.1416, 0.3, 3.1416, 0.3, 3.1416, 0.1};
2057 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
2059 double thisMini[] = {0.97, -0.02, -0.3, -0.3, -3.1416, -0.3, -3.1416, -0.3, -3.1416, -0.3, -3.1416, -0.3, -3.1416, -0.3, -3.1416, -0.3, -3.1416, -0.1};
2060 double thisMaxi[] = {1.03, 0.02, 0.3, 0.3, 3.1416, 0.3, 3.1416, 0.3, 3.1416, 0.3, 3.1416, 0.3, 3.1416, 0.3, 3.1416, 0.3, 3.1416, 0.1};
2061 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
2064 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
2065 const T & parScale,
const std::vector<int> & parScaleOrder,
2066 const std::vector<double> & parStep,
2067 const std::vector<double> & parMin,
2068 const std::vector<double> & parMax,
2071 if( (
int(parStep.size()) != this->
parNum_) || (int(parMin.size()) != this->
parNum_) || (int(parMax.size()) != this->
parNum_) ) {
2072 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
2074 std::cout <<
"parStep.size() = " << parStep.size() << std::endl;
2075 std::cout <<
"parMin.size() = " << parMin.size() << std::endl;
2076 std::cout <<
"parMax.size() = " << parMax.size() << std::endl;
2079 std::vector<ParameterSet> parSet(this->
parNum_);
2081 parSet[0] =
ParameterSet(
"Curv global scale", parStep[0], parMin[0], parMax[0] );
2082 parSet[1] =
ParameterSet(
"Eta slope", parStep[1], parMin[1], parMax[1] );
2083 parSet[2] =
ParameterSet(
"Eta parabolic", parStep[2], parMin[2], parMax[2] );
2084 parSet[3] =
ParameterSet(
"Phi ampl eta<-2.1", parStep[3], parMin[3], parMax[3] );
2085 parSet[4] =
ParameterSet(
"Phi phase eta<-2.1", parStep[4], parMin[4], parMax[4] );
2086 parSet[5] =
ParameterSet(
"Phi ampl -2.1<eta<-1.7",parStep[5], parMin[5], parMax[5] );
2087 parSet[6] =
ParameterSet(
"Phi phase -2.1<eta<-1.7",parStep[6], parMin[6], parMax[6] );
2088 parSet[7] =
ParameterSet(
"Phi ampl -1.7<eta<-0.9",parStep[7], parMin[7], parMax[7] );
2089 parSet[8] =
ParameterSet(
"Phi phase -1.7<eta<-0.9",parStep[8], parMin[8], parMax[8] );
2090 parSet[9] =
ParameterSet(
"Phi ampl |eta|<0.9", parStep[9], parMin[9], parMax[9] );
2091 parSet[10] =
ParameterSet(
"Phi phase |eta|<0.9", parStep[10], parMin[10], parMax[10] );
2092 parSet[11] =
ParameterSet(
"Phi ampl 0.9<eta<1.7", parStep[11], parMin[11], parMax[11] );
2093 parSet[12] =
ParameterSet(
"Phi phase 0.9<eta<1.7", parStep[12], parMin[12], parMax[12] );
2094 parSet[13] =
ParameterSet(
"Phi ampl 1.7<eta<2.1", parStep[13], parMin[13], parMax[13] );
2095 parSet[14] =
ParameterSet(
"Phi phase 1.7<eta<2.1", parStep[14], parMin[14], parMax[14] );
2096 parSet[15] =
ParameterSet(
"Phi ampl eta>2.1", parStep[15], parMin[15], parMax[15] );
2097 parSet[16] =
ParameterSet(
"Phi phase eta>2.1", parStep[16], parMin[16], parMax[16] );
2098 parSet[17] =
ParameterSet(
"Charge depend bias", parStep[17], parMin[17], parMax[17] );
2100 std::cout <<
"setting parameters" << std::endl;
2103 <<
", parMin["<<
i<<
"] = " << parMin[
i]
2104 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
2106 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, parSet );
2118 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
2119 double ampl(0), phase(0), twist(0);
2120 if ( eta < parScale[11] ) {
2121 ampl = parScale[1]; phase = parScale[2];
2122 twist = parScale[3]*TMath::SinH(eta-parScale[11])+parScale[6]*TMath::SinH(parScale[11]) ;
2123 }
else if ( parScale[11] <= eta && eta <= parScale[12] ) {
2124 ampl = parScale[4]; phase = parScale[5];
2125 twist = parScale[6]*TMath::SinH(eta);
2126 }
else if ( parScale[12] < eta ) {
2127 ampl = parScale[7]; phase = parScale[8];
2128 twist = parScale[9]*TMath::SinH(eta-parScale[12])+parScale[6]*TMath::SinH(parScale[12]) ;
2130 double curv = (1.+parScale[0])*((
double)chg/pt
2132 -ampl*
sin(phi+phase)
2133 -0.5*(double)chg*parScale[10]);
2134 return 1./((double)chg*curv);
2140 scaleVec->push_back(0);
2144 TString* parname,
const T & parScale,
const std::vector<int> & parScaleOrder,
const int muonType) {
2145 double thisStep[] = {0.000001,
2146 0.000001, 0.01, 0.000001,
2147 0.000001, 0.01, 0.000001,
2148 0.000001, 0.01, 0.000001,
2151 TString thisParName[] = {
"Curv global scale" ,
2152 "Phi ampl eta<-1.5" ,
"Phi phase eta<-1.5" ,
"Twist eta<-1.5" ,
2153 "Phi ampl |eta|<1.5" ,
"Phi phase |eta|<1.5",
"Twist |eta|<1.5" ,
2154 "Phi ampl eta>+1.5" ,
"Phi phase eta>+1.5" ,
"Twist eta>+1.5" ,
2155 "Charge depend bias",
2156 "eta neg boundary",
"eta pos boundary"};
2157 if( muonType == 1 ) {
2158 double thisMini[] = {-0.1, -0.3, -3.1416, -0.3, -0.3, -3.1416, -0.3, -0.3, -3.1416, -0.3, -0.3, -2.6, 0.};
2159 double thisMaxi[] = { 0.1, 0.3, 3.1416, 0.3, 0.3, 3.1416, 0.3, 0.3, 3.1416, 0.3, 0.3, 0., 2.6};
2160 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
2162 double thisMini[] = {-0.1, -0.3, -3.1416, -0.3, -0.3, -3.1416, -0.3, -0.3, -3.1416, -0.3, -0.3, -2.6, 0.};
2163 double thisMaxi[] = { 0.1, 0.3, 3.1416, 0.3, 0.3, 3.1416, 0.3, 0.3, 3.1416, 0.3, 0.3, 0., 2.6};
2164 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
2167 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
2168 const T & parScale,
const std::vector<int> & parScaleOrder,
2169 const std::vector<double> & parStep,
2170 const std::vector<double> & parMin,
2171 const std::vector<double> & parMax,
2174 if( (
int(parStep.size()) != this->
parNum_) || (int(parMin.size()) != this->
parNum_) || (int(parMax.size()) != this->
parNum_) ) {
2175 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
2177 std::cout <<
"parStep.size() = " << parStep.size() << std::endl;
2178 std::cout <<
"parMin.size() = " << parMin.size() << std::endl;
2179 std::cout <<
"parMax.size() = " << parMax.size() << std::endl;
2182 std::vector<ParameterSet> parSet(this->
parNum_);
2184 parSet[0] =
ParameterSet(
"Curv global scale", parStep[0], parMin[0], parMax[0] );
2185 parSet[1] =
ParameterSet(
"Phi ampl eta<-1.5", parStep[1], parMin[1], parMax[1] );
2186 parSet[2] =
ParameterSet(
"Phi phase eta<-1.5", parStep[2], parMin[2], parMax[2] );
2187 parSet[3] =
ParameterSet(
"Twist eta<-1.5", parStep[3], parMin[3], parMax[3] );
2188 parSet[4] =
ParameterSet(
"Phi ampl |eta|<1.5", parStep[4], parMin[4], parMax[4] );
2189 parSet[5] =
ParameterSet(
"Phi phase |eta|<1.5", parStep[5], parMin[5], parMax[5] );
2190 parSet[6] =
ParameterSet(
"Twist |eta|<1.5", parStep[6], parMin[6], parMax[6] );
2191 parSet[7] =
ParameterSet(
"Phi ampl eta>1.5", parStep[7], parMin[7], parMax[7] );
2192 parSet[8] =
ParameterSet(
"Phi phase eta>1.5", parStep[8], parMin[8], parMax[8] );
2193 parSet[9] =
ParameterSet(
"Twist eta>1.5" , parStep[9], parMin[9], parMax[9] );
2194 parSet[10] =
ParameterSet(
"Charge depend bias", parStep[10],parMin[10],parMax[10] );
2195 parSet[11] =
ParameterSet(
"Eta neg boundary", parStep[11],parMin[11],parMax[11] );
2196 parSet[12] =
ParameterSet(
"Eta pos boundary", parStep[12],parMin[12],parMax[12] );
2199 std::cout <<
"setting parameters" << std::endl;
2202 <<
", parMin["<<
i<<
"] = " << parMin[
i]
2203 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
2205 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, parSet );
2217 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
2218 double ampl(0), phase(0), twist(0);
2219 if ( eta < parScale[11] ) {
2220 ampl = parScale[1]; phase = parScale[2];
2221 twist = parScale[3]*TMath::SinH(eta);
2222 }
else if ( parScale[11] <= eta && eta <= parScale[12] ) {
2223 ampl = parScale[4]; phase = parScale[5];
2224 twist = parScale[6]*TMath::SinH(eta);
2225 }
else if ( parScale[12] < eta ) {
2226 ampl = parScale[7]; phase = parScale[8];
2227 twist = parScale[9]*TMath::SinH(eta);
2229 double curv = (1.+parScale[0])*((
double)chg/pt
2231 -ampl*
sin(phi+phase)
2233 return 1./((double)chg*curv);
2239 scaleVec->push_back(0);
2243 TString* parname,
const T & parScale,
const std::vector<int> & parScaleOrder,
const int muonType) {
2244 double thisStep[] = {0.000001,
2245 0.000001, 0.01, 0.000001,
2246 0.000001, 0.01, 0.000001,
2247 0.000001, 0.01, 0.000001,
2250 TString thisParName[] = {
"Curv global scale" ,
2251 "Phi ampl eta<-1.5" ,
"Phi phase eta<-1.5" ,
"Twist eta<-1.5" ,
2252 "Phi ampl |eta|<1.5" ,
"Phi phase |eta|<1.5",
"Twist |eta|<1.5" ,
2253 "Phi ampl eta>+1.5" ,
"Phi phase eta>+1.5" ,
"Twist eta>+1.5" ,
2254 "Charge depend bias",
2255 "eta neg boundary",
"eta pos boundary"};
2256 if( muonType == 1 ) {
2257 double thisMini[] = {-0.1, -0.3, -3.1416, -0.3, -0.3, -3.1416, -0.3, -0.3, -3.1416, -0.3, -0.3, -2.6, 0.};
2258 double thisMaxi[] = { 0.1, 0.3, 3.1416, 0.3, 0.3, 3.1416, 0.3, 0.3, 3.1416, 0.3, 0.3, 0., 2.6};
2259 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
2261 double thisMini[] = {-0.1, -0.3, -3.1416, -0.3, -0.3, -3.1416, -0.3, -0.3, -3.1416, -0.3, -0.3, -2.6, 0.};
2262 double thisMaxi[] = { 0.1, 0.3, 3.1416, 0.3, 0.3, 3.1416, 0.3, 0.3, 3.1416, 0.3, 0.3, 0., 2.6};
2263 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
2266 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
2267 const T & parScale,
const std::vector<int> & parScaleOrder,
2268 const std::vector<double> & parStep,
2269 const std::vector<double> & parMin,
2270 const std::vector<double> & parMax,
2273 if( (
int(parStep.size()) != this->
parNum_) || (int(parMin.size()) != this->
parNum_) || (int(parMax.size()) != this->
parNum_) ) {
2274 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
2276 std::cout <<
"parStep.size() = " << parStep.size() << std::endl;
2277 std::cout <<
"parMin.size() = " << parMin.size() << std::endl;
2278 std::cout <<
"parMax.size() = " << parMax.size() << std::endl;
2281 std::vector<ParameterSet> parSet(this->
parNum_);
2283 parSet[0] =
ParameterSet(
"Curv global scale", parStep[0], parMin[0], parMax[0] );
2284 parSet[1] =
ParameterSet(
"Phi ampl eta<-1.5", parStep[1], parMin[1], parMax[1] );
2285 parSet[2] =
ParameterSet(
"Phi phase eta<-1.5", parStep[2], parMin[2], parMax[2] );
2286 parSet[3] =
ParameterSet(
"Twist eta<-1.5", parStep[3], parMin[3], parMax[3] );
2287 parSet[4] =
ParameterSet(
"Phi ampl |eta|<1.5", parStep[4], parMin[4], parMax[4] );
2288 parSet[5] =
ParameterSet(
"Phi phase |eta|<1.5", parStep[5], parMin[5], parMax[5] );
2289 parSet[6] =
ParameterSet(
"Twist |eta|<1.5", parStep[6], parMin[6], parMax[6] );
2290 parSet[7] =
ParameterSet(
"Phi ampl eta>1.5", parStep[7], parMin[7], parMax[7] );
2291 parSet[8] =
ParameterSet(
"Phi phase eta>1.5", parStep[8], parMin[8], parMax[8] );
2292 parSet[9] =
ParameterSet(
"Twist eta>1.5" , parStep[9], parMin[9], parMax[9] );
2293 parSet[10] =
ParameterSet(
"Charge depend bias", parStep[10],parMin[10],parMax[10] );
2294 parSet[11] =
ParameterSet(
"Eta neg boundary", parStep[11],parMin[11],parMax[11] );
2295 parSet[12] =
ParameterSet(
"Eta pos boundary", parStep[12],parMin[12],parMax[12] );
2298 std::cout <<
"setting parameters" << std::endl;
2301 <<
", parMin["<<
i<<
"] = " << parMin[
i]
2302 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
2304 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, parSet );
2317 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
2318 double ampl(0), phase(0), twist(0);
2319 if ( eta < parScale[11] ) {
2320 ampl = parScale[1]; phase = parScale[2];
2321 twist = parScale[3]*(eta-parScale[11])+parScale[6]*parScale[11] ;
2322 }
else if ( parScale[11] <= eta && eta <= parScale[12] ) {
2323 ampl = parScale[4]; phase = parScale[5];
2324 twist = parScale[6]*TMath::SinH(eta);
2325 }
else if ( parScale[12] < eta ) {
2326 ampl = parScale[7]; phase = parScale[8];
2327 twist = parScale[9]*(eta-parScale[12])+parScale[6]*parScale[12];
2329 double curv = (1.+parScale[0])*((
double)chg/pt
2331 -ampl*
sin(phi+phase)
2333 return 1./((double)chg*curv);
2339 scaleVec->push_back(0);
2343 TString* parname,
const T & parScale,
const std::vector<int> & parScaleOrder,
const int muonType) {
2344 double thisStep[] = {0.000001,
2345 0.000001, 0.01, 0.000001,
2346 0.000001, 0.01, 0.000001,
2347 0.000001, 0.01, 0.000001,
2350 TString thisParName[] = {
"Curv global scale" ,
2351 "Phi ampl eta<-1.5" ,
"Phi phase eta<-1.5" ,
"Twist eta<-1.5" ,
2352 "Phi ampl |eta|<1.5" ,
"Phi phase |eta|<1.5",
"Twist |eta|<1.5" ,
2353 "Phi ampl eta>+1.5" ,
"Phi phase eta>+1.5" ,
"Twist eta>+1.5" ,
2354 "Charge depend bias",
2355 "eta neg boundary",
"eta pos boundary"};
2356 if( muonType == 1 ) {
2357 double thisMini[] = {-0.1, -0.3, -3.1416, -0.3, -0.3, -3.1416, -0.3, -0.3, -3.1416, -0.3, -0.3, -2.6, 0.};
2358 double thisMaxi[] = { 0.1, 0.3, 3.1416, 0.3, 0.3, 3.1416, 0.3, 0.3, 3.1416, 0.3, 0.3, 0., 2.6};
2359 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
2361 double thisMini[] = {-0.1, -0.3, -3.1416, -0.3, -0.3, -3.1416, -0.3, -0.3, -3.1416, -0.3, -0.3, -2.6, 0.};
2362 double thisMaxi[] = { 0.1, 0.3, 3.1416, 0.3, 0.3, 3.1416, 0.3, 0.3, 3.1416, 0.3, 0.3, 0., 2.6};
2363 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
2366 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
2367 const T & parScale,
const std::vector<int> & parScaleOrder,
2368 const std::vector<double> & parStep,
2369 const std::vector<double> & parMin,
2370 const std::vector<double> & parMax,
2373 if( (
int(parStep.size()) != this->
parNum_) || (int(parMin.size()) != this->
parNum_) || (int(parMax.size()) != this->
parNum_) ) {
2374 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
2376 std::cout <<
"parStep.size() = " << parStep.size() << std::endl;
2377 std::cout <<
"parMin.size() = " << parMin.size() << std::endl;
2378 std::cout <<
"parMax.size() = " << parMax.size() << std::endl;
2381 std::vector<ParameterSet> parSet(this->
parNum_);
2383 parSet[0] =
ParameterSet(
"Curv global scale", parStep[0], parMin[0], parMax[0] );
2384 parSet[1] =
ParameterSet(
"Phi ampl eta<-1.5", parStep[1], parMin[1], parMax[1] );
2385 parSet[2] =
ParameterSet(
"Phi phase eta<-1.5", parStep[2], parMin[2], parMax[2] );
2386 parSet[3] =
ParameterSet(
"Twist eta<-1.5", parStep[3], parMin[3], parMax[3] );
2387 parSet[4] =
ParameterSet(
"Phi ampl |eta|<1.5", parStep[4], parMin[4], parMax[4] );
2388 parSet[5] =
ParameterSet(
"Phi phase |eta|<1.5", parStep[5], parMin[5], parMax[5] );
2389 parSet[6] =
ParameterSet(
"Twist |eta|<1.5", parStep[6], parMin[6], parMax[6] );
2390 parSet[7] =
ParameterSet(
"Phi ampl eta>1.5", parStep[7], parMin[7], parMax[7] );
2391 parSet[8] =
ParameterSet(
"Phi phase eta>1.5", parStep[8], parMin[8], parMax[8] );
2392 parSet[9] =
ParameterSet(
"Twist eta>1.5" , parStep[9], parMin[9], parMax[9] );
2393 parSet[10] =
ParameterSet(
"Charge depend bias", parStep[10],parMin[10],parMax[10] );
2394 parSet[11] =
ParameterSet(
"Eta neg boundary", parStep[11],parMin[11],parMax[11] );
2395 parSet[12] =
ParameterSet(
"Eta pos boundary", parStep[12],parMin[12],parMax[12] );
2398 std::cout <<
"setting parameters" << std::endl;
2401 <<
", parMin["<<
i<<
"] = " << parMin[
i]
2402 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
2404 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, parSet );
2418 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
2419 double ampl(0), phase(0), twist(0), ampl2(0),
freq2(0), phase2(0);
2422 if ( eta < parScale[4] ) {
2423 ampl = parScale[1]; phase = parScale[2]; ampl2 = parScale[21];
freq2 = parScale[22]; phase2 = parScale[23];
2424 twist = parScale[3]*(eta-parScale[4])+parScale[7]*(parScale[4]-parScale[8])+parScale[11]*parScale[8];
2426 }
else if ( parScale[4] <= eta && eta < parScale[8] ) {
2427 ampl = parScale[5]; phase = parScale[6];
2428 twist = parScale[7]*(eta-parScale[8])+parScale[11]*parScale[8] ;
2430 }
else if ( parScale[8] <= eta && eta < parScale[12] ) {
2431 ampl = parScale[9]; phase = parScale[10];
2432 twist = parScale[11]*
eta;
2434 }
else if ( parScale[12] <= eta && eta < parScale[16] ) {
2435 ampl = parScale[13]; phase = parScale[14];
2436 twist = parScale[15]*(eta-parScale[12])+parScale[11]*parScale[12];
2438 }
else if ( parScale[16] < eta ) {
2439 ampl = parScale[17]; phase = parScale[18]; ampl2 = parScale[24];
freq2 = parScale[25]; phase2 = parScale[26];
2440 twist = parScale[19]*(eta-parScale[16])+parScale[15]*(parScale[16]-parScale[12])+parScale[11]*parScale[12];
2444 double curv = (1.+parScale[0])*((
double)chg/pt
2446 -ampl*
sin(phi+phase)
2449 return 1./((double)chg*curv);
2455 scaleVec->push_back(0);
2459 TString* parname,
const T & parScale,
const std::vector<int> & parScaleOrder,
const int muonType) {
2461 double thisStep[] = {0.000001,
2462 0.000001, 0.01, 0.000001, 0.01,
2463 0.000001, 0.01, 0.000001, 0.01,
2464 0.000001, 0.01, 0.000001, 0.01,
2465 0.000001, 0.01, 0.000001, 0.01,
2466 0.000001, 0.01, 0.000001,
2468 0.000001, 0.01, 0.01,
2469 0.000001, 0.01, 0.01};
2471 TString thisParName[] = {
"Curv global scale"
2472 ,
"Phi ampl eta vbwd" ,
"Phi phase eta vbwd" ,
"Twist eta vbwd",
"vbwd/bwd bndry"
2473 ,
"Phi ampl eta bwd" ,
"Phi phase eta bwd" ,
"Twist eta bwd",
"bwd/bar bndry"
2474 ,
"Phi ampl eta bar" ,
"Phi phase eta bar" ,
"Twist eta bar",
"bar/fwd bndry"
2475 ,
"Phi ampl eta fwd" ,
"Phi phase eta fwd" ,
"Twist eta fwd",
"fwd/vfwd bndry"
2476 ,
"Phi ampl eta vfwd" ,
"Phi phase eta vfwd" ,
"Twist eta vfwd"
2477 ,
"Charge depend bias"
2478 ,
"Phi ampl eta vbwd (2nd harmon.)",
"Phi freq. eta vbwd (2nd harmon.)",
"Phi phase eta vbwd (2nd harmon.)"
2479 ,
"Phi ampl eta vfwd (2nd harmon.)",
"Phi freq. eta vfwd (2nd harmon.)",
"Phi phase eta vfwd (2nd harmon.)"};
2481 if( muonType == 1 ) {
2482 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};
2483 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};
2484 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
2486 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};
2487 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};
2488 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
2491 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
2492 const T & parScale,
const std::vector<int> & parScaleOrder,
2493 const std::vector<double> & parStep,
2494 const std::vector<double> & parMin,
2495 const std::vector<double> & parMax,
2498 if( (
int(parStep.size()) != this->
parNum_) || (int(parMin.size()) != this->
parNum_) || (int(parMax.size()) != this->
parNum_) ) {
2499 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
2501 std::cout <<
"parStep.size() = " << parStep.size() << std::endl;
2502 std::cout <<
"parMin.size() = " << parMin.size() << std::endl;
2503 std::cout <<
"parMax.size() = " << parMax.size() << std::endl;
2506 std::vector<ParameterSet> parSet(this->
parNum_);
2508 parSet[0] =
ParameterSet(
"Curv global scale", parStep[0], parMin[0], parMax[0] );
2509 parSet[1] =
ParameterSet(
"Phi ampl vbwd", parStep[1], parMin[1], parMax[1] );
2510 parSet[2] =
ParameterSet(
"Phi phase vbwd", parStep[2], parMin[2], parMax[2] );
2511 parSet[3] =
ParameterSet(
"Twist vbwd", parStep[3], parMin[3], parMax[3] );
2512 parSet[4] =
ParameterSet(
"vbwd/bwd bndry", parStep[4], parMin[4], parMax[4] );
2513 parSet[5] =
ParameterSet(
"Phi ampl bwd", parStep[5], parMin[5], parMax[5] );
2514 parSet[6] =
ParameterSet(
"Phi phase bwd", parStep[6], parMin[6], parMax[6] );
2515 parSet[7] =
ParameterSet(
"Twist bwd", parStep[7], parMin[7], parMax[7] );
2516 parSet[8] =
ParameterSet(
"bwd/bar bndry", parStep[8], parMin[8], parMax[8] );
2517 parSet[9] =
ParameterSet(
"Phi ampl bar", parStep[9], parMin[9], parMax[9] );
2518 parSet[10] =
ParameterSet(
"Phi phase bar", parStep[10],parMin[10],parMax[10] );
2519 parSet[11] =
ParameterSet(
"Twist bar", parStep[11],parMin[11],parMax[11] );
2520 parSet[12] =
ParameterSet(
"bar/fwd bndry", parStep[12],parMin[12],parMax[12] );
2521 parSet[13] =
ParameterSet(
"Phi ampl fwd", parStep[13],parMin[13],parMax[13] );
2522 parSet[14] =
ParameterSet(
"Phi phase fwd", parStep[14],parMin[14],parMax[14] );
2523 parSet[15] =
ParameterSet(
"Twist fwd", parStep[15],parMin[15],parMax[15] );
2524 parSet[16] =
ParameterSet(
"fwd/vfwd bndry", parStep[16],parMin[16],parMax[16] );
2525 parSet[17] =
ParameterSet(
"Phi ampl vfwd", parStep[17],parMin[17],parMax[17] );
2526 parSet[18] =
ParameterSet(
"Phi phase vfwd", parStep[18],parMin[18],parMax[18] );
2527 parSet[19] =
ParameterSet(
"Twist vfwd", parStep[19],parMin[19],parMax[19] );
2528 parSet[20] =
ParameterSet(
"Charge depend bias", parStep[20],parMin[20],parMax[20] );
2529 parSet[21] =
ParameterSet(
"Phi ampl vbwd (2nd)", parStep[21],parMin[21],parMax[21] );
2530 parSet[22] =
ParameterSet(
"Phi freq vbwd (2nd)", parStep[22],parMin[22],parMax[22] );
2531 parSet[23] =
ParameterSet(
"Phi phase vbwd (2nd)",parStep[23],parMin[23],parMax[23] );
2532 parSet[24] =
ParameterSet(
"Phi ampl vfwd (2nd)", parStep[24],parMin[24],parMax[24] );
2533 parSet[25] =
ParameterSet(
"Phi freq vfwd (2nd)", parStep[25],parMin[25],parMax[25] );
2534 parSet[26] =
ParameterSet(
"Phi phase vfwd (2nd)",parStep[26],parMin[26],parMax[26] );
2537 std::cout <<
"setting parameters" << std::endl;
2540 <<
", parMin["<<
i<<
"] = " << parMin[
i]
2541 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
2543 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, parSet );
2555 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
2556 double ampl(0), phase(0), twist(0);
2559 if ( eta < parScale[4] ) {
2560 ampl = parScale[1]; phase = parScale[2];
2561 twist = parScale[3]*(eta-parScale[4])+parScale[7]*(parScale[4]-parScale[8])+parScale[11]*parScale[8];
2563 }
else if ( parScale[4] <= eta && eta < parScale[8] ) {
2564 ampl = parScale[5]; phase = parScale[6];
2565 twist = parScale[7]*(eta-parScale[8])+parScale[11]*parScale[8] ;
2567 }
else if ( parScale[8] <= eta && eta < parScale[14] ) {
2569 ampl = parScale[9]; phase = parScale[10];
2570 }
else if ( eta > 0 ) {
2571 ampl = parScale[11]; phase = parScale[12];
2573 twist = parScale[13]*
eta;
2575 }
else if ( parScale[14] <= eta && eta < parScale[18] ) {
2576 ampl = parScale[15]; phase = parScale[16];
2577 twist = parScale[17]*(eta-parScale[14])+parScale[13]*parScale[14];
2579 }
else if ( parScale[18] < eta ) {
2580 ampl = parScale[19]; phase = parScale[20];
2581 twist = parScale[21]*(eta-parScale[18])+parScale[17]*(parScale[18]-parScale[14])+parScale[13]*parScale[14];
2585 double curv = (1.+parScale[0])*((
double)chg/pt
2587 -ampl*
sin(phi+phase)
2589 return 1./((double)chg*curv);
2595 scaleVec->push_back(0);
2599 TString* parname,
const T & parScale,
const std::vector<int> & parScaleOrder,
const int muonType) {
2601 double thisStep[] = {0.000001,
2602 0.000001, 0.01, 0.000001, 0.01,
2603 0.000001, 0.01, 0.000001, 0.01,
2604 0.000001, 0.01, 0.000001, 0.01,
2605 0.000001, 0.01, 0.000001, 0.01,
2606 0.000001, 0.01, 0.000001, 0.01,
2607 0.000001, 0.01, 0.000001,
2610 TString thisParName[] = {
"Curv global scale"
2611 ,
"Phi ampl eta vbwd" ,
"Phi phase eta vbwd" ,
"Twist eta vbwd",
"vbwd/bwd bndry"
2612 ,
"Phi ampl eta bwd" ,
"Phi phase eta bwd" ,
"Twist eta bwd",
"bwd/bar bndry"
2613 ,
"Phi ampl eta bar-" ,
"Phi phase eta bar-",
"Phi ampl eta bar+",
"Phi phase eta bar+" ,
"Twist eta bar",
"bar/fwd bndry"
2614 ,
"Phi ampl eta fwd" ,
"Phi phase eta fwd" ,
"Twist eta fwd",
"fwd/vfwd bndry"
2615 ,
"Phi ampl eta vfwd" ,
"Phi phase eta vfwd" ,
"Twist eta vfwd"
2616 ,
"Charge depend bias"};
2618 if( muonType == 1 ) {
2619 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, -3.1416, -0.3, 0., -0.3, -3.1416, -0.3, 0. , -0.3, -3.1416, -0.3, -0.1};
2620 double thisMaxi[] = { 0.1, 0.3, 3.1416, 0.3, 0. , 0.3, 3.1416, 0.3, 0. , 0.3, 3.1416, 0.3, 3.1416, 0.3, 2.6 , 0.3, 3.1416, 0.3, 2.6 , 0.3, 3.1416, 0.3, 0.1};
2621 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
2623 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, -3.1416, -0.3, 0., -0.3, -3.1416, -0.3, 0. , -0.3, -3.1416, -0.3, -0.1};
2624 double thisMaxi[] = { 0.1, 0.3, 3.1416, 0.3, 0. , 0.3, 3.1416, 0.3, 0. , 0.3, 3.1416, 0.3, 3.1416, 0.3, 2.6 , 0.3, 3.1416, 0.3, 2.6 , 0.3, 3.1416, 0.3, 0.1};
2625 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
2628 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
2629 const T & parScale,
const std::vector<int> & parScaleOrder,
2630 const std::vector<double> & parStep,
2631 const std::vector<double> & parMin,
2632 const std::vector<double> & parMax,
2635 if( (
int(parStep.size()) != this->
parNum_) || (int(parMin.size()) != this->
parNum_) || (int(parMax.size()) != this->
parNum_) ) {
2636 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
2638 std::cout <<
"parStep.size() = " << parStep.size() << std::endl;
2639 std::cout <<
"parMin.size() = " << parMin.size() << std::endl;
2640 std::cout <<
"parMax.size() = " << parMax.size() << std::endl;
2643 std::vector<ParameterSet> parSet(this->
parNum_);
2645 parSet[0] =
ParameterSet(
"Curv global scale", parStep[0], parMin[0], parMax[0] );
2646 parSet[1] =
ParameterSet(
"Phi ampl vbwd", parStep[1], parMin[1], parMax[1] );
2647 parSet[2] =
ParameterSet(
"Phi phase vbwd", parStep[2], parMin[2], parMax[2] );
2648 parSet[3] =
ParameterSet(
"Twist vbwd", parStep[3], parMin[3], parMax[3] );
2649 parSet[4] =
ParameterSet(
"vbwd/bwd bndry", parStep[4], parMin[4], parMax[4] );
2650 parSet[5] =
ParameterSet(
"Phi ampl bwd", parStep[5], parMin[5], parMax[5] );
2651 parSet[6] =
ParameterSet(
"Phi phase bwd", parStep[6], parMin[6], parMax[6] );
2652 parSet[7] =
ParameterSet(
"Twist bwd", parStep[7], parMin[7], parMax[7] );
2653 parSet[8] =
ParameterSet(
"bwd/bar bndry", parStep[8], parMin[8], parMax[8] );
2654 parSet[9] =
ParameterSet(
"Phi ampl bar-", parStep[9], parMin[9], parMax[9] );
2655 parSet[10] =
ParameterSet(
"Phi phase bar-", parStep[10],parMin[10],parMax[10] );
2656 parSet[11] =
ParameterSet(
"Phi ampl bar+", parStep[11],parMin[11],parMax[11] );
2657 parSet[12] =
ParameterSet(
"Phi phase bar+", parStep[12],parMin[12],parMax[12] );
2658 parSet[13] =
ParameterSet(
"Twist bar", parStep[13],parMin[13],parMax[13] );
2659 parSet[14] =
ParameterSet(
"bar/fwd bndry", parStep[14],parMin[14],parMax[14] );
2660 parSet[15] =
ParameterSet(
"Phi ampl fwd", parStep[15],parMin[15],parMax[15] );
2661 parSet[16] =
ParameterSet(
"Phi phase fwd", parStep[16],parMin[16],parMax[16] );
2662 parSet[17] =
ParameterSet(
"Twist fwd", parStep[17],parMin[17],parMax[17] );
2663 parSet[18] =
ParameterSet(
"fwd/vfwd bndry", parStep[18],parMin[18],parMax[18] );
2664 parSet[19] =
ParameterSet(
"Phi ampl vfwd", parStep[19],parMin[19],parMax[19] );
2665 parSet[20] =
ParameterSet(
"Phi phase vfwd", parStep[20],parMin[20],parMax[20] );
2666 parSet[21] =
ParameterSet(
"Twist vfwd", parStep[21],parMin[21],parMax[21] );
2667 parSet[22] =
ParameterSet(
"Charge depend bias", parStep[22],parMin[22],parMax[22] );
2669 std::cout <<
"setting parameters" << std::endl;
2672 <<
", parMin["<<
i<<
"] = " << parMin[
i]
2673 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
2675 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, parSet );
2688 virtual double scale(
const double & pt,
const double &
eta,
const double &
phi,
const int chg,
const T & parScale)
const {
2689 double ampl(0), phase(0), ampl2(0), phase2(0), twist(0);
2692 if ( eta < parScale[4] ) {
2693 ampl = parScale[1]; phase = parScale[2];
2694 ampl2 = parScale[21]; phase2 = parScale[22];
2695 twist = parScale[3]*(eta-parScale[4])+parScale[7]*(parScale[4]-parScale[8])+parScale[11]*parScale[8];
2697 }
else if ( parScale[4] <= eta && eta < parScale[8] ) {
2698 ampl = parScale[5]; phase = parScale[6];
2699 ampl2 = parScale[23]; phase2 = parScale[24];
2700 twist = parScale[7]*(eta-parScale[8])+parScale[11]*parScale[8] ;
2702 }
else if ( parScale[8] <= eta && eta < parScale[12] ) {
2703 ampl = parScale[9]; phase = parScale[10];
2704 ampl2 = parScale[25]; phase2 = parScale[26];
2705 twist = parScale[11]*
eta;
2707 }
else if ( parScale[12] <= eta && eta < parScale[16] ) {
2708 ampl = parScale[13]; phase = parScale[14];
2709 ampl2 = parScale[27]; phase2 = parScale[28];
2710 twist = parScale[15]*(eta-parScale[12])+parScale[11]*parScale[12];
2712 }
else if ( parScale[16] < eta ) {
2713 ampl = parScale[17]; phase = parScale[18];
2714 ampl2 = parScale[29]; phase2 = parScale[30];
2715 twist = parScale[19]*(eta-parScale[16])+parScale[15]*(parScale[16]-parScale[12])+parScale[11]*parScale[12];
2719 double curv = (1.+parScale[0])*((
double)chg/pt
2721 -ampl*
sin(phi+phase)
2722 -ampl2*
sin(2*phi+phase2)
2724 return 1./((double)chg*curv);
2730 scaleVec->push_back(0);
2734 TString* parname,
const T & parScale,
const std::vector<int> & parScaleOrder,
const int muonType) {
2736 double thisStep[] = {0.000001,
2737 0.000001, 0.01, 0.000001, 0.01,
2738 0.000001, 0.01, 0.000001, 0.01,
2739 0.000001, 0.01, 0.000001, 0.01,
2740 0.000001, 0.01, 0.000001, 0.01,
2741 0.000001, 0.01, 0.000001,
2743 0.000001, 0.01, 0.000001, 0.01, 0.000001, 0.01, 0.000001, 0.01, 0.000001, 0.01
2746 TString thisParName[] = {
"Curv global scale"
2747 ,
"Phi ampl eta vbwd" ,
"Phi phase eta vbwd" ,
"Twist eta vbwd",
"vbwd/bwd bndry"
2748 ,
"Phi ampl eta bwd" ,
"Phi phase eta bwd" ,
"Twist eta bwd",
"bwd/bar bndry"
2749 ,
"Phi ampl eta bar" ,
"Phi phase eta bar" ,
"Twist eta bar",
"bar/fwd bndry"
2750 ,
"Phi ampl eta fwd" ,
"Phi phase eta fwd" ,
"Twist eta fwd",
"fwd/vfwd bndry"
2751 ,
"Phi ampl eta vfwd" ,
"Phi phase eta vfwd" ,
"Twist eta vfwd"
2752 ,
"Charge depend bias"
2753 ,
"Phi ampl2 eta vbwd" ,
"Phi phase2 eta vbwd"
2754 ,
"Phi ampl2 eta bwd" ,
"Phi phase2 eta bwd"
2755 ,
"Phi ampl2 eta bar" ,
"Phi phase2 eta bar"
2756 ,
"Phi ampl2 eta fwd" ,
"Phi phase2 eta fwd"
2757 ,
"Phi ampl2 eta vfwd" ,
"Phi phase2 eta vfwd"
2760 if( muonType == 1 ) {
2761 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, -3.1416,-0.3, -3.1416,-0.3, -3.1416,-0.3, -3.1416,-0.3, -3.1416};
2762 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, 3.1416, 0.3, 3.1416, 0.3, 3.1416, 0.3, 3.1416, 0.3, 3.1416};
2763 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
2765 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, -3.1416,-0.3, -3.1416,-0.3, -3.1416,-0.3, -3.1416,-0.3, -3.1416};
2766 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, 3.1416, 0.3, 3.1416, 0.3, 3.1416, 0.3, 3.1416, 0.3, 3.1416};
2767 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
2770 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
2771 const T & parScale,
const std::vector<int> & parScaleOrder,
2772 const std::vector<double> & parStep,
2773 const std::vector<double> & parMin,
2774 const std::vector<double> & parMax,
2777 if( (
int(parStep.size()) != this->
parNum_) || (int(parMin.size()) != this->
parNum_) || (int(parMax.size()) != this->
parNum_) ) {
2778 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
2780 std::cout <<
"parStep.size() = " << parStep.size() << std::endl;
2781 std::cout <<
"parMin.size() = " << parMin.size() << std::endl;
2782 std::cout <<
"parMax.size() = " << parMax.size() << std::endl;
2785 std::vector<ParameterSet> parSet(this->
parNum_);
2787 parSet[0] =
ParameterSet(
"Curv global scale", parStep[0], parMin[0], parMax[0] );
2788 parSet[1] =
ParameterSet(
"Phi ampl vbwd", parStep[1], parMin[1], parMax[1] );
2789 parSet[2] =
ParameterSet(
"Phi phase vbwd", parStep[2], parMin[2], parMax[2] );
2790 parSet[3] =
ParameterSet(
"Twist vbwd", parStep[3], parMin[3], parMax[3] );
2791 parSet[4] =
ParameterSet(
"vbwd/bwd bndry", parStep[4], parMin[4], parMax[4] );
2792 parSet[5] =
ParameterSet(
"Phi ampl bwd", parStep[5], parMin[5], parMax[5] );
2793 parSet[6] =
ParameterSet(
"Phi phase bwd", parStep[6], parMin[6], parMax[6] );
2794 parSet[7] =
ParameterSet(
"Twist bwd", parStep[7], parMin[7], parMax[7] );
2795 parSet[8] =
ParameterSet(
"bwd/bar bndry", parStep[8], parMin[8], parMax[8] );
2796 parSet[9] =
ParameterSet(
"Phi ampl bar", parStep[9], parMin[9], parMax[9] );
2797 parSet[10] =
ParameterSet(
"Phi phase bar", parStep[10],parMin[10],parMax[10] );
2798 parSet[11] =
ParameterSet(
"Twist bar", parStep[11],parMin[11],parMax[11] );
2799 parSet[12] =
ParameterSet(
"bar/fwd bndry", parStep[12],parMin[12],parMax[12] );
2800 parSet[13] =
ParameterSet(
"Phi ampl fwd", parStep[13],parMin[13],parMax[13] );
2801 parSet[14] =
ParameterSet(
"Phi phase fwd", parStep[14],parMin[14],parMax[14] );
2802 parSet[15] =
ParameterSet(
"Twist fwd", parStep[15],parMin[15],parMax[15] );
2803 parSet[16] =
ParameterSet(
"fwd/vfwd bndry", parStep[16],parMin[16],parMax[16] );
2804 parSet[17] =
ParameterSet(
"Phi ampl vfwd", parStep[17],parMin[17],parMax[17] );
2805 parSet[18] =
ParameterSet(
"Phi phase vfwd", parStep[18],parMin[18],parMax[18] );
2806 parSet[19] =
ParameterSet(
"Twist vfwd", parStep[19],parMin[19],parMax[19] );
2807 parSet[20] =
ParameterSet(
"Charge depend bias", parStep[20],parMin[20],parMax[20] );
2808 parSet[21] =
ParameterSet(
"Phi ampl2 vbwd", parStep[21],parMin[21],parMax[21] );
2809 parSet[22] =
ParameterSet(
"Phi phase2 vbwd", parStep[22],parMin[22],parMax[22] );
2810 parSet[23] =
ParameterSet(
"Phi ampl2 bwd", parStep[23],parMin[23],parMax[23] );
2811 parSet[24] =
ParameterSet(
"Phi phase2 bwd", parStep[24],parMin[24],parMax[24] );
2812 parSet[25] =
ParameterSet(
"Phi ampl2 bar", parStep[25],parMin[25],parMax[25] );
2813 parSet[26] =
ParameterSet(
"Phi phase2 bar", parStep[26],parMin[26],parMax[26] );
2814 parSet[27] =
ParameterSet(
"Phi ampl2 fwd", parStep[27],parMin[27],parMax[27] );
2815 parSet[28] =
ParameterSet(
"Phi phase2 fwd", parStep[28],parMin[28],parMax[28] );
2816 parSet[29] =
ParameterSet(
"Phi ampl2 vfwd", parStep[29],parMin[29],parMax[29] );
2817 parSet[30] =
ParameterSet(
"Phi phase2 vfwd", parStep[30],parMin[30],parMax[30] );
2821 std::cout <<
"setting parameters" << std::endl;
2824 <<
", parMin["<<
i<<
"] = " << parMin[
i]
2825 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
2827 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, parSet );
2847 virtual void smear(
double & pt,
double &
eta,
double &
phi,
const double *
y,
const std::vector<double> & parSmear) = 0;
2862 eta = -
log(
tan(theta/2));
2873 virtual void smear(
double & pt,
double &
eta,
double &
phi,
const double *
y,
const std::vector<double> & parSmear) { }
2879 virtual void smear(
double & pt,
double &
eta,
double &
phi,
const double *
y,
const std::vector<double> & parSmear) {
2880 pt = pt*(1.0+y[0]*parSmear[0]*pt);
2881 phi = phi*(1.0+y[1]*parSmear[1]);
2882 double tmp = 2*atan(
exp(-eta));
2890 virtual void smear(
double & pt,
double &
eta,
double &
phi,
const double *
y,
const std::vector<double> & parSmear) {
2891 pt = pt*(1.0+y[0]*parSmear[0]*pt+y[1]*parSmear[1]*std::fabs(eta));
2892 phi = phi*(1.0+y[2]*parSmear[2]);
2893 double tmp = 2*atan(
exp(-eta));
2901 virtual void smear(
double & pt,
double &
eta,
double &
phi,
const double *
y,
const std::vector<double> & parSmear) {
2902 pt = pt*(1.0+y[0]*parSmear[0]*pt+y[1]*parSmear[1]*std::fabs(eta));
2903 phi = phi*(1.0+y[2]*parSmear[2]);
2904 double tmp = 2*atan(
exp(-eta));
2905 cotgth_ =
cos(tmp)/
sin(tmp)*(1.0+y[3]*parSmear[3]+y[4]*parSmear[4]*std::fabs(eta));
2914 virtual void smear(
double & pt,
double &
eta,
double &
phi,
const double *
y,
const std::vector<double> & parSmear) {
2915 pt = pt*(1.0+y[0]*parSmear[0]*pt+y[1]*parSmear[1]*std::fabs(eta)+y[5]*parSmear[5]*
pow(pt,2));
2916 phi = phi*(1.0+y[2]*parSmear[2]);
2917 double tmp = 2*atan(
exp(-eta));
2918 cotgth_ =
cos(tmp)/
sin(tmp)*(1.0+y[3]*parSmear[3]+y[4]*parSmear[4]*std::fabs(eta));
2925 virtual void smear(
double & pt,
double &
eta,
double &
phi,
const double *
y,
const std::vector<double> & parSmear) {
2926 pt = pt*(1.0+y[0]*parSmear[0]*pt+y[1]*parSmear[1]*std::fabs(eta)+y[5]*parSmear[5]*
pow(pt,2));
2927 phi = phi*(1.0+y[2]*parSmear[2]+y[6]*parSmear[6]*pt);
2928 double tmp = 2*atan(
exp(-eta));
2929 cotgth_ =
cos(tmp)/
sin(tmp)*(1.0+y[3]*parSmear[3]+y[4]*parSmear[4]*std::fabs(eta));
2937 virtual void smear(
double & pt,
double &
eta,
double &
phi,
const double *
y,
const std::vector<double> & parSmear) {
2938 double sigmaSmear = 0;
2939 double sigmaPtAl = 0;
2940 double sigmaPtMisal = 0;
2941 double ptPart = parSmear[0] + parSmear[1]*1/pt + pt*parSmear[2];
2942 double fabsEta = std::fabs(eta);
2944 sigmaPtAl = parSmear[14]*
etaByPoints(eta, parSmear[15]);
2946 if (std::fabs(eta)<=1.4){
2947 sigmaPtMisal = ptPart + parSmear[3] + parSmear[4]*std::fabs(eta) + parSmear[5]*eta*
eta;
2948 sigmaSmear =
sqrt(std::fabs(
pow(sigmaPtMisal,2)-
pow(sigmaPtAl,2)));
2949 pt = pt*
gRandom_->Gaus(1,sigmaSmear);
2952 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]));
2953 sigmaPtMisal = par + ptPart + parSmear[6] + parSmear[7]*std::fabs((fabsEta-parSmear[8])) + parSmear[9]*(fabsEta-parSmear[8])*(fabsEta-parSmear[8]);
2954 sigmaSmear =
sqrt(std::fabs(
pow(sigmaPtMisal,2)-
pow(sigmaPtAl,2)));
2955 pt = pt*
gRandom_->Gaus(1,sigmaSmear);
2958 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]));
2959 sigmaPtMisal = par + ptPart + parSmear[10] + parSmear[11]*std::fabs((fabsEta-parSmear[12])) + parSmear[13]*(fabsEta-parSmear[12])*(fabsEta-parSmear[12]);
2960 sigmaSmear =
sqrt(std::fabs(
pow(sigmaPtMisal,2)-
pow(sigmaPtAl,2)));
2961 pt = pt*
gRandom_->Gaus(1,sigmaSmear);
2970 Double_t
eta = std::fabs(inEta);
2971 if( 0. <= eta && eta <= 0.2 )
return 0.00942984;
2972 else if( 0.2 < eta && eta <= 0.4 )
return 0.0104489;
2973 else if( 0.4 < eta && eta <= 0.6 )
return 0.0110521;
2974 else if( 0.6 < eta && eta <= 0.8 )
return 0.0117338;
2975 else if( 0.8 < eta && eta <= 1.0 )
return 0.0138142;
2976 else if( 1.0 < eta && eta <= 1.2 )
return 0.0165826;
2977 else if( 1.2 < eta && eta <= 1.4 )
return 0.0183663;
2978 else if( 1.4 < eta && eta <= 1.6 )
return 0.0169904;
2979 else if( 1.6 < eta && eta <= 1.8 )
return 0.0173289;
2980 else if( 1.8 < eta && eta <= 2.0 )
return 0.0205821;
2981 else if( 2.0 < eta && eta <= 2.2 )
return 0.0250032;
2982 else if( 2.2 < eta && eta <= 2.4 )
return 0.0339477;
2984 else if( 2.4 < eta && eta <= 2.6 )
return border;
2992 virtual void smear(
double & pt,
double &
eta,
double &
phi,
const double *
y,
const std::vector<double> & parSmear)
2995 TF1 G(
"G",
"[0]*exp(-0.5*pow(x,2)/[1])", -5., 5.);
2997 G.SetParameter (0,norm);
2998 G.SetParameter (1,sigmaSquared);
2999 pt = pt*(1-G.GetRandom());
3024 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval) = 0;
3025 virtual double sigmaPtError(
const double & pt,
const double & eta,
const T & parval,
const T & parError)
3029 virtual double sigmaPhi(
const double & pt,
const double & eta,
const T & parval) = 0;
3030 virtual double sigmaCotgTh(
const double & pt,
const double & eta,
const T & parval) = 0;
3031 virtual double covPt1Pt2(
const double & pt1,
const double & eta1,
const double & pt2,
const double & eta2,
const T & parval)
3038 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
3039 const T & parResol,
const std::vector<int> & parResolOrder,
const int muonType) {};
3040 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
3041 const T & parResol,
const std::vector<int> & parResolOrder,
3042 const std::vector<double> & parStep,
3043 const std::vector<double> & parMin,
3044 const std::vector<double> & parMax,
3047 std::cout <<
"The method setParameters must be implemented for this resolution function" << std::endl;
3054 virtual void setPar(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind,
3055 TString* parname,
const T & parResol,
const std::vector<int> & parResolOrder,
3056 double* thisStep,
double* thisMini,
double* thisMaxi, TString* thisParName ) {
3057 for(
int iPar=0; iPar<this->
parNum_; ++iPar ) {
3058 Start[iPar] = parResol[iPar];
3059 Step[iPar] = thisStep[iPar];
3060 Mini[iPar] = thisMini[iPar];
3061 Maxi[iPar] = thisMaxi[iPar];
3062 ind[iPar] = parResolOrder[iPar];
3063 parname[iPar] = thisParName[iPar];
3066 virtual void setPar(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind,
3067 TString* parname,
const T & parResol,
const std::vector<int> & parResolOrder,
const std::vector<ParameterSet> & parSet ) {
3068 if(
int(parSet.size()) != this->
parNum_ ) {
3069 std::cout <<
"Error: wrong number of parameter initializations = " << parSet.size() <<
". Number of parameters is " << this->
parNum_ << std::endl;
3072 for(
int iPar=0; iPar<this->
parNum_; ++iPar ) {
3073 Start[iPar] = parResol[iPar];
3074 Step[iPar] = parSet[iPar].step;
3075 Mini[iPar] = parSet[iPar].mini;
3076 Maxi[iPar] = parSet[iPar].maxi;
3077 ind[iPar] = parResolOrder[iPar];
3078 parname[iPar] = parSet[iPar].name;
3089 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval) {
3092 virtual double sigmaPhi(
const double & pt,
const double &
eta,
const T & parval) {
3098 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) {
3099 double thisStep[] = {0.001, 0.001, 0.001};
3100 TString thisParName[] = {
"Pt res. sc.",
"Phi res. sc.",
"CotgThs res. sc."};
3101 double thisMini[] = {0., 0., 0.};
3102 if( muonType == 1 ) {
3103 double thisMaxi[] = {0.4, 0.4, 0.4};
3104 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
3106 double thisMaxi[] = {0.01, 0.02, 0.02};
3107 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
3110 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
3111 const T & parResol,
const std::vector<int> & parResolOrder,
3112 const std::vector<double> & parStep,
3113 const std::vector<double> & parMin,
3114 const std::vector<double> & parMax,
3115 const int muonType) {}
3123 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval) {
3124 return( parval[0]+parval[1]*pt+parval[2]*
pow(pt,2)+parval[3]*
pow(pt,3)+parval[4]*
pow(pt,4)+parval[5]*std::fabs(eta)+parval[6]*
pow(eta,2) );
3127 return( parval[7]+parval[8]/pt+parval[9]*std::fabs(eta)+parval[10]*
pow(eta,2) );
3129 virtual double sigmaPhi(
const double & pt,
const double &
eta,
const T & parval) {
3130 return( parval[11]+parval[12]/pt+parval[13]*std::fabs(eta)+parval[14]*
pow(eta,2) );
3132 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) {
3133 double thisStep[] = { 0.005, 0.0005 ,0.000005 ,0.00000005 ,0.0000000005 ,0.0005 ,0.000005,
3134 0.000005 ,0.0005 ,0.00000005 ,0.0000005,
3135 0.00005 ,0.0005 ,0.00000005 ,0.000005};
3136 TString thisParName[] = {
"Pt res. sc.",
"Pt res. Pt sc.",
"Pt res. Pt^2 sc.",
"Pt res. Pt^3 sc.",
"Pt res. Pt^4 sc.",
"Pt res. Eta sc.",
"Pt res. Eta^2 sc.",
3137 "Cth res. sc.",
"Cth res. 1/Pt sc.",
"Cth res. Eta sc.",
"Cth res. Eta^2 sc.",
3138 "Phi res. sc.",
"Phi res. 1/Pt sc.",
"Phi res. Eta sc.",
"Phi res. Eta^2 sc." };
3139 double thisMini[] = { 0.0, -0.01, -0.001, -0.01, -0.001, -0.001, -0.001,
3140 0.0, 0.0, -0.001, -0.001,
3141 0.0, 0.0, -0.001, -0.001 };
3142 if( muonType == 1 ) {
3143 double thisMaxi[] = { 1., 1., 1., 1., 1., 1., 1.,
3146 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
3148 double thisMaxi[] = { 0.1, 0.01, 0.01, 0.01, 0.01, 0.01, 0.1,
3149 0.01, 0.01, 0.01, 0.01,
3150 0.01, 0.01, 0.01, 0.01 };
3151 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
3162 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval) {
3163 return( parval[0]+parval[1]*pt + parval[2]*std::fabs(eta)+parval[3]*
pow(eta,2) );
3167 return( parval[4]+parval[5]/pt + parval[6]*std::fabs(eta)+parval[7]*
pow(eta,2) );
3170 virtual double sigmaPhi(
const double & pt,
const double &
eta,
const T & parval) {
3171 return( parval[8]+parval[9]/pt + parval[10]*std::fabs(eta)+parval[11]*
pow(eta,2) );
3173 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) {
3174 double thisStep[] = { 0.002, 0.00002, 0.000002, 0.0002,
3175 0.00002, 0.0002, 0.0000002, 0.000002,
3176 0.00002, 0.0002, 0.00000002, 0.000002 };
3177 TString thisParName[] = {
"Pt res. sc.",
"Pt res. Pt sc.",
"Pt res. Eta sc.",
"Pt res. Eta^2 sc.",
3178 "Cth res. sc.",
"Cth res. 1/Pt sc.",
"Cth res. Eta sc.",
"Cth res. Eta^2 sc.",
3179 "Phi res. sc.",
"Phi res. 1/Pt sc.",
"Phi res. Eta sc.",
"Phi res. Eta^2 sc." };
3180 double thisMini[] = { 0.0, -0.01, -0.001, -0.0001,
3181 0.0, -0.001, -0.001, -0.00001,
3182 0.0, -0.001, -0.0001, -0.0001 };
3183 if( muonType == 1 ) {
3184 double thisMaxi[] = { 1., 1., 1., 1.,
3187 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
3189 double thisMaxi[] = { 0.1, 0.01, 0.01, 0.1,
3190 0.01, 0.01, 0.1, 0.01,
3191 0.01, 0.01, 0.01, 0.01 };
3192 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
3203 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval) {
3204 return( parval[0]+parval[1]*pt + parval[2]*
etaByPoints(eta, parval[3]) );
3208 return( parval[4]+parval[5]/pt + parval[6]*std::fabs(eta)+parval[7]*eta*eta );
3211 virtual double sigmaPhi(
const double & pt,
const double &
eta,
const T & parval) {
3212 return( parval[8]+parval[9]/pt + parval[10]*std::fabs(eta)+parval[11]*eta*eta );
3214 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) {
3216 double thisStep[] = { 0.0000002, 0.0000001, 0.00001, 0.02,
3217 0.00002, 0.0002, 0.0000002, 0.00002,
3218 0.00002, 0.0002, 0.00000002, 0.000002 };
3219 TString thisParName[] = {
"Pt res. sc.",
"Pt res. Pt sc.",
"Pt res. Eta sc.",
"Pt res. eta border",
3220 "Cth res. sc.",
"Cth res. 1/Pt sc.",
"Cth res. Eta sc.",
"Cth res. Eta^2 sc.",
3221 "Phi res. sc.",
"Phi res. 1/Pt sc.",
"Phi res. Eta sc.",
"Phi res. Eta^2 sc." };
3222 double thisMini[] = { -0.03, -0.0000001, 0.1, 0.01,
3223 -0.001, 0.002, -0.0001, -0.0001,
3224 -0.0001, 0.0005, -0.0001, -0.00001 };
3225 if( muonType == 1 ) {
3226 double thisMaxi[] = { 1., 1., 1., 1.,
3229 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
3231 double thisMaxi[] = { 0.03, 0.1, 1.4, 0.6,
3232 0.001, 0.005, 0.00004, 0.0007,
3233 0.001, 0.01, -0.0000015, 0.0004 };
3234 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
3243 Double_t
eta = std::fabs(inEta);
3244 if( 0. <= eta && eta <= 0.2 )
return 0.00942984;
3245 else if( 0.2 < eta && eta <= 0.4 )
return 0.0104489;
3246 else if( 0.4 < eta && eta <= 0.6 )
return 0.0110521;
3247 else if( 0.6 < eta && eta <= 0.8 )
return 0.0117338;
3248 else if( 0.8 < eta && eta <= 1.0 )
return 0.0138142;
3249 else if( 1.0 < eta && eta <= 1.2 )
return 0.0165826;
3250 else if( 1.2 < eta && eta <= 1.4 )
return 0.0183663;
3251 else if( 1.4 < eta && eta <= 1.6 )
return 0.0169904;
3252 else if( 1.6 < eta && eta <= 1.8 )
return 0.0173289;
3253 else if( 1.8 < eta && eta <= 2.0 )
return 0.0205821;
3254 else if( 2.0 < eta && eta <= 2.2 )
return 0.0250032;
3255 else if( 2.2 < eta && eta <= 2.4 )
return 0.0339477;
3256 else if( 2.4 < eta && eta <= 2.6 )
return border;
3267 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval) {
3270 if( pt < 3 ) ptPart = parval[15];
3271 else if( pt < 4 ) ptPart = parval[16];
3272 else if( pt < 5 ) ptPart = parval[17];
3273 else if( pt < 6 ) ptPart = parval[18];
3274 else if( pt < 7 ) ptPart = parval[19];
3275 else if( pt < 8 ) ptPart = parval[20];
3276 else if( pt < 9 ) ptPart = parval[21];
3277 else if( pt < 10 ) ptPart = parval[22];
3279 else ptPart = parval[0] + parval[1]*pt + parval[2]*pt*pt + parval[3]*pt*pt*pt + parval[4]*pt*pt*pt*pt;
3281 double fabsEta = std::fabs(eta);
3282 double etaCoeff = parval[5];
3283 if( fabsEta < 0.1 ) etaCoeff = parval[23];
3284 else if( fabsEta < 0.2 ) etaCoeff = parval[24];
3285 else if( fabsEta < 0.3 ) etaCoeff = parval[25];
3286 else if( fabsEta < 0.4 ) etaCoeff = parval[26];
3287 else if( fabsEta < 0.5 ) etaCoeff = parval[27];
3288 else if( fabsEta < 0.6 ) etaCoeff = parval[28];
3289 else if( fabsEta < 0.7 ) etaCoeff = parval[29];
3290 else if( fabsEta < 0.8 ) etaCoeff = parval[30];
3292 return( ptPart + etaCoeff*
etaByPoints(eta, parval[6]) );
3296 return( parval[7]+parval[8]/pt + parval[9]*std::fabs(eta)+parval[10]*eta*eta );
3299 virtual double sigmaPhi(
const double & pt,
const double &
eta,
const T & parval) {
3300 return( parval[11]+parval[12]/pt + parval[13]*std::fabs(eta)+parval[14]*eta*eta );
3302 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) {
3304 double thisStep[] = { 0.0002, 0.000002, 0.0000002, 0.00000002, 0.000000002, 0.02, 0.02,
3305 0.00002, 0.0002, 0.0000002, 0.00002,
3306 0.00002, 0.0002, 0.00000002, 0.000002,
3307 0.001, 0.001, 0.001, 0.001,
3308 0.001, 0.001, 0.001, 0.001,
3309 0.001, 0.001, 0.001, 0.001,
3310 0.001, 0.001, 0.001, 0.001 };
3311 TString thisParName[] = {
"Pt res. sc.",
"Pt res. Pt sc.",
"Pt res. Pt^2 sc.",
"Pt res. Pt^3 sc.",
"Pt res. Pt^4 sc",
3312 "Pt res. Eta sc.",
"Pt res. eta border",
3313 "Cth res. sc.",
"Cth res. 1/Pt sc.",
"Cth res. Eta sc.",
"Cth res. Eta^2 sc.",
3314 "Phi res. sc.",
"Phi res. 1/Pt sc.",
"Phi res. Eta sc.",
"Phi res. Eta^2 sc.",
3315 "Pt by points sc. 0-3",
"Pt by points sc. 3-4",
"Pt by points sc. 4-5",
"Pt by points sc. 5-6",
3316 "Pt by points sc. 6-7",
"Pt by points sc. 7-8",
"Pt by points sc. 8-9",
"Pt by points sc. 9-10",
3317 "Eta scale for eta < 0.1",
"Eta scale for eta < 0.2",
"Eta scale for eta < 0.3",
"Eta scale for eta < 0.4",
3318 "Eta scale for eta < 0.5",
"Eta scale for eta < 0.6",
"Eta scale for eta < 0.7",
"Eta scale for eta < 0.8" };
3319 double thisMini[] = { -0.1, -0.001, -0.001, -0.001, -0.001, 0.001, 0.0001,
3320 -0.001, 0.002, -0.0001, -0.0001,
3321 -0.0001, 0.0005, -0.0001, -0.00001,
3325 -1., -1., -1., -1. };
3326 if( muonType == 1 ) {
3327 double thisMaxi[] = { 1., 1., 1., 1., 1., 1., 1.,
3334 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
3336 double thisMaxi[] = { 0.1, 0.001, 0.001, 0.001, 0.001, 1.5, 1.,
3337 0.001, 0.005, 0.00004, 0.0007,
3338 0.001, 0.01, -0.0000015, 0.0004,
3343 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
3352 Double_t
eta = std::fabs(inEta);
3396 if( 0. <= eta && eta <= 0.2 )
return 0.00942984;
3397 else if( 0.2 < eta && eta <= 0.4 )
return 0.0104489;
3398 else if( 0.4 < eta && eta <= 0.6 )
return 0.0110521;
3399 else if( 0.6 < eta && eta <= 0.8 )
return 0.0117338;
3400 else if( 0.8 < eta && eta <= 1.0 )
return 0.0138142;
3401 else if( 1.0 < eta && eta <= 1.2 )
return 0.0165826;
3402 else if( 1.2 < eta && eta <= 1.4 )
return 0.0183663;
3403 else if( 1.4 < eta && eta <= 1.6 )
return 0.0169904;
3404 else if( 1.6 < eta && eta <= 1.8 )
return 0.0173289;
3405 else if( 1.8 < eta && eta <= 2.0 )
return 0.0205821;
3406 else if( 2.0 < eta && eta <= 2.2 )
return 0.0250032;
3407 else if( 2.2 < eta && eta <= 2.4 )
return 0.0339477;
3408 else if( 2.4 < eta && eta <= 2.6 )
return border;
3421 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval) {
3422 double fabsEta = std::fabs(eta);
3423 return( parval[0] + parval[1]*pt + parval[2]*pt*pt + parval[3]*pt*pt*pt + parval[4]*pt*pt*pt*pt
3424 + parval[5]*fabsEta + parval[6]*fabsEta*fabsEta + parval[7]*
pow(fabsEta,3) + parval[8]*
pow(fabsEta,4)
3425 + parval[9]*
pow(fabsEta,5) + parval[10]*
pow(fabsEta,6) + parval[11]*
pow(fabsEta,7) + parval[12]*
pow(fabsEta,8) );
3429 return( parval[13]+parval[14]/pt + parval[15]*std::fabs(eta)+parval[16]*eta*eta );
3432 virtual double sigmaPhi(
const double & pt,
const double &
eta,
const T & parval) {
3433 return( parval[17]+parval[18]/pt + parval[19]*std::fabs(eta)+parval[20]*eta*eta );
3435 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) {
3437 double thisStep[] = { 0.0002, 0.000002, 0.0000002, 0.00000002, 0.000000002,
3438 0.02, 0.02, 0.002, 0.0002,
3439 0.00002, 0.000002, 0.0000002, 0.00000002,
3440 0.00002, 0.0002, 0.0000002, 0.00002,
3441 0.00002, 0.0002, 0.00000002, 0.000002 };
3442 TString thisParName[] = {
"Pt res. sc.",
"Pt res. Pt sc.",
"Pt res. Pt^2 sc.",
"Pt res. Pt^3 sc.",
"Pt res. Pt^4 sc",
3443 "Pt res. Eta sc.",
"Pt res. Eta^2 sc." ,
"Pt res. Eta^3 sc.",
"Pt res. Eta^4 sc.",
3444 "Pt res. Eta^5 sc.",
"Pt res. Eta^6 sc.",
"Pt res. Eta^7 sc.",
"Pt res. Eta^8 sc.",
3445 "Cth res. sc.",
"Cth res. 1/Pt sc.",
"Cth res. Eta sc.",
"Cth res. Eta^2 sc.",
3446 "Phi res. sc.",
"Phi res. 1/Pt sc.",
"Phi res. Eta sc.",
"Phi res. Eta^2 sc." };
3447 double thisMini[] = { -0.1, -0.001, -0.001, -0.001, -0.001,
3448 -2., -1., -0.1, -0.1,
3449 -0.1, -0.1, -0.1, -0.1,
3450 -0.001, 0.002, -0.0001, -0.0001,
3451 -0.0001, 0.0005, -0.0001, -0.00001,
3453 if( muonType == 1 ) {
3454 double thisMaxi[] = { 1., 1., 1., 1., 1.,
3459 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
3461 double thisMaxi[] = { 0.1, 0.001, 0.001, 0.001, 0.001,
3462 2., 1., 0.1, 0.1, 0.1,
3463 0.1, 0.1, 0.1, 0.1, 0.1,
3464 0.001, 0.005, 0.00004, 0.0007,
3465 0.001, 0.01, -0.0000015, 0.0004 };
3466 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
3478 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval) {
3479 double fabsEta = std::fabs(eta);
3481 return (parval[0]+ parval[2]*1./pt + pt/(pt+parval[3]) + parval[4]*fabsEta + parval[5]*eta*eta);
3483 return (parval[1]+ parval[2]*1./pt + pt/(pt+parval[3]) + parval[6]*std::fabs((fabsEta-1.6)) + parval[7]*(fabsEta-1.6)*(fabsEta-1.6));
3490 virtual double sigmaPhi(
const double & pt,
const double &
eta,
const T & parval) {
3493 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) {
3495 double thisStep[] = { 0.00001, 0.00001, 0.0000001, 0.00000001,
3496 0.00000001, 0.00000001, 0.00000001, 0.00000001 };
3497 TString thisParName[] = {
"offsetEtaCentral",
"offsetEtaHigh",
"coeffOverPt",
"coeffHighPt",
"linaerEtaCentral",
"parabEtaCentral",
"linaerEtaHigh",
"parabEtaHigh" };
3498 double thisMini[] = { -1.1, -1.1, -0.1, -0.1 , 0.0001, 0.0005, 0.0005, 0.001};
3499 if( muonType == 1 ) {
3500 double thisMaxi[] = { 1., 1., 1., 1.,
3502 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
3504 double thisMaxi[] = { -0.8, -0.8, -0.001, -0.001 , 0.005, 0.05, 0.05, 0.05};
3505 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
3523 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval) {
3524 double fabsEta = std::fabs(eta);
3526 double ptPart = parval[2]*1./pt + pt/(pt+parval[3]) + pt*parval[9] + pt*pt*parval[10];
3528 if(fabsEta<parval[0]) {
3530 double par = parval[1] + parval[6]*std::fabs((parval[0]-parval[8])) + parval[7]*(parval[0]-parval[8])*(parval[0]-parval[8]) - (parval[4]*parval[0] + parval[5]*parval[0]*parval[0]);
3531 return( par + ptPart + parval[4]*fabsEta + parval[5]*eta*eta );
3534 return( parval[1]+ ptPart + parval[6]*std::fabs((fabsEta-parval[8])) + parval[7]*(fabsEta-parval[8])*(fabsEta-parval[8]) );
3540 return( parval[11]+parval[12]/pt + parval[13]*std::fabs(eta)+parval[14]*eta*eta );
3554 virtual double sigmaPhi(
const double & pt,
const double &
eta,
const T & parval) {
3558 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) {
3560 double thisStep[] = { 0.001, 0.00001, 0.0000001, 0.00000001,
3561 0.00000001, 0.00000001, 0.00000001, 0.00000001,
3562 0.001, 0.0001, 0.000001,
3563 0.00002, 0.0002, 0.0000002, 0.00002 };
3565 TString thisParName[] = {
"etaTransition",
"offsetEtaHigh",
"coeffOverPt",
"coeffHighPt",
3566 "linaerEtaCentral",
"parabEtaCentral",
"linaerEtaHigh",
"parabEtaHigh",
3567 "secondParabolaCenter",
"linearPt",
"quadraticPt",
3568 "Cth res. sc.",
"Cth res. 1/Pt sc.",
"Cth res. Eta sc.",
"Cth res. Eta^2 sc." };
3570 double thisMini[] = { 0.8, -1.1, 0., -1.1,
3571 0., 0.0005, 0.0005, 0.001,
3574 -0.1, 0., -0.1, -0.1 };
3576 if( muonType == 1 ) {
3577 double thisMaxi[] = { 1., 1., 1., 1.,
3583 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
3585 double thisMaxi[] = { 1.8, 0.8, 0.1, 0.1,
3586 0.005, 0.05, 0.05, 0.05,
3589 0.1, 0.05, 0.1, 0.1 };
3591 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
3595 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
3596 const T & parResol,
const std::vector<int> & parResolOrder,
3597 const std::vector<double> & parStep,
3598 const std::vector<double> & parMin,
3599 const std::vector<double> & parMax,
3602 if( (
int(parStep.size()) != this->
parNum_) || (int(parMin.size()) != this->
parNum_) || (int(parMax.size()) != this->
parNum_) ) {
3603 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
3606 std::vector<ParameterSet> parSet(this->
parNum_);
3609 parSet[0] =
ParameterSet(
"etaTransition", parStep[0], parMin[0], parMax[0] );
3610 parSet[1] =
ParameterSet(
"offsetEtaHigh", parStep[1], parMin[1], parMax[1] );
3611 parSet[2] =
ParameterSet(
"coeffOverPt", parStep[2], parMin[2], parMax[2] );
3612 parSet[3] =
ParameterSet(
"coeffHighPt", parStep[3], parMin[3], parMax[3] );
3613 parSet[4] =
ParameterSet(
"linearEtaCentral", parStep[4], parMin[4], parMax[4] );
3614 parSet[5] =
ParameterSet(
"parabEtaCentral", parStep[5], parMin[5], parMax[5] );
3615 parSet[6] =
ParameterSet(
"linearEtaHigh", parStep[6], parMin[6], parMax[6] );
3616 parSet[7] =
ParameterSet(
"parabEtaHigh", parStep[7], parMin[7], parMax[7] );
3617 parSet[8] =
ParameterSet(
"secondParabolaCenter", parStep[8], parMin[8], parMax[8] );
3618 parSet[9] =
ParameterSet(
"linearPt", parStep[9], parMin[9], parMax[9] );
3619 parSet[10] =
ParameterSet(
"quadraticPt", parStep[10], parMin[10], parMax[10] );
3620 parSet[11] =
ParameterSet(
"Cth res. sc.", parStep[11], parMin[11], parMax[11] );
3621 parSet[12] =
ParameterSet(
"Cth res. 1/Pt sc.", parStep[12], parMin[12], parMax[12] );
3622 parSet[13] =
ParameterSet(
"Cth res. Eta sc.", parStep[13], parMin[13], parMax[13] );
3623 parSet[14] =
ParameterSet(
"Cth res. Eta^2 sc.", parStep[14], parMin[14], parMax[14] );
3625 std::cout <<
"setting parameters" << std::endl;
3628 <<
", parMin["<<
i<<
"] = " << parMin[
i]
3629 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
3631 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
3646 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval) {
3647 double fabsEta = std::fabs(eta);
3649 double ptPart = parval[2]*1./pt + pt/(pt+parval[3]) + pt*parval[13] + pt*pt*parval[14];
3651 if(fabsEta<parval[9]) {
3653 double par2 = parval[1] + parval[6]*std::fabs(parval[9] - parval[8]) + parval[7]*
pow(parval[9] - parval[8], 2) - parval[10]*std::fabs(parval[9] - parval[12]) - parval[11]*
pow(parval[9] - parval[12], 2);
3654 if( fabsEta<parval[0]) {
3655 double par1 = par2 + parval[10]*std::fabs(parval[0] - parval[12]) + parval[11]*
pow(parval[0] - parval[12], 2) - parval[4]*parval[0] - parval[5]*parval[0]*parval[0];
3656 return( par1 + ptPart + parval[4]*fabsEta + parval[5]*eta*eta );
3660 return( par2+ ptPart + parval[10]*std::fabs((fabsEta-parval[12])) + parval[11]*(fabsEta-parval[12])*(fabsEta-parval[12]) );
3662 return( parval[1]+ ptPart + parval[6]*std::fabs((fabsEta-parval[8])) + parval[7]*(fabsEta-parval[8])*(fabsEta-parval[8]) );
3669 virtual double sigmaPhi(
const double & pt,
const double &
eta,
const T & parval) {
3672 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) {
3674 double thisStep[] = { 0.001, 0.00001, 0.0000001, 0.00000001,
3675 0.00000001, 0.00000001, 0.00000001, 0.00000001,
3676 0.00000001, 0.00000001, 0.00000001, 0.00000001,
3677 0.001, 0.0001, 0.000001 };
3679 TString thisParName[] = {
"etaTransition1",
"offsetEtaHigh",
"coeffOverPt",
"coeffHighPt",
3680 "linearEtaCentral",
"parabEtaCentral",
"linearEtaHighEta",
"parabEtaHighEta",
3681 "centerEtaHighEta",
"etaTransition2",
"linearEtaSecondEta",
"parabEtaSecondEta",
3682 "centerEtaSecondEta",
"linearPt",
"quadraticPt" };
3684 double thisMini[] = { 0.8, -1.1, -1.1, -1.1,
3685 -1., 0.0005, 0.0005, 0.001,
3686 0.8, 1.1, 0.0005, 0.001,
3689 if( muonType == 1 ) {
3690 double thisMaxi[] = { 1., 1., 1., 1.,
3696 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
3698 double thisMaxi[] = { 1.0, -0.8, 0.1, 0.1,
3699 0.005, 0.05, 0.05, 0.05,
3700 2.4, 1.4, 0.05, 0.05,
3703 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
3713 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval) {
3714 double fabsEta = std::fabs(eta);
3717 return (parval[0] + parval[6]*pt + parval[2]*fabsEta + parval[3]*eta*eta);
3721 return (parval[1]+ parval[4]*std::fabs((fabsEta-1.6)) + parval[5]*(fabsEta-1.6)*(fabsEta-1.6));
3734 virtual double sigmaPhi(
const double & pt,
const double &
eta,
const T & parval) {
3737 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) {
3739 double thisStep[] = { 0.00001, 0.00001, 0.0000001, 0.00000001, 0.00000001, 0.00000001, 0.00000001 , 0.00002};
3740 TString thisParName[] = {
"offsetEtaCentral",
"offsetEtaHigh",
"linaerEtaCentral",
"parabEtaCentral",
"linaerEtaHigh",
"parabEtaHigh",
"linearPt"};
3742 double thisMini[] = { 0.0, 0.0, -0.01, 0., -0.05, 0. , 0.};
3743 if( muonType == 1 ) {
3744 double thisMaxi[] = { 1., 1., 1., 1., 1.,
3746 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
3748 double thisMaxi[] = { 0.01, 0.02, 0.01, 0.05, 0.05, 0.1, 0.01};
3749 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
3762 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval) {
3763 double fabsEta = std::fabs(eta);
3764 double ptPart = pt*parval[0];
3768 else if(fabsEta>0.6 && fabsEta<=1.3) {
3769 double par = - parval[1]*0.6*0.6;
3770 return( par + ptPart + parval[1]*eta*eta );
3773 double par = parval[1]*1.3*1.3 - (parval[2]*(1.3-parval[3])*(1.3-parval[3]));
3774 return( par + ptPart + parval[2]*(fabsEta-parval[3])*(fabsEta-parval[3]) );
3777 double par = parval[1]*1.3*1.3 - (parval[4]*(1.3-parval[5]) + parval[6]*(1.3-parval[5])*(1.3-parval[5]));
3778 return( par + ptPart + parval[4]*std::fabs((fabsEta-parval[5])) + parval[6]*(fabsEta-parval[5])*(fabsEta-parval[5]) );
3790 virtual double sigmaPhi(
const double & pt,
const double &
eta,
const T & parval) {
3794 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) {
3795 double thisStep[] = { 0.000001, 0.0000001,
3797 0.00000001, 0.001, 0.0001};
3798 TString thisParName[] = {
"linearPt",
"parabEtaCentral",
3799 "parabolicEtaRight",
"rightParabCenter",
3800 "linearEtaLeft",
"leftParabCenter",
"parabolicEtaLeft" };
3801 double thisMini[] = { 0.00001, 0.0001,
3803 -0.00006, 0.1, 0.002
3806 if( muonType == 1 ) {
3807 double thisMaxi[] = { 1., 1.,
3811 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
3813 double thisMaxi[] = { 0.0005, 0.05,
3818 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
3829 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval) {
3830 double fabsEta = std::fabs(eta);
3831 double ptPartBar = parval[0] + pt*parval[2];
3832 double ptPartOvlap = parval[16] + pt*parval[17];
3833 double ptPartEndc = parval[14] + pt*parval[15];
3835 return( ptPartBar + parval[3] + parval[4]*fabsEta);
3837 else if( (eta > 0.9 && eta <= 1.4) || (eta < -0.9 && eta > -1.4)){
3838 return( ptPartOvlap + parval[3] + parval[4]*eta + parval[5]*eta*eta);
3841 double par = parval[3] + parval[4]*1.4 + parval[5]*1.4*1.4 - (parval[6] + parval[7]*(1.4-parval[8]) + parval[9]*(1.4-parval[8])*(1.4-parval[8]));
3842 return( par + ptPartEndc + parval[6] + parval[7]*std::fabs((fabsEta-parval[8])) + parval[9]*(fabsEta-parval[8])*(fabsEta-parval[8]) );
3845 double par = parval[3] + parval[4]*1.4 + parval[5]*1.4*1.4 - (parval[10] + parval[11]*(1.4-parval[12]) + parval[13]*(1.4-parval[12])*(1.4-parval[12]));
3846 return( par + ptPartEndc + parval[10] + parval[11]*std::fabs((fabsEta-parval[12])) + parval[13]*(fabsEta-parval[12])*(fabsEta-parval[12]) );
3854 virtual double sigmaPhi(
const double & pt,
const double &
eta,
const T & parval) {
3857 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) {
3858 double thisStep[] = { 0.0001, 0.00001, 0.00001,
3859 0.001, 0.0001, 0.0000001,
3860 0.01, 0.001, 0.01, 0.001,
3861 0.01, 0.001, 0.01, 0.001,
3862 0.01, 0.00001, 0.01, 0.00001};
3863 TString thisParName[] = {
"offsetPt",
"hyperbolicPt",
"linearPt",
3864 "offsetEtaCentral",
"linaerEtaCentral",
"parabEtaCentral",
3865 "offsetEtaEndcapRight",
"linearEtaRight",
"rightParabCenter",
"parabolicEtaRight",
3866 "offsetEtaEndcapLeft",
"linearEtaLeft",
"leftParabCenter",
"parabolicEtaLeft",
3867 "offsetPtEndc",
"linearPtEndc",
"offsetPtOvlap",
"linearPtOvlap"
3869 double thisMini[] = { -0.15, -0.001, 0.00005,
3871 -0.6, -0.0009, 0., 0.0005,
3872 -0.6, -0.1, 1., 0.01,
3873 -1.5, 0.00005, -1.5, 0.00005
3876 if( muonType == 1 ) {
3877 double thisMaxi[] = { 1., 1., 1.,
3883 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
3885 double thisMaxi[] = { 0.15, 0.8, 0.005,
3887 0.9, 0.5, 1.99, 0.15,
3888 0.9, 0.5, 1.99, 0.15,
3889 1.1, 0.005, 1.1, 0.005
3892 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
3902 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval) {
3903 double fabsEta = std::fabs(eta);
3904 double ptPart = parval[0] + parval[1]*1./pt + pt*parval[2];
3907 return( ptPart + parval[3]);
3908 else if((eta>0.6 && eta<=1.3) || (eta>=-1.3 && eta<-0.6)) {
3909 double par = parval[3] - 0.6*parval[4] - 0.6*0.6*parval[5];
3910 return( ptPart + par + parval[4]*fabsEta + parval[5]*eta*eta );
3913 double par = parval[3] - 0.6*parval[4] - 0.6*0.6*parval[5] + parval[4]*1.3 + parval[5]*1.3*1.3 - (parval[6] + parval[7]*std::fabs(1.3-parval[8]) + parval[9]*(1.3-parval[8])*(1.3-parval[8]));
3914 return( par + ptPart + parval[6] + parval[7]*std::fabs((fabsEta-parval[8])) + parval[9]*(fabsEta-parval[8])*(fabsEta-parval[8]) );
3917 double par = parval[3] - 0.6*parval[4] - 0.6*0.6*parval[5] + parval[4]*1.3 + parval[5]*1.3*1.3 - (parval[10] + parval[11]*std::fabs(1.3-parval[12]) + parval[13]*(1.3-parval[12])*(1.3-parval[12]));
3918 return( par + ptPart + parval[10] + parval[11]*std::fabs((fabsEta-parval[12])) + parval[13]*(fabsEta-parval[12])*(fabsEta-parval[12]) );
3926 virtual double sigmaPhi(
const double & pt,
const double &
eta,
const T & parval) {
3929 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) {
3930 double thisStep[] = { 0.01, 0.0001, 0.00001,
3931 0.001, 0.0001, 0.000001,
3932 0.01, 0.001, 0.01, 0.001,
3933 0.01, 0.001, 0.01, 0.001};
3934 TString thisParName[] = {
"offsetPt",
"hyperbolicPt",
"linearPt",
3935 "offsetEtaCentral",
"linaerEtaCentral",
"parabEtaCentral",
3936 "offsetEtaEndcapRight",
"linearEtaRight",
"rightParabCenter",
"parabolicEtaRight",
3937 "offsetEtaEndcapLeft",
"linearEtaLeft",
"leftParabCenter",
"parabolicEtaLeft" };
3938 double thisMini[] = { -1.5, -0.001, 0.00005,
3940 -0.6, -0.0009, 0., 0.0005,
3941 -0.6, -0.1, 1., 0.01
3944 if( muonType == 1 ) {
3945 double thisMaxi[] = { 1., 1., 1.,
3950 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
3952 double thisMaxi[] = { 1.1, 0.8, 0.005,
3954 0.9, 0.5, 1.99, 0.15,
3955 0.9, 0.5, 1.99, 0.15
3958 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
3971 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval) {
3972 double value = parval[0]+parval[1]*pt + parval[2]*
etaByPoints(eta, parval[3]);
3973 if( value != value ) {
3974 std::cout <<
"parval[0] = " << parval[0] <<
", parval[1]*"<<pt<<
" = " << parval[1]*pt <<
"parval[2] = " << parval[1] <<
",etaByPoints("<<eta<<
", "<<parval[3]<<
") = " <<
etaByPoints(eta, parval[3]) << std::endl;
3976 return( parval[0] + parval[1]*pt + parval[2]*
etaByPoints(eta, parval[3]) );
3980 return( 0.00043 + 0.0041/pt + (2.8
e-06)*std::fabs(eta) + (7.7
e-05)*eta*eta );
3983 virtual double sigmaPhi(
const double & pt,
const double &
eta,
const T & parval) {
3984 return( 0.00011 + 0.0018/pt - (9.4
e-07)*std::fabs(eta) + (2.2
e-05)*eta*eta );
3986 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)
3988 double thisStep[] = { 0.0000002, 0.0000001, 0.00001, 0.001 };
3989 TString thisParName[] = {
"Pt res. sc.",
"Pt res. Pt sc.",
"Pt res. Eta sc.",
"Pt res. eta border"};
3990 double thisMini[] = { -0.03, -0.0000001, 0.001, 0.01};
3991 if( muonType == 1 ) {
3992 double thisMaxi[] = { 1., 1., 1., 1.};
3993 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
3995 double thisMaxi[] = { 0.03, 0.1, 2., 0.6};
3996 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
4005 Double_t
eta = std::fabs(inEta);
4006 if( 0. <= eta && eta <= 0.2 )
return 0.00942984;
4007 else if( 0.2 < eta && eta <= 0.4 )
return 0.0104489;
4008 else if( 0.4 < eta && eta <= 0.6 )
return 0.0110521;
4009 else if( 0.6 < eta && eta <= 0.8 )
return 0.0117338;
4010 else if( 0.8 < eta && eta <= 1.0 )
return 0.0138142;
4011 else if( 1.0 < eta && eta <= 1.2 )
return 0.0165826;
4012 else if( 1.2 < eta && eta <= 1.4 )
return 0.0183663;
4013 else if( 1.4 < eta && eta <= 1.6 )
return 0.0169904;
4014 else if( 1.6 < eta && eta <= 1.8 )
return 0.0173289;
4015 else if( 1.8 < eta && eta <= 2.0 )
return 0.0205821;
4016 else if( 2.0 < eta && eta <= 2.2 )
return 0.0250032;
4017 else if( 2.2 < eta && eta <= 2.4 )
return 0.0339477;
4018 else if( 2.4 < eta && eta <= 2.6 )
return border;
4028 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval) {
4029 double fabsEta = std::fabs(eta);
4031 if(fabsEta<parval[0]) {
4033 double par = parval[1] + parval[4]*std::fabs((parval[0]-parval[6])) + parval[5]*(parval[0]-parval[6])*(parval[0]-parval[6]) - (parval[2]*parval[0] + parval[3]*parval[0]*parval[0]);
4034 return( par + parval[2]*fabsEta + parval[3]*eta*eta );
4037 return( parval[1]+ parval[4]*std::fabs((fabsEta-parval[6])) + parval[5]*(fabsEta-parval[6])*(fabsEta-parval[6]) );
4043 return( parval[7]+parval[8]/pt );
4057 virtual double sigmaPhi(
const double & pt,
const double &
eta,
const T & parval) {
4061 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) {
4063 double thisStep[] = { 0.001, 0.00001,
4064 0.00000001, 0.00000001, 0.00000001, 0.00000001,
4068 TString thisParName[] = {
"etaTransition",
"offsetEtaHigh",
4069 "linaerEtaCentral",
"parabEtaCentral",
"linaerEtaHigh",
"parabEtaHigh",
4070 "secondParabolaCenter",
4071 "Cth res. sc.",
"Cth res. 1/Pt sc." };
4073 double thisMini[] = { 0.8, -0.1,
4077 if( muonType == 1 ) {
4078 double thisMaxi[] = { 1., 1., 1., 1.,
4081 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
4083 double thisMaxi[] = { 2., 0.1,
4088 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
4103 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval)
4105 double fabsEta = std::fabs(eta);
4107 double ptPart = parval[13]*pt;
4108 if( fabsEta > 2.0 ) {
4109 ptPart = parval[22]*pt + parval[23]*pt*pt;
4111 else if( fabsEta > 1.4 ) {
4112 ptPart = parval[20]*pt + parval[21]*pt*pt;
4114 if(fabsEta<parval[0]) {
4115 return( ptPart + parval[1] + parval[2]*fabsEta + parval[3]*eta*eta );
4118 else if( fabsEta < parval[14] ) {
4119 double x_1 = parval[0];
4120 double y_1 = parval[1] + parval[2]*parval[0] + parval[3]*parval[0]*parval[0];
4121 double x_2 = parval[14];
4122 double y_2 = parval[4] + parval[5]*std::fabs((parval[14]-parval[7])) + parval[6]*(parval[14]-parval[7])*(parval[14]-parval[7]);
4123 return( (fabsEta - x_1)*(y_2 - y_1)/(x_2 - x_1) + y_1 );
4125 else if( fabsEta < parval[15] ) {
4126 return( ptPart + parval[4] + parval[5]*std::fabs(fabsEta-parval[7]) + parval[6]*(fabsEta-parval[7])*(fabsEta-parval[7]) );
4129 return( ptPart + parval[16] + parval[17]*std::fabs(fabsEta-parval[19]) + parval[18]*(fabsEta-parval[19])*(fabsEta-parval[19]) );
4133 virtual double sigmaPtError(
const double & pt,
const double &
eta,
const T & parval,
const T & parError)
4135 double fabsEta = std::fabs(eta);
4137 double ptPart = parError[13]*pt;
4138 if( fabsEta > 2.0 ) {
4139 ptPart = parError[22]*pt + parError[23]*pt*pt;
4141 else if( fabsEta > 1.4 ) {
4142 ptPart = parError[20]*pt + parError[21]*pt*pt;
4144 if(fabsEta<parval[0]) {
4145 return( ptPart + parError[1] + parError[2]*fabsEta + parError[3]*eta*eta );
4148 else if( fabsEta < parval[14] ) {
4149 double x_1 = parval[0];
4150 double y_1 = parval[1] + parval[2]*parval[0] + parval[3]*parval[0]*parval[0];
4151 double x_2 = parval[14];
4152 double y_2 = parval[4] + parval[5]*std::fabs((parval[14]-parval[7])) + parval[6]*(parval[14]-parval[7])*(parval[14]-parval[7]);
4153 double lineValue = (fabsEta - x_1)*(y_2 - y_1)/(x_2 - x_1) + y_1;
4156 y_1 = parval[1] + parError[1] + (parval[2] + parError[2])*parval[0] + (parval[3] + parError[3])*parval[0]*parval[0];
4158 y_2 = parval[4] + parError[4] + (parval[5] + parError[5])*std::fabs((parval[14]-parval[7])) + (parval[6] + parError[6])*(parval[14]-parval[7])*(parval[14]-parval[7]);
4159 double lineValuePlusError = (fabsEta - x_1)*(y_2 - y_1)/(x_2 - x_1) + y_1;
4161 return(lineValuePlusError - lineValue );
4163 else if( fabsEta < parval[15] ) {
4164 return( ptPart + parError[4] + parError[5]*std::fabs(fabsEta-parval[7]) + parError[6]*(fabsEta-parval[7])*(fabsEta-parval[7]) );
4167 return( ptPart + parError[16] + parError[17]*std::fabs(fabsEta-parval[19]) + parError[18]*(fabsEta-parval[19])*(fabsEta-parval[19]) );
4174 double fabsEta = std::fabs(eta);
4175 double value = parval[8] + parval[9]*fabsEta + parval[10]*eta*eta + parval[11]*fabsEta*fabsEta*fabsEta;
4183 virtual double sigmaPhi(
const double & pt,
const double &
eta,
const T & parval) {
4186 return( parval[12] );
4190 virtual double covPt1Pt2(
const double & pt1,
const double & eta1,
const double & pt2,
const double & eta2,
const T & parval)
4192 return parval[24] + std::fabs(pt1 - pt2)*parval[25] + std::fabs(eta1 - eta2)*parval[26];
4195 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)
4197 std::vector<ParameterSet> parSet(this->
parNum_);
4199 parSet[0] =
ParameterSet(
"etaTransition", 0.0001, 0., 2. );
4200 parSet[1] =
ParameterSet(
"constantCentral", 0.00001, 0., 1. );
4201 parSet[2] =
ParameterSet(
"linearEtaCentral", 0.00001, 0., 1. );
4202 parSet[3] =
ParameterSet(
"quadraticEtaCentral", 0.000001, 0., 1. );
4203 parSet[4] =
ParameterSet(
"constantForward", 0.00001, 0., 1. );
4204 parSet[5] =
ParameterSet(
"linearEtaForward", 0.00001, 0., 1. );
4205 parSet[6] =
ParameterSet(
"quadraticEtaForward", 0.000001, 0., 1. );
4206 parSet[7] =
ParameterSet(
"vertexForward", 0.0001, 0., 3. );
4207 parSet[8] =
ParameterSet(
"cotgThetaConstant", 0.00001, -1., 1. );
4208 parSet[9] =
ParameterSet(
"cotgThetaFactor", 0.00001, -1., 1. );
4209 parSet[10] =
ParameterSet(
"cotgThetaDenominatorTerm", 0.000001, -1., 1. );
4210 parSet[11] =
ParameterSet(
"cotgThetaLinearPt", 0.000001, -1., 1. );
4211 parSet[12] =
ParameterSet(
"sigmaPhi", 0.0001, 0., 1. );
4212 parSet[13] =
ParameterSet(
"barrelLinearPt", 0.00001, 0., 1. );
4214 parSet[15] =
ParameterSet(
"veryForwardSplit", 0.0001, 0., 3. );
4215 parSet[16] =
ParameterSet(
"constantVeryForward", 0.00001, 0., 1. );
4216 parSet[17] =
ParameterSet(
"linearEtaVeryForward", 0.00001, 0., 1. );
4217 parSet[18] =
ParameterSet(
"quadraticEtaVeryForward", 0.000001, 0., 1. );
4218 parSet[19] =
ParameterSet(
"vertexVeryForward", 0.0001, 0., 3. );
4219 parSet[20] =
ParameterSet(
"endcapsLinearPt", 0.00001, -1., 1. );
4220 parSet[21] =
ParameterSet(
"endcapsQuadraticPt", 0.000001, -1., 1. );
4221 parSet[22] =
ParameterSet(
"veryForwardLinearPt", 0.00001, -1., 1. );
4222 parSet[23] =
ParameterSet(
"veryForwardQuadraticPt", 0.000001, -1., 1. );
4223 parSet[24] =
ParameterSet(
"covPt1Pt2Constant", 0.000001, -1., 1. );
4224 parSet[25] =
ParameterSet(
"covPt1Pt2DeltaPt", 0.000001, -1., 1. );
4225 parSet[26] =
ParameterSet(
"covPt1Pt2DeltaEta", 0.000001, -1., 1. );
4227 std::cout <<
"setting parameters" << std::endl;
4228 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
4231 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
4232 const T & parResol,
const std::vector<int> & parResolOrder,
4233 const std::vector<double> & parStep,
4234 const std::vector<double> & parMin,
4235 const std::vector<double> & parMax,
4238 if( (
int(parStep.size()) != this->
parNum_) || (int(parMin.size()) != this->
parNum_) || (int(parMax.size()) != this->
parNum_) ) {
4239 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
4242 std::vector<ParameterSet> parSet(this->
parNum_);
4245 parSet[0] =
ParameterSet(
"etaTransition", parStep[0], parMin[0], parMax[0] );
4246 parSet[1] =
ParameterSet(
"constantCentral", parStep[1], parMin[1], parMax[1] );
4247 parSet[2] =
ParameterSet(
"linearEtaCentral", parStep[2], parMin[2], parMax[2] );
4248 parSet[3] =
ParameterSet(
"quadraticEtaCentral", parStep[3], parMin[3], parMax[3] );
4249 parSet[4] =
ParameterSet(
"constantForward", parStep[4], parMin[4], parMax[4] );
4250 parSet[5] =
ParameterSet(
"linearEtaForward", parStep[5], parMin[5], parMax[5] );
4251 parSet[6] =
ParameterSet(
"quadraticEtaForward", parStep[6], parMin[6], parMax[6] );
4252 parSet[7] =
ParameterSet(
"vertexForward", parStep[7], parMin[7], parMax[7] );
4253 parSet[8] =
ParameterSet(
"cotgThetaConstant", parStep[8], parMin[8], parMax[8] );
4254 parSet[9] =
ParameterSet(
"cotgThetaFactor", parStep[9], parMin[9], parMax[9] );
4255 parSet[10] =
ParameterSet(
"cotgThetaDenominatorTerm", parStep[10], parMin[10], parMax[10] );
4256 parSet[11] =
ParameterSet(
"cotgThetaLinearPt", parStep[11], parMin[11], parMax[11] );
4257 parSet[12] =
ParameterSet(
"sigmaPhi", parStep[12], parMin[12], parMax[12] );
4258 parSet[13] =
ParameterSet(
"barrelLinearPt", parStep[13], parMin[13], parMax[13] );
4259 parSet[14] =
ParameterSet(
"split", parStep[14], parMin[14], parMax[14] );
4260 parSet[15] =
ParameterSet(
"veryForwardSplit", parStep[15], parMin[15], parMax[15] );
4261 parSet[16] =
ParameterSet(
"constantVeryForward", parStep[16], parMin[16], parMax[16] );
4262 parSet[17] =
ParameterSet(
"linearEtaVeryForward", parStep[17], parMin[17], parMax[17] );
4263 parSet[18] =
ParameterSet(
"quadraticEtaVeryForward", parStep[18], parMin[18], parMax[18] );
4264 parSet[19] =
ParameterSet(
"vertexVeryForward", parStep[19], parMin[19], parMax[19] );
4265 parSet[20] =
ParameterSet(
"endcapsLinearPt", parStep[20], parMin[20], parMax[20] );
4266 parSet[21] =
ParameterSet(
"endcapsQuadraticPt", parStep[21], parMin[21], parMax[21] );
4267 parSet[22] =
ParameterSet(
"veryForwardLinearPt", parStep[22], parMin[22], parMax[22] );
4268 parSet[23] =
ParameterSet(
"veryForwardQuadraticPt", parStep[23], parMin[23], parMax[23] );
4269 parSet[24] =
ParameterSet(
"covPt1Pt2Constant", parStep[24], parMin[24], parMax[24] );
4270 parSet[25] =
ParameterSet(
"covPt1Pt2DeltaPt", parStep[25], parMin[25], parMax[25] );
4271 parSet[26] =
ParameterSet(
"covPt1Pt2DeltaEta", parStep[26], parMin[26], parMax[26] );
4273 std::cout <<
"setting parameters" << std::endl;
4276 <<
", parMin["<<
i<<
"] = " << parMin[
i]
4277 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
4279 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
4287 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval)
4289 double fabsEta = std::fabs(eta);
4291 if(fabsEta < 0.2 )
return parval[0];
4292 if(fabsEta < 0.4 )
return parval[1];
4293 if(fabsEta < 0.6 )
return parval[2];
4294 if(fabsEta < 0.8 )
return parval[3];
4295 if(fabsEta < 1.0 )
return parval[4];
4296 if(fabsEta < 1.2 )
return parval[5];
4297 if(fabsEta < 1.4 )
return parval[6];
4298 if(fabsEta < 1.6 )
return parval[7];
4299 if(fabsEta < 1.8 )
return parval[8];
4300 if(fabsEta < 2.0 )
return parval[9];
4301 if(fabsEta < 2.2 )
return parval[10];
4305 virtual double sigmaPtError(
const double & pt,
const double &
eta,
const T & parval,
const T & parError)
4316 double value = parval[12] ;
4324 virtual double sigmaPhi(
const double & pt,
const double &
eta,
const T & parval)
4327 return( parval[13] );
4330 virtual double covPt1Pt2(
const double & pt1,
const double & eta1,
const double & pt2,
const double & eta2,
const T & parval)
4335 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)
4337 std::vector<ParameterSet> parSet(this->
parNum_);
4339 parSet[0] =
ParameterSet(
"sigmaPt |eta|<0.2", 0.00001, 0., 1. );
4340 parSet[1] =
ParameterSet(
"sigmaPt |eta|<0.4", 0.00001, 0., 1. );
4341 parSet[2] =
ParameterSet(
"sigmaPt |eta|<0.6", 0.00001, 0., 1. );
4342 parSet[3] =
ParameterSet(
"sigmaPt |eta|<0.8", 0.00001, 0., 1. );
4343 parSet[4] =
ParameterSet(
"sigmaPt |eta|<1.0", 0.00001, 0., 1. );
4344 parSet[5] =
ParameterSet(
"sigmaPt |eta|<1.2", 0.00001, 0., 1. );
4345 parSet[6] =
ParameterSet(
"sigmaPt |eta|<1.4", 0.00001, 0., 1. );
4346 parSet[7] =
ParameterSet(
"sigmaPt |eta|<1.6", 0.00001, 0., 1. );
4347 parSet[8] =
ParameterSet(
"sigmaPt |eta|<1.8", 0.00001, 0., 1. );
4348 parSet[9] =
ParameterSet(
"sigmaPt |eta|<2.0", 0.00001, 0., 1. );
4349 parSet[10] =
ParameterSet(
"sigmaPt |eta|<2.2", 0.00001, 0., 1. );
4350 parSet[11] =
ParameterSet(
"sigmaPt |eta|>2.2", 0.00001, 0., 1. );
4351 parSet[12] =
ParameterSet(
"sigmacotheta", 0.0001, 0., 1. );
4352 parSet[13] =
ParameterSet(
"sigmaPhi", 0.0001, 0. ,1.);
4353 std::cout <<
"setting parameters" << std::endl;
4354 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
4357 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
4358 const T & parResol,
const std::vector<int> & parResolOrder,
4359 const std::vector<double> & parStep,
4360 const std::vector<double> & parMin,
4361 const std::vector<double> & parMax,
4364 if( (
int(parStep.size()) != this->
parNum_) || (int(parMin.size()) != this->
parNum_) || (int(parMax.size()) != this->
parNum_) ) {
4365 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
4368 std::vector<ParameterSet> parSet(this->
parNum_);
4371 parSet[0] =
ParameterSet(
"sigmaPt |eta|<0.2", parStep[0], parMin[0], parMax[0] );
4372 parSet[1] =
ParameterSet(
"sigmaPt |eta|<0.4", parStep[1], parMin[1], parMax[1] );
4373 parSet[2] =
ParameterSet(
"sigmaPt |eta|<0.6", parStep[2], parMin[2], parMax[2] );
4374 parSet[3] =
ParameterSet(
"sigmaPt |eta|<0.8", parStep[3], parMin[3], parMax[3] );
4375 parSet[4] =
ParameterSet(
"sigmaPt |eta|<1.0", parStep[4], parMin[4], parMax[4] );
4376 parSet[5] =
ParameterSet(
"sigmaPt |eta|<1.2", parStep[5], parMin[5], parMax[5] );
4377 parSet[6] =
ParameterSet(
"sigmaPt |eta|<1.4", parStep[6], parMin[6], parMax[6] );
4378 parSet[7] =
ParameterSet(
"sigmaPt |eta|<1.6", parStep[7], parMin[7], parMax[7] );
4379 parSet[8] =
ParameterSet(
"sigmaPt |eta|<1.8", parStep[8], parMin[8], parMax[8] );
4380 parSet[9] =
ParameterSet(
"sigmaPt |eta|<2.0", parStep[9], parMin[9], parMax[9] );
4381 parSet[10] =
ParameterSet(
"sigmaPt |eta|<2.2", parStep[10], parMin[10], parMax[10] );
4382 parSet[11] =
ParameterSet(
"sigmaPt |eta|>2.2", parStep[11], parMin[11], parMax[11] );
4383 parSet[12] =
ParameterSet(
"sigmacotTheta", parStep[12], parMin[12], parMax[12] );
4384 parSet[13] =
ParameterSet(
"sigmaPhi", parStep[13], parMin[13], parMax[13] );
4385 std::cout <<
"setting parameters" << std::endl;
4388 <<
", parMin["<<
i<<
"] = " << parMin[
i]
4389 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
4391 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
4401 double tempBins[] = { 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8,
4402 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6,
4403 1.7, 1.8, 1.9, 2.0, 2.1, 2.2, 2.3 };
4407 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval)
4409 double fabsEta = std::fabs(eta);
4410 for(
int i=0;
i<23; ++
i ) {
4411 if( fabsEta <
bins[
i] )
return parval[
i];
4417 virtual double sigmaPtError(
const double & pt,
const double &
eta,
const T & parval,
const T & parError)
4419 double fabsEta = std::fabs(eta);
4420 for(
int i=0;
i<23; ++
i ) {
4421 if( fabsEta <
bins[
i] )
return parError[
i];
4423 return parError[23];
4429 double value = parval[24] ;
4437 virtual double sigmaPhi(
const double & pt,
const double &
eta,
const T & parval)
4439 return( parval[25] );
4442 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
4443 const T & parResol,
const std::vector<int> & parResolOrder,
4444 const std::vector<double> & parStep,
4445 const std::vector<double> & parMin,
4446 const std::vector<double> & parMax,
4449 if( (
int(parStep.size()) != this->
parNum_) || (int(parMin.size()) != this->
parNum_) || (int(parMax.size()) != this->
parNum_) ) {
4450 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
4453 std::vector<ParameterSet> parSet(this->
parNum_);
4455 for(
int i=0;
i<24; ++
i ) {
4456 parSet[
i] =
ParameterSet(
"eta bin", parStep[
i], parMin[i], parMax[i] );
4458 parSet[24] =
ParameterSet(
"sigmaCotgTheta", parStep[24], parMin[24], parMax[24] );
4459 parSet[25] =
ParameterSet(
"sigmaPhi", parStep[25], parMin[25], parMax[25] );
4461 std::cout <<
"setting parameters" << std::endl;
4464 <<
", parMin["<<
i<<
"] = " << parMin[
i]
4465 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
4467 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
4480 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval) {
4481 double fabsEta = std::fabs(eta);
4482 if(fabsEta<parval[0]) {
4484 double par = parval[1];
4485 return( par + parval[3]*eta*eta + parval[9]*pt);
4488 double coeff, centre;
4489 if(eta>0.) { coeff=parval[5]; centre=parval[6];
4491 else { coeff=parval[2];centre=parval[4];
4493 return( parval[1] + coeff*(fabsEta-centre)*(fabsEta-centre) + parval[9]*pt);
4499 return( parval[7] );
4513 virtual double sigmaPhi(
const double & pt,
const double &
eta,
const T & parval) {
4514 return( parval[8] );
4518 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) {
4520 double thisStep[] = { 0.001, 0.00001,
4521 0.00000001, 0.00000001, 0.001, 0.00000001,
4527 TString thisParName[] = {
"etaTransition",
"offsetEtaHigh",
4528 "parabEtaHighNeg",
"parabEtaCentral",
"secondParabolaCenterNeg",
"parabEtaHighPos",
4529 "secondParabolaCenterPos",
4530 "Cth res. sc.",
"Phi res. sc.",
"linearPt" };
4532 double thisMini[] = { 0.8, -0.1,
4538 if( muonType == 1 ) {
4539 double thisMaxi[] = { 1., 1., 1., 1., 1.,
4544 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
4546 double thisMaxi[] = { 2., 0.1,
4553 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
4564 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval) {
4565 double fabsEta = std::fabs(eta);
4566 if(eta>=parval[16] && eta<=parval[17]){
4567 return( parval[0]+parval[1]*pt + parval[2]*std::fabs(eta)+parval[3]*
pow(eta,2) );
4569 else if(eta<parval[16]){
4570 double par = - parval[12]*parval[16]*parval[16] + parval[0]+parval[1]*pt + parval[2]*parval[16]+parval[3]*
pow(parval[16],2);
4571 return( par + parval[12]*(fabsEta-parval[13])*(fabsEta-parval[13]) );
4575 double par = - parval[14]*parval[17]*parval[17] + parval[0]+parval[1]*pt + parval[2]*parval[17]+parval[3]*
pow(parval[17],2);
4576 return( par + parval[14]*(fabsEta-parval[15])*(fabsEta-parval[15]) );
4581 return( parval[4]+parval[5]/pt + parval[6]*std::fabs(eta)+parval[7]*
pow(eta,2) );
4584 virtual double sigmaPhi(
const double & pt,
const double &
eta,
const T & parval) {
4585 return( parval[8]+parval[9]/pt + parval[10]*std::fabs(eta)+parval[11]*
pow(eta,2) );
4590 virtual double sigmaPtError(
const double & pt,
const double &
eta,
const T & parval,
const T & parError)
4592 double fabsEta = std::fabs(eta);
4593 if(eta>=parval[16] && eta<=parval[17]){
4595 return(
sqrt(parError[0]*parError[0]+(pt*pt)*parError[1]*parError[1]+(eta*eta)*parError[2]*parError[2]+
pow(eta,4)*parError[3]*parError[3]) );
4597 else if(eta<parval[16]){
4598 return(
sqrt(
pow(parval[16]+(fabsEta-parval[13])*(fabsEta-parval[13]),2)*parError[12]*parError[12]+
4599 pow(parError[16]*(2*parval[16]*parval[12]+parval[2]+2*parval[16]*parval[3]),2)+
4601 pow(parError[1]*pt,2)+
4602 pow(parError[2]*parval[16],2)+
4603 pow(parval[16],4)*
pow(parError[3],2)+
4604 pow(2*(fabsEta-parval[13])*parError[13],2)
4611 return(
sqrt(
pow(parval[17]+(fabsEta-parval[15])*(fabsEta-parval[15]),2)*parError[14]*parError[14]+
4612 pow(parError[17]*(2*parval[17]*parval[14]+parval[2]+2*parval[17]*parval[3]),2)+
4614 pow(parError[1]*pt,2)+
4615 pow(parError[2]*parval[17],2)+
4616 pow(parval[17],4)*
pow(parError[3],2)+
4617 pow(2*(fabsEta-parval[15])*parError[15],2)
4625 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) {
4626 double thisStep[] = { 0.002, 0.00002, 0.000002, 0.0002,
4627 0.00002, 0.0002, 0.0000002, 0.000002,
4628 0.00002, 0.0002, 0.00000002, 0.000002,
4629 0.0002, 0.001, 0.0002, 0.001,
4632 TString thisParName[] = {
"Pt res. sc.",
"Pt res. Pt sc.",
"Pt res. Eta sc.",
"Pt res. Eta^2 sc.",
4633 "Cth res. sc.",
"Cth res. 1/Pt sc.",
"Cth res. Eta sc.",
"Cth res. Eta^2 sc.",
4634 "Phi res. sc.",
"Phi res. 1/Pt sc.",
"Phi res. Eta sc.",
"Phi res. Eta^2 sc.",
4635 "Pt res. Eta^2 sc./offset (right)",
"Pt res. Eta^2 sc.(left)",
"Pt res. Eta^2 sc./offset (right)",
"Pt res. Eta^2 sc.(left)",
4636 "floating point right",
"floating poin left"
4638 double thisMini[] = { 0.0, -0.01, -0.001, -0.0001,
4639 0.0, -0.001, -0.001, -0.00001,
4640 0.0, -0.001, -0.0001, -0.0001,
4641 -0.0001, 0.01, -0.0001, 0.01,
4644 if( muonType == 1 ) {
4645 double thisMaxi[] = { 1., 1., 1., 1.,
4651 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
4653 double thisMaxi[] = { 0.1, 0.01, 0.01, 0.1,
4654 0.01, 0.01, 0.1, 0.01,
4655 0.01, 0.01, 0.01, 0.01,
4656 0.1, 1.99, 0.1, 1.99,
4660 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, thisStep, thisMini, thisMaxi, thisParName );
4679 return( parval[0]+parval[1]*pt + parval[14]*pt*pt + parval[2]*std::fabs(eta) + parval[3]*eta*eta );
4683 return( parval[1]*pt + parval[14]*pt*pt + parval[5]*fabs(eta-parval[7]) +
4684 parval[6]*(eta-parval[7])*(eta-parval[7]) );
4688 return( parval[1]*pt + parval[14]*pt*pt + parval[9]*fabs(eta-parval[11]) +
4689 parval[10]*(eta-parval[11])*(eta-parval[11]) );
4693 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval) {
4695 if(eta>=parval[12] && eta<=parval[13]){
4698 else if(eta<parval[12]) {
4710 virtual double sigmaPhi(
const double & pt,
const double &
eta,
const T & parval) {
4716 virtual double sigmaPtError(
const double & pt,
const double &
eta,
const T & parval,
const T & parError)
4718 double fabsEta = std::fabs(eta);
4719 if( eta >= parval[12] && eta <= parval[13] ) {
4720 return sqrt(
pow(parError[0], 2) +
pow(pt*parError[1], 2) +
pow(pt*pt*parError[14], 2) +
pow(fabsEta*parError[2], 2) +
pow(eta*eta*parError[3], 2));
4722 else if( eta < parval[12] ) {
4726 if( eta < parval[7] ) sign2 = -1;
4728 if( parval[12] < 0 ) sign3 = -1;
4730 return(
sqrt(
pow(parError[0],2) +
4731 pow(pt*parError[1], 2) +
4732 pow(parval[12]*parError[2], 2) +
4733 pow(parval[12]*parval[12]*parError[3], 2) +
4734 pow((-fabs(parval[12]-parval[7])+fabs(eta-parval[7]))*parError[5], 2) +
4735 pow((-
pow(parval[12]-parval[7], 2) +
pow(eta-parval[7], 2))*parError[6], 2) +
4736 pow((sign1*parval[5] + 2*(parval[12]-parval[7])*parval[6] - sign2*parval[5] + - 2*(eta-parval[7])*parval[6])*parError[7], 2) +
4737 pow((sign3*parval[2] + 2*parval[12]*parval[3] - sign1*parval[5] - 2*(parval[12]-parval[7])*parval[6])*parError[12], 2) +
4738 pow(pt*pt*parError[14], 2)) );
4749 if( eta < parval[11] ) sign2 = -1;
4751 if( parval[13] < 0 ) sign3 = -1;
4753 return(
sqrt(
pow(parError[0],2) +
4754 pow(pt*parError[1], 2) +
4755 pow(parval[13]*parError[2], 2) +
4756 pow(parval[13]*parval[13]*parError[3], 2) +
4757 pow((-fabs(parval[13]-parval[11])+fabs(eta-parval[11]))*parError[9], 2) +
4758 pow((-
pow(parval[13]-parval[11], 2) +
pow(eta-parval[11], 2))*parError[10], 2) +
4759 pow((sign1*parval[9] + 2*(parval[13]-parval[11])*parval[10] - sign2*parval[9] + - 2*(eta-parval[11])*parval[10])*parError[11], 2) +
4760 pow((sign3*parval[2] + 2*parval[13]*parval[3] - sign1*parval[9] - 2*(parval[13]-parval[11])*parval[10])*parError[13], 2) +
4761 pow(pt*pt*parError[14], 2)) );
4765 TString* parname,
const T & parResol,
const std::vector<int> & parResolOrder,
4768 std::vector<ParameterSet> parSet(this->
parNum_);
4770 parSet[0] =
ParameterSet(
"Pt res. sc.", 0.002, -0.1, 0.1 );
4771 parSet[1] =
ParameterSet(
"Pt res. Pt sc. (all)", 0.00002, -0.01, 0.01 );
4772 parSet[2] =
ParameterSet(
"Pt res. Eta sc.", 0.000002, 0., 0.01 );
4773 parSet[3] =
ParameterSet(
"Pt res. Eta^2 sc.", 0.0002, -0.01, 0.02 );
4774 parSet[4] =
ParameterSet(
"Pt res. sc. (left)", 0.00002, 0., 0.01 );
4775 parSet[5] =
ParameterSet(
"Pt res. Eta sc. (left)", 0.0002, 0., 0.2 );
4776 parSet[6] =
ParameterSet(
"Pt res. Eta^2 sc. (left)", 0.0000002, -0.2, 0.5 );
4777 parSet[7] =
ParameterSet(
"Pt res. Eta^2 sc./offset (left)", 0.0002, -2.2, -0.8 );
4778 parSet[8] =
ParameterSet(
"Pt res. sc. (right)", 0.00002, 0., 0.01 );
4779 parSet[9] =
ParameterSet(
"Pt res. Eta sc. (right)", 0.0002, -0.2, 0.1 );
4780 parSet[10] =
ParameterSet(
"Pt res. Eta^2 sc. (right)", 0.000002, -0.1, 0.5 );
4781 parSet[11] =
ParameterSet(
"Pt res. Eta^2 sc./offset (right)", 0.0002, 0., 3. );
4782 parSet[12] =
ParameterSet(
"floating point left", 0.001, -2.2, -1.6 );
4783 parSet[13] =
ParameterSet(
"floating point right", 0.001, 1., 2.2 );
4784 parSet[14] =
ParameterSet(
"pt^2 sc.", 0.0001, 0., 0.01 );
4786 std::cout <<
"setting parameters" << std::endl;
4787 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
4790 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
4791 const T & parResol,
const std::vector<int> & parResolOrder,
4792 const std::vector<double> & parStep,
4793 const std::vector<double> & parMin,
4794 const std::vector<double> & parMax,
4797 if( (
int(parStep.size()) != this->
parNum_) || (int(parMin.size()) != this->
parNum_) || (int(parMax.size()) != this->
parNum_) ) {
4798 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
4801 std::vector<ParameterSet> parSet(this->
parNum_);
4803 parSet[0] =
ParameterSet(
"Pt res. sc.", parStep[0], parMin[0], parMax[0] );
4804 parSet[1] =
ParameterSet(
"Pt res. Pt sc. (all)", parStep[1], parMin[1], parMax[1] );
4805 parSet[2] =
ParameterSet(
"Pt res. Eta sc.", parStep[2], parMin[2], parMax[2] );
4806 parSet[3] =
ParameterSet(
"Pt res. Eta^2 sc.", parStep[3], parMin[3], parMax[3] );
4807 parSet[4] =
ParameterSet(
"Pt res. sc. (left)", parStep[4], parMin[4], parMax[4] );
4808 parSet[5] =
ParameterSet(
"Pt res. Eta sc. (left)", parStep[5], parMin[5], parMax[5] );
4809 parSet[6] =
ParameterSet(
"Pt res. Eta^2 sc. (left)", parStep[6], parMin[6], parMax[6] );
4810 parSet[7] =
ParameterSet(
"Pt res. Eta^2 sc./offset (left)", parStep[7], parMin[7], parMax[7] );
4811 parSet[8] =
ParameterSet(
"Pt res. sc. (right)", parStep[8], parMin[8], parMax[8] );
4812 parSet[9] =
ParameterSet(
"Pt res. Eta sc. (right)", parStep[9], parMin[9], parMax[9] );
4813 parSet[10] =
ParameterSet(
"Pt res. Eta^2 sc. (right)", parStep[10], parMin[10], parMax[10] );
4814 parSet[11] =
ParameterSet(
"Pt res. Eta^2 sc./offset (right)", parStep[11], parMin[11], parMax[11] );
4815 parSet[12] =
ParameterSet(
"floating point left", parStep[12], parMin[12], parMax[12] );
4816 parSet[13] =
ParameterSet(
"floating point right", parStep[13], parMin[13], parMax[13] );
4817 parSet[14] =
ParameterSet(
"pt^2 sc.", parStep[14], parMin[14], parMax[14] );
4819 std::cout <<
"setting parameters" << std::endl;
4822 <<
", parMin["<<
i<<
"] = " << parMin[
i]
4823 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
4825 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
4839 return( parval[0]+parval[1]*pt + parval[14]*pt*pt + parval[2]*std::fabs(eta)+parval[3]*eta*eta );
4843 return( parval[0] + fabs(parval[12])*parval[2] + parval[12]*parval[12]*parval[3] -
4844 parval[5]*fabs(parval[12]-parval[7]) -
4845 parval[6]*(parval[12]-parval[7])*(parval[12]-parval[7]) +
4846 parval[1]*pt + parval[14]*pt*pt + parval[5]*fabs(eta-parval[7]) +
4847 parval[6]*(eta-parval[7])*(eta-parval[7]) );
4851 return( parval[0] + fabs(parval[13])*parval[2] + parval[13]*parval[13]*parval[3] -
4852 parval[9]*fabs(parval[13]-parval[11]) -
4853 parval[10]*(parval[13]-parval[11])*(parval[13]-parval[11]) +
4854 parval[1]*pt + parval[14]*pt*pt + parval[9]*fabs(eta-parval[11]) +
4855 parval[10]*(eta-parval[11])*(eta-parval[11]) );
4857 inline double leftLine(
const double & pt,
const double &
eta,
const T & parval)
4859 double x_1 = parval[15];
4861 double x_2 = parval[12];
4863 return( (eta - x_1)*(y_2 - y_1)/(x_2 - x_1) + y_1 );
4865 inline double rightLine(
const double & pt,
const double &
eta,
const T & parval)
4867 double x_1 = parval[16];
4869 double x_2 = parval[13];
4871 return( (eta - x_1)*(y_2 - y_1)/(x_2 - x_1) + y_1 );
4875 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval)
4878 if(eta>=parval[15] && eta<=parval[16]){
4882 else if( (eta >= parval[12]) && (eta < parval[15]) ) {
4885 else if( eta < parval[12] ){
4889 else if( (eta > parval[16]) && (eta <= parval[13]) ) {
4902 virtual double sigmaPhi(
const double & pt,
const double &
eta,
const T & parval)
4910 double fabsEta = std::fabs(eta);
4911 return sqrt(
pow(parError[0], 2) +
pow(pt*parError[1], 2) +
pow(pt*pt*parError[14], 2) +
pow(fabsEta*parError[2], 2) +
pow(eta*eta*parError[3], 2));
4917 if( parval[12] < parval[7] ) sign1 = -1;
4919 if( eta < parval[7] ) sign2 = -1;
4921 if( parval[12] < 0 ) sign3 = -1;
4923 return(
sqrt(
pow(parError[0],2) +
4924 pow(pt*parError[1], 2) +
4925 pow(parval[12]*parError[2], 2) +
4926 pow(parval[12]*parval[12]*parError[3], 2) +
4927 pow((-fabs(parval[12]-parval[7])+fabs(eta-parval[7]))*parError[5], 2) +
4928 pow((-
pow(parval[12]-parval[7], 2) +
pow(eta-parval[7], 2))*parError[6], 2) +
4929 pow((sign1*parval[5] + 2*(parval[12]-parval[7])*parval[6] - sign2*parval[5] + - 2*(eta-parval[7])*parval[6])*parError[7], 2) +
4930 pow((sign3*parval[2] + 2*parval[12]*parval[3] - sign1*parval[5] - 2*(parval[12]-parval[7])*parval[6])*parError[12], 2) +
4931 pow(pt*pt*parError[14], 2)) );
4936 if( parval[13] < parval[11] ) sign1 = -1;
4938 if( eta < parval[11] ) sign2 = -1;
4940 if( parval[13] < 0 ) sign3 = -1;
4942 return(
sqrt(
pow(parError[0],2) +
4943 pow(pt*parError[1], 2) +
4944 pow(parval[13]*parError[2], 2) +
4945 pow(parval[13]*parval[13]*parError[3], 2) +
4946 pow((-fabs(parval[13]-parval[11])+fabs(eta-parval[11]))*parError[9], 2) +
4947 pow((-
pow(parval[13]-parval[11], 2) +
pow(eta-parval[11], 2))*parError[10], 2) +
4948 pow((sign1*parval[9] + 2*(parval[13]-parval[11])*parval[10] - sign2*parval[9] + - 2*(eta-parval[11])*parval[10])*parError[11], 2) +
4949 pow((sign3*parval[2] + 2*parval[13]*parval[3] - sign1*parval[9] - 2*(parval[13]-parval[11])*parval[10])*parError[13], 2) +
4950 pow(pt*pt*parError[14], 2)) );
4953 virtual double sigmaPtError(
const double & pt,
const double &
eta,
const T & parval,
const T & parError)
4956 if( eta >= parval[15] && eta <= parval[16] ) {
4959 else if( (eta >= parval[12]) && (eta < parval[15]) ) {
4960 double lineValue =
leftLine(pt, eta, parval);
4962 double x_1 = parval[15];
4964 double x_2 = parval[12];
4966 double lineValuePlusError = (eta - x_1)*(y_2 - y_1)/(x_2 - x_1) + y_1;
4968 return( lineValuePlusError - lineValue );
4970 else if( eta < parval[12] ) {
4973 else if( (eta > parval[16]) && (eta <= parval[13]) ) {
4974 double lineValue =
rightLine(pt, eta, parval);
4976 double x_1 = parval[16];
4978 double x_2 = parval[13];
4980 double lineValuePlusError = (eta - x_1)*(y_2 - y_1)/(x_2 - x_1) + y_1;
4982 return( lineValuePlusError - lineValue );
4987 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)
4989 std::vector<ParameterSet> parSet(this->
parNum_);
4991 parSet[0] =
ParameterSet(
"Pt res. sc.", 0.002, 0., 0.1 );
4992 parSet[1] =
ParameterSet(
"Pt res. Pt sc. (all)", 0.00002, -0.01, 0.01 );
4993 parSet[2] =
ParameterSet(
"Pt res. Eta sc. central", 0.000002, 0., 0.01 );
4994 parSet[3] =
ParameterSet(
"Pt res. Eta^2 sc. central", 0.0002, -0.0001, 0.1 );
4995 parSet[4] =
ParameterSet(
"Not used", 0.00002, 0., 0.01 );
4996 parSet[5] =
ParameterSet(
"Pt res. Eta sc. (left)", 0.0002, -0.01, 0.1 );
4997 parSet[6] =
ParameterSet(
"Pt res. Eta^2 sc. (left)", 0.0000002, 0., 1. );
4998 parSet[7] =
ParameterSet(
"Pt res. Eta^2 sc./offset (left)", 0.0002, -2., 0. );
4999 parSet[8] =
ParameterSet(
"Not used", 0.00002, 0., 0.01 );
5000 parSet[9] =
ParameterSet(
"Pt res. Eta sc. (right)", 0.0002, -0.01, 0.1 );
5001 parSet[10] =
ParameterSet(
"Pt res. Eta^2 sc. (right)", 0.0000002, -1., 1. );
5002 parSet[11] =
ParameterSet(
"Pt res. Eta^2 sc./offset (right)", 0.0002, 0., 2. );
5003 parSet[12] =
ParameterSet(
"floating point left", 0.001, -2., 1. );
5004 parSet[13] =
ParameterSet(
"floating point right", 0.001, 1., 3. );
5005 parSet[14] =
ParameterSet(
"pt^2 sc.", 0.0001, 0., 0.01 );
5006 parSet[15] =
ParameterSet(
"left line point", 0.001, -2., 0.8 );
5007 parSet[16] =
ParameterSet(
"right line point", 0.001, 0.8, 2. );
5009 std::cout <<
"setting parameters" << std::endl;
5010 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
5013 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
5014 const T & parResol,
const std::vector<int> & parResolOrder,
5015 const std::vector<double> & parStep,
5016 const std::vector<double> & parMin,
5017 const std::vector<double> & parMax,
5020 if( (
int(parStep.size()) != this->
parNum_) || (int(parMin.size()) != this->
parNum_) || (int(parMax.size()) != this->
parNum_) ) {
5021 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
5024 std::vector<ParameterSet> parSet(this->
parNum_);
5026 parSet[0] =
ParameterSet(
"Pt res. sc.", parStep[0], parMin[0], parMax[0] );
5027 parSet[1] =
ParameterSet(
"Pt res. Pt sc. (all)", parStep[1], parMin[1], parMax[1] );
5028 parSet[2] =
ParameterSet(
"Pt res. Eta sc. central", parStep[2], parMin[2], parMax[2] );
5029 parSet[3] =
ParameterSet(
"Pt res. Eta^2 sc. central", parStep[3], parMin[3], parMax[3] );
5030 parSet[4] =
ParameterSet(
"Not used", parStep[4], parMin[4], parMax[4] );
5031 parSet[5] =
ParameterSet(
"Pt res. Eta sc. (left)", parStep[5], parMin[5], parMax[5] );
5032 parSet[6] =
ParameterSet(
"Pt res. Eta^2 sc. (left)", parStep[6], parMin[6], parMax[6] );
5033 parSet[7] =
ParameterSet(
"Pt res. Eta^2 sc./offset (left)", parStep[7], parMin[7], parMax[7] );
5034 parSet[8] =
ParameterSet(
"Not used", parStep[8], parMin[8], parMax[8] );
5035 parSet[9] =
ParameterSet(
"Pt res. Eta sc. (right)", parStep[9], parMin[9], parMax[9] );
5036 parSet[10] =
ParameterSet(
"Pt res. Eta^2 sc. (right)", parStep[10], parMin[10], parMax[10] );
5037 parSet[11] =
ParameterSet(
"Pt res. Eta^2 sc./offset (right)", parStep[11], parMin[11], parMax[11] );
5038 parSet[12] =
ParameterSet(
"floating point left", parStep[12], parMin[12], parMax[12] );
5039 parSet[13] =
ParameterSet(
"floating point right", parStep[13], parMin[13], parMax[13] );
5040 parSet[14] =
ParameterSet(
"pt^2 sc.", parStep[14], parMin[14], parMax[14] );
5041 parSet[15] =
ParameterSet(
"left line point", parStep[15], parMin[15], parMax[15] );
5042 parSet[16] =
ParameterSet(
"right line point", parStep[16], parMin[16], parMax[16] );
5044 std::cout <<
"setting parameters" << std::endl;
5047 <<
", parMin["<<
i<<
"] = " << parMin[
i]
5048 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
5050 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
5066 if( eta < -2.0 )
return 1;
5067 if( eta < -1.8 )
return 2;
5068 if( eta < -1.6 )
return 3;
5069 if( eta < -1.2 )
return 4;
5070 if( eta < -0.8 )
return 5;
5071 if( eta < 0. )
return 6;
5072 if( eta < 0.8 )
return 7;
5073 if( eta < 1.2 )
return 8;
5074 if( eta < 1.6 )
return 9;
5075 if( eta < 1.8 )
return 10;
5076 if( eta < 2.0 )
return 11;
5083 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval)
5087 if( eta < -2.0 )
return( parval[0]*pt + parval[1] );
5088 if( eta < -1.8 )
return( parval[0]*pt + parval[2] );
5089 if( eta < -1.6 )
return( parval[0]*pt + parval[3] );
5090 if( eta < -1.2 )
return( parval[0]*pt + parval[4] );
5091 if( eta < -0.8 )
return( parval[0]*pt + parval[5] );
5092 if( eta < 0. )
return( parval[0]*pt + parval[6] );
5093 if( eta < 0.8 )
return( parval[0]*pt + parval[7] );
5094 if( eta < 1.2 )
return( parval[0]*pt + parval[8] );
5095 if( eta < 1.6 )
return( parval[0]*pt + parval[9] );
5096 if( eta < 1.8 )
return( parval[0]*pt + parval[10] );
5097 if( eta < 2.0 )
return( parval[0]*pt + parval[11] );
5098 return( parval[0]*pt + parval[12] );
5107 virtual double sigmaPhi(
const double & pt,
const double &
eta,
const T & parval) {
5113 virtual double sigmaPtError(
const double & pt,
const double &
eta,
const T & parval,
const T & parError)
5120 TString* parname,
const T & parResol,
const std::vector<int> & parResolOrder,
5123 std::vector<ParameterSet> parSet(this->
parNum_);
5125 parSet[0] =
ParameterSet(
"Pt res. sc.", 0.002, -0.1, 0.1 );
5126 parSet[1] =
ParameterSet(
"eta bin 1", 0.00002, -0.01, 0.01 );
5127 parSet[2] =
ParameterSet(
"eta bin 2", 0.00002, -0.01, 0.01 );
5128 parSet[3] =
ParameterSet(
"eta bin 3", 0.00002, -0.01, 0.01 );
5129 parSet[4] =
ParameterSet(
"eta bin 4", 0.00002, -0.01, 0.01 );
5130 parSet[5] =
ParameterSet(
"eta bin 5", 0.00002, -0.01, 0.01 );
5131 parSet[6] =
ParameterSet(
"eta bin 6", 0.00002, -0.01, 0.01 );
5132 parSet[7] =
ParameterSet(
"eta bin 7", 0.00002, -0.01, 0.01 );
5133 parSet[8] =
ParameterSet(
"eta bin 8", 0.00002, -0.01, 0.01 );
5134 parSet[9] =
ParameterSet(
"eta bin 9", 0.00002, -0.01, 0.01 );
5135 parSet[10] =
ParameterSet(
"eta bin 10", 0.00002, -0.01, 0.01 );
5136 parSet[11] =
ParameterSet(
"eta bin 11", 0.00002, -0.01, 0.01 );
5137 parSet[12] =
ParameterSet(
"eta bin 12", 0.00002, -0.01, 0.01 );
5140 std::cout <<
"setting parameters" << std::endl;
5141 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
5144 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
5145 const T & parResol,
const std::vector<int> & parResolOrder,
5146 const std::vector<double> & parStep,
5147 const std::vector<double> & parMin,
5148 const std::vector<double> & parMax,
5151 if( (
int(parStep.size()) != this->
parNum_) || (int(parMin.size()) != this->
parNum_) || (int(parMax.size()) != this->
parNum_) ) {
5152 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
5154 std::cout <<
"parStep.size() = " << parStep.size() << std::endl;
5155 std::cout <<
"parMin.size() = " << parMin.size() << std::endl;
5156 std::cout <<
"parMax.size() = " << parMax.size() << std::endl;
5159 std::vector<ParameterSet> parSet(this->
parNum_);
5161 parSet[0] =
ParameterSet(
"Pt res. sc.", parStep[0], parMin[0], parMax[0] );
5162 parSet[1] =
ParameterSet(
"eta bin 1", parStep[1], parMin[1], parMax[1] );
5163 parSet[2] =
ParameterSet(
"eta bin 2", parStep[2], parMin[2], parMax[2] );
5164 parSet[3] =
ParameterSet(
"eta bin 3", parStep[3], parMin[3], parMax[3] );
5165 parSet[4] =
ParameterSet(
"eta bin 4", parStep[4], parMin[4], parMax[4] );
5166 parSet[5] =
ParameterSet(
"eta bin 5", parStep[5], parMin[5], parMax[5] );
5167 parSet[6] =
ParameterSet(
"eta bin 6", parStep[6], parMin[6], parMax[6] );
5168 parSet[7] =
ParameterSet(
"eta bin 7", parStep[7], parMin[7], parMax[7] );
5169 parSet[8] =
ParameterSet(
"eta bin 8", parStep[8], parMin[8], parMax[8] );
5170 parSet[9] =
ParameterSet(
"eta bin 9", parStep[9], parMin[9], parMax[9] );
5171 parSet[10] =
ParameterSet(
"eta bin 10", parStep[10], parMin[10], parMax[10] );
5172 parSet[11] =
ParameterSet(
"eta bin 11", parStep[11], parMin[11], parMax[11] );
5173 parSet[12] =
ParameterSet(
"eta bin 12", parStep[12], parMin[12], parMax[12] );
5175 std::cout <<
"setting parameters" << std::endl;
5178 <<
", parMin["<<
i<<
"] = " << parMin[
i]
5179 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
5181 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
5197 if( eta < -2.0 )
return 1;
5198 if( eta < -1.8 )
return 2;
5199 if( eta < -1.6 )
return 3;
5200 if( eta < -1.2 )
return 4;
5201 if( eta < -0.8 )
return 5;
5202 if( eta < 0. )
return 6;
5203 if( eta < 0.8 )
return 7;
5204 if( eta < 1.2 )
return 8;
5205 if( eta < 1.6 )
return 9;
5206 if( eta < 1.8 )
return 10;
5207 if( eta < 2.0 )
return 11;
5214 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval)
5224 virtual double sigmaPhi(
const double & pt,
const double &
eta,
const T & parval) {
5230 virtual double sigmaPtError(
const double & pt,
const double &
eta,
const T & parval,
const T & parError)
5238 TString* parname,
const T & parResol,
const std::vector<int> & parResolOrder,
5241 std::vector<ParameterSet> parSet(this->
parNum_);
5243 parSet[0] =
ParameterSet(
"Pt res. sc.", 0.0002, 0., 0.1 );
5244 parSet[1] =
ParameterSet(
"eta bin 1", 0.00002, 0., 0.01 );
5245 parSet[2] =
ParameterSet(
"eta bin 2", 0.00002, 0., 0.01 );
5246 parSet[3] =
ParameterSet(
"eta bin 3", 0.00002, 0., 0.01 );
5247 parSet[4] =
ParameterSet(
"eta bin 4", 0.00002, 0., 0.01 );
5248 parSet[5] =
ParameterSet(
"eta bin 5", 0.00002, 0., 0.01 );
5249 parSet[6] =
ParameterSet(
"eta bin 6", 0.00002, 0., 0.01 );
5250 parSet[7] =
ParameterSet(
"eta bin 7", 0.00002, 0., 0.01 );
5251 parSet[8] =
ParameterSet(
"eta bin 8", 0.00002, 0., 0.01 );
5252 parSet[9] =
ParameterSet(
"eta bin 9", 0.00002, 0., 0.01 );
5253 parSet[10] =
ParameterSet(
"eta bin 10", 0.00002, 0., 0.01 );
5254 parSet[11] =
ParameterSet(
"eta bin 11", 0.00002, 0., 0.01 );
5255 parSet[12] =
ParameterSet(
"eta bin 12", 0.00002, 0., 0.01 );
5258 std::cout <<
"setting parameters" << std::endl;
5259 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
5262 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
5263 const T & parResol,
const std::vector<int> & parResolOrder,
5264 const std::vector<double> & parStep,
5265 const std::vector<double> & parMin,
5266 const std::vector<double> & parMax,
5269 if( (
int(parStep.size()) != this->
parNum_) || (int(parMin.size()) != this->
parNum_) || (int(parMax.size()) != this->
parNum_) ) {
5270 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
5272 std::cout <<
"parStep.size() = " << parStep.size() << std::endl;
5273 std::cout <<
"parMin.size() = " << parMin.size() << std::endl;
5274 std::cout <<
"parMax.size() = " << parMax.size() << std::endl;
5277 std::vector<ParameterSet> parSet(this->
parNum_);
5279 parSet[0] =
ParameterSet(
"Pt res. sc.", parStep[0], parMin[0], parMax[0] );
5280 parSet[1] =
ParameterSet(
"eta bin 1", parStep[1], parMin[1], parMax[1] );
5281 parSet[2] =
ParameterSet(
"eta bin 2", parStep[2], parMin[2], parMax[2] );
5282 parSet[3] =
ParameterSet(
"eta bin 3", parStep[3], parMin[3], parMax[3] );
5283 parSet[4] =
ParameterSet(
"eta bin 4", parStep[4], parMin[4], parMax[4] );
5284 parSet[5] =
ParameterSet(
"eta bin 5", parStep[5], parMin[5], parMax[5] );
5285 parSet[6] =
ParameterSet(
"eta bin 6", parStep[6], parMin[6], parMax[6] );
5286 parSet[7] =
ParameterSet(
"eta bin 7", parStep[7], parMin[7], parMax[7] );
5287 parSet[8] =
ParameterSet(
"eta bin 8", parStep[8], parMin[8], parMax[8] );
5288 parSet[9] =
ParameterSet(
"eta bin 9", parStep[9], parMin[9], parMax[9] );
5289 parSet[10] =
ParameterSet(
"eta bin 10", parStep[10], parMin[10], parMax[10] );
5290 parSet[11] =
ParameterSet(
"eta bin 11", parStep[11], parMin[11], parMax[11] );
5291 parSet[12] =
ParameterSet(
"eta bin 12", parStep[12], parMin[12], parMax[12] );
5293 std::cout <<
"setting parameters" << std::endl;
5296 <<
", parMin["<<
i<<
"] = " << parMin[
i]
5297 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
5299 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
5313 if( eta < -2.0 )
return 1;
5314 if( eta < -1.8 )
return 2;
5315 if( eta < -1.6 )
return 3;
5316 if( eta < -1.2 )
return 4;
5317 if( eta < -0.8 )
return 5;
5318 if( eta < 0. )
return 6;
5319 if( eta < 0.8 )
return 7;
5320 if( eta < 1.2 )
return 8;
5321 if( eta < 1.6 )
return 9;
5322 if( eta < 1.8 )
return 10;
5323 if( eta < 2.0 )
return 11;
5330 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval)
5340 virtual double sigmaPhi(
const double & pt,
const double &
eta,
const T & parval) {
5344 virtual double covPt1Pt2(
const double & pt1,
const double & eta1,
const double & pt2,
const double & eta2,
const T & parval)
5351 virtual double sigmaPtError(
const double & pt,
const double &
eta,
const T & parval,
const T & parError)
5355 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;
5359 TString* parname,
const T & parResol,
const std::vector<int> & parResolOrder,
5362 std::vector<ParameterSet> parSet(this->
parNum_);
5364 parSet[0] =
ParameterSet(
"Pt res. sc.", 0.0002, 0., 0.1 );
5365 parSet[1] =
ParameterSet(
"eta bin 1", 0.00002, 0., 0.01 );
5366 parSet[2] =
ParameterSet(
"eta bin 2", 0.00002, 0., 0.01 );
5367 parSet[3] =
ParameterSet(
"eta bin 3", 0.00002, 0., 0.01 );
5368 parSet[4] =
ParameterSet(
"eta bin 4", 0.00002, 0., 0.01 );
5369 parSet[5] =
ParameterSet(
"eta bin 5", 0.00002, 0., 0.01 );
5370 parSet[6] =
ParameterSet(
"eta bin 6", 0.00002, 0., 0.01 );
5371 parSet[7] =
ParameterSet(
"eta bin 7", 0.00002, 0., 0.01 );
5372 parSet[8] =
ParameterSet(
"eta bin 8", 0.00002, 0., 0.01 );
5373 parSet[9] =
ParameterSet(
"eta bin 9", 0.00002, 0., 0.01 );
5374 parSet[10] =
ParameterSet(
"eta bin 10", 0.00002, 0., 0.01 );
5375 parSet[11] =
ParameterSet(
"eta bin 11", 0.00002, 0., 0.01 );
5376 parSet[12] =
ParameterSet(
"eta bin 12", 0.00002, 0., 0.01 );
5377 parSet[13] =
ParameterSet(
"cov(pt1,pt2)", 0.00002, 0., 0.01 );
5380 std::cout <<
"setting parameters" << std::endl;
5381 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
5384 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
5385 const T & parResol,
const std::vector<int> & parResolOrder,
5386 const std::vector<double> & parStep,
5387 const std::vector<double> & parMin,
5388 const std::vector<double> & parMax,
5391 if( (
int(parStep.size()) != this->
parNum_) || (int(parMin.size()) != this->
parNum_) || (int(parMax.size()) != this->
parNum_) ) {
5392 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
5394 std::cout <<
"parStep.size() = " << parStep.size() << std::endl;
5395 std::cout <<
"parMin.size() = " << parMin.size() << std::endl;
5396 std::cout <<
"parMax.size() = " << parMax.size() << std::endl;
5399 std::vector<ParameterSet> parSet(this->
parNum_);
5401 parSet[0] =
ParameterSet(
"Pt res. sc.", parStep[0], parMin[0], parMax[0] );
5402 parSet[1] =
ParameterSet(
"eta bin 1", parStep[1], parMin[1], parMax[1] );
5403 parSet[2] =
ParameterSet(
"eta bin 2", parStep[2], parMin[2], parMax[2] );
5404 parSet[3] =
ParameterSet(
"eta bin 3", parStep[3], parMin[3], parMax[3] );
5405 parSet[4] =
ParameterSet(
"eta bin 4", parStep[4], parMin[4], parMax[4] );
5406 parSet[5] =
ParameterSet(
"eta bin 5", parStep[5], parMin[5], parMax[5] );
5407 parSet[6] =
ParameterSet(
"eta bin 6", parStep[6], parMin[6], parMax[6] );
5408 parSet[7] =
ParameterSet(
"eta bin 7", parStep[7], parMin[7], parMax[7] );
5409 parSet[8] =
ParameterSet(
"eta bin 8", parStep[8], parMin[8], parMax[8] );
5410 parSet[9] =
ParameterSet(
"eta bin 9", parStep[9], parMin[9], parMax[9] );
5411 parSet[10] =
ParameterSet(
"eta bin 10", parStep[10], parMin[10], parMax[10] );
5412 parSet[11] =
ParameterSet(
"eta bin 11", parStep[11], parMin[11], parMax[11] );
5413 parSet[12] =
ParameterSet(
"eta bin 12", parStep[12], parMin[12], parMax[12] );
5414 parSet[13] =
ParameterSet(
"cov(pt1,pt2)",parStep[13], parMin[13], parMax[13] );
5416 std::cout <<
"setting parameters" << std::endl;
5419 <<
", parMin["<<
i<<
"] = " << parMin[
i]
5420 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
5422 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
5438 return( parval[0] + parval[1]*pt + parval[2]*std::fabs(eta) + parval[3]*eta*eta );
5442 return( parval[0] + parval[1]*pt + parval[4]*fabs(eta) + parval[5]*eta*eta );
5446 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval) {
5460 virtual double sigmaPhi(
const double & pt,
const double &
eta,
const T & parval) {
5466 virtual double sigmaPtError(
const double & pt,
const double &
eta,
const T & parval,
const T & parError)
5468 double fabsEta = std::fabs(eta);
5470 return sqrt(
pow(parError[0], 2) +
pow(pt*parError[1], 2) +
pow(fabsEta*parError[2], 2) +
pow(eta*eta*parError[3], 2));
5473 return sqrt(
pow(parError[0], 2) +
pow(pt*parError[1], 2) +
pow(fabsEta*parError[4], 2) +
pow(eta*eta*parError[5], 2));
5477 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)
5479 std::vector<ParameterSet> parSet(this->
parNum_);
5481 parSet[0] =
ParameterSet(
"Pt res. sc.", 0.002, -0.1, 0.1 );
5482 parSet[1] =
ParameterSet(
"Pt res. Pt sc. (all)", 0.00002, -0.01, 0.01 );
5483 parSet[2] =
ParameterSet(
"Pt res. Eta sc. (left)", 0.000002, 0., 0.01 );
5484 parSet[3] =
ParameterSet(
"Pt res. Eta^2 sc. (left)", 0.0002, -0.01, 0.02 );
5485 parSet[4] =
ParameterSet(
"Pt res. Eta sc. (right)", 0.000002, 0., 0.01 );
5486 parSet[5] =
ParameterSet(
"Pt res. Eta^2 sc. (right)", 0.0002, -0.01, 0.02 );
5488 std::cout <<
"setting parameters" << std::endl;
5489 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
5492 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
5493 const T & parResol,
const std::vector<int> & parResolOrder,
5494 const std::vector<double> & parStep,
5495 const std::vector<double> & parMin,
5496 const std::vector<double> & parMax,
5499 if( (
int(parStep.size()) != this->
parNum_) || (int(parMin.size()) != this->
parNum_) || (int(parMax.size()) != this->
parNum_) ) {
5500 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
5503 std::vector<ParameterSet> parSet(this->
parNum_);
5505 parSet[0] =
ParameterSet(
"Pt res. sc.", parStep[0], parMin[0], parMax[0] );
5506 parSet[1] =
ParameterSet(
"Pt res. Pt sc. (all)", parStep[1], parMin[1], parMax[1] );
5507 parSet[2] =
ParameterSet(
"Pt res. Eta sc. (left)", parStep[2], parMin[2], parMax[2] );
5508 parSet[3] =
ParameterSet(
"Pt res. Eta^2 sc. (left)", parStep[3], parMin[3], parMax[3] );
5509 parSet[4] =
ParameterSet(
"Pt res. sc. (right)", parStep[4], parMin[4], parMax[4] );
5510 parSet[5] =
ParameterSet(
"Pt res. Eta sc. (right)", parStep[5], parMin[5], parMax[5] );
5512 std::cout <<
"setting parameters" << std::endl;
5515 <<
", parMin["<<
i<<
"] = " << parMin[
i]
5516 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
5518 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
5529 virtual double sigmaPt(
const double & pt,
const double &
eta,
const T & parval) {
5532 return (parval[0] + parval[1]*pt + parval[2]*eta*eta);
5535 return (parval[0] + parval[1]*pt + parval[3]*eta*eta);
5543 virtual double sigmaPhi(
const double & pt,
const double &
eta,
const T & parval) {
5548 virtual double sigmaPtError(
const double & pt,
const double &
eta,
const T & parval,
const T & parError) {
5550 return( parError[0] + parError[1]*pt + parError[2]*eta*eta );
5553 return( parError[0] + parError[1]*pt + parError[3]*eta*eta );
5559 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)
5561 std::vector<ParameterSet> parSet(this->
parNum_);
5563 parSet[0] =
ParameterSet(
"Pt res. sc.", 0.002, 0., 0.1 );
5564 parSet[1] =
ParameterSet(
"Pt res. Pt sc. (all)", 0.00002, -0.01, 0.01 );
5565 parSet[2] =
ParameterSet(
"Pt res. Eta^2 sc. (left)", 0.0000002, -1., 1. );
5566 parSet[3] =
ParameterSet(
"Pt res. Eta^2 sc. (right)", 0.0000002, -1., 1. );
5569 std::cout <<
"setting parameters" << std::endl;
5570 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
5573 virtual void setParameters(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
5574 const T & parResol,
const std::vector<int> & parResolOrder,
5575 const std::vector<double> & parStep,
5576 const std::vector<double> & parMin,
5577 const std::vector<double> & parMax,
5580 if( (
int(parStep.size()) != this->
parNum_) || (int(parMin.size()) != this->
parNum_) || (int(parMax.size()) != this->
parNum_) ) {
5581 std::cout <<
"Error: par step or min or max do not match with number of parameters" << std::endl;
5584 std::vector<ParameterSet> parSet(this->
parNum_);
5586 parSet[0] =
ParameterSet(
"Pt res. sc.", parStep[0], parMin[0], parMax[0] );
5587 parSet[1] =
ParameterSet(
"Pt res. Pt sc. (all)", parStep[1], parMin[1], parMax[1] );
5588 parSet[2] =
ParameterSet(
"Pt res. Eta^2 sc. (left)", parStep[2], parMin[2], parMax[2] );
5589 parSet[3] =
ParameterSet(
"Pt res. Eta^2 sc. (right)", parStep[3], parMin[3], parMax[3] );
5593 std::cout <<
"setting parameters" << std::endl;
5596 <<
", parMin["<<
i<<
"] = " << parMin[
i]
5597 <<
", parMax["<<
i<<
"] = " << parMin[
i] << std::endl;
5599 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parResol, parResolOrder, parSet );
5647 virtual double operator()(
const double * parval,
const double &
mass,
const double &
eta )
const = 0;
5648 virtual double operator()(
const double * parval,
const double &
mass,
const double & eta1,
const double & eta2 )
const
5654 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;
5658 TF1 * backgroundFunctionForIntegral =
new TF1(
"backgroundFunctionForIntegral",
functionForIntegral_,
5660 return( backgroundFunctionForIntegral );
5662 virtual double fracVsEta(
const double * parval,
const double & eta1,
const double & eta2)
const {
return 1.; }
5669 virtual void setPar(
double* Start,
double*
Step,
double* Mini,
double* Maxi,
int* ind, TString* parname,
5670 const std::vector<double>::const_iterator & parBgrIt,
const std::vector<int>::const_iterator & parBgrOrderIt,
5671 double* thisStep,
double* thisMini,
double* thisMaxi, TString* thisParName ) {
5672 for(
int iPar=0; iPar<this->
parNum_; ++iPar ) {
5673 Start[iPar] = *(parBgrIt+iPar);
5674 Step[iPar] = thisStep[iPar];
5675 Mini[iPar] = thisMini[iPar];
5676 Maxi[iPar] = thisMaxi[iPar];
5677 ind[iPar] = *(parBgrOrderIt+iPar);
5685 const std::vector<double>::const_iterator & parBgrIt ) :
5726 double b = parval[1];
5731 else norm += -a*a/(2*
b);
5733 if( mass < -a/b && norm != 0 )
return (a + b*mass)/norm;
5736 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) {
5737 double thisStep[] = {0.01, 0.01};
5738 TString thisParName[] = {
"Constant",
"Linear"};
5739 if( muonType == 1 ) {
5740 double thisMini[] = {0.0, -300.};
5741 double thisMaxi[] = {1.0, 0.};
5742 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
5744 double thisMini[] = {0.0, -300.};
5745 double thisMaxi[] = {1.0, 0.};
5746 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
5764 double Bgrp2 = parval[1];
5766 if( norm != 0 )
return exp(-Bgrp2*mass)/norm;
5769 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) {
5770 double thisStep[] = {0.01, 0.01};
5771 TString thisParName[] = {
"Bgr fraction",
"Bgr slope"};
5772 if( muonType == 1 ) {
5773 double thisMini[] = {0.0, 0.};
5774 double thisMaxi[] = {1.0, 10.};
5775 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
5777 double thisMini[] = {0.0, 0.};
5778 double thisMaxi[] = {1.0, 10.};
5779 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
5870 double Bgrp2 = parval[1] + parval[2]*eta*
eta;
5872 if( norm != 0 )
return exp(-Bgrp2*mass)/norm;
5875 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) {
5876 double thisStep[] = {0.01, 0.01, 0.01, 0.01};
5877 TString thisParName[] = {
"Bgr fraction",
"Bgr slope",
"Bgr slope eta^2 dependence",
"background fraction eta dependence"};
5878 if( muonType == 1 ) {
5879 double thisMini[] = {0.0, 0., 0., -1.};
5880 double thisMaxi[] = {1.0, 10., 10., 1.};
5881 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
5883 double thisMini[] = {0.0, 0., -1., -1.};
5884 double thisMaxi[] = {1.0, 10., 1., 1.};
5885 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
5908 double b = parval[1];
5910 double a = 1 + parval[2]*eta*
eta;
5915 else norm += -a*a/(2*
b);
5917 if( mass < -a/b && norm != 0 )
return (a + b*mass)/norm;
5920 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) {
5921 double thisStep[] = {0.01, 0.01, 0.01};
5922 TString thisParName[] = {
"Bgr fraction",
"Constant",
"Linear"};
5923 if( muonType == 1 ) {
5924 double thisMini[] = {0.0, 0., -300.};
5925 double thisMaxi[] = {1.0, 300., 0.};
5926 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
5928 double thisMini[] = {0.0, 0., -300.};
5929 double thisMaxi[] = {1.0, 300., 0.};
5930 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
5945 virtual double operator()(
const double * parval,
const double &
mass,
const double &
eta )
const {
return 0.;}
5946 virtual double operator()(
const double * parval,
const double &
mass,
const double & eta1,
const double & eta2 )
const
5949 if( fabs(eta1) <= 1.3 && fabs(eta2) <= 1.3 ) {
5952 else if( (fabs(eta1) <= 1.6 && fabs(eta1) > 1.3) && (fabs(eta2) <= 1.6 && fabs(eta2) > 1.3) ) {
5955 else if( fabs(eta1) > 1.6 && fabs(eta2) > 1.6 ) {
5958 else if( (fabs(eta1) <= 1.3 && (fabs(eta2) > 1.3 && fabs(eta2) <= 1.6)) ||
5959 (fabs(eta2) <= 1.3 && (fabs(eta1) > 1.3 && fabs(eta1) <= 1.6)) ) {
5962 else if( (fabs(eta1) <= 1.3 && fabs(eta2) > 1.6) ||
5963 (fabs(eta2) <= 1.3 && fabs(eta1) > 1.6) ) {
5966 else if( ((fabs(eta1) > 1.3 && fabs(eta1) <= 1.6) && fabs(eta2) > 1.6) ||
5967 ((fabs(eta2) > 1.3 && fabs(eta2) <= 1.6) && fabs(eta1) > 1.6) ) {
5971 std::cout <<
"WARNING: this should not happen for eta1 = " << eta1 <<
" and eta2 = " << eta2 << std::endl;
5976 if( norm != 0 )
return exp(-Bgrp2*mass)/norm;
5980 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) {
5981 double thisStep[] = {0.01, 0.01};
5982 TString thisParName[] = {
"Bgr fraction",
"Bgr slope"};
5983 if( muonType == 1 ) {
5984 double thisMini[] = {0.0, 0.};
5985 double thisMaxi[] = {1.0, 10.};
5986 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
5988 double thisMini[] = {0.0, 0.};
5989 double thisMaxi[] = {1.0, 10.};
5990 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
5994 virtual double fracVsEta(
const double * parval,
const double & eta1,
const double & eta2)
const
5996 if( fabs(eta1) <= 1.3 && fabs(eta2) <= 1.3 ) {
5997 return (1.-0.910903);
5999 else if( (fabs(eta1) <= 1.6 && fabs(eta1) > 1.3) && (fabs(eta2) <= 1.6 && fabs(eta2) > 1.3) ) {
6000 return (1.-0.801469);
6002 else if( fabs(eta1) > 1.6 && fabs(eta2) > 1.6 ) {
6003 return (1.-0.658196);
6005 else if( (fabs(eta1) <= 1.3 && (fabs(eta2) > 1.3 && fabs(eta2) <= 1.6)) ||
6006 (fabs(eta2) <= 1.3 && (fabs(eta1) > 1.3 && fabs(eta1) <= 1.6)) ) {
6007 return (1.-0.873411);
6009 else if( (fabs(eta1) <= 1.3 && fabs(eta2) > 1.6) ||
6010 (fabs(eta2) <= 1.3 && fabs(eta1) > 1.6) ) {
6011 return (1.-0.784674);
6013 else if( ((fabs(eta1) > 1.3 && fabs(eta1) <= 1.6) && fabs(eta2) > 1.6) ||
6014 ((fabs(eta2) > 1.3 && fabs(eta2) <= 1.6) && fabs(eta1) > 1.6) ) {
6015 return (1.-0.714398);
6018 std::cout <<
"WARNING: this should not happen for eta1 = " << eta1 <<
" and eta2 = " << eta2 << std::endl;
6019 return (1.-0.658196);
6033 virtual double operator()(
const double * parval,
const double &
mass,
const double &
eta )
const {
return 0.;}
6034 virtual double operator()(
const double * parval,
const double &
mass,
const double & eta1,
const double & eta2 )
const
6037 if( (fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 0. && fabs(eta2) < 0.9) ) {
6040 else if( (fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) ) {
6043 else if( (fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) ) {
6044 Bgrp2 = (-0.333728);
6046 else if( (fabs(eta1) >= 1.5 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.5 && fabs(eta2) < 1.6) ) {
6049 else if( (fabs(eta1) >= 1.6 && fabs(eta1) < 1.7) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.7) ) {
6052 else if( (fabs(eta1) >= 1.7 && fabs(eta1) < 1.8) && (fabs(eta2) >= 1.7 && fabs(eta2) < 1.8) ) {
6053 Bgrp2 = (-0.959101);
6055 else if( (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9) ) {
6058 else if( (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0) ) {
6059 Bgrp2 = (-0.921581);
6061 else if( (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.) ) {
6062 Bgrp2 = (-0.664338);
6064 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 0.9 && fabs(eta2) < 1.3)) ||
6065 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 0.9 && fabs(eta1) < 1.3)) ) {
6068 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 1.3 && fabs(eta2) < 1.5)) ||
6069 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 1.3 && fabs(eta1) < 1.5)) ) {
6070 Bgrp2 = (-0.250272);
6072 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 1.5 && fabs(eta2) < 1.6)) ||
6073 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 1.5 && fabs(eta1) < 1.6)) ) {
6076 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.7)) ||
6077 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1.7)) ) {
6080 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 1.7 && fabs(eta2) < 1.8)) ||
6081 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 1.7 && fabs(eta1) < 1.8)) ) {
6084 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9)) ||
6085 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9)) ) {
6088 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
6089 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
6092 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
6093 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
6096 else if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 1.3 && fabs(eta2) < 1.5)) ||
6097 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 1.3 && fabs(eta1) < 1.5)) ) {
6100 else if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 1.5 && fabs(eta2) < 1.6)) ||
6101 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 1.5 && fabs(eta1) < 1.6)) ) {
6104 else if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.7)) ||
6105 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1.7)) ) {
6106 Bgrp2 = (-0.516479);
6108 else if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 1.7 && fabs(eta2) < 1.8)) ||
6109 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 1.7 && fabs(eta1) < 1.8)) ) {
6110 Bgrp2 = (-0.361401);
6112 else if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9)) ||
6113 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9)) ) {
6116 else if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
6117 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
6120 else if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
6121 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
6124 else if( ((fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 1.5 && fabs(eta2) < 1.6)) ||
6125 ((fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) && (fabs(eta1) >= 1.5 && fabs(eta1) < 1.6)) ) {
6128 else if( ((fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.7)) ||
6129 ((fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1.7)) ) {
6132 else if( ((fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 1.7 && fabs(eta2) < 1.8)) ||
6133 ((fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) && (fabs(eta1) >= 1.7 && fabs(eta1) < 1.8)) ) {
6134 Bgrp2 = (-0.148616);
6136 else if( ((fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9)) ||
6137 ((fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) && (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9)) ) {
6138 Bgrp2 = (-0.413175);
6140 else if( ((fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
6141 ((fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
6142 Bgrp2 = (-0.230031);
6144 else if( ((fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
6145 ((fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
6146 Bgrp2 = (-0.122756);
6148 else if( ((fabs(eta1) >= 1.5 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.7)) ||
6149 ((fabs(eta2) >= 1.5 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1.7)) ) {
6152 else if( ((fabs(eta1) >= 1.5 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.7 && fabs(eta2) < 1.8)) ||
6153 ((fabs(eta2) >= 1.5 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.7 && fabs(eta1) < 1.8)) ) {
6154 Bgrp2 = (-0.0985001);
6156 else if( ((fabs(eta1) >= 1.5 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9)) ||
6157 ((fabs(eta2) >= 1.5 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9)) ) {
6158 Bgrp2 = (-0.402548);
6160 else if( ((fabs(eta1) >= 1.5 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
6161 ((fabs(eta2) >= 1.5 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
6164 else if( ((fabs(eta1) >= 1.5 && fabs(eta1) < 1.6) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
6165 ((fabs(eta2) >= 1.5 && fabs(eta2) < 1.6) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
6168 else if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.7) && (fabs(eta2) >= 1.7 && fabs(eta2) < 1.8)) ||
6169 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.7) && (fabs(eta1) >= 1.7 && fabs(eta1) < 1.8)) ) {
6170 Bgrp2 = (-0.436959);
6172 else if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.7) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9)) ||
6173 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.7) && (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9)) ) {
6174 Bgrp2 = (-0.506041);
6176 else if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.7) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
6177 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.7) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
6180 else if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.7) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
6181 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.7) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
6182 Bgrp2 = (-0.365653);
6184 else if( ((fabs(eta1) >= 1.7 && fabs(eta1) < 1.8) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9)) ||
6185 ((fabs(eta2) >= 1.7 && fabs(eta2) < 1.8) && (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9)) ) {
6188 else if( ((fabs(eta1) >= 1.7 && fabs(eta1) < 1.8) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
6189 ((fabs(eta2) >= 1.7 && fabs(eta2) < 1.8) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
6190 Bgrp2 = (-0.730701);
6192 else if( ((fabs(eta1) >= 1.7 && fabs(eta1) < 1.8) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
6193 ((fabs(eta2) >= 1.7 && fabs(eta2) < 1.8) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
6196 else if( ((fabs(eta1) >= 1.8 && fabs(eta1) < 1.9) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
6197 ((fabs(eta2) >= 1.8 && fabs(eta2) < 1.9) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
6200 else if( ((fabs(eta1) >= 1.8 && fabs(eta1) < 1.9) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
6201 ((fabs(eta2) >= 1.8 && fabs(eta2) < 1.9) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
6202 Bgrp2 = (-0.687263);
6204 else if( ((fabs(eta1) >= 1.9 && fabs(eta1) < 2.0) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
6205 ((fabs(eta2) >= 1.9 && fabs(eta2) < 2.0) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
6206 Bgrp2 = (-0.722394);
6209 std::cout <<
"WARNING: this should not happen for eta1 = " << eta1 <<
" and eta2 = " << eta2 << std::endl;
6214 if( norm != 0 )
return exp(-Bgrp2*mass)/norm;
6218 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) {
6219 double thisStep[] = {0.01, 0.01};
6220 TString thisParName[] = {
"Bgr fraction",
"Bgr slope"};
6221 if( muonType == 1 ) {
6222 double thisMini[] = {0.0, 0.};
6223 double thisMaxi[] = {1.0, 10.};
6224 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
6226 double thisMini[] = {0.0, 0.};
6227 double thisMaxi[] = {1.0, 10.};
6228 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
6232 virtual double fracVsEta(
const double * parval,
const double & eta1,
const double & eta2)
const
6234 if( (fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 0. && fabs(eta2) < 0.9) ) {
6235 return (1.-0.915365);
6237 if( (fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) ) {
6238 return (1.-0.914149);
6240 if( (fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) ) {
6241 return (1.-0.855918);
6243 if( (fabs(eta1) >= 1.5 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.5 && fabs(eta2) < 1.6) ) {
6244 return (1.-0.70221);
6246 if( (fabs(eta1) >= 1.6 && fabs(eta1) < 1.7) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.7) ) {
6247 return (1.-0.701489);
6249 if( (fabs(eta1) >= 1.7 && fabs(eta1) < 1.8) && (fabs(eta2) >= 1.7 && fabs(eta2) < 1.8) ) {
6250 return (1.-0.651162);
6252 if( (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9) ) {
6253 return (1.-0.639839);
6255 if( (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0) ) {
6256 return (1.-0.64915);
6258 if( (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.) ) {
6259 return (1.-0.687878);
6261 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 0.9 && fabs(eta2) < 1.3)) ||
6262 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 0.9 && fabs(eta1) < 1.3)) ) {
6263 return (1.-0.903486);
6265 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 1.3 && fabs(eta2) < 1.5)) ||
6266 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 1.3 && fabs(eta1) < 1.5)) ) {
6267 return (1.-0.882516);
6269 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 1.5 && fabs(eta2) < 1.6)) ||
6270 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 1.5 && fabs(eta1) < 1.6)) ) {
6271 return (1.-0.85477);
6273 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.7)) ||
6274 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1.7)) ) {
6275 return (1.-0.804919);
6277 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 1.7 && fabs(eta2) < 1.8)) ||
6278 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 1.7 && fabs(eta1) < 1.8)) ) {
6279 return (1.-0.75411);
6281 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9)) ||
6282 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9)) ) {
6283 return (1.-0.714128);
6285 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
6286 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
6287 return (1.-0.645403);
6289 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.9) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
6290 ((fabs(eta2) >= 0. && fabs(eta2) < 0.9) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
6291 return (1.-0.588049);
6293 if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 1.3 && fabs(eta2) < 1.5)) ||
6294 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 1.3 && fabs(eta1) < 1.5)) ) {
6295 return (1.-0.901123);
6297 if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 1.5 && fabs(eta2) < 1.6)) ||
6298 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 1.5 && fabs(eta1) < 1.6)) ) {
6299 return (1.-0.87852);
6301 if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.7)) ||
6302 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1.7)) ) {
6303 return (1.-0.862266);
6305 if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 1.7 && fabs(eta2) < 1.8)) ||
6306 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 1.7 && fabs(eta1) < 1.8)) ) {
6307 return (1.-0.846385);
6309 if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9)) ||
6310 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9)) ) {
6311 return (1.-0.825401);
6313 if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
6314 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
6315 return (1.-0.812449);
6317 if( ((fabs(eta1) >= 0.9 && fabs(eta1) < 1.3) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
6318 ((fabs(eta2) >= 0.9 && fabs(eta2) < 1.3) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
6319 return (1.-0.753754);
6321 if( ((fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 1.5 && fabs(eta2) < 1.6)) ||
6322 ((fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) && (fabs(eta1) >= 1.5 && fabs(eta1) < 1.6)) ) {
6323 return (1.-0.794143);
6325 if( ((fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.7)) ||
6326 ((fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1.7)) ) {
6327 return (1.-0.761375);
6329 if( ((fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 1.7 && fabs(eta2) < 1.8)) ||
6330 ((fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) && (fabs(eta1) >= 1.7 && fabs(eta1) < 1.8)) ) {
6331 return (1.-0.765572);
6333 if( ((fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9)) ||
6334 ((fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) && (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9)) ) {
6335 return (1.-0.749438);
6337 if( ((fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
6338 ((fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
6339 return (1.-0.750941);
6341 if( ((fabs(eta1) >= 1.3 && fabs(eta1) < 1.5) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
6342 ((fabs(eta2) >= 1.3 && fabs(eta2) < 1.5) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
6343 return (1.-0.722832);
6345 if( ((fabs(eta1) >= 1.5 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.7)) ||
6346 ((fabs(eta2) >= 1.5 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1.7)) ) {
6347 return (1.-0.699723);
6349 if( ((fabs(eta1) >= 1.5 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.7 && fabs(eta2) < 1.8)) ||
6350 ((fabs(eta2) >= 1.5 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.7 && fabs(eta1) < 1.8)) ) {
6351 return (1.-0.734044);
6353 if( ((fabs(eta1) >= 1.5 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9)) ||
6354 ((fabs(eta2) >= 1.5 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9)) ) {
6355 return (1.-0.719434);
6357 if( ((fabs(eta1) >= 1.5 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
6358 ((fabs(eta2) >= 1.5 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
6359 return (1.-0.718889);
6361 if( ((fabs(eta1) >= 1.5 && fabs(eta1) < 1.6) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
6362 ((fabs(eta2) >= 1.5 && fabs(eta2) < 1.6) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
6363 return (1.-0.689382);
6365 if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.7) && (fabs(eta2) >= 1.7 && fabs(eta2) < 1.8)) ||
6366 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.7) && (fabs(eta1) >= 1.7 && fabs(eta1) < 1.8)) ) {
6367 return (1.-0.681106);
6369 if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.7) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9)) ||
6370 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.7) && (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9)) ) {
6371 return (1.-0.685783);
6373 if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.7) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
6374 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.7) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
6375 return (1.-0.695924);
6377 if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.7) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
6378 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.7) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
6379 return (1.-0.670977);
6381 if( ((fabs(eta1) >= 1.7 && fabs(eta1) < 1.8) && (fabs(eta2) >= 1.8 && fabs(eta2) < 1.9)) ||
6382 ((fabs(eta2) >= 1.7 && fabs(eta2) < 1.8) && (fabs(eta1) >= 1.8 && fabs(eta1) < 1.9)) ) {
6383 return (1.-0.654816);
6385 if( ((fabs(eta1) >= 1.7 && fabs(eta1) < 1.8) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
6386 ((fabs(eta2) >= 1.7 && fabs(eta2) < 1.8) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
6387 return (1.-0.670969);
6389 if( ((fabs(eta1) >= 1.7 && fabs(eta1) < 1.8) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
6390 ((fabs(eta2) >= 1.7 && fabs(eta2) < 1.8) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
6391 return (1.-0.659082);
6393 if( ((fabs(eta1) >= 1.8 && fabs(eta1) < 1.9) && (fabs(eta2) >= 1.9 && fabs(eta2) < 2.0)) ||
6394 ((fabs(eta2) >= 1.8 && fabs(eta2) < 1.9) && (fabs(eta1) >= 1.9 && fabs(eta1) < 2.0)) ) {
6395 return (1.-0.648371);
6397 if( ((fabs(eta1) >= 1.8 && fabs(eta1) < 1.9) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
6398 ((fabs(eta2) >= 1.8 && fabs(eta2) < 1.9) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
6399 return (1.-0.659114);
6401 if( ((fabs(eta1) >= 1.9 && fabs(eta1) < 2.0) && (fabs(eta2) >= 2.0 && fabs(eta2) < 1000.)) ||
6402 ((fabs(eta2) >= 1.9 && fabs(eta2) < 2.0) && (fabs(eta1) >= 2.0 && fabs(eta1) < 1000.)) ) {
6403 return (1.-0.660482);
6406 std::cout <<
"WARNING: this should not happen for eta1 = " << eta1 <<
" and eta2 = " << eta2 << std::endl;
6407 return (1.-0.687878);
6419 virtual double operator()(
const double * parval,
const double &
mass,
const double &
eta )
const {
return 0.;}
6420 virtual double operator()(
const double * parval,
const double &
mass,
const double & eta1,
const double & eta2 )
const
6423 if( (fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 0. && fabs(eta2) < 0.85) ) {
6426 else if( (fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) ) {
6429 else if( (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) ) {
6432 else if( (fabs(eta1) >= 1.6 && fabs(eta1) < 1000) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000) ) {
6433 Bgrp2 = (-0.386394);
6435 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 0.85 && fabs(eta2) < 1.25)) ||
6436 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 0.85 && fabs(eta1) < 1.25)) ) {
6439 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6)) ||
6440 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6)) ) {
6441 Bgrp2 = (-0.206566);
6443 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
6444 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
6447 else if( ((fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6)) ||
6448 ((fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) && (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6)) ) {
6451 else if( ((fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
6452 ((fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
6453 Bgrp2 = (-0.163569);
6455 else if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
6456 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
6461 if( norm != 0 )
return exp(-Bgrp2*mass)/norm;
6465 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) {
6466 double thisStep[] = {0.01, 0.01};
6467 TString thisParName[] = {
"Bgr fraction",
"Bgr slope"};
6468 if( muonType == 1 ) {
6469 double thisMini[] = {0.0, 0.};
6470 double thisMaxi[] = {1.0, 10.};
6471 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
6473 double thisMini[] = {0.0, 0.};
6474 double thisMaxi[] = {1.0, 10.};
6475 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
6479 virtual double fracVsEta(
const double * parval,
const double & eta1,
const double & eta2)
const
6481 if( (fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 0. && fabs(eta2) < 0.85) ) {
6482 return (1.-0.907727);
6484 if( (fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) ) {
6485 return (1.-0.907715);
6487 if( (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) ) {
6488 return (1.-0.912233);
6490 if( (fabs(eta1) >= 1.6 && fabs(eta1) < 1000) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000) ) {
6491 return (1.-0.876776);
6493 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 0.85 && fabs(eta2) < 1.25)) ||
6494 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 0.85 && fabs(eta1) < 1.25)) ) {
6495 return (1.-0.913046);
6497 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6)) ||
6498 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6)) ) {
6499 return (1.-0.916765);
6501 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
6502 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
6505 if( ((fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6)) ||
6506 ((fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) && (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6)) ) {
6507 return (1.-0.907471);
6509 if( ((fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
6510 ((fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
6511 return (1.-0.899253);
6513 if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
6514 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
6515 return (1.-0.879108);
6532 virtual double operator()(
const double * parval,
const double &
mass,
const double &
eta )
const {
return 0.;}
6533 virtual double operator()(
const double * parval,
const double &
mass,
const double & eta1,
const double & eta2 )
const
6537 if( (fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 0. && fabs(eta2) < 0.85) ) {
6540 else if( (fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) ) {
6543 else if( (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) ) {
6546 else if( (fabs(eta1) >= 1.6 && fabs(eta1) < 1000) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000) ) {
6549 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 0.85 && fabs(eta2) < 1.25)) ||
6550 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 0.85 && fabs(eta1) < 1.25)) ) {
6553 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6)) ||
6554 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6)) ) {
6555 Bgrp2 = (-0.337598);
6557 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
6558 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
6561 else if( ((fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6)) ||
6562 ((fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) && (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6)) ) {
6565 else if( ((fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
6566 ((fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
6569 else if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
6570 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
6573 else if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
6574 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
6579 if( norm != 0 )
return exp(-Bgrp2*mass)/norm;
6583 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) {
6584 double thisStep[] = {0.01, 0.01};
6585 TString thisParName[] = {
"Bgr fraction",
"Bgr slope"};
6586 if( muonType == 1 ) {
6587 double thisMini[] = {0.0, 0.};
6588 double thisMaxi[] = {1.0, 10.};
6589 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
6591 double thisMini[] = {0.0, 0.};
6592 double thisMaxi[] = {1.0, 10.};
6593 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
6597 virtual double fracVsEta(
const double * parval,
const double & eta1,
const double & eta2)
const
6601 if( (fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 0. && fabs(eta2) < 0.85) ) {
6602 return (1.-0.893683);
6604 if( (fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) ) {
6605 return (1.-0.888968);
6607 if( (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) ) {
6608 return (1.-0.885926);
6610 if( (fabs(eta1) >= 1.6 && fabs(eta1) < 1000) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000) ) {
6611 return (1.-0.866615);
6613 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 0.85 && fabs(eta2) < 1.25)) ||
6614 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 0.85 && fabs(eta1) < 1.25)) ) {
6615 return (1.-0.892856);
6617 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6)) ||
6618 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6)) ) {
6619 return (1.-0.884864);
6621 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
6622 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
6625 if( ((fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6)) ||
6626 ((fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) && (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6)) ) {
6627 return (1.-0.894739);
6629 if( ((fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
6630 ((fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
6631 return (1.-0.880597);
6633 if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
6634 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
6635 return (1.-0.869165);
6637 if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
6638 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
6639 return (1.-0.869165);
6652 virtual double operator()(
const double * parval,
const double &
mass,
const double &
eta )
const {
return 0.;}
6653 virtual double operator()(
const double * parval,
const double &
mass,
const double & eta1,
const double & eta2 )
const
6656 if( (fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 0. && fabs(eta2) < 0.85) ) {
6659 else if( (fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) ) {
6662 else if( (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) ) {
6665 else if( (fabs(eta1) >= 1.6 && fabs(eta1) < 1.8) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.8) ) {
6668 else if( (fabs(eta1) >= 1.8 && fabs(eta1) < 2.0) && (fabs(eta2) >= 1.8 && fabs(eta2) < 2.0) ) {
6669 Bgrp2 = (-0.498511);
6671 else if( (fabs(eta1) >= 2.0 && fabs(eta1) < 2.2) && (fabs(eta2) >= 2.0 && fabs(eta2) < 2.2) ) {
6672 Bgrp2 = (-0.897031);
6674 else if( (fabs(eta1) >= 2.2 && fabs(eta1) < 1000) && (fabs(eta2) >= 2.2 && fabs(eta2) < 1000) ) {
6677 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 0.85 && fabs(eta2) < 1.25)) ||
6678 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 0.85 && fabs(eta1) < 1.25)) ) {
6681 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6)) ||
6682 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6)) ) {
6683 Bgrp2 = (-0.337598);
6685 else if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
6686 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
6689 else if( ((fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6)) ||
6690 ((fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) && (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6)) ) {
6693 else if( ((fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
6694 ((fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
6697 else if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.8)) ||
6698 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1.8)) ) {
6701 else if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.8 && fabs(eta2) < 2.0)) ||
6702 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.8 && fabs(eta1) < 2.0)) ) {
6705 else if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 2.0 && fabs(eta2) < 2.2)) ||
6706 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 2.0 && fabs(eta1) < 2.2)) ) {
6709 else if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 2.2 && fabs(eta2) < 1000)) ||
6710 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 2.2 && fabs(eta1) < 1000)) ) {
6713 else if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.8) && (fabs(eta2) >= 1.8 && fabs(eta2) < 2.0)) ||
6714 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.8) && (fabs(eta1) >= 1.8 && fabs(eta1) < 2.0)) ) {
6715 Bgrp2 = (-0.723325);
6717 else if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.8) && (fabs(eta2) >= 2.0 && fabs(eta2) < 2.2)) ||
6718 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.8) && (fabs(eta1) >= 2.0 && fabs(eta1) < 2.2)) ) {
6721 else if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.8) && (fabs(eta2) >= 2.2 && fabs(eta2) < 1000)) ||
6722 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.8) && (fabs(eta1) >= 2.2 && fabs(eta1) < 1000)) ) {
6725 else if( ((fabs(eta1) >= 1.8 && fabs(eta1) < 2.0) && (fabs(eta2) >= 2.0 && fabs(eta2) < 2.2)) ||
6726 ((fabs(eta2) >= 1.8 && fabs(eta2) < 2.0) && (fabs(eta1) >= 2.0 && fabs(eta1) < 2.2)) ) {
6729 else if( ((fabs(eta1) >= 1.8 && fabs(eta1) < 2.0) && (fabs(eta2) >= 2.2 && fabs(eta2) < 1000)) ||
6730 ((fabs(eta2) >= 1.8 && fabs(eta2) < 2.0) && (fabs(eta1) >= 2.2 && fabs(eta1) < 1000)) ) {
6733 else if( ((fabs(eta1) >= 2.0 && fabs(eta1) < 2.2) && (fabs(eta2) >= 2.2 && fabs(eta2) < 1000)) ||
6734 ((fabs(eta2) >= 2.0 && fabs(eta2) < 2.2) && (fabs(eta1) >= 2.2 && fabs(eta1) < 1000)) ) {
6739 if( norm != 0 )
return exp(-Bgrp2*mass)/norm;
6742 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) {
6743 double thisStep[] = {0.01, 0.01};
6744 TString thisParName[] = {
"Bgr fraction",
"Bgr slope"};
6745 if( muonType == 1 ) {
6746 double thisMini[] = {0.0, 0.};
6747 double thisMaxi[] = {1.0, 10.};
6748 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
6750 double thisMini[] = {0.0, 0.};
6751 double thisMaxi[] = {1.0, 10.};
6752 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
6756 virtual double fracVsEta(
const double * parval,
const double & eta1,
const double & eta2)
const
6758 if( (fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 0. && fabs(eta2) < 0.85) ) {
6759 return (1.-0.893683);
6761 if( (fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) ) {
6762 return (1.-0.888968);
6764 if( (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) ) {
6765 return (1.-0.885926);
6767 if( (fabs(eta1) >= 1.6 && fabs(eta1) < 1.8) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.8) ) {
6768 return (1.-0.892823);
6770 if( (fabs(eta1) >= 1.8 && fabs(eta1) < 2.0) && (fabs(eta2) >= 1.8 && fabs(eta2) < 2.0) ) {
6771 return (1.-0.888735);
6773 if( (fabs(eta1) >= 2.0 && fabs(eta1) < 2.2) && (fabs(eta2) >= 2.0 && fabs(eta2) < 2.2) ) {
6774 return (1.-0.87497);
6776 if( (fabs(eta1) >= 2.2 && fabs(eta1) < 1000) && (fabs(eta2) >= 2.2 && fabs(eta2) < 1000) ) {
6777 return (1.-0.895275);
6779 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 0.85 && fabs(eta2) < 1.25)) ||
6780 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 0.85 && fabs(eta1) < 1.25)) ) {
6781 return (1.-0.892856);
6783 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6)) ||
6784 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6)) ) {
6785 return (1.-0.884864);
6787 if( ((fabs(eta1) >= 0. && fabs(eta1) < 0.85) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
6788 ((fabs(eta2) >= 0. && fabs(eta2) < 0.85) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
6789 return (1.-0.834572);
6791 if( ((fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 1.25 && fabs(eta2) < 1.6)) ||
6792 ((fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) && (fabs(eta1) >= 1.25 && fabs(eta1) < 1.6)) ) {
6793 return (1.-0.894739);
6795 if( ((fabs(eta1) >= 0.85 && fabs(eta1) < 1.25) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1000)) ||
6796 ((fabs(eta2) >= 0.85 && fabs(eta2) < 1.25) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1000)) ) {
6797 return (1.-0.880597);
6799 if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.6 && fabs(eta2) < 1.8)) ||
6800 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.6 && fabs(eta1) < 1.8)) ) {
6801 return (1.-0.892911);
6803 if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 1.8 && fabs(eta2) < 2.0)) ||
6804 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 1.8 && fabs(eta1) < 2.0)) ) {
6805 return (1.-0.880506);
6807 if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 2.0 && fabs(eta2) < 2.2)) ||
6808 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 2.0 && fabs(eta1) < 2.2)) ) {
6809 return (1.-0.885718);
6811 if( ((fabs(eta1) >= 1.25 && fabs(eta1) < 1.6) && (fabs(eta2) >= 2.2 && fabs(eta2) < 1000)) ||
6812 ((fabs(eta2) >= 1.25 && fabs(eta2) < 1.6) && (fabs(eta1) >= 2.2 && fabs(eta1) < 1000)) ) {
6813 return (1.-0.853141);
6815 if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.8) && (fabs(eta2) >= 1.8 && fabs(eta2) < 2.0)) ||
6816 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.8) && (fabs(eta1) >= 1.8 && fabs(eta1) < 2.0)) ) {
6817 return (1.-0.88822);
6819 if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.8) && (fabs(eta2) >= 2.0 && fabs(eta2) < 2.2)) ||
6820 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.8) && (fabs(eta1) >= 2.0 && fabs(eta1) < 2.2)) ) {
6821 return (1.-0.87028);
6823 if( ((fabs(eta1) >= 1.6 && fabs(eta1) < 1.8) && (fabs(eta2) >= 2.2 && fabs(eta2) < 1000)) ||
6824 ((fabs(eta2) >= 1.6 && fabs(eta2) < 1.8) && (fabs(eta1) >= 2.2 && fabs(eta1) < 1000)) ) {
6825 return (1.-0.869603);
6827 if( ((fabs(eta1) >= 1.8 && fabs(eta1) < 2.0) && (fabs(eta2) >= 2.0 && fabs(eta2) < 2.2)) ||
6828 ((fabs(eta2) >= 1.8 && fabs(eta2) < 2.0) && (fabs(eta1) >= 2.0 && fabs(eta1) < 2.2)) ) {
6829 return (1.-0.877922);
6831 if( ((fabs(eta1) >= 1.8 && fabs(eta1) < 2.0) && (fabs(eta2) >= 2.2 && fabs(eta2) < 1000)) ||
6832 ((fabs(eta2) >= 1.8 && fabs(eta2) < 2.0) && (fabs(eta1) >= 2.2 && fabs(eta1) < 1000)) ) {
6833 return (1.-0.865997);
6835 if( ((fabs(eta1) >= 2.0 && fabs(eta1) < 2.2) && (fabs(eta2) >= 2.2 && fabs(eta2) < 1000)) ||
6836 ((fabs(eta2) >= 2.0 && fabs(eta2) < 2.2) && (fabs(eta1) >= 2.2 && fabs(eta1) < 1000)) ) {
6837 return (1.-0.886109);
6853 virtual double operator()(
const double * parval,
const double &
mass,
const double &
eta )
const {
return 0.;}
6854 virtual double operator()(
const double * parval,
const double &
mass,
const double & eta1,
const double & eta2 )
const
6857 if( (eta1 >= -100. && eta1 < -0.8) && (eta2 >= -100. && eta2 < -0.8) ) {
6858 Bgrp2 = (-0.0512353);
6860 else if( (eta1 >= -100. && eta1 < -0.8) && (eta2 >= -0.8 && eta2 < 0.) ) {
6861 Bgrp2 = (-0.0448482);
6863 else if( (eta1 >= -100. && eta1 < -0.8) && (eta2 >= 0. && eta2 < 0.8) ) {
6864 Bgrp2 = (-0.0193726);
6866 else if( (eta1 >= -100. && eta1 < -0.8) && (eta2 >= 0.8 && eta2 < 100.) ) {
6867 Bgrp2 = (0.0225765);
6869 else if( (eta1 >= -0.8 && eta1 < 0.) && (eta2 >= -100. && eta2 < -0.8) ) {
6870 Bgrp2 = (-0.0822936);
6872 else if( (eta1 >= -0.8 && eta1 < 0.) && (eta2 >= -0.8 && eta2 < 0.) ) {
6873 Bgrp2 = (-0.0676357);
6875 else if( (eta1 >= -0.8 && eta1 < 0.) && (eta2 >= 0. && eta2 < 0.8) ) {
6876 Bgrp2 = (-0.0591544);
6878 else if( (eta1 >= -0.8 && eta1 < 0.) && (eta2 >= 0.8 && eta2 < 100.) ) {
6879 Bgrp2 = (-0.0235858);
6881 else if( (eta1 >= 0. && eta1 < 0.8) && (eta2 >= -100. && eta2 < -0.8) ) {
6882 Bgrp2 = (-0.0317051);
6884 else if( (eta1 >= 0. && eta1 < 0.8) && (eta2 >= -0.8 && eta2 < 0.) ) {
6887 else if( (eta1 >= 0. && eta1 < 0.8) && (eta2 >= 0. && eta2 < 0.8) ) {
6888 Bgrp2 = (-0.0747737);
6890 else if( (eta1 >= 0. && eta1 < 0.8) && (eta2 >= 0.8 && eta2 < 100.) ) {
6891 Bgrp2 = (-0.0810139);
6893 else if( (eta1 >= 0.8 && eta1 < 100.) && (eta2 >= -100. && eta2 < -0.8) ) {
6894 Bgrp2 = (0.0229602);
6896 else if( (eta1 >= 0.8 && eta1 < 100.) && (eta2 >= -0.8 && eta2 < 0.) ) {
6897 Bgrp2 = (-0.0224212);
6899 else if( (eta1 >= 0.8 && eta1 < 100.) && (eta2 >= 0. && eta2 < 0.8) ) {
6900 Bgrp2 = (-0.0446273);
6902 else if( (eta1 >= 0.8 && eta1 < 100.) && (eta2 >= 0.8 && eta2 < 100.) ) {
6903 Bgrp2 = (-0.0554561);
6906 std::cout <<
"WARNING, backgroundFunctionType11: this should not happen for eta1 = " << eta1 <<
" and eta2 = " << eta2 << std::endl;
6910 if( norm != 0 )
return exp(Bgrp2*mass)/norm;
6914 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) {
6915 double thisStep[] = {0.01, 0.01};
6916 TString thisParName[] = {
"Bgr fraction",
"Bgr slope"};
6917 if( muonType == 1 ) {
6918 double thisMini[] = {-1.0, 10.};
6919 double thisMaxi[] = {1.0 , 10.};
6920 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
6922 double thisMini[] = {-1.0, 10.};
6923 double thisMaxi[] = { 1.0, 10.};
6924 this->
setPar( Start, Step, Mini, Maxi, ind, parname, parBgrIt, parBgrOrderIt, thisStep, thisMini, thisMaxi, thisParName );
6928 virtual double fracVsEta(
const double * parval,
const double & eta1,
const double & eta2)
const
6930 if( (eta1 >= -100. && eta1 < -0.8) && (eta2 >= -100. && eta2 < -0.8) ) {
6931 return (1.-0.966316);
6933 if( (eta1 >= -100. && eta1 < -0.8) && (eta2 >= -0.8 && eta2 < 0.) ) {
6934 return (1.-0.966875);
6936 if( (eta1 >= -100. && eta1 < -0.8) && (eta2 >= 0. && eta2 < 0.8) ) {
6937 return (1.-0.955311);
6939 if( (eta1 >= -100. && eta1 < -0.8) && (eta2 >= 0.8 && eta2 < 100.) ) {
6940 return (1.-0.928771);
6942 if( (eta1 >= -0.8 && eta1 < 0.) && (eta2 >= -100. && eta2 < -0.8) ) {
6943 return (1.-0.983255);
6945 if( (eta1 >= -0.8 && eta1 < 0.) && (eta2 >= -0.8 && eta2 < 0.) ) {
6946 return (1.-0.982203);
6948 if( (eta1 >= -0.8 && eta1 < 0.) && (eta2 >= 0. && eta2 < 0.8) ) {
6949 return (1.-0.972127);
6951 if( (eta1 >= -0.8 && eta1 < 0.) && (eta2 >= 0.8 && eta2 < 100.) ) {
6952 return (1.-0.962929);
6954 if( (eta1 >= 0. && eta1 < 0.8) && (eta2 >= -100. && eta2 < -0.8) ) {
6955 return (1.-0.965597);
6957 if( (eta1 >= 0. && eta1 < 0.8) && (eta2 >= -0.8 && eta2 < 0.) ) {
6958 return (1.-0.969461);
6960 if( (eta1 >= 0. && eta1 < 0.8) && (eta2 >= 0. && eta2 < 0.8) ) {
6961 return (1.-0.979922);
6963 if( (eta1 >= 0. && eta1 < 0.8) && (eta2 >= 0.8 && eta2 < 100.) ) {
6964 return (1.-0.984247);
6966 if( (eta1 >= 0.8 && eta1 < 100.) && (eta2 >= -100. && eta2 < -0.8) ) {
6967 return (1.-0.934252);
6969 if( (eta1 >= 0.8 && eta1 < 100.) && (eta2 >= -0.8 && eta2 < 0.) ) {
6970 return (1.-0.952914);
6972 if( (eta1 >= 0.8 && eta1 < 100.) && (eta2 >= 0. && eta2 < 0.8) ) {
6973 return (1.-0.960191);
6975 if( (eta1 >= 0.8 && eta1 < 100.) && (eta2 >= 0.8 && eta2 < 100.) ) {
6976 return (1.-0.966175);
6979 std::cout <<
"WARNING, backgroundFunctionType11: this should not happen for eta1 = " << eta1 <<
" and eta2 = " << eta2 << std::endl;
6986 #endif // FUNCTIONS_H
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 double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
virtual double operator()(const double *parval, const double &mass, const double &eta) const
virtual 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)
virtual double sigmaPhi(const double &pt, const double &eta, const T &parval)
virtual double operator()(const double *parval, const double &mass, const double &eta) const
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
backgroundFunctionType9(const double &lowerLimit, const double &upperLimit)
scaleFunctionBase< double * > * scaleFunctionService(const int identifier)
Service to build the scale functor corresponding to the passed identifier.
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.
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 leftLine(const double &pt, const double &eta, const T &parval)
virtual double sigmaCotgTh(const double &pt, const double &eta, const T &parval)
virtual double sigmaCotgTh(const double &pt, const double &eta, const T &parval)
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.
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)
This method is used to differentiate parameters among the different functions.
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
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)
This method is used to differentiate parameters among the different functions.
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 double sigmaCotgTh(const double &pt, const double &eta, const T &parval)
virtual double sigmaCotgTh(const double &pt, const double &eta, const T &parval)
virtual void smear(double &pt, double &eta, double &phi, const double *y, const std::vector< double > &parSmear)
virtual double operator()(const double *parval, const double &mass, const double &eta1, const double &eta2) const
backgroundFunctionType1(const double &lowerLimit, const double &upperLimit)
virtual double fracVsEta(const double *parval, const double &eta1, const double &eta2) const
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)
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)
This method is used to differentiate parameters among the different functions.
virtual double sigmaPhi(const double &pt, const double &eta, const T &parval)
virtual double sigmaPtError(const double &pt, const double &eta, const T &parval, const T &parError)
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)
virtual void resetParameters(std::vector< double > *scaleVec) const
This method is used to reset the scale parameters to neutral values (useful for iterations > 0) ...
Returns ( sigmaPt/Pt(data)^2 - sigmaPt/Pt(MC)^2 )
Exponential binned in eta, much finer binning then type6.
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 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 centralParabola(const double &pt, const double &eta, const T &parval)
resolutionFunctionType41()
virtual double operator()(const double *parval, const double &mass, const double &eta1, const double &eta2) const
virtual double sigmaPtError(const double &pt, const double &eta, const T &parval, const T &parError)
virtual double sigmaPhi(const double &pt, const double &eta, const T &parval)
resolutionFunctionType18()
virtual void smear(double &pt, double &eta, double &phi, const double *y, const std::vector< double > &parSmear)
virtual double operator()(const double *parval, const double &mass, const double &eta1, const double &eta2) const
virtual TF1 * functionForIntegral(const std::vector< double >::const_iterator &parBgrIt) const
virtual double fracVsEta(const double *parval, const double &eta1, const double &eta2) const
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 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.
resolutionFunctionType32()
virtual void resetParameters(std::vector< double > *scaleVec) const
This method is used to reset the scale parameters to neutral values (useful for iterations > 0) ...
resolutionFunctionType7()
resolutionFunctionType19()
virtual 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)
double operator()(const double *mass, const double *) const
virtual double sigmaPhi(const double &pt, const double &eta, const T &parval)
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
resolutionFunctionType15()
resolutionFunctionType30()
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)
This method is used to differentiate parameters among the different functions.
virtual double sigmaPhi(const double &pt, const double &eta, const T &parval)
double etaByPoints(const double &inEta, const double &border)
double etaByPoints(const double &inEta, const double &border)
virtual double sigmaPt(const double &pt, const double &eta, const T &parval)
virtual double sigmaPhi(const double &pt, const double &eta, const T &parval)
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
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.
This is resolution function where sigmaPt/Pt is described by f(Pt) = a + b/pt + pt/(pt+c)and f(Eta) =...
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
virtual void smear(double &pt, double &eta, double &phi, const double *y, const std::vector< double > &parSmear)
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)
This method is used to differentiate parameters among the different functions.
virtual void resetParameters(std::vector< double > *scaleVec) const
This method is used to reset the scale parameters to neutral values (useful for iterations > 0) ...
double leftParabola(const double &pt, const double &eta, const T &parval)
virtual double sigmaPhi(const double &pt, const double &eta, const T &parval)
virtual double sigmaPtError(const double &pt, const double &eta, const T &parval, const T &parError)
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)
This method is used to differentiate parameters among the different functions.
resolutionFunctionType9()
virtual double fracVsEta(const double *parval, const double &eta1, const double &eta2) const
resolutionFunctionType40()
virtual double sigmaCotgTh(const double &pt, const double &eta, const T &parval)
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)
This method is used to differentiate parameters among the different functions.
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 double sigmaCotgTh(const double &pt, const double &eta, const T &parval)
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)
This method is used to differentiate parameters among the different functions.
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)
This method is used to differentiate parameters among the different functions.
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)
This method is used to differentiate parameters among the different functions.
Sin< T >::type sin(const T &t)
virtual double sigmaPt(const double &pt, const double &eta, const T &parval)
virtual void smear(double &pt, double &eta, double &phi, const double *y, const std::vector< double > &parSmear)=0
int etaBin(const double &eta)
virtual 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)
backgroundFunctionType11(const double &lowerLimit, const double &upperLimit)
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
Geom::Theta< T > theta() const
virtual double sigmaCotgTh(const double &pt, const double &eta, const T &parval)
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)
This method is used to differentiate parameters among the different functions.
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)
This method is used to differentiate parameters among the different functions.
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 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)
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 double sigmaPtError(const double &pt, const double &eta, const T &parval, const T &parError)
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &par) const
virtual double sigmaPt(const double &pt, const double &eta, const T &parval)
virtual 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)
virtual double sigmaCotgTh(const double &pt, const double &eta, const T &parval)
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)
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)
This method is used to differentiate parameters among the different functions.
virtual double sigmaPtError(const double &pt, const double &eta, const T &parval, const T &parError)
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)
This method is used to differentiate parameters among the different functions.
virtual double sigmaPt(const double &pt, const double &eta, const T &parval)
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 void resetParameters(std::vector< double > *scaleVec) const
This method is used to reset the scale parameters to neutral values (useful for iterations > 0) ...
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
virtual double sigmaPt(const double &pt, const double &eta, const T &parval)
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.
virtual void smear(double &pt, double &eta, double &phi, const double *y, const std::vector< double > &parSmear)
double centralParabola(const double &pt, const double &eta, const T &parval)
virtual 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)
virtual double sigmaCotgTh(const double &pt, const double &eta, const T &parval)
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)
This method is used to differentiate parameters among the different functions.
double rightParabola(const double &pt, const double &eta, const T &parval)
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.
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 ~scaleFunctionBase()=0
virtual void resetParameters(std::vector< double > *scaleVec) const
This method is used to reset the scale parameters to neutral values (useful for iterations > 0) ...
backgroundFunctionType4(const double &lowerLimit, const double &upperLimit)
virtual double sigmaPhi(const double &pt, const double &eta, const T &parval)
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)
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
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.
void smearEta(double &eta)
virtual double sigmaPtError(const double &pt, const double &eta, const T &parval, const T &parError)
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
int etaBin(const double &eta)
backgroundFunctionType5(const double &lowerLimit, const double &upperLimit)
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)
This method is used to differentiate parameters among the different functions.
virtual double sigmaPt(const double &pt, const double &eta, const T &parval)
resolutionFunctionType20()
backgroundFunctionType2(const double &lowerLimit, const double &upperLimit)
double cubicEta(const double &eta, const T &parScale, const int shift) const
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)
This method is used to differentiate parameters among the different functions.
resolutionFunctionType14()
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)
This method is used to differentiate parameters among the different functions.
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)
virtual double sigmaPhi(const double &pt, const double &eta, const T &parval)
backgroundFunctionType10(const double &lowerLimit, const double &upperLimit)
virtual double operator()(const double *parval, const double &mass, const double &eta1, const double &eta2) const
virtual double operator()(const double *parval, const double &mass, const double &eta) const =0
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
virtual double operator()(const double *parval, const double &mass, const double &eta1, const double &eta2) const
virtual double sigmaPhi(const double &pt, const double &eta, const T &parval)
virtual double sigmaPt(const double &pt, const double &eta, const T &parval)
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)
This method is used to differentiate parameters among the different functions.
virtual ~backgroundFunctionBase()
virtual double sigmaCotgTh(const double &pt, const double &eta, const T &parval)
const backgroundFunctionBase * function_
resolutionFunctionType46()
virtual double sigmaPt(const double &pt, const double &eta, const T &parval)=0
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 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)
This method is used to differentiate parameters among the different functions.
virtual double sigmaPt(const double &pt, const double &eta, const T &parval)
virtual double sigmaPt(const double &pt, const double &eta, const T &parval)
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 void resetParameters(std::vector< double > *scaleVec) const
This method is used to reset the scale parameters to neutral values (useful for iterations > 0) ...
virtual double fracVsEta(const double *parval, const double &eta1, const double &eta2) const
virtual double sigmaPt(const double &pt, const double &eta, const T &parval)
resolutionFunctionType42()
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)
This method is used to differentiate parameters among the different functions.
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.
resolutionFunctionType8()
double etaCorrection(const double &eta) const
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)
This method is used to differentiate parameters among the different functions.
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 void smear(double &pt, double &eta, double &phi, const double *y, const std::vector< double > &parSmear)
virtual double operator()(const double *parval, const double &mass, const double &eta) const
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.
resolutionFunctionType6()
virtual double sigmaPtError(const double &pt, const double &eta, const T &parval, const T &parError)
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)
This method is used to differentiate parameters among the different functions.
virtual double sigmaPt(const double &pt, const double &eta, const T &parval)
resolutionFunctionBase< std::vector< double > > * resolutionFunctionVecService(const int identifier)
Service to build the resolution functor corresponding to the passed identifier when receiving a std::...
virtual double sigmaPhi(const double &pt, const double &eta, const T &parval)
virtual double sigmaPhi(const double &pt, const double &eta, const T &parval)
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
Exponential with eta dependence.
virtual int parNum() const
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)
virtual double sigmaPt(const double &pt, const double &eta, const T &parval)
resolutionFunctionType12()
virtual double sigmaCotgTh(const double &pt, const double &eta, const T &parval)
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)
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)
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
virtual double operator()(const double *parval, const double &mass, const double &eta) const
virtual void resetParameters(std::vector< double > *scaleVec) const
This method is used to reset the scale parameters to neutral values (useful for iterations > 0) ...
double leftParabola(const double &pt, const double &eta, const T &parval)
virtual double covPt1Pt2(const double &pt1, const double &eta1, const double &pt2, const double &eta2, const T &parval)
virtual double sigmaPt(const double &pt, const double &eta, const T &parval)
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)
This method is used to differentiate parameters among the different functions.
virtual double operator()(const double *parval, const double &mass, const double &eta) const
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &par) const
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
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
This method is used to differentiate parameters among the different functions.
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.
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.
virtual double sigmaCotgTh(const double &pt, const double &eta, const T &parval)
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 double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
virtual double sigmaPt(const double &pt, const double &eta, const T &parval)
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)
double etaByPoints(const double &inEta, const double &border)
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
virtual double sigmaPhi(const double &pt, const double &eta, const T &parval)
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)
virtual double sigmaPt(const double &pt, const double &eta, const T &parval)
virtual double covPt1Pt2(const double &pt1, const double &eta1, const double &pt2, const double &eta2, const T &parval)
virtual double fracVsEta(const double *parval, const double &eta1, const double &eta2) const
Tan< T >::type tan(const T &t)
virtual double covPt1Pt2(const double &pt1, const double &eta1, const double &pt2, const double &eta2, const T &parval)
resolutionFunctionType43()
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
This method is used to differentiate parameters among the different functions.
backgroundFunctionBase(const double &lowerLimit, const double &upperLimit)
virtual 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)
virtual double sigmaPt(const double &pt, const double &eta, const T &parval)
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)
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
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)
This method is used to differentiate parameters among the different functions.
virtual double sigmaPhi(const double &pt, const double &eta, const T &parval)
virtual double sigmaCotgTh(const double &pt, const double &eta, const T &parval)
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
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)
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
virtual double operator()(const double *parval, const double &mass, const double &eta) const
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)
This method is used to differentiate parameters among the different functions.
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)
virtual 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)
virtual double sigmaPhi(const double &pt, const double &eta, const T &parval)
resolutionFunctionType10()
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.
ParameterSet(const TString &inputName, const double &inputStep, const double &inputMini, const double &inputMaxi)
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 void resetParameters(std::vector< double > *scaleVec) const
This method is used to reset the scale parameters to neutral values (useful for iterations > 0) ...
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)
This method is used to differentiate parameters among the different functions.
smearFunctionBase * smearFunctionService(const int identifier)
Service to build the smearing functor corresponding to the passed identifier.
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)
This method is used to differentiate parameters among the different functions.
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const =0
resolutionFunctionType17()
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 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)
This method is used to differentiate parameters among the different functions.
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 double sigmaPhi(const double &pt, const double &eta, const T &parval)
virtual double sigmaCotgTh(const double &pt, const double &eta, const T &parval)
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)
This method is used to differentiate parameters among the different functions.
virtual double sigmaCotgTh(const double &pt, const double &eta, const T &parval)
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.
resolutionFunctionType44()
virtual double sigmaPhi(const double &pt, const double &eta, const T &parval)
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
virtual double sigmaPhi(const double &pt, const double &eta, const T &parval)
virtual double sigmaCotgTh(const double &pt, const double &eta, const T &parval)
virtual double sigmaPhi(const double &pt, const double &eta, const T &parval)
virtual double sigmaPtError(const double &pt, const double &eta, const T &parval, const T &parError)
double leftParabolaError(const double &pt, const double &eta, const T &parval, const T &parError)
double squaredDiff(const double &eta)
virtual double sigmaPhi(const double &pt, const double &eta, const T &parval)
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.
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 void resetParameters(std::vector< double > *scaleVec) const
This method is used to reset the scale parameters to neutral values (useful for iterations > 0) ...
double centralParabolaError(const double &pt, const double &eta, const T &parval, const T &parError)
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
virtual void smear(double &pt, double &eta, double &phi, const double *y, const std::vector< double > &parSmear)
virtual double sigmaPt(const double &pt, const double &eta, const T &parval)
virtual double sigmaPhi(const double &pt, const double &eta, const T &parval)
virtual void smear(double &pt, double &eta, double &phi, const double *y, const std::vector< double > &parSmear)
scaleFunctionBase< std::vector< double > > * scaleFunctionVecService(const int identifier)
Service to build the scale functor corresponding to the passed identifier when receiving a std::vecto...
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)
This method is used to differentiate parameters among the different functions.
virtual double sigmaPtError(const double &pt, const double &eta, const T &parval, const T &parError)
virtual double sigmaPhi(const double &pt, const double &eta, const T &parval)
virtual void resetParameters(std::vector< double > *scaleVec) const
This method is used to reset the scale parameters to neutral values (useful for iterations > 0) ...
resolutionFunctionType45()
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.
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)
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
virtual double sigmaCotgTh(const double &pt, const double &eta, const T &parval)=0
double originalPtRegionSeparator_
virtual 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)
double etaByPoints(const double &inEta, const double &border)
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 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)
virtual 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)
virtual double sigmaCotgTh(const double &pt, const double &eta, const T &parval)
resolutionFunctionType1()
virtual double operator()(const double *parval, const double &mass, const double &eta1, const double &eta2) const
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.
virtual void resetParameters(std::vector< double > *scaleVec) const
This method is used to reset the scale parameters to neutral values (useful for iterations > 0) ...
double originalTransition1_
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.
virtual double sigmaPhi(const double &pt, const double &eta, const T &parval)
virtual double sigmaPhi(const double &pt, const double &eta, const T &parval)
double rightParabola(const double &pt, const double &eta, const T &parval)
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)
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 double operator()(const double *parval, const double &mass, const double &eta) const
virtual double sigmaCotgTh(const double &pt, const double &eta, const T &parval)
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)
This method is used to differentiate parameters among the different functions.
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
FunctionForIntegral(const backgroundFunctionBase *function, const std::vector< double >::const_iterator &parBgrIt)
resolutionFunctionType99()
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 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)
This method is used to differentiate parameters among the different functions.
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.
virtual void resetParameters(std::vector< double > *scaleVec) const
This method is used to reset the scale parameters to neutral values (useful for iterations > 0) ...
double etaCorrection(const double &eta) const
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
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)
This method is used to differentiate parameters among the different functions.
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 void resetParameters(std::vector< double > *scaleVec) const
This method is used to reset the scale parameters to neutral values (useful for iterations > 0) ...
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)
virtual double sigmaCotgTh(const double &pt, const double &eta, const T &parval)
FunctionForIntegral * functionForIntegral_
int etaBin(const double &eta)
virtual void resetParameters(std::vector< double > *scaleVec) const
This method is used to reset the scale parameters to neutral values (useful for iterations > 0) ...
std::vector< std::vector< double > > tmp
virtual double fracVsEta(const double *parval, const double &eta1, const double &eta2) const
double etaCorrection(const double &eta, const T &parScale) const
Linear with eta dependence.
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
virtual double sigmaCotgTh(const double &pt, const double &eta, const T &parval)
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
This is resolution function where sigmaPt/Pt is described by f(Pt) = polynomial(4th grade) and f(Eta)...
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
double leftParabola(const double &pt, const double &eta, const T &parval)
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.
virtual int parNum() const
virtual double operator()(const double *parval, const double &mass, const double &eta) const
virtual double sigmaPt(const double &pt, const double &eta, const T &parval)
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)
This method is used to differentiate parameters among the different functions.
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 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.
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)
This method is used to differentiate parameters among the different functions.
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
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.
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
virtual double sigmaPtError(const double &pt, const double &eta, const T &parval, const T &parError)
virtual void resetParameters(std::vector< double > *scaleVec) const
This method is used to reset the scale parameters to neutral values (useful for iterations > 0) ...
resolutionFunctionBase< double * > * resolutionFunctionService(const int identifier)
Service to build the resolution functor corresponding to the passed identifier.
virtual double sigmaCotgTh(const double &pt, const double &eta, const T &parval)
virtual double covPt1Pt2(const double &pt1, const double &eta1, const double &pt2, const double &eta2, const T &parval)
Exponential binned in eta (Z, Run2012C PromptReco-v1 + PromptReco-v2)
virtual double operator()(const double *parval, const double &mass, const double &eta) const
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
virtual 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)
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)
This method is used to differentiate parameters among the different functions.
virtual void resetParameters(std::vector< double > *scaleVec) const
This method is used to reset the scale parameters to neutral values (useful for iterations > 0) ...
static unsigned int const shift
virtual double sigmaPt(const double &pt, const double &eta, const T &parval)
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.
virtual double fracVsEta(const double *parval, const double &eta1, const double &eta2) const
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)
This method is used to differentiate parameters among the different functions.
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)
This method is used to differentiate parameters among the different functions.
virtual double sigmaPt(const double &pt, const double &eta, const T &parval)
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.
virtual double sigmaCotgTh(const double &pt, const double &eta, const T &parval)
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
virtual double sigmaCotgTh(const double &pt, const double &eta, const T &parval)
backgroundFunctionType7(const double &lowerLimit, const double &upperLimit)
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)
This method is used to differentiate parameters among the different functions.
virtual double sigmaPt(const double &pt, const double &eta, const T &parval)
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.
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.
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.
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)
This method is used to differentiate parameters among the different functions.
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)
This method is used to differentiate parameters among the different functions.
double rightParabolaError(const double &pt, const double &eta, const T &parval, const T &parError)
virtual double sigmaPhi(const double &pt, const double &eta, const T &parval)=0
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.
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)
virtual double sigmaCotgTh(const double &pt, const double &eta, const T &parval)
resolutionFunctionType13()
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)
This method is used to differentiate parameters among the different functions.
resolutionFunctionType47()
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)
This method is used to differentiate parameters among the different functions.
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)
This method is used to differentiate parameters among the different functions.
virtual double sigmaPt(const double &pt, const double &eta, const T &parval)
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 double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
virtual double sigmaPt(const double &pt, const double &eta, const T &parval)
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)
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.
virtual ~smearFunctionBase()=0
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
virtual double operator()(const double *parval, const double &mass, const double &eta) const
virtual double sigmaPt(const double &pt, const double &eta, const T &parval)
virtual double sigmaCotgTh(const double &pt, const double &eta, const T &parval)
virtual double sigmaPhi(const double &pt, const double &eta, const T &parval)
virtual double sigmaPtError(const double &pt, const double &eta, const T &parval, const T &parError)
backgroundFunctionBase * backgroundFunctionService(const int identifier, const double &lowerLimit, const double &upperLimit)
Service to build the background functor corresponding to the passed identifier.
virtual double sigmaCotgTh(const double &pt, const double &eta, const T &parval)
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)
This method is used to differentiate parameters among the different functions.
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 double sigmaPhi(const double &pt, const double &eta, const T &parval)
virtual int parNum() const
virtual double sigmaPtError(const double &pt, const double &eta, const T &parval, const T &parError)
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 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.
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
virtual ~resolutionFunctionBase()=0
virtual double sigmaPhi(const double &pt, const double &eta, const T &parval)
virtual void smear(double &pt, double &eta, double &phi, const double *y, const std::vector< double > &parSmear)
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)
This method is used to differentiate parameters among the different functions.
resolutionFunctionType31()
backgroundFunctionType6(const double &lowerLimit, const double &upperLimit)
virtual double sigmaCotgTh(const double &pt, const double &eta, const T &parval)
double rightParabola(const double &pt, const double &eta, const T &parval)
backgroundFunctionType8(const double &lowerLimit, const double &upperLimit)
Power< A, B >::type pow(const A &a, const B &b)
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)
This method is used to differentiate parameters among the different functions.
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)
This method is used to differentiate parameters among the different functions.
virtual double operator()(const double *parval, const double &mass, const double &eta1, const double &eta2) const
virtual double sigmaPt(const double &pt, const double &eta, const T &parval)
virtual double sigmaPt(const double &pt, const double &eta, const T &parval)
double originalTransition2_
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
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)
This method is used to differentiate parameters among the different functions.
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 double sigmaPt(const double &pt, const double &eta, const T &parval)
virtual void resetParameters(std::vector< double > *scaleVec) const
This method is used to reset the scale parameters to neutral values (useful for iterations > 0) ...
double rightLine(const double &pt, const double &eta, const T &parval)
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)
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const
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)
This method is used to differentiate parameters among the different functions.
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)
virtual double scale(const double &pt, const double &eta, const double &phi, const int chg, const T &par) const
resolutionFunctionType11()
Exponential binned in eta.