78 string fncname =
"fResolution_" +
name_;
80 if (doGaussian)
resolutionFnc_=
new TF1(fncname.c_str(),
"gaus",0.,5.);
84 else resolutionFnc_=
new TF1(fncname.c_str(),formula.c_str(),0.,5.);
86 resolutionFnc_->SetNpx(200);
87 resolutionFnc_->SetParName(0,
"N");
88 resolutionFnc_->SetParameter(0,1.0);
93 while (!tmp.empty()) {
94 string paramAsStr = tmp.substr(0,pos);
95 if (!doGaussian||paramAsStr==
"mean"||paramAsStr==
"sigma") {
97 formula =
parameters_.back()->definitions().formula();
101 resolutionFnc_->SetParName(nPar,
parameters_.back()->definitions().level().c_str());
104 tmp = (pos==string::npos) ?
"" : tmp.substr(pos+1);
108 assert(nPar==(
unsigned)resolutionFnc_->GetNpar());
109 assert(!doGaussian||nPar==3);
116 vector<float>
x; x.push_back(eta);
117 vector<float>
y; y.push_back(pt);
124 const vector<float>&
y)
const
126 unsigned N(y.size());
127 for (
unsigned iPar=0;iPar<
parameters_.size();iPar++) {
131 const std::vector<float>& pars =
parameters_[iPar]->record(bin).parameters();
132 for (
unsigned i=2*
N;
i<pars.size();
i++)
135 for (
unsigned i=0;i<
N;i++)
136 yy[i] = (y[i] < pars[2*i]) ? pars[2*
i] : (y[
i] > pars[2*i+1]) ? pars[2*i+1] : y[i];
147 vector<float>
x; x.push_back(eta);
158 if (fncname.find(
"f"+parameterName)==0) {
160 for (
unsigned ii=0;ii<x.size();ii++)
161 ssname<<
"_"<<
parameters_[
i]->definitions().binVar(ii)<<x[ii];
163 result->SetName(ssname.str().c_str());
168 const std::vector<float>& pars =
parameters_[
i]->record(bin).parameters();
169 for (
unsigned ii=2*N;ii<pars.size();ii++) result->SetParameter(ii-2*N,pars[ii]);
173 if (0==result)
cerr<<
"JetResolution::parameter() ERROR: no parameter "
174 <<parameterName<<
" found."<<endl;
196 double u = (x-mu)/sig;
197 double A1 = TMath::Power(p1/TMath::Abs(a1),p1)*TMath::Exp(-a1*a1/2);
198 double A2 = TMath::Power(p2/TMath::Abs(a2),p2)*TMath::Exp(-a2*a2/2);
199 double B1 = p1/TMath::Abs(a1) - TMath::Abs(a1);
200 double B2 = p2/TMath::Abs(a2) - TMath::Abs(a2);
203 if (u<-a1) result *= A1*TMath::Power(B1-u,-p1);
204 else if (u<a2) result *= TMath::Exp(-u*u/2);
205 else result *= A2*TMath::Power(B2+u,-p2);
217 double t =TMath::Abs((v[0]-mean)/sigma);
219 return (t<=cut) ? N*TMath::Exp(-0.5*t*t) : N*TMath::Exp(-0.5*(alpha*(t-cut)+cut*cut));
228 double sigma =par[2];
229 double alpha1=par[3];
230 double alpha2=par[4];
231 double t =TMath::Abs((v[0]-mean)/sigma);
234 (t<=cut) ? N*TMath::Exp(-0.5*t*t) :
235 ((v[0]-
mean)>=0) ? N*TMath::Exp(-0.5*(alpha1*(t-cut)+cut*cut)) :
236 N*TMath::Exp(-0.5*(alpha2*(t-cut)+cut*cut));
const std::string & name() const
void initialize(const std::string &fileName, bool doGaussian=false)
double fnc_dscb(double *xx, double *pp)
TF1 * parameterEta(const std::string ¶meterName, float eta)
double fnc_gaussalpha(double *xx, double *pp)
const Definitions & definitions() const
std::vector< TF1 * > parameterFncs_
std::vector< JetCorrectorParameters * > parameters_
std::string formula() const
TF1 * resolution(const std::vector< float > &x, const std::vector< float > &y) const
TF1 * parameter(const std::string ¶meterName, const std::vector< float > &x)
std::string level() const
std::vector< std::vector< double > > tmp
TF1 * resolutionEtaPt(float eta, float pt) const
double fnc_gaussalpha1alpha2(double *xx, double *pp)
tuple size
Write out results.
const double par[8 *NPar][4]