Metodi Computazionali della Fisica Secondo Modulo: C++ Settima Lezione Andrea Piccione () Metodi Comptazionali della Fisica - Secondo Modulo: C++ Milano, 07/01/08 1 / 25
Utilizzo delle classi di ROOT GUI con Python Andrea Piccione () Metodi Comptazionali della Fisica - Secondo Modulo: C++ Milano, 07/01/08 2 / 25
Utilizzo delle classi di ROOT Una semplice ricetta prendete uno script di ROOT; aggiungete int main() all inizio e return 0; prima dell ultima parentesi; aggiungete gli header file del C++ che possono servire; aggiungete tutti gli header file corrispondenti alle classi di ROOT utilizzate (ad esempio, se usate TCanvas, #include "TCanvas.h"; aggiungete un link al sistema per aprire le finestre; compilate: g++ nomefile.cpp root-config --lib -I root-config --incdir Andrea Piccione () Metodi Comptazionali della Fisica - Secondo Modulo: C++ Milano, 07/01/08 3 / 25
Utilizzo delle classi di ROOT Un semplice esempio: lo script { groot->reset(); Float_t xf[2000],dx[2000],fit[2000]; Float_t xt[2000],train[2000],errort[2000]; TCanvas *Test = new TCanvas("Test", "TestPlot",800,600); TGraph *grtrain = new TGraphErrors(TrainPoints,xt,train,dx,errort); TGraph *grvalid = new TGraphErrors(ValidPoints,xv,valid,dx,errorv); TGraph *grfit = new TGraph(DataPoints,xf,fit); TF1 *orig = new TF1("sin","0.5+0.4*sin(6.28*x)"); TH1 *Graph1 = new TH1F("Graph1",NULL,200,0.,1.0); } Test->Draw(); Andrea Piccione () Metodi Comptazionali della Fisica - Secondo Modulo: C++ Milano, 07/01/08 5 / 25
Utilizzo delle classi di ROOT Un semplice esempio: il main #1 #include <iostream> #include <fstream> #include <cmath> #include "TSystem.h" #include "TApplication.h" #include "TCanvas.h" #include "TF1.h" #include "TGraph.h" #include "TGraphErrors.h" #include "TH1.h" #include "TLegend.h" #include "TLegendEntry.h" #include "TColor.h" using namespace std; int main(){ //groot->reset(); Andrea Piccione () Metodi Comptazionali della Fisica - Secondo Modulo: C++ Milano, 07/01/08 7 / 25
Utilizzo delle classi di ROOT Un semplice esempio: il main #2 TApplication theapp("app", NULL, NULL); Float_t xf[2000],dx[2000],fit[2000]; Float_t xt[2000],train[2000],errort[2000]; Test->Draw(); //Test->Print("prova.png"); theapp.run(); } return 0; Andrea Piccione () Metodi Comptazionali della Fisica - Secondo Modulo: C++ Milano, 07/01/08 9 / 25
Utilizzo delle classi di ROOT Un semplice esempio: note se serve solo l output su file, scommentate la riga Test->Print("prova.png"); (in questo caso non è necessario inizializzare una TApplication; prima di compilare, controllate i path per include e librerie con root-config --libs e root-config --incdir; Andrea Piccione () Metodi Comptazionali della Fisica - Secondo Modulo: C++ Milano, 07/01/08 10 / 25
Utilizzo delle classi di ROOT Un semplice esempio: il risultato Andrea Piccione () Metodi Comptazionali della Fisica - Secondo Modulo: C++ Milano, 07/01/08 11 / 25
GUI con Python Introduzione Python è un linguaggio di scripting; Python è ObjectOriented; Python è multipiattaforma; Python è semplice da usare; molti strumenti forniscono API per Python. Andrea Piccione () Metodi Comptazionali della Fisica - Secondo Modulo: C++ Milano, 07/01/08 12 / 25
GUI con Python Un esempio: il codice #1 Utilizziamo le wxwidgets per Python per realizzare un pannello di controllo che compila un codice C++, scrive alcuni parametri di input su un file e lancia il fit: #!/usr/bin/python import wx,os,sys,string class MyFrame(wx.Frame): def init (self, parent, title): wx.frame. init (self, parent, -1, title, pos=(150, 150), size=(400, 800)) # Create the menubar menubar = wx.menubar() # and a menu menu = wx.menu() Andrea Piccione () Metodi Comptazionali della Fisica - Secondo Modulo: C++ Milano, 07/01/08 14 / 25
GUI con Python Un esempio: il codice #2 # add an item to the menu, using \tkeyname automatically # creates an accelerator, the third param is some help text # that will show up in the statusbar menu.append(wx.id_exit, "E&xit\tAlt-X", "Exit this simple sample") # bind the menu event to an event handler self.bind(wx.evt_menu, self.ontimetoclose, id=wx.id_exit) # and put the menu on the menubar menubar.append(menu, "&File") self.setmenubar(menubar) self.createstatusbar() # Now create the Panel to put the other controls on. panel = wx.panel(self) Andrea Piccione () Metodi Comptazionali della Fisica - Secondo Modulo: C++ Milano, 07/01/08 16 / 25
GUI con Python Un esempio: il codice #3 makebtn = wx.button(panel, -1, "Make") exebtn = wx.button(panel, -1, Execute ) closebtn = wx.button(panel, -1, "Close") actfunclist = [ Linear, Sigmoid, Sinusoidal ] radioactfunc = wx.radiobox( panel, -1, "Activation function for internal layers:", wx.defaultposition, wx.defaultsize, actfunclist, 1, wx.ra_specify_cols ) # bind the button events to handlers self.bind(wx.evt_button, self.onmakebutton, makebtn) self.bind(wx.evt_button, self.onrunbutton, exebtn) self.bind(wx.evt_button, self.ontimetoclose, closebtn) Andrea Piccione () Metodi Comptazionali della Fisica - Secondo Modulo: C++ Milano, 07/01/08 18 / 25
GUI con Python Un esempio: il codice #4 sizer = wx.boxsizer(wx.vertical) sizer.add(text, 0, wx.all, 10) sizer.add(textl, 0, wx.all, 10) sizer.add(chlayers, 0, wx.all, 10) sizer.add(textn, 0, wx.all, 10) sizer.add(textnodes, 0, wx.all, 10) sizer.add(radioactfunc, 0, wx.all, 10) sizer.add(radioactfunclast, 0, wx.all, 10) sizer.add(makebtn, 0, wx.all, 10) sizer.add(exebtn, 0, wx.all, 10) sizer.add(closebtn, 0, wx.all, 10) Andrea Piccione () Metodi Comptazionali della Fisica - Secondo Modulo: C++ Milano, 07/01/08 20 / 25
GUI con Python Un esempio: il codice #5 panel.setsizer(sizer) panel.layout() def OnRunButton(self, evt): """Event handler for the button click.""" print "Running the main..." out_file = open("init/mlp.par","w") out_file.write(myframe.nlayers +"!number_of_layers\n") out_file.write(myframe.nnodes +"!nodes_on_int_layers\n") out_file.write(repr(myframe.actfunc)+"!af\n") out_file.write(repr(myframe.actfunclast)+"!af_last_layer\n") out_file.close() os.system(./main ) Andrea Piccione () Metodi Comptazionali della Fisica - Secondo Modulo: C++ Milano, 07/01/08 22 / 25
GUI con Python Un esempio: il codice #6 class MyApp(wx.App): def OnInit(self): frame = MyFrame(None, "Simple wxpython App") self.settopwindow(frame) print "Print statements go to this stdout window by default." frame.show(true) return True app = MyApp(redirect=True) app.mainloop() Andrea Piccione () Metodi Comptazionali della Fisica - Secondo Modulo: C++ Milano, 07/01/08 24 / 25
GUI con Python Un esempio: il risultato Andrea Piccione () Metodi Comptazionali della Fisica - Secondo Modulo: C++ Milano, 07/01/08 25 / 25