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

Detailed Description

This tutorial illustrates how to use the highlight mode with trees.

It first creates a TTree from a temperature data set in Prague between 1775 and 2004. Then it defines three pads representing the temperature per year, month and day. Thanks to the highlight mechanism it is possible to explore the data set only by moving the mouse on the plots. Movements on the years' plot will update the months' and days' plot. Movements on the months plot will update the days plot. Movements on the days' plot will display the exact temperature for a given day.

Int_t year, month, day;
TTree *tree = nullptr;
TProfile *hYear = nullptr, *hMonth = nullptr, *hDay = nullptr;
TCanvas *Canvas = nullptr;
Int_t customhb = -2;
TLatex *info = nullptr;
// Ranges for year, month, day and temperature
Int_t rYear[3]; // from tree/data
Int_t rMonth[3] = { 12, 1, 13 };
Int_t rDay[3] = { 31, 1, 32 };
Double_t rTemp[3] = { 55.0, -20.0, 35.0 };
void HighlightDay(Int_t xhb)
{
if (!info) {
info = new TLatex();
info->SetTextSizePixels(25);
Canvas->cd(3);
info->Draw();
gPad->Update();
}
if (xhb != customhb)
day = xhb;
TString temp = TString::Format(" %5.1f #circC", hDay->GetBinContent(day));
if (hDay->GetBinEntries(day) == 0)
temp = " ";
TString m = " ";
if (month > 0)
m = TString::Format("-%02d", month);
TString d = " ";
if (day > 0)
d = TString::Format("-%02d", day);
info->SetText(2.0, hDay->GetMinimum() * 0.8, TString::Format("%4d%s%s%s", year, m.Data(), d.Data(), temp.Data()));
Canvas->GetPad(3)->Modified();
}
void HighlightMonth(Int_t xhb)
{
if (!hDay) {
hDay = new TProfile("hDay", "; day; temp, #circC", rDay[0], rDay[1], rDay[2]);
hDay->SetMinimum(rTemp[1]);
hDay->SetMaximum(rTemp[2]);
hDay->GetYaxis()->SetNdivisions(410);
hDay->SetFillColor(kGray);
hDay->SetMarkerStyle(kFullDotMedium);
Canvas->cd(3);
hDay->Draw("HIST, CP");
gPad->Update();
hDay->SetHighlight();
}
if (xhb != customhb)
month = xhb;
tree->Draw("T:DAY>>hDay", TString::Format("MONTH==%d && YEAR==%d", month, year), "goff");
hDay->SetTitle(TString::Format("temperature by day (month = %02d, year = %d)", month, year));
Canvas->GetPad(3)->Modified();
HighlightDay(customhb); // custom call HighlightDay
}
void HighlightYear(Int_t xhb)
{
if (!hMonth) {
hMonth = new TProfile("hMonth", "; month; temp, #circC", rMonth[0], rMonth[1], rMonth[2]);
hMonth->SetMinimum(rTemp[1]);
hMonth->SetMaximum(rTemp[2]);
hMonth->GetXaxis()->SetNdivisions(112);
hMonth->GetXaxis()->CenterLabels();
hMonth->GetYaxis()->SetNdivisions(410);
hMonth->SetFillColor(kGray+1);
hMonth->SetMarkerStyle(kFullDotMedium);
Canvas->cd(2)->SetGridx();
hMonth->Draw("HIST, CP");
gPad->Update();
hMonth->SetHighlight();
}
year = xhb - 1 + rYear[1];
tree->Draw("T:MONTH>>hMonth", TString::Format("YEAR==%d", year), "goff");
hMonth->SetTitle(TString::Format("temperature by month (year = %d)", year));
Canvas->GetPad(2)->Modified();
HighlightMonth(customhb); // custom call HighlightMonth
}
void HighlightTemp(TVirtualPad *pad, TObject *obj, Int_t xhb, Int_t yhb)
{
if (obj == hYear)
HighlightYear(xhb);
if (obj == hMonth)
HighlightMonth(xhb);
if (obj == hDay)
HighlightDay(xhb);
Canvas->Update();
}
void tree200_temperature()
{
// Read file (data from Global Historical Climatology Network)
tree = new TTree("tree", "GHCN-Daily");
// data format: YEAR/I:MONTH/I:DAY/I:T/F
// Read file $ROOTSYS/tutorials/io/tree/temperature_Prague.dat
auto dir = gROOT->GetTutorialDir();
dir.Append("/io/tree/");
dir.ReplaceAll("/./","/");
if (tree->ReadFile(Form("%stemperature_Prague.dat", dir.Data())) == 0)
return;
// Compute range of years
tree->GetEntry(0);
rYear[1] = (Int_t)tree->GetLeaf("YEAR")->GetValue(); // first year
tree->GetEntry(tree->GetEntries() - 1);
rYear[2] = (Int_t)tree->GetLeaf("YEAR")->GetValue(); // last year
rYear[2] = rYear[2] + 1;
rYear[0] = rYear[2] - rYear[1];
// Create a TProfile for the average temperature by years
hYear = new TProfile("hYear", "temperature (average) by year; year; temp, #circC", rYear[0], rYear[1], rYear[2]);
tree->Draw("T:YEAR>>hYear", "", "goff");
hYear->SetMaximum(hYear->GetMean(2)*1.50);
hYear->SetMinimum(hYear->GetMean(2)*0.50);
hYear->GetXaxis()->SetNdivisions(410);
hYear->GetYaxis()->SetNdivisions(309);
hYear->SetLineColor(kGray+2);
hYear->SetMarkerStyle(8);
hYear->SetMarkerSize(0.75);
// Draw the average temperature by years
gStyle->SetOptStat("em");
Canvas = new TCanvas("Canvas", "Canvas", 0, 0, 700, 900);
Canvas->HighlightConnect("HighlightTemp(TVirtualPad*,TObject*,Int_t,Int_t)");
Canvas->Divide(1, 3, 0.001, 0.001);
Canvas->cd(1);
hYear->Draw("HIST, LP");
gPad->Update();
// Connect the highlight procedure to the temperature profile
hYear->SetHighlight();
}
#define d(i)
Definition RSha256.hxx:102
int Int_t
Signed integer 4 bytes (int).
Definition RtypesCore.h:59
double Double_t
Double 8 bytes.
Definition RtypesCore.h:73
@ kGray
Definition Rtypes.h:66
@ kFullDotMedium
Definition TAttMarker.h:59
#define gROOT
Definition TROOT.h:417
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
Definition TString.cxx:2496
externTStyle * gStyle
Definition TStyle.h:442
#define gPad
virtual void SetNdivisions(Int_t n=510, Bool_t optim=kTRUE)
Set the number of divisions for this axis.
Definition TAttAxis.cxx:214
virtual void SetLineColor(Color_t lcolor)
Set the line color.
Definition TAttLine.h:44
virtual void SetMarkerStyle(Style_t mstyle=1)
Set the marker style.
Definition TAttMarker.h:43
virtual void SetMarkerSize(Size_t msize=1)
Set the marker size.
Definition TAttMarker.h:48
virtual void SetTextSizePixels(Int_t npixels)
Set the text size in pixel.
The Canvas class.
Definition TCanvas.h:23
virtual void HighlightConnect(const char *slot)
This is "simplification" for function TCanvas::Connect with Highlighted signal for specific slot.
Definition TCanvas.cxx:1624
TVirtualPad * cd(Int_t subpadnumber=0) override
Set current canvas & pad.
Definition TCanvas.cxx:716
void Update() override
Update canvas pad buffers.
Definition TCanvas.cxx:2486
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.
Definition TH1.cxx:7648
TAxis * GetXaxis()
Definition TH1.h:571
virtual void SetMaximum(Double_t maximum=-1111)
Definition TH1.h:652
TAxis * GetYaxis()
Definition TH1.h:572
void Draw(Option_t *option="") override
Draw this histogram with options.
Definition TH1.cxx:3097
virtual void SetMinimum(Double_t minimum=-1111)
Definition TH1.h:653
virtual void SetHighlight(Bool_t set=kTRUE)
Set highlight (enable/disable) mode for the histogram by default highlight mode is disable.
Definition TH1.cxx:4537
virtual Double_t GetValue(Int_t i=0) const
Definition TLeaf.h:186
Mother of all ROOT objects.
Definition TObject.h:42
virtual void Draw(Option_t *option="")
Default Draw method for all objects.
Definition TObject.cxx:293
void Divide(Int_t nx=1, Int_t ny=1, Float_t xmargin=0.01, Float_t ymargin=0.01, Int_t color=0) override
Automatic pad generation by division.
Definition TPad.cxx:1295
TVirtualPad * GetPad(Int_t subpadnumber) const override
Get a pointer to subpadnumber of this pad.
Definition TPad.cxx:3027
Profile Histogram.
Definition TProfile.h:32
Basic string class.
Definition TString.h:138
const char * Data() const
Definition TString.h:384
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:2385
virtual void SetText(Double_t x, Double_t y, const char *text)
Definition TText.h:74
A TTree represents a columnar dataset.
Definition TTree.h:89
virtual Int_t GetEntry(Long64_t entry, Int_t getall=0)
Read all branches of entry and return total number of bytes read.
Definition TTree.cxx:5718
void Draw(Option_t *opt) override
Default Draw method for all objects.
Definition TTree.h:478
virtual Long64_t GetEntries() const
Definition TTree.h:510
virtual TLeaf * GetLeaf(const char *branchname, const char *leafname)
Return pointer to the 1st Leaf named name in any Branch of this Tree or any branch in the list of fri...
Definition TTree.cxx:6306
virtual Long64_t ReadFile(const char *filename, const char *branchDescriptor="", char delimiter=' ')
Create or simply read branches from filename.
Definition TTree.cxx:7757
TVirtualPad is an abstract base class for the Pad and Canvas classes.
Definition TVirtualPad.h:51
virtual void Modified(Bool_t flag=1)=0
void Draw(Option_t *option="") override=0
Default Draw method for all objects.
virtual void SetGridx(Int_t value=1)=0
TMarker m
Definition textangle.C:8
Date
March 2018
Author
Jan Musinsky

Definition in file tree200_temperature.C.