RE: [ROOT] TDatime

From: Stephanie Escoffier (escoffier@cppm.in2p3.fr)
Date: Fri Jul 09 2004 - 16:45:46 MEST


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