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:433
#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:621
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:1909
void SetTitleH(Float_t h=0)
Definition TStyle.h:413
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