310 likes | 442 Views
Prezentare Gaudi Viewer. Cuprins. Introducere. Am dezvoltat pachetul Gaudi Viewer in cadrul grupului "Core Software Grup", grupul IT responsabil de dezvoltarea software pentru proiectul LHCb
E N D
Prezentare Gaudi Viewer Gaudi Viewer Radu Stoica
Cuprins Gaudi Viewer Radu Stoica
Introducere Am dezvoltat pachetul Gaudi Viewer in cadrul grupului "Core Software Grup", grupul IT responsabil de dezvoltarea software pentru proiectul LHCb Aplicatia este menita sa vina in ajutorul utilizatorilor in interactia dintre acestia si pachetele dezvoltate pe framework-ul Gaudi Prezentarea este compusa din 3 parti: - Prezentarea caracteristicilor Gaudi pe care se bazeaza aplicatia - Prezentarea propriu-zisa - Demostratie si screenshot-uri Gaudi Viewer Radu Stoica
Organizarea pachetelor softwareLCHb Exista 4 pachete mari de cu functii complementare: - Gauss (simulare) - Boole (digitizare) - Brunel (reconstructie) - DaVinci (analiza date) Toate pachetele sunt dezvoltate pe frameworkul Gaudi ce ofera functionalitate comuna si impune o anumita filozofie software Gaudi Viewer Radu Stoica
Notiuni generale software LHCb Gaudi Viewer Radu Stoica
Standardizarea claselor Exista 4 tipuri mari de clase (functionalitatea comuna este implementata prin mostenire): - Algoritmi (clasa cea mai importanta ce realizeaza prelucrarea propriu-zisa a datelor) - Servicii (numite si store-uri se ocupa de getionarea Datelor) - Date (informatiile folosite de algoritmi) - Tool-uri (echivalentul algoritmilor traditionali) Gaudi Viewer Radu Stoica
Principiul blackboard Nici un Algoritm nu trebuie sa gestioneze Date Nici un Algoritm nu trebuie sa interactioneze cu alti Algoritmi Accesul la date (inclusiv scrierea se face) cu ajutorul diverselor tipuri de servicii Serviciile gestioneaza Datele (le gestioneaza si elibereaza memoria cand nu mai sunt necesare) Toate accesele se fac pe baza numelor ierarhice (filozofie POSIX) Gaudi Viewer Radu Stoica
Principiul blackboard Beneficii: Este mult mai usoara impartirea in unitati mici a efortului de dezvoltare software intre diversele echipe existente. Este permis lucru cu mai multe versiuni simultan pentru acelasi pachet Gaudi Viewer Radu Stoica
Prezentare Gaudi Viewer Gaudi Viewer Radu Stoica
Motivul dezvoltarii pachetului In general modul de dezvoltare, utilizarea a unei aplicatii bazate pe Gaudi este dificil de inteles (fisiere .opts) Un job obisnuit este de dimensiuni mari (poate dura ore/zile). Nu exista control! Metodele de logare sunt dificil de folosit. Rezulta ori logg-uri trunchiate (dimensiuni mai mici) ori logg-uri foarte mari => nefolosibile practic Confuzia utilizatorilor obisnuiti privind modul de configurare initiala a aplicatiilor (CMT) Gaudi Viewer Radu Stoica
Scopul Gaudi Viewer Vizualizare ierarhiilor de date oferite de diversele servicii existente Afisarea continutului relevant din punct de vedere fizic al obiectelor de tip Data. Posibilitatea de a vizualiza propietatile fiecarui serviciu/algoritm existent Controlul aplicatiei. Aplicatia trebuie sa poata fi (re)pornita/oprita la dorinta utilizatorului. In plus este util daca anumite obiecte pot fi reconfigurate si executia reluata Gaudi Viewer Radu Stoica
Scopul Gaudi Viewer Posibilitatea vizualizarii directe a diverselor tipuri de persistenta utilizate (baze de date, fisiere de evenimente “.dst”, “.sim”, ".digi"). In cazul in care utilizatorul doreste numai vizualizarea acestor date el nu mai este obligat sa creeze fisiere .opts specializate ci doar sa indice calea catre fisiere Posibilitatea tiparirii, copierii informatiilor vizualizate independent de platforma si GUI-ul folosit - Interceptarea output-ului catre stdout al aplicatiei si aplicarea de diverse filtre la cerinta utilizatorului pentru a usura interpretarea acestora Gaudi Viewer Radu Stoica
Modul de realizare Gaudi Viewer Radu Stoica
Limbajele si bibliotecile folosite Marea majoritate a codului este scris in Python. Avantajele acestui limbaj, raportate la software-ul existent, sunt: Este un limbaj pur orientat obiect, de nivel mai inalt ca C++, interpretat si “dynamic typed”. Este cu adevarat independent de platforma Limbajul Python permite rularea in mod interactiv, ceea ce ofera utilizatorului posibilitatea de a “experimenta” intr-un mod foarte usor. In plus limbajul are sintaxa creata special cu scopu de a fi foarte clara si in acelasi de a minimiza efortul de tastare. Gaudi Viewer Radu Stoica
Limbajele si bibliotecile folosite Acest limbaj pemite importarea si rularea bibliotecilor create in diverse alte limbaje ca C/C++ si nu numai. Astfel poate fi folosit ca un mijloc de “lipire” a diverselor parti componente ale unei aplicatii, chiar daca au fost scrise in limbaje diferite. Exista un nou proiect de create a unui utilitar numit REFLEX, bazat pe librariile BOOST ce ofera posibilitatea incapsularii de cod C/C++ in module python. Posibilitatea de prototyping foarte rapida in acest limbaj Gaudi Viewer Radu Stoica
Limbajele si bibliotecile folosite Interfata grafica este realizata folosind bibliotecile grafice Qt (specifice Linux) dar portabile si pe alte sisteme de operare ca Windows sau Mac. Versiunea folosita este 3.X, acesta versiune putand fi folosita gratuit sub o licenta GPL. Qt-ul are bindig-uri pentru Python ce sunt disponibile sub forma unui modul (PyQt.) Acesta permite utilizarea tuturor form-urilor/widget-urilor in Python cu toate ca acestea sunt implementate in C++. In acest fel se poate obtine o interfata rapida si in acelasi timp usor de intretinut Gaudi Viewer Radu Stoica
Limbajele si bibliotecile folosite In afara de Qt mai sunt folosite si utilitarele sale complementare: - SIP generarea modului PyQt - Designer (pt crearea widget-urilor) - Assistant (documentatia) O parte mica din cod este scrisa in C++ pentru a facilita comunicatia intre cele 2 limbaje (exemplu: interceptarea stream-urilor C++) Gaudi Viewer Radu Stoica
Interactia cu software-ul LHCb - Deoarece aplicatia trebuie sa poata fi folosita pentru TOATE pachetele software LHCb => este folosita numai interfata oferita de Gaudi expusa in Python prin pachetul GaudiPython - Astfel dependentele pachetului sunt reduse la minimum, acesta putand fi folosit oricand si in orice conditii Gaudi Viewer Radu Stoica
Mod de codare - In general este folosit in codul scris intro-inspectia dinamica a obiectelor. Acest lucru permite afisarea/lucrul cu diversele obiecte existente fara sa se foloseasca cunostiinte apriori despre acestea. - Cod mult mai usor de intretinut si mai generic Gaudi Viewer Radu Stoica
Divizarea pachetului, ierarhia de clase Din punct de vedere al structurii pachetului, acesta este compus din directoarele: - cmt: director standard de configurare al aplicatiei - python: scripturile python - doc: documentatia - designs: fisierele XML .ui folosite pentru generarea widget-urilor prin aplicatia Designer Contributia de cod C++ a fost integrata direct in pachetul Gaudi Python (cateva fisiere) Gaudi Viewer Radu Stoica
Divizarea pachetului, ierarhia de clase Scripturile Python existente sunt: - Gaudi.py - scriptul principal. Acesta este apelat direct. - viewer.py - scriptul ce ofera partea grafica a aplicatiei - setenv.py – modul ce poate fi importat direct pentru a putea modifica imaginea procesului initial - xyzWidgetDesign.py – contin clase generate automat (folosind pyuic) pe baza specificatiilor din fisierelor .ui din directorul designs Gaudi Viewer Radu Stoica
Divizarea pachetului, ierarhia de clase - xyzWidget.py – in general aceste fisiere contin clase ce mostenesc, pentru a masca, codul automat generat din fisierele xyzWidgetDesign.py - fisiere C++ .h si .cpp (header-e si implementari) sunt incluse in Gaudi Python Gaudi Viewer Radu Stoica
Divizarea pachetului, ierarhia de clase Ierarhia de clase (importante): Gaudi Viewer Radu Stoica
Divizarea pachetului, ierarhia de clase Functia claselor importante: gaudimain – clasa destinata utilizatorilor finali. Aceasta ofera interpretarea optiunilor din linie de comanda, posibilitatea de configurare dinamica a aplicatiei si “ascunde” de utilizator detaliile claselor ThreadManager, AppMgr, Viewer. ThreadManager – clasa ce ofera posibilitatea intreruperii aplicatiei in momentul dorit de utilizator. Se folosesc modulele Python “threading” si “signal” ce permit multithreading-ul independent de platforma si sincronizarea prin intermediul claselor Event (notiune foarte apropiata de mutex-ul clasic). In plus sub Linux se ofera posibilitatea de a opri aplicatia folosind mesaje (semnalul default este SIGINT) chiar daca modul de debug nu este initializat de la inceput. Acest lucru este util pentru job-urile de dimensiuni mari. Gaudi Viewer Radu Stoica
Divizarea pachetului, ierarhia de clase Viewer – clase ce permite vizualizarea informatiilor aplicatiei. Partea grafica nu poate rula simultan cu partea de vizualizare. In general obiectele vizualizate nu au durata de viata egala cu a aplicatiei iar dictionarele de python nu pot sesiza acest lucru iar un apel (folosire pointer) catre o zona de memorie dealocata rezulta, in cazul cel mai probabil, in terminarea aplicatiei (segmentation fault) Converter - clasa ce incapsuleaza functiile de conversie a tuturor obiectelor in informatii utile pentru afisare grafica Gaudi Viewer Radu Stoica
Modul de utilizare In general Gaudi Viewer poate fi folosita ca orice pachet existent: getpack GaudiViewer v1r0 cd GaudiViewer/v1r0/python python Gaudi.py –d -f <nume fisier .opts sau .dst, .xml, etc) Ultima comanda are ca efect initierea unui job Gaudi specific atasat unui fir de executie de control impreuna cu interfata grafica Gaudi Viewer Radu Stoica
Modul de utilizare Interfata grafica poate fi folosita si separat de modulul de control import sys, osfrom qt import *import gaudimodule, gaudiviewer guiApp = QApplication(sys.argv)QObject.connect( guiApp, SIGNAL("lastWindowClosed()"), guiApp, SLOT ("quit()") ) appMgr = gaudimodule.AppMgr(outputlevel=3) viewer = gaudiviewer.Viewer(appMgr) guiApp.setMainWidget(viewer) viewer.show() viewer.validate() guiApp.exec_loop() Gaudi Viewer Radu Stoica
Exemple Am rulat un fisierul standard de optiuni al DaVinci (v16r0): python -i Gaudi.py -d -f …../DaVinci.opts Initial mediul de lucru nu este initializat corespunsator => va apare widget-ul pentru selectarea proiectului impreuna cu versiunea dorita: Gaudi Viewer Radu Stoica
Apoi va fi pornita interfata grafica ce va permite afisarea diverselor informatii relevante: Gaudi Viewer Radu Stoica