Hi Rene,
Below is the short version of how my program is set up. i have a stop button that will stop the while(true) loop if pressed. The idea is that as i am reading the data from various channels and updating graphs and histograms at the same time. data1 and data2 both have a short term display of 20 points and a long term display and a histogram so that the display is as close to real time as possible.
int MyMainFrame::get_rdgs()
{
root_file = new TFile(comm, “RECREATE”);
root_tree = new TTree(“root_tree”, “tree1”, 0);
root_tree->SetBit(kCanDelete);
root_tree->Branch("data1", &data1, "data1/F");
root_tree->Branch("data2", &data2, "data2/F");
root_tree->Branch("data3", &data3, "data3/F");
root_tree->Branch("data4", &data4, "data4/F");
root_tree->Branch("data5", &data5, "data5/F");
root_tree->Branch("data6", &data6, "data6/F");
while(true)
{
gSystem->ProcessEvents();
//start getting data from DAQ, filling appropriate branches.
//Data from DAQ is recieved in as an array(recieved_data[])
int j=0;
for (i=0; i<total_rdgs; i=i+3)
{
switch (j)
{
case 0:
data1= recieved_data[i];
break;
case 1:
data2=recieved_data[i];
break;
//… etc etc for the rest of the variables.
}
j++; // next channel
}
root_tree->Fill();
graph_all();
}
}
void MyMainFrame::graph_all() // graph, update all canvas
{
fCanvas->cd(); root_tree->SetLineColor(1);
root_tree->Draw(“data1:time_b”,"", “CP”, 20,mintime);
fCanvas->Update();
fCanvas->Clear();
fCanvas1->cd();
root_tree->Draw("data2:time_b","", "CP", 20,mintime); fCanvas1->Update();
fCanvas1->Clear();
fCanvas2->cd();
root_tree->Draw("data1:time_b","", "CP");
fCanvas2->Update();
fCanvas2->Clear();
fCanvas3->cd();
root_tree->Draw("data2:time_b","", "CP");
fCanvas3->Update();
fCanvas3->Clear();
fCanvas6->cd();
root_tree->Draw("data1>>hmamon");
ma_hist = (TH1F*)gDirectory->Get("hmamon");
ma_hist->SetStats(kFALSE);
fCanvas6->Update();
fCanvas6->Clear();
fCanvas7->cd();
root_tree->Draw("data2>>hkvmon");
kv_hist = (TH1F*)gDirectory->Get("hkvmon");
kv_hist->SetStats(kFALSE);
fCanvas7->Update();
fCanvas7->Clear();
fCanvas5->cd(); //multi plot
root_tree->SetLineColor(4); //color code 4= blue
root_tree->SetTitle(kFALSE);
root_tree->Draw("data3:time_b","", "CP", 20,mintime);
root_tree->SetLineColor(2); // 2= red
root_tree->Draw("data4:time_b","", "CP same", 20,mintime);// second plot
fCanvas5->Update();
fCanvas5->Clear();
fCanvas4->cd();//multi plot
root_tree->SetLineColor(4); //color code 4= blue
root_tree->Draw("data5:time_b","", "CP", 20,mintime); //first plot
root_tree->SetLineColor(2); // 2= red
root_tree->Draw("data6:time_b","", "CP same", 20,mintime);// second plot
fCanvas4->Update();
fCanvas4->Clear();
}