Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
timeonaxis.C
Go to the documentation of this file.
1/// \file
2/// \ingroup tutorial_graphs
3/// \notebook -js
4/// This macro illustrates the use of the time mode on the axis
5/// with different time intervals and time formats.
6/// Through all this script, the time is expressed in UTC. some
7/// information about this format (and others like GPS) may be found at
8/// <a href="http://tycho.usno.navy.mil/systime.html">http://tycho.usno.navy.mil/systime.html</a>
9/// or
10/// <a href="http://www.topology.org/sci/time.html">http://www.topology.org/sci/time.html</a>
11///
12/// The start time is: almost NOW (the time at which the script is executed)
13/// actually, the nearest preceding hour beginning.
14/// The time is in general expressed in UTC time with the C time() function
15/// This will obviously most of the time not be the time displayed on your watch
16/// since it is a universal time. See the C time functions for converting this time
17/// into more useful structures.
18///
19/// \macro_image
20/// \macro_code
21///
22/// \author Damir Buskulic
23
24#include <time.h>
25
26void timeonaxis()
27{
28
29 time_t script_time;
30 script_time = time(0);
31 script_time = 3600 * (int)(script_time / 3600);
32
33 // The time offset is the one that will be used by all graphs.
34 // If one changes it, it will be changed even on the graphs already defined
35 gStyle->SetTimeOffset(script_time);
36
37 auto ct = new TCanvas("ct", "Time on axis", 10, 10, 700, 900);
38 ct->Divide(1, 3);
39
40 int i;
41
42 // ### Build a signal: noisy damped sine
43 // Time interval: 30 minutes
44
45 gStyle->SetTitleH(0.08);
46 float noise;
47 auto ht = new TH1F("ht", "Love at first sight", 3000, 0., 2000.);
48 for (i = 1; i < 3000; i++) {
49 noise = gRandom->Gaus(0, 120);
50 if (i > 700) {
51 noise += 1000 * sin((i - 700) * 6.28 / 30) * exp((double)(700 - i) / 300);
52 }
53 ht->SetBinContent(i, noise);
54 }
55 ct->cd(1);
56 ht->SetLineColor(2);
57 ht->GetXaxis()->SetLabelSize(0.05);
58 ht->Draw();
59 // Sets time on the X axis
60 // The time used is the one set as time offset added to the value
61 // of the axis. This is converted into day/month/year hour:min:sec and
62 // a reasonable tick interval value is chosen.
63 ht->GetXaxis()->SetTimeDisplay(1);
64
65 // ### Build a simple graph beginning at a different time
66 // Time interval: 5 seconds
67
68 float x[100], t[100];
69 for (i = 0; i < 100; i++) {
70 x[i] = sin(i * 4 * 3.1415926 / 50) * exp(-(double)i / 20);
71 t[i] = 6000 + (double)i / 20;
72 }
73 auto gt = new TGraph(100, t, x);
74 gt->SetTitle("Politics");
75 ct->cd(2);
76 gt->SetLineColor(5);
77 gt->SetLineWidth(2);
78 gt->Draw("AL");
79 gt->GetXaxis()->SetLabelSize(0.05);
80 // Sets time on the X axis
81 gt->GetXaxis()->SetTimeDisplay(1);
82 gPad->Modified();
83
84 // ### Build a second simple graph for a very long time interval
85 // Time interval: a few years
86
87 auto gt2 = new TGraph();
88 TDatime dateBegin(2000, 1, 1, 0, 0, 0);
89 for (i = 0; i < 10; i++) {
90 TDatime datePnt(2000 + i, 1, 1, 0, 0, 0);
91 gt2->AddPoint(datePnt.Convert() - dateBegin.Convert(), 100 + gRandom->Gaus(500, 100) * i);
92 }
93 gt2->SetTitle("Number of monkeys on the moon");
94 ct->cd(3);
95 gt2->SetMarkerColor(4);
96 gt2->SetMarkerStyle(29);
97 gt2->SetMarkerSize(1.3);
98 gt2->Draw("AP");
99 gt2->GetXaxis()->SetLabelSize(0.04);
100 gt2->GetXaxis()->SetNdivisions(10);
101 // Sets time on the X axis
102 gt2->GetXaxis()->SetTimeDisplay(1);
103
104 // One can choose a different time format than the one chosen by default
105 // The time format is the same as the one of the C strftime() function
106 // It's a string containing the following formats :
107 //
108 // for date :
109 // %a abbreviated weekday name
110 // %b abbreviated month name
111 // %d day of the month (01-31)
112 // %m month (01-12)
113 // %y year without century
114 // %Y year with century
115 //
116 // for time :
117 // %H hour (24-hour clock)
118 // %I hour (12-hour clock)
119 // %p local equivalent of AM or PM
120 // %M minute (00-59)
121 // %S seconds (00-61)
122 // %% %
123 // The other characters are output as is.
124
125 gt2->GetXaxis()->SetTimeFormat("%d/%m/%Y %F2000-01-01 00:00:00");
126}
R__EXTERN TRandom * gRandom
Definition TRandom.h:62
R__EXTERN TStyle * gStyle
Definition TStyle.h:436
#define gPad
The Canvas class.
Definition TCanvas.h:23
This class stores the date and time with a precision of one second in an unsigned 32 bit word (950130...
Definition TDatime.h:37
A TGraph is an object made of two arrays X and Y with npoints each.
Definition TGraph.h:41
1-D histogram with a float per channel (see TH1 documentation)
Definition TH1.h:623
virtual Double_t Gaus(Double_t mean=0, Double_t sigma=1)
Samples a random number from the standard Normal (Gaussian) Distribution with the given mean and sigm...
Definition TRandom.cxx:275
void SetTimeOffset(Double_t toffset)
Change the time offset for time plotting.
Definition TStyle.cxx:1913
void SetTitleH(Float_t h=0)
Definition TStyle.h:416
RVec< PromoteType< T > > exp(const RVec< T > &v)
Definition RVec.hxx:1837
RVec< PromoteType< T > > sin(const RVec< T > &v)
Definition RVec.hxx:1851
Double_t x[n]
Definition legend1.C:17