sipm-characterisation 0.1.0
SiPM characterisation for ePIC — IV/DCR/gain, laser, readout, irradiation
Loading...
Searching...
No Matches
graphutils.C
Go to the documentation of this file.
1#pragma once
2#include "utility.h"
3
4namespace graphutils
5{
7
8 // Addition
9 TGraphErrors *add(TGraphErrors *g_target, std::array<double, 2> addend, bool square_err_sum = true);
11
12 // Power
14}
15
17{
18 // Generate copy to work on
19 auto result_graph = (TGraphErrors *)target_graph->Clone(Form("graphutils_power_%i", internal_generation_counter));
21
22 // Loop on points
23 for (int i_pnt = 0; i_pnt < target_graph->GetN(); i_pnt++)
24 {
25 // Get current values
26 auto current_x = target_graph->GetPointX(i_pnt);
27 auto current_y = target_graph->GetPointY(i_pnt);
28 auto current_ex = target_graph->GetErrorX(i_pnt);
29 auto current_ey = target_graph->GetErrorY(i_pnt);
30
31 if (exponent < 0 && current_y == 0)
32 continue;
33
34 // Assign new values to result graph
35 result_graph->SetPoint(i_pnt, current_x, TMath::Power(current_y, exponent));
36 result_graph->SetPointError(i_pnt, current_ex, ((current_ey) / (current_y)) * fabs(exponent) * TMath::Power(current_y, exponent));
37 }
38
39 return result_graph;
40}
41
43{
44 // Generate copy to work on
45 auto result_graph = (TGraphErrors *)target_graph->Clone(Form("graphutils_add_%i", internal_generation_counter));
47
48 // Loop on points
49 for (int i_pnt = 0; i_pnt < target_graph->GetN(); i_pnt++)
50 {
51 // Get current values
52 auto current_x = target_graph->GetPointX(i_pnt);
53 auto current_y = target_graph->GetPointY(i_pnt);
54 auto current_ex = target_graph->GetErrorX(i_pnt);
55 auto current_ey = target_graph->GetErrorY(i_pnt);
56
57 // Assign new values to result graph
60 result_graph->SetPointError(i_pnt, current_ex, sqrt(current_ey * current_ey + addend[1] * addend[1]));
61 else
62 result_graph->SetPointError(i_pnt, current_ex, current_ey + addend[1]);
63 }
64
65 return result_graph;
66}
67
68// Sort me
69
70namespace graphutils
71{
72
73 void reassign_x_values(TGraphErrors *gTarget, std::vector<std::array<float, 2>> new_axis)
74 {
75 if (new_axis.size() < (gTarget->GetN()))
76 throw std::invalid_argument("[ERROR][graphutils::reassign_x_values] reassing axis must be larger than n points");
77 for (auto iPnt = 0; iPnt < gTarget->GetN(); iPnt++)
78 {
79 gTarget->GetX()[iPnt] = new_axis[iPnt][0];
80 gTarget->GetEX()[iPnt] = new_axis[iPnt][1];
81 }
82 }
83
84 std::array<float, 2>
86 {
87 auto iPnt = 0;
88 auto current_x = 1.;
89 auto previous_x = 1.;
90 float interpolated_y = -1.;
91 float interpolated_ey = -1.;
92 for (iPnt = 1; iPnt < gTarget->GetN() - 1; iPnt++)
93 {
94 current_x = gTarget->GetPointX(iPnt);
95 previous_x = gTarget->GetPointX(iPnt - 1);
96 if ((current_x >= _xtarget) && (previous_x <= _xtarget))
97 {
98 break;
99 }
100 }
101 if (iPnt == gTarget->GetN() - 1)
102 {
104 }
107 interpolated_y = coeff_y1 * gTarget->GetPointY(iPnt) + coeff_y0 * gTarget->GetPointY(iPnt - 1);
108 interpolated_ey = sqrt((coeff_y0 * gTarget->GetErrorY(iPnt)) * (coeff_y0 * gTarget->GetErrorY(iPnt)) + (coeff_y1 * gTarget->GetErrorY(iPnt - 1)) * (coeff_y1 * gTarget->GetErrorY(iPnt - 1)));
110 }
111
112 void
114 {
115 if (!g)
116 return;
117 g->SetMarkerStyle(marker);
118 g->SetMarkerColor(color);
119 g->SetLineColor(color);
120 g->SetFillColor(color);
121 g->SetFillStyle(fill);
122 }
123
124 std::map<std::string, TGraphErrors *>
126 {
127 std::map<std::string, TGraphErrors *> result;
128 result["ave_err"] = new TGraphErrors();
129 std::map<double, std::vector<std::array<double, 2>>> aggregator;
130 for (auto current_point = 0; current_point < target_graph->GetN(); current_point++)
131 aggregator[target_graph->GetPointX(current_point)].push_back({target_graph->GetPointY(current_point), target_graph->GetErrorY(current_point)});
132 auto i_pnt = -1;
133 for (auto [x_value, y_values_array] : aggregator)
134 {
135 i_pnt++;
137 result["ave_err"]->SetPoint(i_pnt, x_value, current_average["ave_err"][0]);
138 result["ave_err"]->SetPointError(i_pnt, 0, current_average["ave_err"][1]);
139 }
140 return result;
141 }
142
144 {
145 auto result = new TGraphErrors();
147 {
148 double current_x = 0.;
149 double current_y = 0.;
150 double current_ex = 0.;
151 double current_ey = 0.;
152 for (int j = i_pnt; j < i_pnt + average_over_n_points; ++j)
153 {
154 current_x += target_graph->GetX()[j];
155 current_y += target_graph->GetY()[j];
156 current_ex += target_graph->GetEX()[j];
157 current_ey += target_graph->GetEY()[j];
158 }
163 auto current_point = result->GetN();
165 result->SetPointError(current_point, current_ex, current_ey);
166 }
167 return result;
168 }
169
170 std::map<std::string, TGraphErrors *>
171 average_graphs(std::vector<TGraphErrors *> graphs_list)
172 {
173 std::map<std::string, TGraphErrors *> result;
174 for (auto i_pnt = 0; i_pnt < graphs_list[0]->GetN(); i_pnt++)
175 {
176 std::vector<std::array<double, 2>> current_point_x;
177 std::vector<std::array<double, 2>> current_point_y;
178 for (auto current_graph : graphs_list)
179 {
180 current_point_x.push_back({current_graph->GetPointX(i_pnt), current_graph->GetErrorX(i_pnt)});
181 current_point_y.push_back({current_graph->GetPointY(i_pnt), current_graph->GetErrorY(i_pnt)});
182 }
185 for (auto [type, value] : current_average_x)
186 {
187 if (i_pnt == 0)
188 result[type] = new TGraphErrors();
189 result[type]->SetPoint(i_pnt, current_average_x[type][0], current_average_y[type][0]);
190 result[type]->SetPointError(i_pnt, current_average_x[type][1], current_average_y[type][1]);
191 }
192 }
193 return result;
194 }
195
196 std::map<std::string, TGraphErrors *>
197 make_average_rms(std::vector<TGraphErrors *> graphs, int marker = 20, int color = kAzure - 3)
198 {
199 TProfile p("p", "", 20000, -100., 100.);
200 TProfile pS("pS", "", 20000, -100., 100., "S");
201 double themin[20000], themax[20000];
202 for (int i = 0; i < 20000; ++i)
203 themin[i] = themax[i] = -999.;
204 for (auto g : graphs)
205 {
206 for (int j = 0; j < g->GetN(); ++j)
207 {
208 auto x = g->GetX()[j];
209 auto y = g->GetY()[j];
210 int ibin = p.Fill(x, y);
211 pS.Fill(x, y);
212 if (themin[ibin - 1] == -999.)
213 themin[ibin - 1] = y;
214 if (themax[ibin - 1] == -999.)
215 themax[ibin - 1] = y;
216 if (y < themin[ibin - 1])
217 themin[ibin - 1] = y;
218 if (y > themax[ibin - 1])
219 themax[ibin - 1] = y;
220 }
221 }
222
224 gave->SetName("gave");
227 grms->SetName("grms");
228 // set_style(grms, marker, color, 3002);
231 gwidth->SetName("gwidth");
233 for (int i = 0; i < p.GetNbinsX(); ++i)
234 {
235 if (p.GetBinError(i + 1) <= 0)
236 continue;
237 auto n = gave->GetN();
238 gave->SetPoint(n, p.GetBinLowEdge(i + 1), p.GetBinContent(i + 1));
239 gave->SetPointError(n, 0., p.GetBinError(i + 1));
240 grms->SetPoint(n, p.GetBinLowEdge(i + 1), p.GetBinContent(i + 1));
241 grms->SetPointError(n, 0., pS.GetBinError(i + 1));
242 gwidth->SetPoint(n, p.GetBinLowEdge(i + 1), 0.5 * (themax[i] + themin[i]));
243 gwidth->SetPointError(n, 0., 0.5 * (themax[i] - themin[i]));
244 }
245
246 return {{"average", gave}, {"rms", grms}, {"width", gwidth}};
247 }
248
249 void remove_points(TGraphErrors *g, double min, double max)
250 {
251 int i = 0;
252 while (i < g->GetN())
253 {
254 if (g->GetX()[i] < min || g->GetX()[i] > max)
255 {
256 g->RemovePoint(i);
257 i = 0;
258 }
259 else
260 ++i;
261 }
262 }
263
265 {
266 for (int i = 0; i < g->GetN(); ++i)
267 {
268 g->GetX()[i] *= scale;
269 g->GetEX()[i] *= scale;
270 }
271 }
272
274 {
275 for (int i = 0; i < g->GetN(); ++i)
276 {
277 g->GetY()[i] *= scale;
278 g->GetEY()[i] *= scale;
279 }
280 }
281
282 void y_scale(std::vector<TGraphErrors *> vg, double scale)
283 {
284 for (auto &g : vg)
285 y_scale(g, scale);
286 }
287
288 TH1 *project(TGraphErrors *g, int nbins, double min, double max)
289 {
290 auto h = new TH1F("h", "", nbins, min, max);
291 for (int i = 0; i < g->GetN(); ++i)
292 {
293 h->Fill(g->GetY()[i]);
294 }
295 return h;
296 }
297
298 void style(TGraphErrors *g, int marker, int color)
299 {
300 g->SetMarkerStyle(marker);
301 g->SetMarkerColor(color);
302 g->SetLineColor(color);
303 }
304
305 void style(std::vector<TGraphErrors *> vg, int marker, int color)
306 {
307 for (auto g : vg)
308 style(g, marker, color);
309 }
310
311 void draw(std::vector<TGraphErrors *> vg, const char *opt = "")
312 {
313 for (auto g : vg)
314 g->Draw(opt);
315 }
316
319 {
320 auto g = (TGraphErrors *)gin->Clone();
321 g->Set(0);
322 g->SetName(gin->GetName());
323 for (int i = 0; i < gin->GetN(); ++i)
324 {
325 auto x = gin->GetX()[i];
326 auto ex = gin->GetEX()[i];
327 auto y = gin->GetY()[i];
328 auto ey = gin->GetEY()[i];
329 g->SetPoint(i, x, y / factor);
330 g->SetPointError(i, ex, ey / factor);
331 }
332 return g;
333 }
334
336 {
337 auto result = (TGraphErrors *)target_graph->Clone(target_graph->GetName());
338 result->Set(0);
339 for (int i = 0; i < target_graph->GetN(); ++i)
340 {
341 auto x = target_graph->GetX()[i];
342 auto ex = target_graph->GetEX()[i];
343 auto y = target_graph->GetY()[i];
344 auto ey = target_graph->GetEY()[i];
345 auto factor = scaling_factor[0];
346 auto efactor = scaling_factor[1];
347 result->SetPoint(i, x, y / factor);
348 result->SetPointError(i, ex, sqrt(ey * ey / (factor * factor) + ((efactor * efactor) * (y * y) / (factor * factor * factor * factor))));
349 }
350 return result;
351 }
352
353 std::pair<double, double>
354 eval(TGraphErrors *g, double x)
355 {
357 for (int i = 0; i < g->GetN(); ++i)
358 {
359 gval.SetPoint(i, g->GetX()[i], g->GetY()[i]);
360 gerr.SetPoint(i, g->GetX()[i], g->GetEY()[i]);
361 }
362 return {gval.Eval(x), gerr.Eval(x)};
363 }
364
367 {
368 auto g = (TGraphErrors *)gin->Clone();
369 g->Set(0);
370 g->SetName(gin->GetName());
371 for (int i = 0; i < gin->GetN(); ++i)
372 {
373 auto x = gin->GetX()[i];
374 auto ex = gin->GetEX()[i];
375 auto y = gin->GetY()[i];
376 auto ey = gin->GetEY()[i];
377 g->SetPoint(i, y, x);
378 g->SetPointError(i, ey, ex);
379 }
380 return g;
381 }
382
383 TGraph *
385 {
386 auto g = (TGraph *)gin->Clone();
387 g->Set(0);
388 g->SetName(gin->GetName());
389 for (int i = 0; i < gin->GetN(); ++i)
390 {
391 auto x = gin->GetX()[i];
392 auto y = gin->GetY()[i];
393 g->SetPoint(i, y, x);
394 }
395 return g;
396 }
397
400 {
401 auto g = (TGraphErrors *)gin->Clone();
402 g->Set(0);
403 g->SetName(gin->GetName());
404 for (int i = 0; i < gin->GetN(); ++i)
405 {
406 if (gin->GetEY()[i] <= 0.)
407 continue;
408 auto x0 = gin->GetX()[i];
409 auto y0 = gin->GetY()[i];
410 auto ey0 = gin->GetEY()[i];
411 for (int j = i + 1; j < gin->GetN(); ++j)
412 {
413 if (gin->GetEY()[j] <= 0.)
414 continue;
415 auto x1 = gin->GetX()[j];
416 auto y1 = gin->GetY()[j];
417 auto ey1 = gin->GetEY()[j];
418
419 auto val = sign * (y1 - y0);
420 auto vale = TMath::Sqrt(ey1 * ey1 + ey0 * ey0);
421
422 auto n = g->GetN();
423 // g->SetPoint(n, 0.5*(x0 + x1), val);
424 g->SetPoint(n, x0, val);
425 // g->SetPointError(n, 0.5*(x1 - x0), vale);
426 g->SetPointError(n, 0., vale);
427 break;
428 }
429 }
430
431 return g;
432 }
433
434 TGraph *
435 derivate(TGraph *gin, double sign = 1.)
436 {
437 auto g = (TGraph *)gin->Clone();
438 g->Set(0);
439 g->SetName(gin->GetName());
440 for (int i = 0; i < gin->GetN(); ++i)
441 {
442 auto x0 = gin->GetX()[i];
443 auto y0 = gin->GetY()[i];
444 for (int j = i + 1; j < gin->GetN(); ++j)
445 {
446 auto x1 = gin->GetX()[j];
447 auto y1 = gin->GetY()[j];
448
449 auto val = sign * (y1 - y0) / (x1 - x0);
450
451 auto n = g->GetN();
452 // g->SetPoint(n, 0.5*(x0 + x1), val);
453 g->SetPoint(n, x0, val);
454 // g->SetPointError(n, 0.5*(x1 - x0), vale);
455 break;
456 }
457 }
458
459 return g;
460 }
461
462 /*
463 TGraphErrors *
464 derivate(TGraphErrors *gin)
465 {
466 auto g = (TGraphErrors*)gin->Clone();
467 g->Set(0);
468 g->SetName(gin->GetName());
469 for (int i = 0; i < gin->GetN(); ++i) {
470 if (gin->GetEY()[i] <= 0.) continue;
471 auto x0 = gin->GetX()[i];
472 auto y0 = gin->GetY()[i];
473 auto ey0 = gin->GetEY()[i];
474 for (int j = i + 1; j < gin->GetN(); ++j) {
475 if (gin->GetEY()[j] <= 0.) continue;
476 auto x1 = gin->GetX()[j];
477 auto y1 = gin->GetY()[j];
478 auto ey1 = gin->GetEY()[j];
479
480 auto cen = 0.5 * (x1 + x0);
481 auto val = -(y1 - y0) / (x1 - x0);
482 auto vale = TMath::Sqrt(ey1 * ey1 + ey0 * ey0) / (x1 - x0);
483
484 auto n = g->GetN();
485 g->SetPoint(n, cen, val);
486 g->SetPointError(n, 0, vale);
487 break;
488 }
489 }
490
491 return g;
492 }
493 */
494
497 {
498 auto g = (TGraphErrors *)gn->Clone();
499 g->Set(0);
500 g->SetName(gn->GetName());
501 for (int i = 0; i < gn->GetN(); ++i)
502 {
503 auto x = gn->GetX()[i];
504 auto y = gn->GetY()[i];
505 auto ex = gn->GetEX()[i];
506 auto ey = gn->GetEY()[i];
507 if (x < gd->GetX()[0])
508 continue;
509 if (x > gd->GetX()[gd->GetN() - 1])
510 continue;
511 if (gn->Eval(x) == 0. || gd->Eval(x) == 0.)
512 continue;
513 auto ret = eval(gd, x);
514 auto d = ret.first;
515 auto ed = ret.second;
516 auto rey = ey / y;
517 auto red = ed / d;
518 y = y / d;
519 if (propagate_error)
520 ey = sqrt(rey * rey + red * red) * y;
521 else
522 ey = ey / d;
523 auto n = g->GetN();
524 g->SetPoint(n, x, y);
525 g->SetPointError(n, ex, ey);
526 n++;
527 }
528 return g;
529 }
530
533 {
534 auto g = (TGraphErrors *)gn->Clone();
535 g->Set(0);
536 g->SetName(gn->GetName());
537 for (int i = 0; i < gn->GetN(); ++i)
538 {
539 auto x = gn->GetX()[i];
540 auto y = gn->GetY()[i];
541 auto ex = gn->GetEX()[i];
542 auto ey = gn->GetEY()[i];
543 if (gn->Eval(x) == 0. || gd->Eval(x) == 0.)
544 continue;
545 auto ret = eval(gd, x);
546 auto d = ret.first;
547 auto ed = ret.second;
548 auto rey = ey / y;
549 auto red = ed / d;
550 y = y * d;
551 if (propagate_error)
552 ey = sqrt(rey * rey + red * red) * y;
553 else
554 ey = ey * d;
555 auto n = g->GetN();
556 g->SetPoint(n, x, y);
557 g->SetPointError(n, ex, ey);
558 n++;
559 }
560 return g;
561 }
562
565 {
566 auto g = new TGraphErrors;
567 for (int i = 0; i < gin->GetN(); ++i)
568 {
569 auto x = gin->GetX()[i];
570 auto y = gin->GetY()[i];
571 auto ex = gin->GetEX()[i];
572 auto ey = gin->GetEY()[i];
573 g->SetPoint(i, x, std::log(y));
574 g->SetPointError(i, ex, ey / y);
575 }
576 return g;
577 }
578
581 {
582 auto g = new TGraphErrors;
583 for (int i = 0; i < gin->GetN(); ++i)
584 {
585 auto x = gin->GetX()[i];
586 auto y = gin->GetY()[i];
587 auto ex = gin->GetEX()[i];
588 auto ey = gin->GetEY()[i];
589 g->SetPoint(i, x, std::log10(y));
590 g->SetPointError(i, ex, ey / y);
591 }
592 return g;
593 }
594
597 {
598 auto g = (TGraphErrors *)gin->Clone();
599 g->Set(0);
600 g->SetName(gin->GetName());
601 for (int i = 0; i < gin->GetN(); ++i)
602 {
603 auto x = gin->GetX()[i];
604 auto y = gin->GetY()[i];
605 auto ex = gin->GetEX()[i];
606 auto ey = gin->GetEY()[i];
607 g->SetPoint(i, x, y - f->Eval(x));
608 g->SetPointError(i, ex, ey);
609 }
610 return g;
611 }
612
615 {
616 auto g = (TGraphErrors *)gn->Clone();
617 g->Set(0);
618 g->SetName(gn->GetName());
619 for (int i = 0; i < gn->GetN(); ++i)
620 {
621 auto x = gn->GetX()[i];
622 auto y = gn->GetY()[i];
623 auto ex = gn->GetEX()[i];
624 auto ey = gn->GetEY()[i];
625 if (gn->Eval(x) == 0. || gd->Eval(x) == 0.)
626 continue;
627 auto ret = eval(gd, x);
628 auto d = ret.first;
629 auto ed = ret.second;
630 y = y - d;
631 if (propagate_error)
632 ey = sqrt(ey * ey + ed * ed);
633 else
634 ey = ey;
635 auto n = g->GetN();
636 g->SetPoint(n, x, y);
637 g->SetPointError(n, ex, ey);
638 n++;
639 }
640 return g;
641 }
642
643 void x_shift(TGraphErrors *g, float val)
644 {
645 for (int i = 0; i < g->GetN(); ++i)
646 g->GetX()[i] -= val;
647 }
648
649 void y_shift(TGraphErrors *g, float val)
650 {
651 for (int i = 0; i < g->GetN(); ++i)
652 g->GetY()[i] -= val;
653 }
654
655 TGraph *
657 {
658 auto gout = new TGraph;
659 for (int i = 0; i < gin->GetN(); ++i)
660 {
661 auto x = gin->GetX()[i];
662 auto y = gin->GetY()[i];
663 if (x < gref->GetX()[0])
664 continue;
665 if (x > gref->GetX()[gref->GetN() - 1])
666 continue;
667 auto ref = gref->Eval(x);
668 auto val = (y - ref) / ref;
669 gout->SetPoint(gout->GetN(), x, val);
670 }
671 return gout;
672 }
673
674 TGraph *
676 {
677 auto gout = new TGraph;
678 for (int i = 0; i < gin->GetN(); ++i)
679 {
680 auto x = gin->GetX()[i] - gin->GetX()[0];
681 auto y = gin->GetY()[i];
682 gout->SetPoint(i, x, y);
683 }
684 return gout;
685 }
686
687 TGraph *
689 {
690 auto gout = new TGraph;
691 for (int i = 0; i < gin->GetN(); ++i)
692 {
693 auto x = gin->GetX()[i];
694 auto y = -gin->GetY()[i];
695 gout->SetPoint(i, x, y);
696 }
697 return gout;
698 }
699
702 {
703 auto gout = new TGraphErrors;
704 for (int i = 0; i < gin->GetN(); ++i)
705 {
706 auto x = gin->GetX()[i];
707 auto y = -gin->GetY()[i];
708 gout->SetPoint(i, x, y);
709 }
710 return gout;
711 }
712
713 TGraph *
715 {
716 auto gout = new TGraph;
717 for (int i = 0; i < gin->GetN(); ++i)
718 {
719 auto x = -gin->GetX()[i];
720 auto y = gin->GetY()[i];
721 gout->SetPoint(i, x, y);
722 }
723 return gout;
724 }
725
726 TGraph *
727 average(TGraph *gin, int n = 2)
728 {
729 auto gout = new TGraph;
730 for (int i = 0; i < gin->GetN() - n; i += n)
731 {
732 double x = 0.;
733 double y = 0.;
734 for (int j = i; j < i + n; ++j)
735 {
736 x += gin->GetX()[j];
737 y += gin->GetY()[j];
738 }
739 x /= (double)n;
740 y /= (double)n;
741 gout->SetPoint(gout->GetN(), x, y);
742 }
743 return gout;
744 }
745
746 TGraph *
747 rms(TGraph *gin, int n = 2)
748 {
749 auto gout = new TGraph;
750 for (int i = 0; i < gin->GetN() - n; i += n)
751 {
752 double x = 0.;
753 double y = 0.;
754 for (int j = i; j < i + n; ++j)
755 {
756 x += gin->GetX()[j];
757 y += gin->GetY()[j];
758 }
759 x /= (double)n;
760 y /= (double)n;
761 auto mean = y;
762 y = 0.;
763 for (int j = i; j < i + n; ++j)
764 {
765 y += (gin->GetY()[j] - mean) * (gin->GetY()[j] - mean);
766 }
767 y /= (double)n;
768 gout->SetPoint(gout->GetN(), x, std::sqrt(y));
769 }
770 return gout;
771 }
772
773 TGraph *
775 {
776 auto gout = new TGraph;
777 for (int i = 0; i < gin->GetN() - n; ++i)
778 {
779 double x = 0.;
780 double y = 0.;
781 for (int j = i; j < i + n; ++j)
782 {
783 x += gin->GetX()[j];
784 y += gin->GetY()[j];
785 }
786 x /= (double)n;
787 y /= (double)n;
788 gout->SetPoint(i, x, y);
789 }
790 return gout;
791 }
792}
TH2_Type * build_fine_tune_raw_histogram(std::vector< TString > kInputFileNames, TString kRunTag, TString kOutputFileName, bool kRecalculate)
Functions -------------------------------------------------------------------------------------------...
Definition fine_analysis.h:80
Definition graphutils.C:5
std::map< std::string, TGraphErrors * > average_graphs(std::vector< TGraphErrors * > graphs_list)
Definition graphutils.C:171
TH1 * project(TGraphErrors *g, int nbins, double min, double max)
Definition graphutils.C:288
void x_shift(TGraphErrors *g, float val)
Definition graphutils.C:643
TGraph * moving_average(TGraph *gin, int n=2)
Definition graphutils.C:774
TGraphErrors * log10(TGraphErrors *gin)
Definition graphutils.C:580
void set_style(TGraphErrors *g, int marker, int color, int fill=0)
Definition graphutils.C:113
TGraph * invertX(TGraph *gin)
Definition graphutils.C:714
TGraph * rms(TGraph *gin, int n=2)
Definition graphutils.C:747
void x_scale(TGraphErrors *g, double scale)
Definition graphutils.C:264
TGraphErrors * ratio(TGraphErrors *gn, TGraphErrors *gd, bool propagate_error=true)
Definition graphutils.C:496
TGraphErrors * add(TGraphErrors *g_target, std::array< double, 2 > addend, bool square_err_sum=true)
Definition graphutils.C:42
std::array< float, 2 > eval_with_errors(TGraphErrors *gTarget, float _xtarget)
Definition graphutils.C:85
TGraphErrors * derivate(TGraphErrors *gin, double sign=1.)
Definition graphutils.C:399
TGraphErrors * average(TGraphErrors *target_graph, int average_over_n_points=2)
Definition graphutils.C:143
TGraphErrors * diff(TGraphErrors *gin, TF1 *f)
Definition graphutils.C:596
std::map< std::string, TGraphErrors * > make_average_rms(std::vector< TGraphErrors * > graphs, int marker=20, int color=kAzure - 3)
Definition graphutils.C:197
void reassign_x_values(TGraphErrors *gTarget, std::vector< std::array< float, 2 > > new_axis)
Definition graphutils.C:73
TGraphErrors * swapxy(TGraphErrors *gin)
Definition graphutils.C:366
std::map< std::string, TGraphErrors * > average_same_x(TGraphErrors *target_graph)
Definition graphutils.C:125
void draw(std::vector< TGraphErrors * > vg, const char *opt="")
Definition graphutils.C:311
void y_shift(TGraphErrors *g, float val)
Definition graphutils.C:649
TGraphErrors * log(TGraphErrors *gin)
Definition graphutils.C:564
TGraph * invertY(TGraph *gin)
Definition graphutils.C:688
TGraphErrors * power(TGraphErrors *target_graph, double exponent=1.)
Definition graphutils.C:16
TGraphErrors * scale(TGraphErrors *gin, double factor)
Definition graphutils.C:318
TGraph * fromZero(TGraph *gin)
Definition graphutils.C:675
void y_scale(TGraphErrors *g, double scale)
Definition graphutils.C:273
TGraphErrors * multi(TGraphErrors *gn, TGraphErrors *gd, bool propagate_error=true)
Definition graphutils.C:532
std::pair< double, double > eval(TGraphErrors *g, double x)
Definition graphutils.C:354
void remove_points(TGraphErrors *g, double min, double max)
Definition graphutils.C:249
int internal_generation_counter
Definition graphutils.C:6
std::map< std::string, std::array< T, 2 > > average(std::vector< std::array< T, 2 > > list_of_measurements, bool skip_unfit_skim=false)
Definition general_utility.h:98
void style()
Definition style.h:4