Prezentare Gaudi Viewer Jun-15Gaudi Viewer Radu Stoica1.

30
Prezentare Gaudi Viewer 03/16/22 Gaudi Viewer Radu Stoica 1
  • date post

    20-Dec-2015
  • Category

    Documents

  • view

    243
  • download

    2

Transcript of Prezentare Gaudi Viewer Jun-15Gaudi Viewer Radu Stoica1.

Prezentare Gaudi Viewer

04/18/23 Gaudi Viewer Radu Stoica 1

Cuprins

04/18/23 Gaudi Viewer Radu Stoica 2

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-uri04/18/23 Gaudi Viewer Radu Stoica 3

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

04/18/23 Gaudi Viewer Radu Stoica 4

Notiuni generale software LHCb

04/18/23 Gaudi Viewer Radu Stoica 5

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)

04/18/23 Gaudi Viewer Radu Stoica 6

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)04/18/23 Gaudi Viewer Radu Stoica 7

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

04/18/23 Gaudi Viewer Radu Stoica 8

Prezentare Gaudi Viewer

04/18/23 Gaudi Viewer Radu Stoica 9

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)

04/18/23 Gaudi Viewer Radu Stoica 10

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

04/18/23 Gaudi Viewer Radu Stoica 11

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

04/18/23 Gaudi Viewer Radu Stoica 12

Modul de realizare

04/18/23 Gaudi Viewer Radu Stoica 13

Limbajele si bibliotecile folositeMarea 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.

04/18/23 Gaudi Viewer Radu Stoica 14

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

04/18/23 Gaudi Viewer Radu Stoica 15

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

04/18/23 Gaudi Viewer Radu Stoica 16

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++)

04/18/23 Gaudi Viewer Radu Stoica 17

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

04/18/23 Gaudi Viewer Radu Stoica 18

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

04/18/23 Gaudi Viewer Radu Stoica 19

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)

04/18/23 Gaudi Viewer Radu Stoica 20

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

04/18/23 Gaudi Viewer Radu Stoica 21

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

04/18/23 Gaudi Viewer Radu Stoica 22

Divizarea pachetului, ierarhia de clase

• Ierarhia de clase (importante):

04/18/23 Gaudi Viewer Radu Stoica 23

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.

04/18/23 Gaudi Viewer Radu Stoica 24

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

04/18/23 Gaudi Viewer Radu Stoica 25

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

04/18/23 Gaudi Viewer Radu Stoica 26

Modul de utilizare Interfata grafica poate fi folosita si separat de modulul de control import sys, os

from 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()

04/18/23 Gaudi Viewer Radu Stoica 27

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:

04/18/23 Gaudi Viewer Radu Stoica 28

04/18/23 Gaudi Viewer Radu Stoica 29

• Apoi va fi pornita interfata grafica ce va permite afisarea diverselor informatii relevante:

04/18/23 Gaudi Viewer Radu Stoica 30