66 Init(1, 0, 0.5, 0.5, 0.4);
76 Init(npoints, 0, 0.5, 0.5, 0.4);
96 Init(npoints, 0, 0.5, 0.5, 0.4);
111 Init(npoints, 0, 0.5, 0.5, 0.4);
125 const TAxis *axis =
h->GetXaxis();
129 Init(
np, 0, 0.5, 0.5, 0.4);
131 for (i=first; i<=last; ++i)
fPieSlices[i-first]->SetValue(
h->GetBinContent(i));
192 if (!
gPad)
return 9999;
237 if ( ((ang>=phimin && ang <= phimax) || (phimax>
TMath::TwoPi() &&
248 if (dist<.95 && dist>.65) {
257 if (lang/range<.25 || rang/range<.25) {
282 if (soption.
Length()==0) soption =
"l";
285 if (!
gPad->IsEditable())
gROOT->MakeDefCanvas();
288 gPad->Range(0.,0.,1.,1.);
324 Double_t dphi = (maxphi-minphi)/ndiv;
326 if (dphi>.15) ndiv = (
Int_t) ((maxphi-minphi)/.15);
327 dphi = (maxphi-minphi)/ndiv;
330 for (
Int_t j=0;j<ndiv;++j) {
340 gPad->XtoAbsPixel(x0),
gPad->YtoAbsPixel(y0) );
343 gPad->YtoAbsPixel(y0),
344 gPad->XtoAbsPixel(x0),
373 Double_t dphi = (maxphi-minphi)/ndiv;
375 if (dphi>.15) ndiv = (
Int_t) ((maxphi-minphi)/.15);
376 dphi = (maxphi-minphi)/ndiv;
379 for (
Int_t j=0;j<ndiv;++j) {
389 gPad->XtoAbsPixel(x0),
gPad->YtoAbsPixel(y0) );
408 static bool isMovingPie(
kFALSE);
409 static bool isMovingSlice(
kFALSE);
410 static bool isResizing(
kFALSE);
411 static bool isRotating(
kFALSE);
412 static bool onBorder(
kFALSE);
414 static Int_t prev_event(-1);
415 static Int_t oldpx, oldpy;
459 && !isMovingPie && !isMovingSlice && !isResizing) {
483 }
else if (gCurrent_rad<=fRadius*.6 && gCurrent_rad>=
fRadius*.3) {
489 if (isMovingPie || isMovingSlice)
gPad->SetCursor(
kMove);
494 if (!isMovingSlice || !isMovingPie || !isResizing || !isRotating) {
499 isMovingSlice =
kTRUE;
502 }
else if (gCurrent_rad<fRadius*.6 && gCurrent_rad>
fRadius*.3) {
511 mdx =
gPad->PixeltoX(dx);
512 mdy =
gPad->PixeltoY(dy);
514 if (isMovingPie || isMovingSlice) {
534 }
else if (isResizing) {
545 }
else if (isRotating) {
565 if ( ((isMovingPie || isMovingSlice || isRotating) &&
gPad->OpaqueMoving()) ||
566 (isResizing &&
gPad->OpaqueResizing()) ) {
579 if (
gROOT->IsEscaped()) {
591 if (isRedrawing && (isMovingPie || isMovingSlice))
gPad->SetCursor(
kMove);
593 if (isMovingPie) isMovingPie =
kFALSE;
594 if (isMovingSlice) isMovingSlice =
kFALSE;
595 if (isResizing) isResizing =
kFALSE;
617 event =
gVirtualX->RequestLocator(1, 1, px, py);
827 if ( (idx=soption.
Index(
"same"))>=0 ) {
832 if ( (idx=soption.
Index(
"nol"))>=0 ) {
837 if ( (idx=soption.
Index(
"sc"))>=0 ) {
838 optionSameColor =
kTRUE;
843 if ( (idx=soption.
Index(
"3d"))>=0 ) {
851 if ( (idx=soption.
Index(
"t"))>=0 ) {
857 if ( (idx=soption.
Index(
"r"))>=0 ) {
863 if ( (idx=soption.
Index(
">"))>=0 ) {
869 if ( (idx=soption.
Index(
"<"))>=0 ) {
880 Warning(
"Paint",
"No valid arrays of values");
904 for (
Int_t pi = 0; pi < pixelHeight &&
fIs3D; ++pi) {
1018 }
else if (lblor==2) {
1035 if (aphi<0) ly -=
h;
1039 if (rphi < 0 && fIs3D && label_off>=0.)
1048 if (optionSame)
return;
1052 if (
auto obj =
gPad->GetListOfPrimitives()->FindObject(
"title")) {
1058 if (title)
delete title;
1066 if (ht<=0) ht = 0.05;
1088 if (talh < 1) talh = 1;
else if (talh > 3) talh = 3;
1090 if (talv < 1) talv = 1;
else if (talv > 3) talv = 3;
1122 out <<
" " << std::endl;
1129 <<
"\", " <<
fNvals <<
");" << std::endl;
1130 out <<
" pie->SetCircle(" <<
fX <<
", " <<
fY <<
", " <<
fRadius <<
");" << std::endl;
1131 out <<
" pie->SetValueFormat(\"" <<
GetValueFormat() <<
"\");" << std::endl;
1132 out <<
" pie->SetLabelFormat(\"" <<
GetLabelFormat() <<
"\");" << std::endl;
1133 out <<
" pie->SetPercentFormat(\"" <<
GetPercentFormat() <<
"\");" << std::endl;
1134 out <<
" pie->SetLabelsOffset(" <<
GetLabelsOffset() <<
");" << std::endl;
1135 out <<
" pie->SetAngularOffset(" <<
GetAngularOffset() <<
");" << std::endl;
1145 out <<
" pie->Draw(\"" <<
option <<
"\");" << std::endl;
1154 while (val>360.) val -= 360.;
1155 while (val<0) val += 360.;
1156 if (val>=90 && val<180) val = 180-val;
1157 else if (val>=180 && val<=360) val = 360-val;
1347 "It's not possible set the radius to a negative value");
1382 if (
fSlices && !force)
return;
1389 "Negative values in TPie, absolute value will be used");
1395 if (
fSum<=.0)
return;
1439 if (merge_threshold>0) {
1458 delete merged_slice;
1464 new_array[0] = merged_slice;
1465 for (
Int_t i=0;i<old_fNvals;++i) {
1482 delete merged_slice;
1488 new_array[
fNvals-1] = merged_slice;
1489 for (
Int_t i=old_fNvals-1;i>=0;--i) {
Option_t Option_t SetTextSize
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h offset
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t np
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize id
Option_t Option_t TPoint TPoint const char x2
Option_t Option_t TPoint TPoint const char x1
Option_t Option_t SetTextFont
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void xpos
Option_t Option_t TPoint TPoint const char y2
Option_t Option_t SetFillColor
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void ypos
Option_t Option_t TPoint TPoint const char text
Option_t Option_t TPoint TPoint const char y1
R__EXTERN TStyle * gStyle
virtual Color_t GetLabelColor() const
virtual Style_t GetLabelFont() const
virtual Float_t GetLabelSize() const
virtual Color_t GetFillColor() const
Return the fill area color.
virtual Style_t GetFillStyle() const
Return the fill area style.
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
virtual void SetFillStyle(Style_t fstyle)
Set the fill area style.
virtual Color_t GetLineColor() const
Return the line color.
virtual void SetLineStyle(Style_t lstyle)
Set the line style.
virtual Width_t GetLineWidth() const
Return the line width.
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
virtual void SetLineColor(Color_t lcolor)
Set the line color.
virtual Style_t GetLineStyle() const
Return the line style.
virtual Float_t GetTextSize() const
Return the text size.
virtual Font_t GetTextFont() const
Return the text font.
virtual Color_t GetTextColor() const
Return the text color.
virtual Float_t GetTextAngle() const
Return the text angle.
virtual void SetTextColor(Color_t tcolor=1)
Set the text color.
virtual void SetTextFont(Font_t tfont=62)
Set the text font.
virtual void SaveTextAttributes(std::ostream &out, const char *name, Int_t alidef=12, Float_t angdef=0, Int_t coldef=1, Int_t fondef=61, Float_t sizdef=1)
Save text attributes as C++ statement(s) on output stream out.
virtual void SetTextSize(Float_t tsize=1)
Set the text size.
Class to manage histogram axis.
const char * GetBinLabel(Int_t bin) const
Return label for bin.
Int_t GetLast() const
Return last bin on the axis i.e.
Int_t GetFirst() const
Return first bin on the axis i.e.
THashList * GetLabels() const
static Int_t GetColorDark(Int_t color)
Static function: Returns the dark color number corresponding to n If the TColor object does not exist...
virtual void PaintEllipse(Double_t x1, Double_t y1, Double_t r1, Double_t r2, Double_t phimin, Double_t phimax, Double_t theta, Option_t *option="")
Draw this ellipse with new coordinates.
TH1 is the base class of all histogram classes in ROOT.
To draw Mathematical Formula.
Double_t GetXsize()
Return size of the formula along X in pad coordinates when the text precision is smaller than 3.
Double_t GetYsize()
Return size of the formula along Y in pad coordinates when the text precision is smaller than 3.
virtual void PaintLatex(Double_t x, Double_t y, Double_t angle, Double_t size, const char *text)
Main drawing function.
This class displays a legend box (TPaveText) containing several legend entries.
TLegendEntry * AddEntry(const TObject *obj, const char *label="", Option_t *option="lpf")
Add a new entry to this legend.
void Draw(Option_t *option="") override
Draw this legend with its current attributes.
void Clear(Option_t *option="") override
Clear all entries in this legend, including the header.
Use the TLine constructor to create a simple line.
virtual void PaintLine(Double_t x1, Double_t y1, Double_t x2, Double_t y2)
Draw this line with new coordinates.
The TNamed class is the base class for all named ROOT classes.
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
const char * GetName() const override
Returns name of object.
const char * GetTitle() const override
Returns title of object.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual void AppendPad(Option_t *option="")
Append graphics object to current pad.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
@ kCanDelete
if object in a list can be deleted
A Pave (see TPave) with text, lines or/and boxes inside.
virtual TText * AddText(Double_t x1, Double_t y1, const char *label)
Add a new Text line to this pavetext at given coordinates.
void Draw(Option_t *option="") override
Draw this pavetext with its current attributes.
void Paint(Option_t *option="") override
Paint this pavetext with its current attributes.
virtual TText * GetLine(Int_t number) const
Get Pointer to line number in this pavetext.
virtual void SetName(const char *name="")
virtual void SetBorderSize(Int_t bordersize=4)
Sets the border size of the TPave box and shadow.
Double_t GetX1NDC() const
virtual void SetX2NDC(Double_t x2)
A slice of a piechart, see the TPie class.
void SetValue(Double_t)
Set the value for this slice.
Double_t GetRadiusOffset() const
return the value of the offset in radial direction for this slice.
void SetIsActive(Bool_t is)
void Copy(TObject &slice) const override
Copy TPieSlice.
Double_t GetValue() const
Return the value of this slice.
void SavePrimitive(std::ostream &out, Option_t *opts="") override
Save as C++ macro, used directly from TPie.
void SetRadiusOffset(Double_t)
Set the radial offset of this slice.
void SetEntryVal(Int_t, Double_t)
Set the value of a slice.
TPieSlice * GetSlice(Int_t i)
Return the reference to the slice of index 'id'.
Float_t fLabelsOffset
LabelsOffset offset of label.
void SetAngularOffset(Double_t)
Set the global angular offset for slices in degree [0,360].
void Paint(Option_t *) override
Paint a Pie chart in a canvas.
Double_t GetEntryVal(Int_t)
Return the value associated with the slice number "i".
TString fLabelFormat
Format format of the slices' label.
Float_t * fSlices
!Subdivisions of the slices
void SetX(Double_t)
Set X value.
Double_t fAngularOffset
Offset angular offset for the first slice.
void SortSlices(Bool_t amode=kTRUE, Float_t merge_thresold=.0)
This method, mainly intended for internal use, ordered the slices according their values.
void SetEntryFillStyle(Int_t, Int_t)
Set the fill style for the "i" slice.
TPie()
Default constructor.
~TPie() override
Destructor.
void SetFractionFormat(const char *)
Set numeric format in the label, is used if the label format there is the modifier frac,...
Float_t fAngle3D
The angle of the pseudo-3d view.
Double_t fHeight
Height of the slice in pixel.
const char * GetPercentFormat()
void SetPercentFormat(const char *)
Set the numeric format for the percent value of a slice, default: %3.1f.
void SetLabels(const char *[])
Set the labels for all the slices.
void SetY(Double_t)
Set Y value.
TLegend * GetLegend()
If created before by Paint option or by MakeLegend method return the pointer to the legend,...
Bool_t fIs3D
! true if the pseudo-3d is enabled
void Init(Int_t np, Double_t ao, Double_t x, Double_t y, Double_t r)
Common initialization for all constructors.
Int_t GetEntryFillColor(Int_t)
Return the color of the slice number "i".
void SetLabelsOffset(Float_t)
Set the distance between the label end the external line of the TPie.
void SetEntryRadiusOffset(Int_t, Double_t)
Set the distance, in the direction of the radius of the slice.
Double_t GetAngularOffset()
void DrawGhost()
This method is for internal use.
Float_t GetLabelsOffset()
TLegend * fLegend
!Legend for this piechart
void SetLabelFormat(const char *)
This method is used to customize the label format.
Double_t fRadius
Radius Pie radius.
TPieSlice ** fPieSlices
[fNvals] Slice array of this pie-chart
void ExecuteEvent(Int_t, Int_t, Int_t) override
Execute the mouse events.
Int_t DistancetoPrimitive(Int_t px, Int_t py) override
Evaluate the distance to the chart in gPad.
void SetEntryLineStyle(Int_t, Int_t)
Set the style for the slice's outline. "i" is the slice number.
void MakeSlices(Bool_t force=kFALSE)
Make the slices.
void SetEntryFillColor(Int_t, Int_t)
Set the color for the slice "i".
void SetEntryLineWidth(Int_t, Int_t)
Set the width of the slice's outline. "i" is the slice number.
const char * GetLabelFormat()
void SetCircle(Double_t x=.5, Double_t y=.5, Double_t rad=.4)
Set the coordinates of the circle that describe the pie:
const char * GetEntryLabel(Int_t)
Returns the label of the entry number "i".
TString fValueFormat
Vform numeric format for the value.
TString fFractionFormat
Rform numeric format for the fraction of a slice.
void SetAngle3D(Float_t val=30.)
Set the value of for the pseudo 3D view angle, in degree.
Double_t GetEntryRadiusOffset(Int_t)
Return the radial offset's value for the slice number "i".
Int_t GetEntryFillStyle(Int_t)
Return the style use to fill the slice number "i".
const char * GetValueFormat()
void SetRadius(Double_t)
Set the pie chart's radius' value.
void SavePrimitive(std::ostream &out, Option_t *opts="") override
Save primitive as a C++ statement(s) on output stream out.
TString fPercentFormat
Pfrom numeric format for the percent of a slice.
TLegend * MakeLegend(Double_t x1=.65, Double_t y1=.65, Double_t x2=.95, Double_t y2=.95, const char *leg_header="")
This method create a legend that explains the contents of the slice for this pie-chart.
Int_t fNvals
Number of elements.
Int_t DistancetoSlice(Int_t, Int_t)
Returns the slice number at the pixel position (px,py).
Int_t GetEntryLineStyle(Int_t)
Return the style used to outline thi "i" slice.
Float_t fSum
!Sum for the slice values
Double_t fY
Y coordinate of the pie centre.
void SetEntryLabel(Int_t, const char *text="Slice")
Set slice number "i" label.
Double_t fX
X coordinate of the pie centre.
void SetHeight(Double_t val=.08)
Set the height, in pixel, for the piechart if is drawn using the pseudo-3d mode.
Int_t GetEntryLineWidth(Int_t)
Return the line width used to outline thi "i" slice.
Int_t GetEntryLineColor(Int_t)
Return the line color used to outline thi "i" slice.
void Draw(Option_t *option="l") override
Draw the pie chart.
void SetValueFormat(const char *)
Set the numeric format the slices' values.
void SetEntryLineColor(Int_t, Int_t)
Set the color for the slice's outline. "i" is the slice number.
void SetFillColors(Int_t *)
Set the fill colors for all the TPie's slices.
void ToLower()
Change string to lower-case.
void Clear()
Clear string without changing its capacity.
const char * Data() const
TString & ReplaceAll(const TString &s1, const TString &s2)
TString & Remove(Ssiz_t pos)
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
Float_t GetTitleX() const
Int_t GetOptTitle() const
Float_t GetTitleY() const
Style_t GetTitleFont(Option_t *axis="X") const
Return title font.
Color_t GetTitleFillColor() const
Style_t GetTitleStyle() const
Float_t GetLabelOffset(Option_t *axis="X") const
Return label offset.
Width_t GetTitleBorderSize() const
Int_t GetColorPalette(Int_t i) const
Return color number i in current palette.
Color_t GetTitleTextColor() const
Float_t GetTitleH() const
Float_t GetTitleFontSize() const
Int_t GetTitleAlign() const
Float_t GetTitleW() const
Base class for several text objects.
Short_t Max(Short_t a, Short_t b)
Returns the largest of a and b.
constexpr Double_t PiOver2()
Double_t ATan2(Double_t y, Double_t x)
Returns the principal value of the arc tangent of y/x, expressed in radians.
Double_t Sqrt(Double_t x)
Returns the square root of x.
Short_t Min(Short_t a, Short_t b)
Returns the smallest of a and b.
constexpr Double_t PiOver4()
Double_t Cos(Double_t)
Returns the cosine of an angle of x radians.
Double_t Sin(Double_t)
Returns the sine of an angle of x radians.
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.
constexpr Double_t TwoPi()