149 ((px-
gPad->XtoPixel(0))<0)) ||
151 ((px-
gPad->XtoPixel(0))>0))) {
157 ((py-
gPad->YtoPixel(0))>0)) ||
159 (py-
gPad->YtoPixel(0))<0)) {
196 static Int_t d1, d2, d3, px1, py1, px3, py3;
200 if (!
gPad->IsEditable())
return;
207 px2 =
gPad->XtoAbsPixel(-1);
208 py2 =
gPad->YtoAbsPixel(1);
210 px3 =
gPad->XtoAbsPixel(-1);
211 py3 =
gPad->YtoAbsPixel(-1);
219 if ( d2 < kMaxDiff) {
224 if ( d3 < kMaxDiff) {
242 px2 =
gPad->AbsPixeltoX(px);
243 py2 =
gPad->AbsPixeltoY(py);
244 if ( px2 < 0 && py2 < 0) {
p2 =
kTRUE;};
245 if ( px2 < 0 && py2 > 0 ) {
p3 =
kTRUE;};
246 if ( px2 > 0 && py2 > 0 ) {p4 =
kTRUE;};
247 if ( px2 > 0 && py2 < 0 ) {p5 =
kTRUE;};
281 while(angle < 0 || angle > 2*
pi){
282 if(angle < 0) angle+=2*
pi;
283 if(angle > 2*
pi) angle-=2*
pi;
286 if(angle > 0 && angle <
pi/2)
return 11;
287 else if(angle >
pi/2 && angle <
pi)
return 31;
288 else if(angle >
pi && angle < 3*
pi/2)
return 33;
289 else if(angle > 3*
pi/2 && angle < 2*
pi)
return 13;
290 else if(angle == 0 || angle == 2*
pi)
return 12;
291 else if(angle ==
pi/2)
return 21;
292 else if(angle ==
pi)
return 32;
293 else if(angle == 3*
pi/2)
return 23;
297 if(angle >= 0 && angle <=
pi/2)
return 12;
298 else if((angle >
pi/2 && angle <=
pi) || (angle >
pi && angle <= 3*
pi/2))
return 32;
299 else if(angle > 3*
pi/2 && angle <= 2*
pi)
return 12;
312 while(angle < 0 || angle > 2*
pi){
313 if(angle < 0) angle+=2*
pi;
314 if(angle > 2*
pi) angle-=2*
pi;
317 if(angle >= 0 && angle <=
pi/2)
return angle*convraddeg;
318 else if(angle >
pi/2 && angle <=
pi)
return (angle +
pi)*convraddeg;
319 else if(angle >
pi && angle <= 3*
pi/2)
return (angle -
pi)*convraddeg;
320 else if(angle > 3*
pi/2 && angle <= 2*
pi)
return angle*convraddeg;
351 Int_t optionpoldiv, optionraddiv;
357 if(opt.
Contains(
'P')) optionpoldiv=1;
else optionpoldiv=0;
358 if(opt.
Contains(
'R')) optionraddiv=1;
else optionraddiv=0;
377 const Int_t np = 200;
392 for (i=0; i<=
n; i++) {
396 x[i] =
x1 + dx*ct - dy*st;
397 y[i] = y1 + dx*st + dy*ct;
411 gPad->RangeAxis(-1,-1,1,1);
412 gPad->Range(-1.25,-1.25,1.25,1.25);
416 if (!
gPad->GetLogy()) {
417 for (i=0; i<ndivMajor; i++) {
431 const char* form = (
char *)
" ";
439 if (rnum == 0) form =
Form(
"%d",rnum);
440 if (rnum == 1 && rden == 1) form =
Form(
"#pi");
441 if (rnum == 1 && rden != 1) form =
Form(
"#frac{#pi}{%d}",rden);
442 if (rnum != 1 && rden == 1 && i !=0) form=
Form(
"%d#pi",rnum);
443 if (rnum != 1 && rden != 1) form =
Form(
"#frac{%d#pi}{%d}",rnum,rden);
450 form =
Form(
"%5.3g",txtval);
471 if (rnum == 0) form =
Form(
"%d",rnum);
472 if (rnum == 1 && rden == 1) form =
Form(
"#pi");
473 if (rnum == 1 && rden != 1) form =
Form(
"#frac{#pi}{%d}",rden);
474 if (rnum != 1 && rden == 1 && i !=0) form =
Form(
"%d#pi",rnum);
475 if (rnum != 1 && rden != 1) form =
Form(
"#frac{%d#pi}{%d}",rnum,rden);
478 textangular->
PaintLatex(costhetas,corr+sinthetas,0,
482 form =
Form(
"%5.3g",txtval);
501 if (issettickpolar) {
513 gPad->PaintLine(0.,0.,costheta,sintheta);
519 for (j=1; j<ndivMinor; j++) {
533 for (i=1; i<=
test; i++) {
547 const char* form = (
char *)
" ";
553 form =
Form(
"%5.3g",txtval);
570 form =
Form(
"%5.3g",txtval);
588 if (issettickpolar) {
600 gPad->PaintLine(0.,0.,costheta,sintheta);
610 for (j=1; j<9; j++) {
627 static char chopt[8] =
"";
630 Int_t ndivMajor = ndiv%100;
631 Int_t ndivMinor = ndiv/100;
633 Double_t frwrmin = 0., frwrmax = 0., binWidth = 0;
636 frwrmax, ndivmajor,binWidth,
"");
639 if (!
gPad->GetLogx()) {
640 gPad->RangeAxis(-1,-1,1,1);
641 gPad->Range(-1.25,-1.25,1.25,1.25);
650 strncat(chopt,
"SDH", 4);
651 if (
fNdivRad < 0) strncat(chopt,
"N",2);
660 umin, umax, ndiv, chopt, 0.,
kFALSE);
668 Double_t frwrmini = 0., frwrmaxi = 0., binWidth2 =0;
670 frwrmaxi, ndivminor,binWidth2,
"");
673 for (i=1; i<=ndivmajor+2; i++) {
681 for (j=1; j<ndivminor+1; j++) {
682 if (rmajmin+j*dist2<=1)
PaintCircle(0.,0.,rmajmin+j*dist2,0.,360,0);
690 for (i=1; i<=ndivMajor; i++) {
697 for (j=1; j<ndivMinor; j++) {
700 PaintCircle(0.,0.,rmaj- j*1./(ndivMajor*ndivMinor),0.,360,0);
712 for (i=1; i<=
test; i++) {
716 ecart = ((double) i)/ ((double)
test);
724 for (j=1; j<9; j++) {
751 for (i=j; i > 1; i--) {
752 if ((
a % i == 0) && (
b % i == 0)) {
static double p3(double t, double a, double b, double c, double d)
static double p1(double t, double a, double b)
static double p2(double t, double a, double b, double c)
static const double x1[5]
double pow(double, double)
char * Form(const char *fmt,...)
virtual void SetLineStyle(Style_t lstyle)
Set the line style.
virtual Style_t GetLineStyle() const
Return the line style.
virtual void Modify()
Change current line attributes if necessary.
Style_t fLineStyle
Line style.
Int_t DistancetoLine(Int_t px, Int_t py, Double_t xp1, Double_t yp1, Double_t xp2, Double_t yp2)
Compute distance from point px,py to a line.
virtual void SetTextAlign(Short_t align=11)
Set the text alignment.
virtual void SetTextColor(Color_t tcolor=1)
Set the text color.
virtual void SetTextFont(Font_t tfont=62)
Set the text font.
virtual void PaintAxis(Double_t xmin, Double_t ymin, Double_t xmax, Double_t ymax, Double_t &wmin, Double_t &wmax, Int_t &ndiv, Option_t *chopt="", Double_t gridlength=0, Bool_t drawGridOnly=kFALSE)
Control function to draw an axis.
void SetLabelFont(Int_t labelfont)
void SetLabelOffset(Float_t labeloffset)
void SetLabelColor(Int_t labelcolor)
void SetLabelSize(Float_t labelsize)
void LabelsLimits(const char *label, Int_t &first, Int_t &last)
Internal method to find first and last character of a label.
Double_t fRwrmin
Minimal radial value (real world)
void ReduceFraction(Int_t Num, Int_t Denom, Int_t &rnum, Int_t &rden)
Reduce fractions.
Double_t GetPolarLabelSize()
Color_t fRadialLabelColor
Set color of the radial labels.
void SetPolarLabelColor(Color_t tcolorangular=1)
Set Polar labels color.
void PaintPolarDivisions(Bool_t noLabels)
Draw Polar divisions.
void SetRangePolar(Double_t tmin, Double_t tmax)
Allows to change range Polar.
Double_t fPolarTextSize
Set Polar text size.
Double_t fRwtmin
Minimal angular value (real world)
Double_t GetRadialOffset()
void Init()
Initialize some of the fields of TGraphPolargram.
Double_t GetTickpolarSize()
void SetPolarOffset(Double_t PolarOffset=0.04)
Set the labels offset.
void SetTwoPi()
Set range from 0 to 2*pi.
Double_t FindTextAngle(Double_t theta)
Determine the orientation of the polar labels according to their angle.
void SetRadialLabelColor(Color_t tcolorradial=1)
Set radial labels color.
void PaintCircle(Double_t x, Double_t y, Double_t r, Double_t phimin, Double_t phimax, Double_t theta)
This is simplified from TEllipse::PaintEllipse.
virtual ~TGraphPolargram()
TGraphPolargram destructor.
void SetRangeRadial(Double_t rmin, Double_t rmax)
Set the radial range.
void SetTickpolarSize(Double_t tickpolarsize=0.02)
Set polar ticks size.
void SetAxisAngle(Double_t angle=0)
Set axis angle.
void SetToDegree()
The Polar circle is labelled using degree.
void SetNdivPolar(Int_t Ndiv=508)
Set the number of Polar divisions: enter a number ij with 0<i<99 and 0<j<99.
Int_t fNdivRad
Number of radial divisions.
Font_t GetPolarLabelFont()
void ExecuteEvent(Int_t event, Int_t px, Int_t py)
Indicate that there is something to click here.
Double_t fTickpolarSize
Set size of Tickmarks.
void SetRadialLabelSize(Double_t radialsize=0.035)
Set radial labels size.
void Paint(Option_t *options="")
Paint TGraphPolargram.
Font_t fPolarLabelFont
Set font of angular labels.
TString * fPolarLabels
! [fNdivPol] Specified polar labels
void PaintRadialDivisions(Bool_t drawaxis)
Paint radial divisions.
void SetToGrad()
The Polar circle is labelled using gradian.
void ChangeRangePolar(Double_t tmin, Double_t tmax)
Set the Polar range.
void SetPolarLabelSize(Double_t angularsize=0.04)
Set angular labels size.
void SetRadialLabelFont(Font_t tfontradial=62)
Set radial label font.
Double_t fAxisAngle
Set angle of the radial axis.
void SetToRadian()
The Polar circle is labelled using radian.
Double_t fRwtmax
Minimal angular value (real world)
Double_t fRwrmax
Maximal radial value (real world)
void SetPolarLabel(Int_t div, const TString &label)
Set some specified polar labels, used in the case of a spider plot.
TGraphPolargram(const char *name, Double_t rmin, Double_t rmax, Double_t tmin, Double_t tmax)
TGraphPolargram Constructor.
Font_t fRadialLabelFont
Set font of radial labels.
Int_t fNdivPol
Number of polar divisions.
Font_t GetRadialLabelFont()
Int_t fCutRadial
if fCutRadial = 0, circles are cut by radial axis if fCutRadial = 1, circles are not cut
Color_t fPolarLabelColor
Set color of the angular labels.
Double_t fPolarOffset
Offset for Polar labels.
Int_t DistancetoPrimitive(Int_t px, Int_t py)
Everything within the circle belongs to the TGraphPolargram.
void Draw(Option_t *options="")
Draw Polargram.
void SetPolarLabelFont(Font_t tfontangular=62)
void SetRadialOffset(Double_t RadialOffset=0.025)
Set the labels offset.
Color_t GetRadialColorLabel()
Int_t FindAlign(Double_t angle)
Find the alignement rule to apply for TText::SetTextAlign(Short_t).
void SetNdivRadial(Int_t Ndiv=508)
Set the number of radial divisions: enter a number ij with 0<i<99 and 0<j<99.
Double_t GetRadialLabelSize()
Color_t GetPolarColorLabel()
Double_t fRadialOffset
Offset for radial labels.
static void Optimize(Double_t A1, Double_t A2, Int_t nold, Double_t &BinLow, Double_t &BinHigh, Int_t &nbins, Double_t &BWID, Option_t *option="")
Static function to compute reasonable axis limits.
To draw Mathematical Formula.
virtual void PaintLatex(Double_t x, Double_t y, Double_t angle, Double_t size, const char *text)
Main drawing function.
The TNamed class is the base class for all named ROOT classes.
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
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.
void ToUpper()
Change string to upper case.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
virtual void PaintText(Double_t x, Double_t y, const char *text)
Draw this text with new coordinates.
double dist(Rotation3D const &r1, Rotation3D const &r2)
static constexpr double s
static constexpr double pi
static constexpr double rad
constexpr Double_t PiOver2()
Double_t Sqrt(Double_t x)
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
Short_t Min(Short_t a, Short_t b)