103 strlcpy(myopt,opt,128);
246 char *
l = strstr(opt,
"CANDLE");
251 char direction =
' ';
254 if (
l[6] >=
'A' &&
l[6] <=
'Z') direction =
l[6];
255 if (
l[6] >=
'1' &&
l[6] <=
'9') preset =
l[6];
256 if (
l[7] >=
'A' &&
l[7] <=
'Z' && preset !=
' ') direction =
l[7];
257 if (
l[7] >=
'1' &&
l[7] <=
'9' && direction !=
' ') preset =
l[7];
259 if (direction ==
'X' || direction ==
'V') { }
263 else if (preset ==
'2')
265 else if (preset ==
'3')
267 else if (preset ==
'4')
269 else if (preset ==
'5')
271 else if (preset ==
'6')
273 else if (preset !=
' ')
276 if (preset !=
' ' && direction !=
' ')
278 else if (preset !=
' ' || direction !=
' ')
283 Bool_t useIndivOption =
false;
285 if (direction ==
' ') direction =
'X';
287 char *brOpen = strstr(opt,
"(");
288 char *brClose = strstr(opt,
")");
289 char indivOption[32];
290 if (brOpen && brClose) {
291 useIndivOption =
true;
293 strlcpy(indivOption, brOpen, brClose-brOpen+2);
294 sscanf(indivOption,
"(%d)", (
int*) &
fOption);
296 memcpy(brOpen,
" ",brClose-brOpen+1);
306 if (!useIndivOption && !
fOption ) {
312 l = strstr(opt,
"VIOLIN");
316 char direction =
' ';
319 if (
l[6] >=
'A' &&
l[6] <=
'Z') direction =
l[6];
320 if (
l[6] >=
'1' &&
l[6] <=
'9') preset =
l[6];
321 if (
l[7] >=
'A' &&
l[7] <=
'Z' && preset !=
' ') direction =
l[7];
322 if (
l[7] >=
'1' &&
l[7] <=
'9' && direction !=
' ') preset =
l[7];
324 if (direction ==
'X' || direction ==
'V') { }
328 else if (preset ==
'2')
330 else if (preset !=
' ')
333 if (preset !=
' ' && direction !=
' ')
335 else if (preset !=
' ' || direction !=
' ')
340 Bool_t useIndivOption =
false;
342 if (direction ==
' ') direction =
'X';
344 char *brOpen = strstr(opt,
"(");
345 char *brClose = strstr(opt,
")");
346 char indivOption[32];
347 if (brOpen && brClose) {
348 useIndivOption =
true;
350 strlcpy(indivOption, brOpen, brClose-brOpen +2);
351 sscanf(indivOption,
"(%d)", (
int*) &
fOption);
353 memcpy(brOpen,
" ",brClose-brOpen+1);
363 if (!useIndivOption && !
fOption ) {
414 Double_t quantiles[5] = { 0., 0., 0., 0., 0. };
431 if (quantiles[0] >= quantiles[4] ||
432 quantiles[1] >= quantiles[3]) {
498 if (scaledBinContent >0 && scaledBinContent < 1) scaledBinContent = 1;
499 for (
int j=0; j < (
int)scaledBinContent; j++) {
506 if ((
int)scaledBinContent == 1)
529 Error (
"PaintCandlePlot",
"Not possible to draw all outliers.");
536 myScale = nOutliers/(maxOutliers/2.);
544 if (!(i % (
int) myScale == 0 ))
continue;
572 Error (
"PaintCandlePlotRaw",
"Not possible to draw all outliers.");
583 fProj =
new TH1D(
"hpa",
"hpa",100,min,max+0.0001*(max-min));
618 if (myBinValue > 0) myBinValue =
TMath::Log10(myBinValue);
else myBinValue = 0;
717 dimRight, dimRight-
fCandleWidth/3., dimRight, dimRight, dimLeft};
722 Double_t x[] = {dimLeft, dimLeft, dimRight, dimRight, dimLeft};
750 Double_t myMedianX[1], myMedianY[1];
761 if (myMedianX[0] > 0) myMedianX[0] =
TMath::Log10(myMedianX[0]);
else isValid =
false;
764 if (myMedianY[0] > 0) myMedianY[0] =
TMath::Log10(myMedianY[0]);
else isValid =
false;
770 if (isValid)
gPad->PaintPolyMarker(1,myMedianX,myMedianY);
789 if (myMeanX[0] > 0) myMeanX[0] =
TMath::Log10(myMeanX[0]);
else isValid =
false;
792 if (myMeanY[0] > 0) myMeanY[0] =
TMath::Log10(myMeanY[0]);
else isValid =
false;
798 if (isValid)
gPad->PaintPolyMarker(1,myMeanX,myMeanY);
840 for (pos = 0; pos < 16; pos++) {
841 if (myOpt > opt)
break;
847 return ((thisOpt * myOpt) == opt);
858 for (
int i=0; i<nPoints; i++) {
864 for (
int i=0; i<nPoints; i++) {
870 gPad->PaintFillArea(nPoints,
x,
y);
871 gPad->PaintPolyLine(nPoints,
x,
y);
873 gPad->PaintFillArea(nPoints,
y,
x);
874 gPad->PaintPolyLine(nPoints,
y,
x);
932 fMean = axisMinCoord + ((
fMean-
a)/
b)*(axisMaxCoord-axisMinCoord);
935 fBoxUp = axisMinCoord + ((
fBoxUp-
a)/
b)*(axisMaxCoord-axisMinCoord);
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
Option_t Option_t SetLineColor
Option_t Option_t TPoint TPoint const char x2
Option_t Option_t TPoint TPoint const char x1
Option_t Option_t TPoint TPoint const char y2
Option_t Option_t SetMarkerStyle
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t points
Option_t Option_t TPoint TPoint const char y1
Fill Area Attributes class.
virtual Color_t GetFillColor() const
Return the fill area color.
virtual Style_t GetFillStyle() const
Return the fill area style.
virtual void Modify()
Change current fill area attributes if necessary.
virtual Color_t GetLineColor() const
Return the line color.
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.
virtual void Modify()
Change current marker attributes if necessary.
virtual Style_t GetMarkerStyle() const
Return the marker style.
virtual Double_t GetBinLowEdge(Int_t bin) const
Return low edge of bin.
virtual Double_t GetBinUpEdge(Int_t bin) const
Return up edge of bin.
Buffer base class used for serializing objects.
virtual Version_t ReadVersion(UInt_t *start=nullptr, UInt_t *bcnt=nullptr, const TClass *cl=nullptr)=0
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=nullptr)=0
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
The candle plot painter class.
Double_t fMedian
Position of the median.
static Double_t fBoxRange
The fraction which is covered by the box (0 < x < 1), default 0.5.
@ kHorizontal
If this bit is not set it is vertical.
void Streamer(TBuffer &) override
Stream an object of class TCandle.
static void SetScaledViolin(const Bool_t vScale=true)
Static function to set scaling between violin-withs.
bool fIsRaw
0: for TH1 projection, 1: using raw data
static Double_t fWhiskerRange
The fraction which is covered by the whiskers (0 < x < 1), default 1.
CandleOption fOption
Setting the style of the candle.
Double_t fAxisMax
The Maximum which is visible by the axis (used by zero indicator)
int fLogZ
make the candle appear logz-like
bool IsOption(CandleOption opt)
Return true is this option is activated in fOption.
Double_t fPosCandleAxis
x-pos for a vertical candle
Double_t fMean
Position of the mean.
Double_t fWhiskerDown
Position of the lower whisker end.
Long64_t fNDrawPoints
max number of outliers or other point to be shown
virtual void Paint(Option_t *option="")
Paint one candle with its current attributes.
Double_t fAxisMin
The Minimum which is visible by the axis (used by zero indicator)
void ConvertToPadCoords(Double_t minAxis, Double_t maxAxis, Double_t axisMinCoord, Double_t axisMaxCoord)
The coordinates in the TParallelCoordVar-class are in Pad-Coordinates, so we need to convert them.
Double_t fDrawPointsY[kNMAXPOINTS]
y-coord for every outlier, ..
Long64_t fNDatapoints
Number of Datapoints within this candle.
Double_t fHistoPointsY[kNMAXPOINTS]
y-coord for the polyline of the histo
Double_t fHistoPointsX[kNMAXPOINTS]
x-coord for the polyline of the histo
static void SetScaledCandle(const Bool_t cScale=true)
Static function to set scaling between candles-withs.
Double_t * fDatapoints
position of all Datapoints within this candle
int ParseOption(char *optin)
Parsing of the option-string.
bool fDismiss
True if the candle cannot be painted.
Double_t fWhiskerUp
Position of the upper whisker end.
static void SetBoxRange(const Double_t bRange)
Static function to set fBoxRange, by setting whisker-range, one can force the box of the candle-chart...
static Bool_t fScaledViolin
shall the violin or histos be scaled to each other by the maximum height?
int fLogY
make the candle appear logy-like
Double_t fMedianErr
The size of the notch.
void PaintBox(Int_t nPoints, Double_t *x, Double_t *y, Bool_t swapXY)
Paint a box for candle.
Double_t fBoxUp
Position of the upper box end.
virtual ~TCandle()
TCandle default destructor.
int fLogX
make the candle appear logx-like
Double_t fDrawPointsX[kNMAXPOINTS]
x-coord for every outlier, ..
TCandle()
TCandle default constructor.
Double_t fBoxDown
Position of the lower box end.
void Calculate()
Calculates all values needed by the candle definition depending on the candle options.
void PaintLine(Double_t x1, Double_t y1, Double_t x2, Double_t y2, Bool_t swapXY)
Paint a line for candle.
Double_t fHistoWidth
The histo width (the height of the max bin)
int GetCandleOption(const int pos)
static void SetWhiskerRange(const Double_t wRange)
Static function to set fWhiskerRange, by setting whisker-range, one can force the whiskers to cover t...
static Bool_t fScaledCandle
shall the box-width be scaled to each other by the integral of a box?
char fOptionStr[128]
String to draw the candle.
Double_t fCandleWidth
The candle width.
1-D histogram with a double per channel (see TH1 documentation)}
virtual void SetDirectory(TDirectory *dir)
By default, when a histogram is created, it is added to the list of histogram objects in the current ...
virtual Double_t GetBinCenter(Int_t bin) const
Return bin center for 1D histogram.
virtual Double_t GetMean(Int_t axis=1) const
For axis = 1,2 or 3 returns the mean value of the histogram along X,Y or Z axis.
virtual Double_t GetMaximum(Double_t maxval=FLT_MAX) const
Return maximum value smaller than maxval of bins in the range, unless the value has been overridden b...
virtual Int_t GetNbinsX() const
virtual Int_t Fill(Double_t x)
Increment bin with abscissa X by 1.
virtual TH1 * RebinX(Int_t ngroup=2, const char *newname="")
virtual Double_t GetBinLowEdge(Int_t bin) const
Return bin lower edge for 1D histogram.
virtual Double_t GetEntries() const
Return the current number of entries.
virtual Double_t GetBinContent(Int_t bin) const
Return content of bin number bin.
virtual Double_t GetBinWidth(Int_t bin) const
Return bin width for 1D histogram.
virtual Int_t GetQuantiles(Int_t nprobSum, Double_t *q, const Double_t *probSum=nullptr)
Compute Quantiles for this histogram Quantile x_q of a probability distribution Function F is defined...
virtual Int_t FindBin(Double_t x, Double_t y=0, Double_t z=0)
Return Global bin number corresponding to x,y,z.
Random number generator class based on the maximally quidistributed combined Tausworthe generator by ...
Double_t Rndm() override
TausWorth generator from L'Ecuyer, uses as seed 3x32bits integers Use a mask of 0xffffffffUL to make ...
void Quantiles(Int_t n, Int_t nprob, Double_t *x, Double_t *quantiles, Double_t *prob, Bool_t isSorted=kTRUE, Int_t *index=nullptr, Int_t type=7)
Computes sample quantiles, corresponding to the given probabilities.
Double_t Log10(Double_t x)
Returns the common (base-10) logarithm of x.