Dear Root team, I don't understand behaviour of TDatime::Convert() function, and more precisely why there is one hour extra. In practice, if I plot data with starting date of July 9, 2004 at 00:00 every 15 mns, TGraph have axis starting one hour before. I put an example below. If I request GMT time, so there is a shift of 3 hours. Maybe it is a problem of time zone effect, but TDatime::Convert() function should be transparent to this, like a black box. Moreover, if starting date is Jan 1, 2004, so there is no shift. And now if I look at result of Convert() function for the date of Jan 1, 1995, which is the number of seconds since Jan 1, 1970, it should be an integer in days. And there is one hour of shift again. root [0] TDatime *da = new TDatime(1995,1,1,0,0,0); root [1] UInt_t a = da->Convert(); root [2] a (unsigned int)788914800 root [3] Double_t b = (Double_t)a; root [4] Double_t days = b/3600/24; root [5] days (Double_t)9.13095833333333394e+03 root [6] (days-int(days))*24. (double)2.30000000000145519e+01 I found in Roottalk digest a mail dealing with the same problem (http://root.cern.ch/root/roottalk/roottalk03/2746.html), and it was said that this problem was fixed. So my question is: Does this problem come from the time zone effect? In this case, how can I draw data with correct date, knowing that add one hour to my data doesn't resolve the problem since GMT conversion is either 1 hour or 0 hour according to summer or winter? I am using ROOT 3.10/02 on Red Hat 7.2 Thank you, regards, Stephanie ******************* example: #include <termios.h> #include <iostream> #include <fstream> #include <stdlib.h> #include <string.h> #include <strstream> #include "TH1.h" #include "TH2.h" #include "TCanvas.h" #include "TStyle.h" #include "TGraph.h" #include "TRint.h" #include "TRint.h" TApplication* the_app; int main(int argc, char* argv[]) { const int Max=20; Double_t Time[Max]; Double_t Data[Max]; Int_t ngraph=0; //one point every 15 mns for (int i=0; i< Max; i++) { Time[ngraph] = float(i)*15.*60.; // conversion in seconds Data[ngraph] = float(i+1); ngraph++; } TGraph* graph = new TGraph(ngraph, Time, Data); TDatime da(2004,07,09,00,00,00); // t0 //Plot data TCanvas* c = new TCanvas("c","Data",600,500); c->cd(); // define axes range and axes titles TH2F* hiscom = new TH2F("hiscom","",1000,0.,24.*15.*60.,30,0.,30.); hiscom->SetStats(kFALSE); hiscom->SetTitle("Data"); gStyle->SetTimeOffset(da.Convert()); // hiscom->GetXaxis()->SetTimeOffset(da.Convert()); hiscom->GetXaxis()->SetTimeDisplay(1); gPad->SetGrid(1); hiscom->Draw("AXIS"); graph->SetMarkerStyle(21); graph->SetMarkerSize(0.4); graph->SetMarkerColor(2); graph->Draw("P"); } #include <termios.h> #include <iostream> #include <fstream> #include <stdlib.h> #include <string.h> #include <strstream> #include "TH1.h" #include "TH2.h" #include "TCanvas.h" #include "TStyle.h" #include "TGraph.h" #include "TRint.h" #include "TRint.h" TApplication* the_app; int main(int argc, char* argv[]) { const int Max=20; Double_t Time[Max]; Double_t Data[Max]; Int_t ngraph=0; for (int i=0; i< Max; i++) { Time[ngraph] = float(i)*15.*60.; // conversion in seconds Data[ngraph] = float(i+1); ngraph++; } TGraph* graph = new TGraph(ngraph, Time, Data); TDatime da(2004,01,01,00,00,00); // t0 //Plot data TCanvas* c = new TCanvas("c","Data",600,500); c->cd(); // define axes range and axes titles TH2F* hiscom = new TH2F("hiscom","",1000,0.,24.*15.*60.,30,0.,30.); hiscom->SetStats(kFALSE); hiscom->SetTitle("Data"); gStyle->SetTimeOffset(da.Convert()); // hiscom->GetXaxis()->SetTimeOffset(da.Convert()); hiscom->GetXaxis()->SetTimeDisplay(1); gPad->SetGrid(1); hiscom->Draw("AXIS"); graph->SetMarkerStyle(21); graph->SetMarkerSize(0.4); graph->SetMarkerColor(2); graph->Draw("P"); }
This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:08 MET