CbmRoot
Loading...
Searching...
No Matches
CbmQaPie.cxx
Go to the documentation of this file.
1/* Copyright (C) 2020 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Sergey Gorbunov [committer] */
4
9
10#include "CbmQaPie.h"
11
12#include "TBrowser.h"
13#include "TBuffer.h"
14#include "TPad.h"
15
18
19CbmQaPie::CbmQaPie(const CbmQaPie& cpy) : TPie(cpy.GetName(), cpy.GetTitle(), cpy.fNvals)
20{
22 cpy.TAttText::Copy(*this);
23 fAngularOffset = cpy.fAngularOffset;
24 fX = cpy.fX;
25 fY = cpy.fY;
26 fRadius = cpy.fRadius;
27 for (Int_t i = 0; i < fNvals; ++i) {
28 *fPieSlices[i] = *cpy.fPieSlices[i];
29 ((CbmQaPieSlice*) fPieSlices[i])->SetPie(this);
30 }
31}
32
33void CbmQaPie::Browse(TBrowser* b)
34{
36 Draw(b ? b->GetDrawOption() : "");
37 gPad->Update();
38}
39
40void CbmQaPie::Draw(Option_t* option)
41{
42 // Prevents original TPie::Draw() from crashing when there are no entries
43 double sum = 0.;
44 for (int i = 0; i < fNvals; i++) {
45 sum += fabs(GetEntryVal(i));
46 }
47 if (sum < 1.e-20) {
48 for (int i = 0; i < fNvals; i++) {
49 SetEntryVal(i, 1.e-20);
50 }
51 }
52 TPie::Draw(option);
53 if (sum < 1.e-20) {
54 for (int i = 0; i < fNvals; i++) {
55 SetEntryVal(i, 0.);
56 }
57 }
58}
59
60void CbmQaPie::Streamer(TBuffer& R__b)
61{
65
66 if (R__b.IsReading()) {
67
68 for (int i = 0; i < fNvals; i++) {
69 if (gPad && gPad->GetListOfPrimitives()) {
70 gPad->GetListOfPrimitives()->Remove(fPieSlices[i]);
71 }
72 delete fPieSlices[i];
73 fPieSlices[i] = nullptr;
74 }
75 delete[] fPieSlices;
76 fPieSlices = nullptr;
77 fNvals = 0;
78
79 R__b.ReadClassBuffer(CbmQaPie::Class(), this);
80
81 fNvals = fSliceStore.size();
82 fPieSlices = new TPieSlice*[fNvals];
83 for (int i = 0; i < fNvals; i++) {
84 fSliceStore[i].SetPie(this);
85 fPieSlices[i] = new TPieSlice(fSliceStore[i]);
86 }
87 fSliceStore.clear();
88 }
89 else {
90
91 fSliceStore.resize(fNvals);
92 for (int i = 0; i < fNvals; i++) {
93 fSliceStore[i] = *fPieSlices[i];
94 fSliceStore[i].SetPie(nullptr);
95 }
96 TPieSlice** tmp = fPieSlices;
97 fPieSlices = nullptr;
98 fNvals = 0;
99 R__b.WriteClassBuffer(CbmQaPie::Class(), this);
100 fPieSlices = tmp;
101 fNvals = fSliceStore.size();
102 fSliceStore.clear();
103 }
104}
ClassImp(CbmQaPieSlice)
Definition of the CbmQaPie class.
void Browse(TBrowser *b)
Draw TPie by a mouse click in the TBrowser.
Definition CbmQaPie.cxx:33
std::vector< CbmQaPieSlice > fSliceStore
a vector for slice streaming. It replaces the original array of pointers.
Definition CbmQaPie.h:62
void Draw(Option_t *option="l")
Prevents original TPie::Draw() from crashing when there are no entries.
Definition CbmQaPie.cxx:40
CbmQaPie(Types... args)
Reimplementation of any existing TPie constructor.
Definition CbmQaPie.h:44