@@ -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