MyMainFrame::MyMainFrame(const TGWindow *p, UInt_t w, UInt_t h, TH1F* histogram[10], TH1F* histogram_store[10], TH2F* map[10], TGraphErrors* graph_fit[10], TGraphErrors* graph_threshold[10], TGraphErrors* graph_detected[10], TGraphErrors* graph_neutrons[10], TFile* file) { for (int i = 0; i < 10; i++) { fHistogram[i] = histogram[i]; fHistogram_store[i] = histogram_store[i]; fMap[i] = map[i]; fGraph_fit[i] = graph_fit[i]; fGraph_threshold[i] = graph_threshold[i]; fGraph_detected[i] = graph_detected[i]; fGraph_neutrons[i] = graph_neutrons[i]; fFile = file; fGraph_fit[i]->SetPoint(0, 0, 0); fGraph_fit[i]->SetPointError(0, 0, 0); fGraph_threshold[i]->SetPoint(0, 0, 0); fGraph_threshold[i]->SetPointError(0, 0, 0); fGraph_detected[i]->SetPoint(0, 0, 0); fGraph_detected[i]->SetPointError(0, 0, 0); fGraph_neutrons[i]->SetPoint(0, 0, 0); fGraph_neutrons[i]->SetPointError(0, 0, 0); fGraph_fit[i]->SetMarkerColor(kRed); fGraph_fit[i]->SetMarkerStyle(20); fGraph_fit[i]->SetLineColor(kRed); fGraph_fit[i]->SetLineWidth(1); fGraph_threshold[i]->SetMarkerColor(kBlack); fGraph_threshold[i]->SetMarkerStyle(20); fGraph_threshold[i]->SetLineColor(kRed); fGraph_threshold[i]->SetLineWidth(1); fGraph_detected[i]->SetMarkerColor(kRed); fGraph_detected[i]->SetMarkerStyle(20); fGraph_detected[i]->SetLineColor(kRed); fGraph_detected[i]->SetLineWidth(1); fGraph_neutrons[i]->SetMarkerColor(kBlue); fGraph_neutrons[i]->SetMarkerStyle(20); fGraph_neutrons[i]->SetLineColor(kRed); fGraph_neutrons[i]->SetLineWidth(1); fHistogram_store[i]->SetLineColor(kYellow); fHistogram_store[i]->SetFillColor(kYellow); fHistogram[i]->SetAxisRange(0, 5000, "Y"); fHistogram_store[i]->SetAxisRange(0, 5000, "Y"); } ///////////////////////////////////////////////////////////////////////////// // Create the main frame fMain = new TGMainFrame(p, w, h); ///////////////////////////////////////////////////////////////////////////// // Create a frame for combo box 1 TGHorizontalFrame *frame1 = new TGHorizontalFrame(fMain, 1000, 20); // Create combo box 1 TGComboBox *selectionCombo1 = new TGComboBox(frame1, 98); Int_t initialSelection1 = 0; Int_t firstEntry = 0; Int_t lastEntry = 9; for (int i = firstEntry; i <= lastEntry; i++) { char tmp[20]; sprintf(tmp, "Channel %i", i); selectionCombo1->AddEntry(tmp, i); } selectionCombo1->Connect("Selected(Int_t)", "MyMainFrame", this, "do_selection1(Int_t)"); selectionCombo1->Resize(100, 20); frame1->AddFrame(selectionCombo1, new TGLayoutHints(kLHintsLeft, 5, 5, 3, 4)); // Add the frame for combo box 1 to the main frame fMain->AddFrame(frame1, new TGLayoutHints(kLHintsLeft, 2, 2, 2, 2)); // Create embedded canvas 1 and add it to the main frame fEcanvas1 = new TRootEmbeddedCanvas("Ecanvas1", fMain, 1000, 220); fMain->AddFrame(fEcanvas1, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 10, 10, 10, 1)); ///////////////////////////////////////////////////////////////////////////// // Create a frame for combo box 2 TGHorizontalFrame *frame2 = new TGHorizontalFrame(fMain, 1000, 20); // Create combo box 2 TGComboBox *selectionCombo2 = new TGComboBox(frame2, 99); Int_t initialSelection2 = 1; for (int i = firstEntry; i <= lastEntry; i++) { char tmp[20]; sprintf(tmp, "Channel %i", i); selectionCombo2->AddEntry(tmp, i); } selectionCombo2->Connect("Selected(Int_t)", "MyMainFrame", this, "do_selection2(Int_t)"); selectionCombo2->Resize(100, 20); frame2->AddFrame(selectionCombo2, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4)); // Add the frame for combo box 2 to the main frame fMain->AddFrame(frame2, new TGLayoutHints(kLHintsLeft, 2, 2, 2, 2)); // Create embedded canvas 2 and add it to the main frame fEcanvas2 = new TRootEmbeddedCanvas("Ecanvas2", fMain, 1000, 220); fMain->AddFrame(fEcanvas2, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 10, 10, 10, 1)); ///////////////////////////////////////////////////////////////////////////// // Frame for Draw and Exit buttons TGHorizontalFrame *frame3 = new TGHorizontalFrame(fMain, 1000, 20); // Create a draw button TGTextButton *drawButton = new TGTextButton(frame3, "&Draw"); drawButton->Connect("Clicked()", "MyMainFrame", this, "do_drawing()"); frame3->AddFrame(drawButton, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4)); // Create an exit button TGTextButton *exitButton = new TGTextButton(frame3, "&Exit"); exitButton->Connect("Clicked()", "MyMainFrame", this, "do_exiting()"); frame3->AddFrame(exitButton, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4)); fMain->AddFrame(frame3, new TGLayoutHints(kLHintsCenterX, 2, 2, 2, 2)); ///////////////////////////////////////////////////////////////////////////// // Refresh Timer TTimer *timer = new TTimer(); timer->Connect("Timeout()", "MyMainFrame", this, "do_drawing()"); // Set a name to the main frame fMain->SetWindowName("GRAPH VIEWER"); // Map all subwindows of main frame fMain->MapSubwindows(); // Initialize the layout algorithm via Resize() fMain->Resize(fMain->GetDefaultSize()); // Map main frame fMain->MapWindow(); // Display setting for the first canvas fEcanvas1->GetCanvas()->cd(); pad1[0] = new TPad("Pad10", "Pad10", 0.000, 0.0, 0.333, 1.0); pad1[1] = new TPad("Pad11", "Pad11", 0.333, 0.0, 0.666, 1.0); pad1[2] = new TPad("Pad12", "Pad12", 0.666, 0.0, 0.999, 1.0); for (int i = 0; i < 3; i++) { pad1[i]->SetGrid(); pad1[i]->Draw(); } for (int i = 0; i < 10; i++) { string name; ostringstream number; number << i; name = "Frame" + number.str(); //dummyHistogram[i] = new TH1F(name.c_str(), "Number of Neutrons;Time[msec];Rate[Hz]", 100, 0, 100000); //dummyHistogram[i]->SetAxisRange(0, 6000, "Y"); } pad1[0]->cd(); fMap[initialSelection1]->Draw("Color"); fGraph_fit[initialSelection1]->Draw("P"); fGraph_threshold[initialSelection1]->Draw("P"); pad1[1]->cd(); pad1[1]->SetFillColor(0); pad1[1]->SetGrid(); //dummyHistogram[initialSelection1]->Draw(); fGraph_detected[initialSelection1]->Draw("ALP"); fGraph_neutrons[initialSelection1]->Draw("ALP"); pad1[2]->cd(); fHistogram_store[initialSelection1]->Draw(); fHistogram[initialSelection1]->Draw("same"); selectionCombo1->Select(initialSelection1); currentSelection1 = initialSelection1; // Display setting for the second canvas fEcanvas2->GetCanvas()->cd(); pad2[0] = new TPad("Pad20", "Pad20", 0.000, 0.0, 0.333, 1.0); pad2[1] = new TPad("Pad21", "Pad21", 0.333, 0.0, 0.666, 1.0); pad2[2] = new TPad("Pad22", "Pad22", 0.666, 0.0, 0.999, 1.0); for (int i = 0; i < 3; i++) { pad2[i]->SetGrid(); pad2[i]->Draw(); } pad2[0]->cd(); fMap[initialSelection2]->Draw("Color"); fGraph_fit[initialSelection2]->Draw("P"); fGraph_threshold[initialSelection2]->Draw("P"); pad2[1]->cd(); //dummyHistogram[initialSelection2]->Draw(); fGraph_detected[initialSelection2]->Draw("ALP"); fGraph_neutrons[initialSelection2]->Draw("ALP"); pad2[2]->cd(); fHistogram_store[initialSelection2]->Draw(); fHistogram[initialSelection2]->Draw("same"); selectionCombo2->Select(initialSelection2); currentSelection2 = initialSelection2; timer->Start(100, kFALSE); }