104 strlcpy(myopt,opt,128);
247 char *
l = strstr(opt,
"CANDLE");
252 char direction =
' ';
255 if (
l[6] >=
'A' &&
l[6] <=
'Z') direction =
l[6];
256 if (
l[6] >=
'1' &&
l[6] <=
'9') preset =
l[6];
257 if (
l[7] >=
'A' &&
l[7] <=
'Z' && preset !=
' ') direction =
l[7];
258 if (
l[7] >=
'1' &&
l[7] <=
'9' && direction !=
' ') preset =
l[7];
260 if (direction ==
'X' || direction ==
'V') { }
264 else if (preset ==
'2')
266 else if (preset ==
'3')
268 else if (preset ==
'4')
270 else if (preset ==
'5')
272 else if (preset ==
'6')
274 else if (preset !=
' ')
277 if (preset !=
' ' && direction !=
' ')
279 else if (preset !=
' ' || direction !=
' ')
284 Bool_t useIndivOption =
false;
286 if (direction ==
' ') direction =
'X';
288 char *brOpen = strstr(opt,
"(");
289 char *brClose = strstr(opt,
")");
290 char indivOption[32];
291 if (brOpen && brClose) {
292 useIndivOption =
true;
294 strlcpy(indivOption, brOpen, brClose-brOpen+2);
295 sscanf(indivOption,
"(%d)", (
int*) &
fOption);
297 memcpy(brOpen,
" ",brClose-brOpen+1);
307 if (!useIndivOption && !
fOption ) {
313 l = strstr(opt,
"VIOLIN");
317 char direction =
' ';
320 if (
l[6] >=
'A' &&
l[6] <=
'Z') direction =
l[6];
321 if (
l[6] >=
'1' &&
l[6] <=
'9') preset =
l[6];
322 if (
l[7] >=
'A' &&
l[7] <=
'Z' && preset !=
' ') direction =
l[7];
323 if (
l[7] >=
'1' &&
l[7] <=
'9' && direction !=
' ') preset =
l[7];
325 if (direction ==
'X' || direction ==
'V') { }
329 else if (preset ==
'2')
331 else if (preset !=
' ')
334 if (preset !=
' ' && direction !=
' ')
336 else if (preset !=
' ' || direction !=
' ')
341 Bool_t useIndivOption =
false;
343 if (direction ==
' ') direction =
'X';
345 char *brOpen = strstr(opt,
"(");
346 char *brClose = strstr(opt,
")");
347 char indivOption[32];
348 if (brOpen && brClose) {
349 useIndivOption =
true;
351 strlcpy(indivOption, brOpen, brClose-brOpen +2);
352 sscanf(indivOption,
"(%d)", (
int*) &
fOption);
354 memcpy(brOpen,
" ",brClose-brOpen+1);
364 if (!useIndivOption && !
fOption ) {
416 quantiles[0]=0.; quantiles[1]=0.; quantiles[2] = 0.; quantiles[3] = 0.; quantiles[4] = 0.;
433 if (quantiles[0] >= quantiles[4] ||
434 quantiles[1] >= quantiles[3]) {
505 if (scaledBinContent >0 && scaledBinContent < 1) scaledBinContent = 1;
506 for (
int j=0; j < (
int)scaledBinContent; j++) {
513 if ((
int)scaledBinContent == 1)
536 Error (
"PaintCandlePlot",
"Not possible to draw all outliers.");
543 myScale = nOutliers/(maxOutliers/2.);
551 if (!(i % (
int) myScale == 0 ))
continue;
579 Error (
"PaintCandlePlotRaw",
"Not possible to draw all outliers.");
590 fProj =
new TH1D(
"hpa",
"hpa",100,min,max+0.0001*(max-min));
625 if (myBinValue > 0) myBinValue =
TMath::Log10(myBinValue);
else myBinValue = 0;
725 dimRight, dimRight-
fCandleWidth/3., dimRight, dimRight, dimLeft};
730 Double_t x[] = {dimLeft, dimLeft, dimRight, dimRight, dimLeft};
758 Double_t myMedianX[1], myMedianY[1];
769 if (myMedianX[0] > 0) myMedianX[0] =
TMath::Log10(myMedianX[0]);
else isValid =
false;
772 if (myMedianY[0] > 0) myMedianY[0] =
TMath::Log10(myMedianY[0]);
else isValid =
false;
778 if (isValid)
gPad->PaintPolyMarker(1,myMedianX,myMedianY);
797 if (myMeanX[0] > 0) myMeanX[0] =
TMath::Log10(myMeanX[0]);
else isValid =
false;
800 if (myMeanY[0] > 0) myMeanY[0] =
TMath::Log10(myMeanY[0]);
else isValid =
false;
806 if (isValid)
gPad->PaintPolyMarker(1,myMeanX,myMeanY);
848 for (pos = 0; pos < 16; pos++) {
849 if (myOpt > opt)
break;
855 return ((thisOpt * myOpt) == opt);
866 for (
int i=0; i<nPoints; i++) {
872 for (
int i=0; i<nPoints; i++) {
878 gPad->PaintFillArea(nPoints,
x,
y);
879 gPad->PaintPolyLine(nPoints,
x,
y);
881 gPad->PaintFillArea(nPoints,
y,
x);
882 gPad->PaintPolyLine(nPoints,
y,
x);
911void TCandle::Streamer(
TBuffer &R__b)
940 fMean = axisMinCoord + ((
fMean-
a)/
b)*(axisMaxCoord-axisMinCoord);
943 fBoxUp = axisMinCoord + ((
fBoxUp-
a)/
b)*(axisMaxCoord-axisMinCoord);
static const double x2[5]
static const double x1[5]
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
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 void SetLineColor(Color_t lcolor)
Set the line color.
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 void SetMarkerStyle(Style_t mstyle=1)
Set 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 Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=0)=0
virtual Version_t ReadVersion(UInt_t *start=0, UInt_t *bcnt=0, const TClass *cl=0)=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.
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 Int_t GetQuantiles(Int_t nprobSum, Double_t *q, const Double_t *probSum=0)
Compute Quantiles for this histogram Quantile x_q of a probability distribution Function F is defined...
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.
TAxis * GetXaxis()
Get the behaviour adopted by the object about the statoverflows. See EStatOverflows for more informat...
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 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 ...
virtual Double_t Rndm()
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=0, Int_t type=7)
Computes sample quantiles, corresponding to the given probabilities.
Double_t Log10(Double_t x)