Dear ROOTers,
I want to monitor transition of temperature by time.
I make a program with reference to $ROOTSYS/tutorial/"seism.C".
According to source code("TH1.cxx"), if fTimeDisplay is set to 1, rescale
X axis automatically.
But the bin content isn't set, and it's 0, right after that rescaled X
axis. I attached "m1.C".
I tried like as "m2.C" method for avoid this trouble.
However, trigger rate isn't always 1Hz.
For example, If I made it seem to be "m3.C", it had been uneven.
And so, it become similar appearance with the passage of time even if I
use Draw("p").
In addition, it is too late rendering to use TGraph instead of TH1.
Do you know how can I resolve?
----
Go IWAI
void m1()
{
//! adjust time offset
TDatime dtime;
unsigned int starttime = dtime.Convert();
gStyle -> SetTimeOffset( starttime );
TCanvas canvas( "tempmonitor", "Temperature Monitor" );
TH1D ht( "ht","Temperature Transition", 10, 0.0, 10.0 );
//! temperature: from -140 to 40
ht.SetMaximum( 40.0 );
ht.SetMinimum( -140.0 );
//! not need status
ht.SetStats( 0 );
//! automatic rescale
ht.GetXaxis() -> SetTimeDisplay( 1 );
ht.Draw();
unsigned int pasttime = 0;
while ( 1 ) {
//! generate fake temperature
double t = gRandom -> Gaus( -80.0, 4.0 );
pasttime ++;
ht.SetBinContent( pasttime, t );
canvas.Modified();
canvas.Update();
gSystem -> ProcessEvents();
}
return;
}
void m2()
{
//! adjust time offset
TDatime dtime;
unsigned int starttime = dtime.Convert();
gStyle -> SetTimeOffset( starttime );
TCanvas canvas( "tempmonitor", "Temperature Monitor" );
TH1D ht( "ht","Temperature Transition", 10, 0.0, 10.0 );
//! temperature: from -140 to 40
ht.SetMaximum( 40.0 );
ht.SetMinimum( -140.0 );
//! not need status
ht.SetStats( 0 );
//! automatic rescale
ht.GetXaxis() -> SetTimeDisplay( 1 );
ht.Draw();
unsigned int pasttime = 0;
int timebuf = -1;
int lastfilled = 0;
double tempbuf = 0.0;
while ( 1 ) {
//! generate fake temperature
double t = gRandom -> Gaus( -80.0, 4.0 );
pasttime ++;
double xmax = ht.GetXaxis() -> GetXmax();
if ( pasttime > xmax && timebuf < 0 ) {
timebuf = pasttime;
tempbuf = t;
continue;
}
ht.SetBinContent( pasttime, t );
lastfilled = pasttime;
if ( timebuf > 0 && timebuf < lastfilled ) {
ht.SetBinContent( timebuf, tempbuf );
timebuf = -1;
}
canvas.Modified();
canvas.Update();
gSystem -> ProcessEvents();
}
return;
}
void m3()
{
//! adjust time offset
TDatime dtime;
unsigned int starttime = dtime.Convert();
gStyle -> SetTimeOffset( starttime );
TCanvas canvas( "tempmonitor", "Temperature Monitor" );
TH1D ht( "ht","Temperature Transition", 10, 0.0, 10.0 );
//! temperature: from -140 to 40
ht.SetMaximum( 40.0 );
ht.SetMinimum( -140.0 );
//! not need status
ht.SetStats( 0 );
//! automatic rescale
ht.GetXaxis() -> SetTimeDisplay( 1 );
ht.Draw();
int timebuf = -1;
double tempbuf = 0.0;
unsigned int lastfilled;
unsigned int now;
unsigned int pasttime = 0;
while ( 1 ) {
//! generate fake temperature
double t = gRandom -> Gaus( -80.0, 4.0 );
double xmax = ht.GetXaxis() -> GetXmax();
TDatime dtime;
now = dtime.Convert();
pasttime = now - starttime;
if ( lastfilled == pasttime ) {
gSystem -> Sleep( 3*1000 );
continue;
}
if ( pasttime > xmax && timebuf < 0 ) {
timebuf = pasttime;
tempbuf = t;
continue;
}
ht.SetBinContent( pasttime, t );
lastfilled = pasttime;
if ( timebuf > 0 && timebuf < lastfilled ) {
ht.SetBinContent( timebuf, tempbuf );
timebuf = -1;
}
canvas.Modified();
canvas.Update();
gSystem -> ProcessEvents();
}
return;
}
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:11 MET