Skip to content

Commit e4e6bb0

Browse files
committed
Corrected log plotting
1 parent 35dc85f commit e4e6bb0

File tree

2 files changed

+45
-42
lines changed

2 files changed

+45
-42
lines changed

include/Browser.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ class FileBrowser final {
5757
void plotYAxis(AxisTicks&, bool force_range);
5858
void plotCanvasAnnotations(TH1* hist);
5959
void plotCanvasAnnotations(TH2* hist);
60-
void plotASCIIHistogram(TH1D* hist, int binsy, int binsx) const;
60+
void plotASCIIHistogram(TH1D* hist, int binsy, int binsx, double ymin, double ymax) const;
6161
void plotASCIIHistogram2D(TH2D* hist, int binsy, int binsx);
6262
void drawEssentials();
6363
void showEmpty();

src/Browser.cpp

Lines changed: 44 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ void FileBrowser::plotHistogram(TTree* tree, TLeaf* leaf) {
384384

385385
plotYAxis(yaxis, true);
386386
plotXAxis(xaxis, false);
387-
plotASCIIHistogram(&hist, bins_y, bins_x);
387+
plotASCIIHistogram(&hist, bins_y, bins_x, yaxis.min(), yaxis.max());
388388
plotCanvasAnnotations(&hist);
389389
}
390390
refresh();
@@ -498,7 +498,7 @@ void FileBrowser::plotHistogram(const Console::DrawArgs& args) {
498498

499499
plotYAxis(yaxis, true);
500500
plotXAxis(xaxis, !varexp.limits.empty());
501-
plotASCIIHistogram(&hist, bins_y, bins_x);
501+
plotASCIIHistogram(&hist, bins_y, bins_x, yaxis.min(), yaxis.max());
502502
plotCanvasAnnotations(&hist);
503503
}
504504
else {
@@ -619,50 +619,50 @@ void FileBrowser::plot2DHistogram(const Console::DrawArgs& args) {
619619
refresh();
620620
}
621621

622-
void FileBrowser::plotASCIIHistogram(TH1D* hist, int binsy, int binsx) const {
623-
double max_height = hist->GetAt(hist->GetMaximumBin())*top_hist_clear;
624-
double pixel_y = max_height / binsy;
622+
void FileBrowser::plotASCIIHistogram(TH1D* hist, int binsy, int binsx, double ymin, double ymax) const {
623+
auto Y = [this, binsy, ymin, ymax](double y) {
624+
if (logscale) {
625+
double f = y / binsy;
626+
return std::pow(10.0, ymin + f * (ymax - ymin));
627+
}
628+
else {
629+
double pixel_y = (ymax - ymin) / binsy;
630+
return y * pixel_y;
631+
}
632+
};
625633

626-
if (logscale) {
627-
max_height = log(max_height) + 1.0F; //+1 order of base magnitude for plotting
628-
pixel_y = max_height / binsy;
629-
}
630634
// Draw ASCII art
631635
wattron(main_window, COLOR_PAIR(col_whiteblue));
632636
for (int x = 0; x < binsx / 2; x++) {
633637
auto cl = hist->GetBinContent(2 * x);
634638
auto cr = hist->GetBinContent(2 * x + 1);
635-
if (logscale) {
636-
cl = log(cl);
637-
cr = log(cr);
638-
}
639639

640640
if (blockmode == 4) {
641641
wattron(main_window, A_BOLD);
642642
for (int y = 0; y < binsy / 4; ++y) {
643643
// Check if ascii character is filled
644644
std::uint8_t probe = BLOCKS_code_4x2::BC_VOID;
645-
probe |= ((4*y + 0) * pixel_y < cl) << 7;
646-
probe |= ((4*y + 0) * pixel_y < cr) << 6;
647-
probe |= ((4*y + 1) * pixel_y < cl) << 5;
648-
probe |= ((4*y + 1) * pixel_y < cr) << 4;
649-
probe |= ((4*y + 2) * pixel_y < cl) << 3;
650-
probe |= ((4*y + 2) * pixel_y < cr) << 2;
651-
probe |= ((4*y + 3) * pixel_y < cl) << 1;
652-
probe |= ((4*y + 3) * pixel_y < cr) << 0;
645+
probe |= (Y(4 * y + 0) < cl) << 7;
646+
probe |= (Y(4 * y + 0) < cr) << 6;
647+
probe |= (Y(4 * y + 1) < cl) << 5;
648+
probe |= (Y(4 * y + 1) < cr) << 4;
649+
probe |= (Y(4 * y + 2) < cl) << 3;
650+
probe |= (Y(4 * y + 2) < cr) << 2;
651+
probe |= (Y(4 * y + 3) < cl) << 1;
652+
probe |= (Y(4 * y + 3) < cr) << 0;
653653
if (probe == BLOCKS_code_4x2::BC_VOID) {
654654
// fill rest with blanks, prevents overdraw...
655655
for (int f = y; f < binsy / 4; ++f) {
656-
mvwprintw(main_window, mainwin_y-1-f, 1+x, " ");
656+
mvwprintw(main_window, mainwin_y-2-f, 1+x, " ");
657657
}
658658
break;
659659
}
660660
try {
661661
auto print = ascii_4x2[ascii_map_4x2.at(static_cast<BLOCKS_code_4x2>(probe))];
662-
mvwprintw(main_window, mainwin_y-1-y, 1+x, "%s", print);
662+
mvwprintw(main_window, mainwin_y-2-y, 1+x, "%s", print);
663663
}
664664
catch(...) {
665-
mvwprintw(main_window, mainwin_y-1-y, 1+x, "%i", probe);
665+
mvwprintw(main_window, mainwin_y-2-y, 1+x, "%i", probe);
666666
mvwprintw(main_window, 0, 0, "%i", probe);
667667
clrtoeol();
668668
}
@@ -673,25 +673,25 @@ void FileBrowser::plotASCIIHistogram(TH1D* hist, int binsy, int binsx) const {
673673
for (int y = 0; y < binsy / 3; ++y) {
674674
// Check if ascii character is filled
675675
std::uint8_t probe = BLOCKS_code_3x2::EC_VOID;
676-
probe |= ((3*y + 0) * pixel_y < cl) << 5;
677-
probe |= ((3*y + 0) * pixel_y < cr) << 4;
678-
probe |= ((3*y + 1) * pixel_y < cl) << 3;
679-
probe |= ((3*y + 1) * pixel_y < cr) << 2;
680-
probe |= ((3*y + 2) * pixel_y < cl) << 1;
681-
probe |= ((3*y + 2) * pixel_y < cr) << 0;
676+
probe |= (Y(3 * y + 0) < cl) << 5;
677+
probe |= (Y(3 * y + 0) < cr) << 4;
678+
probe |= (Y(3 * y + 1) < cl) << 3;
679+
probe |= (Y(3 * y + 1) < cr) << 2;
680+
probe |= (Y(3 * y + 2) < cl) << 1;
681+
probe |= (Y(3 * y + 2) < cr) << 0;
682682
if (probe == BLOCKS_code_3x2::EC_VOID) {
683683
// fill rest with blanks, prevents overdraw...
684684
for (int f = y; f < binsy / 3; ++f) {
685-
mvwprintw(main_window, mainwin_y-1-f, 1+x, " ");
685+
mvwprintw(main_window, mainwin_y-2-f, 1+x, " ");
686686
}
687687
break;
688688
}
689689
try {
690690
auto print = ascii_3x2[ascii_map_3x2.at(static_cast<BLOCKS_code_3x2>(probe))];
691-
mvwprintw(main_window, mainwin_y-1-y, 1+x, "%s", print);
691+
mvwprintw(main_window, mainwin_y-2-y, 1+x, "%s", print);
692692
}
693693
catch(...) {
694-
mvwprintw(main_window, mainwin_y-1-y, 1+x, "%i", probe);
694+
mvwprintw(main_window, mainwin_y-2-y, 1+x, "%i", probe);
695695
clrtoeol();
696696
}
697697
}
@@ -700,23 +700,23 @@ void FileBrowser::plotASCIIHistogram(TH1D* hist, int binsy, int binsx) const {
700700
for (int y = 0; y < binsy / 2; ++y) {
701701
// Check if ascii character is filled
702702
std::uint8_t probe = BLOCKS_code_2x2::C_VOID;
703-
probe |= ((2*y + 0) * pixel_y < cl) << 3;
704-
probe |= ((2*y + 0) * pixel_y < cr) << 2;
705-
probe |= ((2*y + 1) * pixel_y < cl) << 1;
706-
probe |= ((2*y + 1) * pixel_y < cr);
703+
probe |= (Y(2 * y + 0) < cl) << 3;
704+
probe |= (Y(2 * y + 0) < cr) << 2;
705+
probe |= (Y(2 * y + 1) < cl) << 1;
706+
probe |= (Y(2 * y + 1) < cr);
707707
if (probe == BLOCKS_code_2x2::C_VOID) {
708708
// fill rest with blanks, prevents overdraw...
709709
for (int f = y; f < binsy / 2; ++f) {
710-
mvwprintw(main_window,mainwin_y-1-f, 1+x, " ");
710+
mvwprintw(main_window,mainwin_y-2-f, 1+x, " ");
711711
}
712712
break;
713713
}
714714
try {
715715
auto print = ascii_2x2[ascii_map_2x2.at(static_cast<BLOCKS_code_2x2>(probe))];
716-
mvwprintw(main_window, mainwin_y-1-y, 1+x, "%s", print);
716+
mvwprintw(main_window, mainwin_y-2-y, 1+x, "%s", print);
717717
}
718718
catch(...) {
719-
mvwprintw(main_window, mainwin_y-1-y, 1+x, "%i", probe);
719+
mvwprintw(main_window, mainwin_y-2-y, 1+x, "%i", probe);
720720
}
721721
}
722722
}
@@ -865,8 +865,11 @@ void FileBrowser::plotYAxis(AxisTicks& ticks, bool force_range) {
865865
}
866866
}
867867

868-
// Write numbers below axis at tick positions
868+
// Write numbers left of axis at tick positions
869869
auto nchars = sizey - 2;
870+
//for (int i = 0; i < nchars; ++i) {
871+
// mvprintw( winy+ 1+ i,winx-5 , "%i", nchars-i-1);
872+
//}
870873
ticks.setAxisPixels(nchars);
871874

872875
std::vector<int> written_positions;

0 commit comments

Comments
 (0)