Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
hlHisto3.C File Reference

Detailed Description

This tutorial demonstrates how the highlight mechanism can be used on a ntuple.

The ntuple in hsimple.root is drawn with three different selections. Moving the mouse over the two 1D representation display the on 2D plot the events contributing to the highlighted bin.

TList *list1 = nullptr, *list2 = nullptr;
{
Long64_t nev = nt->GetSelectedRows();
Double_t *px = nt->GetV1();
Double_t *py = nt->GetV2();
Double_t *pz = nt->GetV3();
auto list = new TList();
Int_t nbins = histo->GetNbinsX();
for (Int_t bin = 0; bin < nbins; bin++) {
auto g = new TGraph();
g->SetName(TString::Format("g%sbin_%d", histo->GetName(), bin+1));
g->SetBit(kCannotPick);
g->SetMarkerStyle(25);
g->SetMarkerColor(histo->GetLineColor());
list->Add(g);
}
for (Long64_t ie = 0; ie < nev; ie++) {
Double_t value = is_top ? pz[ie] : px[ie]*py[ie]*pz[ie];
Int_t bin = histo->FindBin(value) - 1;
auto g = dynamic_cast<TGraph *>(list->At(bin));
if (g) g->SetPoint(g->GetN(), py[ie], px[ie]);
}
return list;
}
{
auto histo = dynamic_cast<TH1F *>(obj);
if(!histo) return;
TCanvas *Canvas2 = (TCanvas *)gROOT->GetListOfCanvases()->FindObject("Canvas2");
if (!Canvas2) return;
TGraph *gcommon = (TGraph *)Canvas2->FindObject("Graph");
if (!gcommon) return;
TList *list = nullptr;
if (!strcmp(histo->GetName(), "histo1"))
list = list1;
else if (!strcmp(histo->GetName(), "histo2"))
list = list2;
if (!list) return;
TGraph *g = (TGraph *)list->At(xhb);
if (!g) return;
Canvas2->cd();
gcommon->Draw("AP");
//gcommon->SetTitle(TString::Format("%d / %d", g->GetN(), gcommon->GetN()));
if (histo->IsHighlight()) // don't draw g after highlight disabled
if (g->GetN() > 0)
g->Draw("P");
Canvas2->Update();
if (savepad) savepad->cd();
}
void hlHisto3()
{
auto dir = gROOT->GetTutorialDir();
dir.Append("/hsimple.C");
dir.ReplaceAll("/./","/");
if (!gInterpreter->IsLoaded(dir.Data())) gInterpreter->LoadMacro(dir.Data());
auto file = (TFile*)gROOT->ProcessLineFast("hsimple(1)");
if (!file) return;
file->GetObject("ntuple", ntuple);
if (!ntuple) return;
const char *cut = "pz > 3.0";
TCanvas *Canvas1 = new TCanvas("Canvas1", "Canvas1", 0, 0, 700, 500);
Canvas1->HighlightConnect("Highlight3(TVirtualPad*,TObject*,Int_t,Int_t)");
Canvas1->Divide(1, 2);
TCanvas *Canvas2 = new TCanvas("Canvas2", "Canvas2", 705, 0, 500, 500);
// Case1, histo1, pz distribution
Canvas1->cd(1);
ntuple->Draw("pz>>histo1(100, 2.0, 12.0)", cut);
auto histo1 = (TH1F *)gPad->FindObject("histo1");
auto info1 = new TText(7.0, histo1->GetMaximum()*0.6,
"please move the mouse over the frame");
info1->SetTextColor(histo1->GetLineColor());
info1->SetBit(kCannotPick);
info1->Draw();
// Case2, histo2, px*py*pz distribution
Canvas1->cd(2);
ntuple->Draw("(px*py*pz)>>histo2(100, -50.0, 50.0)", cut);
auto histo2 = (TH1F *)gPad->FindObject("histo2");
histo2->SetLineColor(kGreen+2);
auto info2 = new TText(10.0, histo2->GetMaximum()*0.6, info1->GetTitle());
info2->SetTextColor(histo2->GetLineColor());
info2->SetBit(kCannotPick);
info2->Draw();
Canvas1->Update();
// set highlight after first drawing completed
histo1->SetHighlight();
histo2->SetHighlight();
// Common graph (all entries, all histo bins)
Canvas2->cd();
ntuple->Draw("px:py", cut);
auto gcommon = (TGraph *)gPad->FindObject("Graph");
gcommon->SetBit(kCanDelete, kFALSE); // will be redraw
auto htemp = (TH2F *)gPad->FindObject("htemp");
gcommon->SetTitle(htemp->GetTitle());
gcommon->GetXaxis()->SetTitle(htemp->GetXaxis()->GetTitle());
gcommon->GetYaxis()->SetTitle(htemp->GetYaxis()->GetTitle());
gcommon->Draw("AP");
// Must be last
ntuple->Draw("px:py:pz", cut, "goff");
list1 = InitGraphs(ntuple, histo1, true);
}
#define g(i)
Definition RSha256.hxx:105
bool Bool_t
Definition RtypesCore.h:63
int Int_t
Definition RtypesCore.h:45
constexpr Bool_t kFALSE
Definition RtypesCore.h:101
double Double_t
Definition RtypesCore.h:59
long long Long64_t
Definition RtypesCore.h:80
@ kGreen
Definition Rtypes.h:66
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
#define gInterpreter
@ kCanDelete
Definition TObject.h:367
@ kCannotPick
Definition TObject.h:372
#define gROOT
Definition TROOT.h:406
#define gPad
virtual Color_t GetLineColor() const
Return the line color.
Definition TAttLine.h:33
The Canvas class.
Definition TCanvas.h:23
A ROOT file is an on-disk file, usually with extension .root, that stores objects in a file-system-li...
Definition TFile.h:53
A TGraph is an object made of two arrays X and Y with npoints each.
Definition TGraph.h:41
virtual void SetPoint(Int_t i, Double_t x, Double_t y)
Set x and y values for point number i.
Definition TGraph.cxx:2325
1-D histogram with a float per channel (see TH1 documentation)
Definition TH1.h:621
virtual Int_t GetNbinsX() const
Definition TH1.h:297
virtual Bool_t IsHighlight() const
Definition TH1.h:338
virtual Int_t FindBin(Double_t x, Double_t y=0, Double_t z=0)
Return Global bin number corresponding to x,y,z.
Definition TH1.cxx:3672
2-D histogram with a float per channel (see TH1 documentation)
Definition TH2.h:307
A doubly linked list.
Definition TList.h:38
const char * GetName() const override
Returns name of object.
Definition TNamed.h:47
A simple TTree restricted to a list of float variables only.
Definition TNtuple.h:28
Mother of all ROOT objects.
Definition TObject.h:41
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
Definition TString.cxx:2378
Base class for several text objects.
Definition TText.h:22
TVirtualPad is an abstract base class for the Pad and Canvas classes.
Definition TVirtualPad.h:51
Date
March 2018
Author
Jan Musinsky

Definition in file hlHisto3.C.