#include "TH1.h" #include "TF1.h" #include #include #include #include #include //******************************* #include #include #include #include #include #include #include //******************************** using namespace std; using std::ofstream; //********************************** class MyMainFrame { RQ_OBJECT("MyMainFrame") private: TGMainFrame *fMain; TRootEmbeddedCanvas *fEcanvas; public: MyMainFrame(const TGWindow *p, UInt_t w, UInt_t h); virtual ~MyMainFrame(); void DoDraw(); }; MyMainFrame::MyMainFrame(const TGWindow *p, UInt_t w, UInt_t h) { //Greate a main frame fMain = new TGMainFrame(p,w,h); // Great a 1st horizontal frame TGHorizontalFrame *h1frame = new TGHorizontalFrame(fMain,800,400); TGVerticalFrame *v11frame = new TGVerticalFrame(h1frame,100,400, kFixedWidth | kFixedHeight); TGVerticalFrame *v12frame = new TGVerticalFrame(h1frame,700,400, kFixedWidth | kFixedHeight); TGTextButton *bt_load = new TGTextButton(v11frame, "Load spectrum"); TGTextButton *bt_exit = new TGTextButton(v11frame, "Exit", "gApplication->Terminate(0)"); fECanvas = new TRootEmbeddedCanvas("ECanvas",v12frame,200,200); //TGLabel *fLright = new TGLabel(v12frame, "Full Spectrum"); v11frame->AddFrame(bt_load, new TGLayoutHints(kLHintsLeft, 4, 0, 0, 0)); v11frame->AddFrame(bt_exit, new TGLayoutHints(kLHintsLeft, 4, 0, 10, 0)); v12frame->AddFrame(fECanvas, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0)); h1frame->AddFrame(v11frame, new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 0, 0, 0, 0)); h1frame->AddFrame(v12frame, new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 0, 0, 0, 0)); fMain->AddFrame(h1frame, new TGLayoutHints(kLHintsExpandX| kLHintsExpandY,10,10,10,1)); bt_load->Connect("Clicked()", "MyMainFrame", fMain, "DoDraw()"); // Set a name to the main frame fMain->SetWindowName("Fitting peaks"); // Map all subwindows of main frame fMain->MapSubwindows(); // Initialize the layout algorithm fMain->Resize(fMain->GetDefaultSize()); // Map main frame fMain->MapWindow(); } void MyMainFrame::DoDraw() { // Draws function graphics in randomly choosen interval TF1 *f1 = new TF1("f1","sin(x)/x",0,gRandom->Rndm()*10); f1->SetFillColor(19); f1->SetFillStyle(1); f1->SetLineWidth(3); f1->Draw(); TCanvas *fCanvas = fEcanvas->GetCanvas(); fCanvas->cd(); fCanvas->Update(); // loadspe("G1100.ASC")->Draw(); // TCanvas *fCanvas = fEcanvas->GetCanvas(); // fCanvas->cd(); // fCanvas->Update(); } MyMainFrame::~MyMainFrame() { // Clean up used widgets: frames, buttons, layouthints fMain->Cleanup(); delete fMain; } //*********************Program*************************** TH1F *loadspe(string input) { double count; ifstream if1; TH1F *h = new TH1F("h","Full Spectrum",16384,0.,16384.); for (int i = 1; i<=16384; i++) h->SetBinContent(i,0); if1.open(input.c_str()); int channel = 1; while (if1 >> count) { h->SetBinContent(channel,count); channel++; } if1.close(); return h; } void peakprogram() { new MyMainFrame(gClient->GetRoot(),200,200); }