text: /// \file
  /// \ingroup tutorial_hist
  ///
  /// This tutorial demonstrates how the highlight mechanism can be used on an histogram.
  /// A 1D histogram is created.
  /// Then an highlight method is connected to the histogram. Moving the mouse
  /// on the histogram will open a new canvas showing in real time a zoom around
  /// the highlighted bin.
  ///
  /// \macro_code
  ///
  /// \date March 2018
  /// \author Jan Musinsky
  
  void HighlightZoom(TVirtualPad *pad, TObject *obj, Int_t xhb, Int_t yhb);
  
  TText *info;
  
  
  void hlHisto4()
  {
     auto Canvas1 = new TCanvas("Canvas1", "", 0, 0, 600, 400);
     auto f1 = new TF1("f1", "x*gaus(0) + [3]*abs(sin(x)/x)", -50.0, 50.0);
     f1->SetParameters(20.0, 4.0, 1.0, 20.0);
     auto h1 = new TH1F("h1", "Test random numbers", 200, -50.0, 50.0);
     h1->FillRandom("f1", 100000);
     h1->Draw();
     h1->Fit(f1, "Q");
     gStyle->SetGridColor(kGray);
     Canvas1->SetGrid();
  
     info = new TText(0.0, h1->GetMaximum()*0.7, "please move the mouse over the frame");
     info->SetTextSize(0.04);
     info->SetTextAlign(22);
     info->SetTextColor(kRed-1);
     info->SetBit(kCannotPick);
     info->Draw();
     Canvas1->Update();
  
     h1->SetHighlight();
     Canvas1->HighlightConnect("HighlightZoom(TVirtualPad*,TObject*,Int_t,Int_t)");
  }
  
  
  void HighlightZoom(TVirtualPad *pad, TObject *obj, Int_t xhb, Int_t yhb)
  {
     auto h = (TH1F *)obj;
     if(!h) return;
  
     auto Canvas2 = (TCanvas *)gROOT->GetListOfCanvases()->FindObject("Canvas2");
     static TH1 *hz = 0;
     if (!h->IsHighlight()) { // after highlight disabled
        if (Canvas2) delete Canvas2;
        if (hz) { delete hz; hz = 0; }
        return;
     }
  
     info->SetTitle("");
  
     if (!Canvas2) {
        Canvas2 = new TCanvas("Canvas2", "Canvas2", 605, 0, 400, 400);
        Canvas2->SetGrid();
        if (hz) hz->Draw(); // after reopen this canvas
     }
     if (!hz) {
        hz = (TH1 *)h->Clone("hz");
        hz->SetTitle(TString::Format("%s (zoomed)", hz->GetTitle()));
        hz->SetStats(kFALSE);
        hz->Draw();
        Canvas2->Update();
        hz->SetHighlight(kFALSE);
     }
  
     Int_t zf = hz->GetNbinsX()*0.05; // zoom factor
     hz->GetXaxis()->SetRange(xhb-zf, xhb+zf);
  
     Canvas2->Modified();
     Canvas2->Update();
  }
  