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

Detailed Description

View in nbviewer Open in SWAN
This example compares what the system time function gmtime and localtime give with what gives TGaxis.

It can be used as referenced test to check if TGaxis is working properly. The original code was developed by Philippe Gras (CEA Saclay. IRFU/SEDI)

#include "TAxis.h"
#include "TGaxis.h"
#include "TCanvas.h"
#include "TString.h"
#include "TLine.h"
#include "TLatex.h"
#include <ctime>
#include <cstdio>
TString stime(time_t *t, bool utc = false, bool display_time_zone = true)
{
struct tm *tt;
if (utc)
tt = gmtime(t);
else
tt = localtime(t);
char buf[256];
if (display_time_zone)
strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S %Z", tt);
else
strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", tt);
return TString(buf);
}
void timeonaxis3()
{
double f = 1.8;
auto c = new TCanvas;
TLatex tex1;
tex1.SetNDC();
tex1.SetTextFont(102);
tex1.SetTextSize(0.055 * f);
TLatex tex3;
tex3.SetNDC();
tex3.SetTextFont(102);
tex3.SetTextSize(0.07 * f);
tex3.SetTextColor(kBlue + 2);
TLatex tex2;
tex2.SetNDC();
tex2.SetTextFont(102);
tex2.SetTextSize(0.07 * f);
tex2.SetTextColor(kOrange + 3);
time_t offset[] = {0, 0, 1325376000, 1341100800};
time_t t[] = {1331150400, 1336417200, 0, 36000};
c->SetTopMargin(0);
c->SetBottomMargin(0);
c->SetLeftMargin(0);
c->SetRightMargin(0);
c->Divide(2, 4, -1, -1);
l.DrawLine(0.5, 0, 0.5, 1.);
for (int i = 0; i < 4; ++i) {
for (int gmt = 0; gmt < 2; ++gmt) {
const char *opt = (gmt ? "gmt" : "local");
TVirtualPad *p = c->cd(2 * i + gmt + 1);
p->SetTopMargin(0);
p->SetFillStyle(4000);
TGaxis *ga = new TGaxis(.4, .25, 5., .25, t[i], t[i] + 1, 1, "t");
ga->SetTimeFormat("TGaxis label: #color[2]{%Y-%m-%d %H:%M:%S}");
ga->SetLabelFont(102);
ga->SetLabelColor(kBlue + 2);
ga->SetTimeOffset(offset[i], opt);
ga->SetLabelOffset(0.04 * f);
ga->SetLabelSize(0.07 * f);
ga->SetLineColor(0);
ga->Draw();
// Get offset string of axis time format: there is not accessor
// to time format in TGaxis.
// Assumes TAxis use the same format.
TAxis a(10, 0, 1600000000);
a.SetTimeOffset(offset[i], opt);
const char *offsettimeformat = a.GetTimeFormat();
char buf[256];
if (offset[i] < t[i]) {
snprintf(buf, 256, "#splitline{%s, %s}{offset: %ld, option %s}", stime(t + i).Data(),
stime(t + i, true).Data(), offset[i], opt);
} else {
int h = t[i] / 3600;
int m = (t[i] - 3600 * h) / 60;
int s = (t[i] - h * 3600 - m * 60);
snprintf(buf, 256, "#splitline{%d h %d m %d s}{offset: %s, option %s}", h, m, s,
stime(offset + i, gmt).Data(), opt);
}
tex1.DrawLatex(.01, .75, buf);
tex2.DrawLatex(.01, .50, offsettimeformat);
time_t t_ = t[i] + offset[i];
snprintf(buf, 256, "Expecting: #color[2]{%s}", stime(&t_, gmt, false).Data());
tex3.DrawLatex(.01, .24, buf);
if (i > 0)
l.DrawLine(0, 0.95, 1, 0.95);
}
}
}
#define f(i)
Definition RSha256.hxx:104
#define c(i)
Definition RSha256.hxx:101
#define a(i)
Definition RSha256.hxx:99
#define h(i)
Definition RSha256.hxx:106
@ kOrange
Definition Rtypes.h:68
@ kBlue
Definition Rtypes.h:67
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h offset
#define snprintf
Definition civetweb.c:1579
virtual void SetFillStyle(Style_t fstyle)
Set the fill area style.
Definition TAttFill.h:42
virtual void SetLineColor(Color_t lcolor)
Set the line color.
Definition TAttLine.h:44
virtual void SetBottomMargin(Float_t bottommargin)
Set Pad bottom margin in fraction of the pad height.
Definition TAttPad.cxx:98
virtual void SetLeftMargin(Float_t leftmargin)
Set Pad left margin in fraction of the pad width.
Definition TAttPad.cxx:108
virtual void SetRightMargin(Float_t rightmargin)
Set Pad right margin in fraction of the pad width.
Definition TAttPad.cxx:118
virtual void SetTopMargin(Float_t topmargin)
Set Pad top margin in fraction of the pad height.
Definition TAttPad.cxx:128
virtual void SetTextColor(Color_t tcolor=1)
Set the text color.
Definition TAttText.h:50
virtual void SetTextFont(Font_t tfont=62)
Set the text font.
Definition TAttText.h:52
virtual void SetTextSize(Float_t tsize=1)
Set the text size.
Definition TAttText.h:53
Class to manage histogram axis.
Definition TAxis.h:32
The Canvas class.
Definition TCanvas.h:23
void SetTimeFormat(const char *tformat)
void SetLabelFont(Int_t labelfont)
Definition TGaxis.h:107
void SetLabelOffset(Float_t labeloffset)
Definition TGaxis.h:108
void SetTimeOffset(Double_t toffset, Option_t *option="local")
void SetLabelColor(Int_t labelcolor)
Definition TGaxis.h:106
void SetLabelSize(Float_t labelsize)
Definition TGaxis.h:109
TLatex * DrawLatex(Double_t x, Double_t y, const char *text)
Use the TLine constructor to create a simple line.
Definition TLine.h:22
virtual void Draw(Option_t *option="")
Default Draw method for all objects.
Definition TObject.cxx:293
Basic string class.
Definition TString.h:138
virtual void SetNDC(Bool_t isNDC=kTRUE)
TVirtualPad is an abstract base class for the Pad and Canvas classes.
Definition TVirtualPad.h:51
TMarker m
Definition textangle.C:8
TLine l
Definition textangle.C:4
auto * tt
Definition textangle.C:16
Authors
Philippe Gras, Bertrand Bellenot, Olivier Couet

Definition in file timeonaxis3.C.