3 #ifdef STANDALONE_FITTER 19 double sum_of_weights;
20 double number_of_hits;
21 bool weight_alignment;
28 double getResidual(
double delta_x,
double delta_y,
double delta_z,
29 double delta_phix,
double delta_phiy,
double delta_phiz,
30 double track_x,
double track_y,
double track_dxdz,
double track_dydz,
31 double R,
double alpha,
double resslope)
35 - (track_x/R - 3.*
pow(track_x/R, 3)) * delta_y
36 - track_dxdz * delta_z
37 - track_y * track_dxdz * delta_phix
38 + track_x * track_dxdz * delta_phiy
39 - track_y * delta_phiz
44 double getResSlope(
double delta_x,
double delta_y,
double delta_z,
45 double delta_phix,
double delta_phiy,
double delta_phiz,
46 double track_x,
double track_y,
double track_dxdz,
double track_dydz,
double R)
49 -track_dxdz/2./R * delta_y
50 + (track_x/R - track_dxdz * track_dydz) * delta_phix
51 + (1. + track_dxdz * track_dxdz) * delta_phiy
52 - track_dydz * delta_phiz;
56 double effectiveR(
double x,
double y)
68 Double_t residual_trackx_TF1(Double_t *
xx, Double_t *
p) {
return 10.*getResidual(p[0], p[1], p[2], p[3], p[4], p[5], xx[0], p[7], p[8], p[9], effectiveR(xx[0], p[7]), p[10], p[11]); }
69 Double_t residual_tracky_TF1(Double_t *xx, Double_t *p) {
return 10.*getResidual(p[0], p[1], p[2], p[3], p[4], p[5], p[6], xx[0], p[8], p[9], effectiveR(p[6], xx[0]), p[10], p[11]); }
70 Double_t residual_trackdxdz_TF1(Double_t *xx, Double_t *p) {
return 10.*getResidual(p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], xx[0], p[9], effectiveR(p[6], p[7]), p[10], p[11]); }
71 Double_t residual_trackdydz_TF1(Double_t *xx, Double_t *p) {
return 10.*getResidual(p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8], xx[0], effectiveR(p[6], p[7]), p[10], p[11]); }
73 Double_t resslope_trackx_TF1(Double_t *xx, Double_t *p) {
return 1000.*getResSlope(p[0], p[1], p[2], p[3], p[4], p[5], xx[0], p[7], p[8], p[9], effectiveR(xx[0], p[7])); }
74 Double_t resslope_tracky_TF1(Double_t *xx, Double_t *p) {
return 1000.*getResSlope(p[0], p[1], p[2], p[3], p[4], p[5], p[6], xx[0], p[8], p[9], effectiveR(p[6], xx[0])); }
75 Double_t resslope_trackdxdz_TF1(Double_t *xx, Double_t *p) {
return 1000.*getResSlope(p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], xx[0], p[9], effectiveR(p[6], p[7])); }
76 Double_t resslope_trackdydz_TF1(Double_t *xx, Double_t *p) {
return 1000.*getResSlope(p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8], xx[0], effectiveR(p[6], p[7])); }
108 double coeff =
alpha;
111 double effr = effectiveR(positionX, positionY);
112 double residpeak = getResidual(alignx, aligny, alignz, alignphix, alignphiy, alignphiz, positionX, positionY, angleX, angleY, effr, coeff, resslope);
113 double resslopepeak = getResSlope(alignx, aligny, alignz, alignphix, alignphiy, alignphiz, positionX, positionY, angleX, angleY, effr);
115 double weight = (1./redchi2) * number_of_hits / sum_of_weights;
116 if (!weight_alignment) weight = 1.;
118 if (!weight_alignment || TMath::Prob(redchi2*6, 6) < 0.99)
155 else { assert(
false); }
180 double redchi2 = (*resiter)[
kRedChi2];
181 if (TMath::Prob(redchi2*6, 6) < 0.99) {
182 sum_of_weights += 1./redchi2;
183 number_of_hits += 1.;
187 sum_of_weights += 1.;
188 number_of_hits += 1.;
191 return sum_of_weights;
200 #ifndef STANDALONE_FITTER 209 double res_std = 0.5;
210 double resslope_std = 0.002;
213 std::string names[10] = {
"AlignX",
"AlignZ",
"AlignPhiX",
"AlignPhiY",
"AlignPhiZ",
"ResidSigma",
"ResSlopeSigma",
"Alpha",
"ResidGamma",
"ResSlopeGamma"};
214 double starts[10] = {0., 0., 0., 0., 0., res_std, resslope_std, 0., 0.1*res_std, 0.1*resslope_std};
215 double steps[10] = {0.1, 0.1, 0.001, 0.001, 0.001, 0.001*res_std, 0.001*resslope_std, 0.001, 0.01*res_std, 0.01*resslope_std};
216 double lows[10] = {0., 0., 0., 0., 0., 0., 0., -1., 0., 0.};
217 double highs[10] = {0., 0., 0., 0., 0., 10., 0.1, 1., 0., 0.};
219 std::vector<int>
num(nums, nums+5);
220 std::vector<std::string>
name(names, names+5);
221 std::vector<double>
start(starts, starts+5);
222 std::vector<double>
step(steps, steps+5);
223 std::vector<double> low(lows, lows+5);
224 std::vector<double> high(highs, highs+5);
231 for(ni=0; ni<2; ni++) idx[ni] = ni+5;
232 if (add_alpha) idx[ni++] = 7;
233 else if (add_gamma)
for(; ni<4; ni++) idx[ni] = ni+6;
238 if (add_gamma) idx[ni++] = 8;
244 if (add_gamma) idx[ni++] = 9;
248 for (
int i=0;
i<ni;
i++){
249 num.push_back(nums[idx[
i]]);
250 name.push_back(names[idx[i]]);
251 start.push_back(starts[idx[i]]);
252 step.push_back(steps[idx[i]]);
253 low.push_back(lows[idx[i]]);
254 high.push_back(highs[idx[i]]);
265 double mean_residual = 0., mean_resslope = 0.;
266 double mean_trackx = 0., mean_tracky = 0., mean_trackdxdz = 0., mean_trackdydz = 0.;
271 const double redchi2 = (*rit)[
kRedChi2];
272 double weight = 1./redchi2;
277 double factor_w = 1./(sum_w +
weight);
278 mean_residual = factor_w * (sum_w * mean_residual + weight * (*rit)[
kResid]);
279 mean_resslope = factor_w * (sum_w * mean_resslope + weight * (*rit)[
kResSlope]);
280 mean_trackx = factor_w * (sum_w * mean_trackx + weight * (*rit)[
kPositionX]);
281 mean_tracky = factor_w * (sum_w * mean_tracky + weight * (*rit)[
kPositionY]);
282 mean_trackdxdz = factor_w * (sum_w * mean_trackdxdz + weight * (*rit)[
kAngleX]);
283 mean_trackdydz = factor_w * (sum_w * mean_trackdydz + weight * (*rit)[
kAngleY]);
288 std::string name_residual, name_resslope, name_residual_raw, name_resslope_raw, name_residual_cut, name_alpha;
289 std::string name_residual_trackx, name_resslope_trackx;
290 std::string name_residual_tracky, name_resslope_tracky;
291 std::string name_residual_trackdxdz, name_resslope_trackdxdz;
292 std::string name_residual_trackdydz, name_resslope_trackdydz;
294 name_residual = name +
"_residual";
295 name_resslope = name +
"_resslope";
296 name_residual_raw = name +
"_residual_raw";
297 name_resslope_raw = name +
"_resslope_raw";
298 name_residual_cut = name +
"_residual_cut";
299 name_alpha = name +
"_alpha";
300 name_residual_trackx = name +
"_residual_trackx";
301 name_resslope_trackx = name +
"_resslope_trackx";
302 name_residual_tracky = name +
"_residual_tracky";
303 name_resslope_tracky = name +
"_resslope_tracky";
304 name_residual_trackdxdz = name +
"_residual_trackdxdz";
305 name_resslope_trackdxdz = name +
"_resslope_trackdxdz";
306 name_residual_trackdydz = name +
"_residual_trackdydz";
307 name_resslope_trackdydz = name +
"_resslope_trackdydz";
311 int bins_residual = 100, bins_resslope = 100;
312 double min_residual = -50., max_residual = 50.;
313 double min_resslope = -50., max_resslope = 50.;
314 double min_trackx = -width/2., max_trackx = width/2.;
315 double min_tracky = -length/2., max_tracky = length/2.;
316 double min_trackdxdz = -1.5, max_trackdxdz = 1.5;
317 double min_trackdydz = -1.5, max_trackdydz = 1.5;
319 TH1F *hist_residual = dir->
make<TH1F>(name_residual.c_str(),
"", bins_residual, min_residual, max_residual);
320 TH1F *hist_resslope = dir->
make<TH1F>(name_resslope.c_str(),
"", bins_resslope, min_resslope, max_resslope);
321 TH1F *hist_residual_raw = dir->
make<TH1F>(name_residual_raw.c_str(),
"", bins_residual, min_residual, max_residual);
322 TH1F *hist_resslope_raw = dir->
make<TH1F>(name_resslope_raw.c_str(),
"", bins_resslope, min_resslope, max_resslope);
323 TH1F *hist_residual_cut = dir->
make<TH1F>(name_residual_cut.c_str(),
"", bins_residual, min_residual, max_residual);
324 TH2F *hist_alpha = dir->
make<TH2F>(name_alpha.c_str(),
"", 50, min_resslope, max_resslope, 50, -50., 50.);
326 TProfile *hist_residual_trackx = dir->
make<TProfile>(name_residual_trackx.c_str(),
"", 50, min_trackx, max_trackx, min_residual, max_residual);
327 TProfile *hist_resslope_trackx = dir->
make<TProfile>(name_resslope_trackx.c_str(),
"", 50, min_trackx, max_trackx, min_resslope, max_resslope);
328 TProfile *hist_residual_tracky = dir->
make<TProfile>(name_residual_tracky.c_str(),
"", 50, min_tracky, max_tracky, min_residual, max_residual);
329 TProfile *hist_resslope_tracky = dir->
make<TProfile>(name_resslope_tracky.c_str(),
"", 50, min_tracky, max_tracky, min_resslope, max_resslope);
330 TProfile *hist_residual_trackdxdz = dir->
make<TProfile>(name_residual_trackdxdz.c_str(),
"", 500, min_trackdxdz, max_trackdxdz, min_residual, max_residual);
331 TProfile *hist_resslope_trackdxdz = dir->
make<TProfile>(name_resslope_trackdxdz.c_str(),
"", 500, min_trackdxdz, max_trackdxdz, min_resslope, max_resslope);
332 TProfile *hist_residual_trackdydz = dir->
make<TProfile>(name_residual_trackdydz.c_str(),
"", 500, min_trackdydz, max_trackdydz, min_residual, max_residual);
333 TProfile *hist_resslope_trackdydz = dir->
make<TProfile>(name_resslope_trackdydz.c_str(),
"", 500, min_trackdydz, max_trackdydz, min_resslope, max_resslope);
335 hist_residual_trackx->SetAxisRange(-10., 10.,
"Y");
336 hist_resslope_trackx->SetAxisRange(-10., 10.,
"Y");
337 hist_residual_tracky->SetAxisRange(-10., 10.,
"Y");
338 hist_resslope_tracky->SetAxisRange(-10., 10.,
"Y");
339 hist_residual_trackdxdz->SetAxisRange(-10., 10.,
"Y");
340 hist_resslope_trackdxdz->SetAxisRange(-10., 10.,
"Y");
341 hist_residual_trackdydz->SetAxisRange(-10., 10.,
"Y");
342 hist_resslope_trackdydz->SetAxisRange(-10., 10.,
"Y");
344 name_residual +=
"_fit";
345 name_resslope +=
"_fit";
346 name_alpha +=
"_fit";
347 name_residual_trackx +=
"_fit";
348 name_resslope_trackx +=
"_fit";
349 name_residual_tracky +=
"_fit";
350 name_resslope_tracky +=
"_fit";
351 name_residual_trackdxdz +=
"_fit";
352 name_resslope_trackdxdz +=
"_fit";
353 name_residual_trackdydz +=
"_fit";
354 name_resslope_trackdydz +=
"_fit";
356 TF1 *fit_residual =
nullptr;
357 TF1 *fit_resslope =
nullptr;
362 fit_residual->SetParErrors(er_res);
366 fit_resslope->SetParErrors(er_resslope);
386 else { assert(
false); }
388 fit_residual->SetLineColor(2); fit_residual->SetLineWidth(2); fit_residual->Write();
389 fit_resslope->SetLineColor(2); fit_resslope->SetLineWidth(2); fit_resslope->Write();
391 TF1 *fit_alpha =
new TF1(name_alpha.c_str(),
"[0] + x*[1]", min_resslope, max_resslope);
401 a = -
b * mean_resslope;
404 fit_alpha->SetParameters(a,
b);
405 fit_alpha->SetLineColor(2); fit_alpha->SetLineWidth(2); fit_alpha->Write();
407 TProfile *fit_residual_trackx = dir->
make<TProfile>(name_residual_trackx.c_str(),
"", 100, min_trackx, max_trackx);
408 TProfile *fit_resslope_trackx = dir->
make<TProfile>(name_resslope_trackx.c_str(),
"", 100, min_trackx, max_trackx);
409 TProfile *fit_residual_tracky = dir->
make<TProfile>(name_residual_tracky.c_str(),
"", 100, min_tracky, max_tracky);
410 TProfile *fit_resslope_tracky = dir->
make<TProfile>(name_resslope_tracky.c_str(),
"", 100, min_tracky, max_tracky);
411 TProfile *fit_residual_trackdxdz = dir->
make<TProfile>(name_residual_trackdxdz.c_str(),
"", 500, min_trackdxdz, max_trackdxdz);
412 TProfile *fit_resslope_trackdxdz = dir->
make<TProfile>(name_resslope_trackdxdz.c_str(),
"", 500, min_trackdxdz, max_trackdxdz);
413 TProfile *fit_residual_trackdydz = dir->
make<TProfile>(name_residual_trackdydz.c_str(),
"", 500, min_trackdydz, max_trackdydz);
414 TProfile *fit_resslope_trackdydz = dir->
make<TProfile>(name_resslope_trackdydz.c_str(),
"", 500, min_trackdydz, max_trackdydz);
416 fit_residual_trackx->SetLineColor(2); fit_residual_trackx->SetLineWidth(2);
417 fit_resslope_trackx->SetLineColor(2); fit_resslope_trackx->SetLineWidth(2);
418 fit_residual_tracky->SetLineColor(2); fit_residual_tracky->SetLineWidth(2);
419 fit_resslope_tracky->SetLineColor(2); fit_resslope_tracky->SetLineWidth(2);
420 fit_residual_trackdxdz->SetLineColor(2); fit_residual_trackdxdz->SetLineWidth(2);
421 fit_resslope_trackdxdz->SetLineColor(2); fit_resslope_trackdxdz->SetLineWidth(2);
422 fit_residual_trackdydz->SetLineColor(2); fit_residual_trackdydz->SetLineWidth(2);
423 fit_resslope_trackdydz->SetLineColor(2); fit_resslope_trackdydz->SetLineWidth(2);
425 name_residual_trackx +=
"line";
426 name_resslope_trackx +=
"line";
427 name_residual_tracky +=
"line";
428 name_resslope_tracky +=
"line";
429 name_residual_trackdxdz +=
"line";
430 name_resslope_trackdxdz +=
"line";
431 name_residual_trackdydz +=
"line";
432 name_resslope_trackdydz +=
"line";
434 TF1 *fitline_residual_trackx =
new TF1(name_residual_trackx.c_str(), residual_trackx_TF1, min_trackx, max_trackx, 12);
435 TF1 *fitline_resslope_trackx =
new TF1(name_resslope_trackx.c_str(), resslope_trackx_TF1, min_trackx, max_trackx, 12);
436 TF1 *fitline_residual_tracky =
new TF1(name_residual_tracky.c_str(), residual_tracky_TF1, min_tracky, max_tracky, 12);
437 TF1 *fitline_resslope_tracky =
new TF1(name_resslope_tracky.c_str(), resslope_tracky_TF1, min_tracky, max_tracky, 12);
438 TF1 *fitline_residual_trackdxdz =
new TF1(name_residual_trackdxdz.c_str(), residual_trackdxdz_TF1, min_trackdxdz, max_trackdxdz, 12);
439 TF1 *fitline_resslope_trackdxdz =
new TF1(name_resslope_trackdxdz.c_str(), resslope_trackdxdz_TF1, min_trackdxdz, max_trackdxdz, 12);
440 TF1 *fitline_residual_trackdydz =
new TF1(name_residual_trackdydz.c_str(), residual_trackdydz_TF1, min_trackdydz, max_trackdydz, 12);
441 TF1 *fitline_resslope_trackdydz =
new TF1(name_resslope_trackdydz.c_str(), resslope_trackdydz_TF1, min_trackdydz, max_trackdydz, 12);
443 std::vector< TF1* > fitlines;
444 fitlines.push_back(fitline_residual_trackx);
445 fitlines.push_back(fitline_resslope_trackx);
446 fitlines.push_back(fitline_residual_tracky);
447 fitlines.push_back(fitline_resslope_tracky);
448 fitlines.push_back(fitline_residual_trackdxdz);
449 fitlines.push_back(fitline_resslope_trackdxdz);
450 fitlines.push_back(fitline_residual_trackdydz);
451 fitlines.push_back(fitline_resslope_trackdydz);
454 mean_trackx, mean_tracky, mean_trackdxdz, mean_trackdydz,
value(
kAlpha), mean_resslope};
457 for(std::vector<TF1*>::const_iterator itr = fitlines.begin(); itr != fitlines.end(); itr++)
459 (*itr)->SetParameters(fitparameters);
460 (*itr)->SetLineColor(2);
461 (*itr)->SetLineWidth(2);
466 const double resid = (*resiter)[
kResid];
467 const double resslope = (*resiter)[
kResSlope];
468 const double positionX = (*resiter)[
kPositionX];
469 const double positionY = (*resiter)[
kPositionY];
470 const double angleX = (*resiter)[
kAngleX];
471 const double angleY = (*resiter)[
kAngleY];
472 const double redchi2 = (*resiter)[
kRedChi2];
473 double weight = 1./redchi2;
477 hist_alpha->Fill(1000.*resslope, 10.*resid);
481 double geom_resid = getResidual(
value(
kAlignX),
value(
kAlignY),
value(
kAlignZ),
value(
kAlignPhiX),
value(
kAlignPhiY),
value(
kAlignPhiZ), positionX, positionY, angleX, angleY, effectiveR(positionX, positionY), coeff, resslope);
482 hist_residual->Fill(10.*(resid - geom_resid +
value(
kAlignX)), weight);
483 hist_residual_trackx->Fill(positionX, 10.*resid, weight);
484 hist_residual_tracky->Fill(positionY, 10.*resid, weight);
485 hist_residual_trackdxdz->Fill(angleX, 10.*resid, weight);
486 hist_residual_trackdydz->Fill(angleY, 10.*resid, weight);
487 fit_residual_trackx->Fill(positionX, 10.*geom_resid, weight);
488 fit_residual_tracky->Fill(positionY, 10.*geom_resid, weight);
489 fit_residual_trackdxdz->Fill(angleX, 10.*geom_resid, weight);
490 fit_residual_trackdydz->Fill(angleY, 10.*geom_resid, weight);
492 double geom_resslope = getResSlope(
value(
kAlignX),
value(
kAlignY),
value(
kAlignZ),
value(
kAlignPhiX),
value(
kAlignPhiY),
value(
kAlignPhiZ), positionX, positionY, angleX, angleY, effectiveR(positionX, positionY));
493 hist_resslope->Fill(1000.*(resslope - geom_resslope +
value(
kAlignPhiY)), weight);
494 hist_resslope_trackx->Fill(positionX, 1000.*resslope, weight);
495 hist_resslope_tracky->Fill(positionY, 1000.*resslope, weight);
496 hist_resslope_trackdxdz->Fill(angleX, 1000.*resslope, weight);
497 hist_resslope_trackdydz->Fill(angleY, 1000.*resslope, weight);
498 fit_resslope_trackx->Fill(positionX, 1000.*geom_resslope, weight);
499 fit_resslope_tracky->Fill(positionY, 1000.*geom_resslope, weight);
500 fit_resslope_trackdxdz->Fill(angleX, 1000.*geom_resslope, weight);
501 fit_resslope_trackdydz->Fill(angleY, 1000.*geom_resslope, weight);
504 hist_residual_raw->Fill(10.*resid);
505 hist_resslope_raw->Fill(1000.*resslope);
506 if (fabs(resslope) < 0.005) hist_residual_cut->Fill(10.*resid);
511 for (
int i = 1;
i <= hist_residual->GetNbinsX();
i++) {
512 double xi = hist_residual->GetBinCenter(
i);
513 double yi = hist_residual->GetBinContent(
i);
514 double yerri = hist_residual->GetBinError(
i);
515 double yth = fit_residual->Eval(xi);
517 chi2 +=
pow((yth - yi)/yerri, 2);
521 for (
int i = 1;
i <= hist_resslope->GetNbinsX();
i++) {
522 double xi = hist_resslope->GetBinCenter(
i);
523 double yi = hist_resslope->GetBinContent(
i);
524 double yerri = hist_resslope->GetBinError(
i);
525 double yth = fit_resslope->Eval(xi);
527 chi2 +=
pow((yth - yi)/yerri, 2);
533 return (ndof > 0. ? chi2 / ndof : -1.);
539 TFile *
f =
new TFile(fname.c_str());
540 TTree *
t = (TTree*)f->Get(
"mual_ttree");
543 TFile *tmpf =
new TFile(
"small_tree_fit.root",
"recreate");
544 assert(tmpf!=
nullptr);
547 TTree *
tt = t->CopyTree(Form(
"!is_dt && is_plus==%d && ring_wheel==%d && station==%d && sector==%d && select==%d", 2-endcap, station, ring, chamber, (
bool)preselected));
550 tt->SetBranchAddress(
"res_x", &r.
res_x);
551 tt->SetBranchAddress(
"res_slope_x", &r.
res_slope_x);
552 tt->SetBranchAddress(
"pos_x", &r.
pos_x);
553 tt->SetBranchAddress(
"pos_y", &r.
pos_y);
554 tt->SetBranchAddress(
"angle_x", &r.
angle_x);
555 tt->SetBranchAddress(
"angle_y", &r.
angle_y);
556 tt->SetBranchAddress(
"pz", &r.
pz);
557 tt->SetBranchAddress(
"pt", &r.
pt);
558 tt->SetBranchAddress(
"q", &r.
q);
560 Long64_t nentries = tt->GetEntries();
561 for (Long64_t
i=0;
i<nentries;
i++)
align::Scalar width() const
double MuonResidualsFitter_logGaussPowerTails(double residual, double center, double sigma)
Double_t MuonResidualsFitter_powerLawTails_TF1(Double_t *xvec, Double_t *par)
static const HistoName names[]
double MuonResidualsFitter_logPureGaussian2D(double x, double y, double x0, double y0, double sx, double sy, double r)
void fill(double *residual)
MuonResidualsFitter * fitter()
int residualsModel() const
TTree * readNtuple(std::string fname, unsigned int endcap, unsigned int station, unsigned int ring, unsigned int chamber, unsigned int preselected=1)
void correctBField() override
bool dofit(void(*fcn)(int &, double *, double &, double *, int), std::vector< int > &parNum, std::vector< std::string > &parName, std::vector< double > &start, std::vector< double > &step, std::vector< double > &low, std::vector< double > &high)
double MuonResidualsFitter_logROOTVoigt(double residual, double center, double sigma, double gamma)
void inform(TMinuit *tMinuit) override
double plot(std::string name, TFileDirectory *dir, Alignable *ali) override
void MuonResiduals6DOFrphiFitter_FCN(int &npar, double *gin, double &fval, double *par, int iflag)
double MuonResidualsFitter_logPowerLawTails(double residual, double center, double sigma, double gamma)
Double_t MuonResidualsFitter_GaussPowerTails_TF1(Double_t *xvec, Double_t *par)
void fix(int parNum, bool dofix=true)
bool fit(Alignable *ali) override
T * make(const Args &...args) const
make new ROOT object
virtual void correctBField()=0
const AlignableSurface & surface() const
Return the Surface (global position and orientation) of the object.
Double_t MuonResidualsFitter_pureGaussian_TF1(Double_t *xvec, Double_t *par)
align::Scalar length() const
double errorerror(int parNum)
std::vector< double * >::const_iterator residuals_end() const
int useRes(int pattern=-1)
const PositionType & globalPosition() const
Return the global position of the object.
Double_t MuonResidualsFitter_ROOTVoigt_TF1(Double_t *xvec, Double_t *par)
std::vector< double * >::const_iterator residuals_begin() const
double MuonResidualsFitter_logPureGaussian(double residual, double center, double sigma)
Power< A, B >::type pow(const A &a, const B &b)
double sumofweights() override