Exemple #1
0
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);
}