Introduzione agli Analysis Tools di aida bernardino Ferrero Merlino, cern it/api



Scaricare 445 b.
21.12.2017
Dimensione del file445 b.



Sommario

  • Software su larga scala

  • Abstract Interfaces in Data Analysis

    • Motivazioni e vantaggi
  • AIDA in dettaglio

  • Applicazioni

  • Esempi

    • Analisi in Geant4
    • Lizard
  • Conclusioni



Software su larga scala

  • Taglia

    • molte classi/linee di codice
  • Organizzazione

    • progettato/costruito da molte persone
  • Tempi

    • di sviluppo
    • di utilizzazione (lifetime)
  • Variabilità nel tempo

    • prevista o subita...


Vita del software per gli esperimenti a LHC

  • Gli esperimenti di LHC inizieranno ~ 2006

  • Almeno 10 anni di run (e possibili estensioni…)

  • L’analisi durerà (supponiamo) altri 5 anni

  • Se fissiamo arbitrariamente l’inizio sviluppo nel 1996 -> Il software avra’ una vita di ~ 25 anni!



25 anni



Cambiamento del software

  • 10 anni implicano in ogni categoria (HW,SW,OS)

    • ~12 cicli evolutivi di mercato
    • 1 cambiamento rivoluzionario
    • … e la tendenza va verso una maggiore variabilità
    • non dimentichiamo I cambiamenti di requirement!
  • Conseguenze

    • il SW scritto oggi (probabilmente) verrà riscritto/adattato domani
  • dobbiamo “anticipare” il cambiamento

    • uso di tecniche particolari


Funzione vs. evoluzione



Un software completo e flessibile: utopia?

  • Centrale telefonica Ericsson AXE

    • OO ante litteram (Jacobson)
    • architettura ben definita
      • modulare
      • interfacce separate dall’implementazione
      • accoppiamento ‘debole’ fra componenti
    • 197?->2001 (e oltre!)
  • Lezione...

    • maggiore flessibilità -> aumento software lifetime
    • l’architettura definisce il grado di flessibilità


Software su larga scala

  • I sistemi software su larga scala richiedono:

    • struttura ben definita ed omogenea (Architettura)
    • ripartizione in entita’ gestibili (componenti/moduli/sotto-sistemi)
    • comunicazione fra le parti definita in modo univoco (interfacce/protocolli/contratti)
    • :-( condizione necessaria ma non sufficiente…


Cos’e un ADT (Interface)

  • Abstract Data Type: classe che definisce solo metodi che devono essere implementati dalle sotto-classi (protocollo/contratto)

  • Nessun vincolo di implementazione

  • Realizzato diversamente

    • C++ pure virtual function
    • Java Interfaces
  • Plug-in



Un esempio

  • Classe astratta class IHistogram1D { public: virtual void fill( double x, double weight) = 0; virtual int binEntries( int index ) const = 0; /// More C++ methods … };

  • Classe reale (implementazione) class Histogram1D : public IHistogram1D { public: virtual void fill( double x, double weight = 1. ); virtual int binEntries( int index ) const ; /// More C++ methods …



Vantaggi degli ADT

  • Flessibilità

    • ADT puo’ essere implementato riutilizzando un software preesistente opportunamente adattato
  • Minimo accoppiamento fra componenti

    • L’uso di ADT permette ad ogni componente di evolvere separatamente (stile “plug-in”)
  • Gli ADT semplificano il “modello fisico” del software riducendo la catena di dipendenze

    • tempo di compilazione ridotto
    • possibilità di ottimizzare l’uso di memoria


Semplificazione modello fisico

  • Classe astratta IHistogram1D *myHist=…; myHist->fill(…);

  • Classe reale FancyHistogram1D *myHist=…; myHist->fill(…);



AIDA: motivazioni

  • Esistono numerosi Data Analysis Tools & Libraries

  • Linguaggio/approccio/architettura diversi-> Incompatibilità

    • Gli Abstract Data Types (Interfaces) potrebbero aiutare?
    • Obiettivo finale: componenti ‘plug-n-play’ per l’analisi
  • Presentazione al workshop HepVis99

    • identificate architettura e componenti
    • creazione del gruppo di lavoro (AIDA)
    • non solo Cern/IT (HippoDraw, Iguana, JAS, OpenScientist)
    • Obiettivo concreto: migliorare l’interoperabilità


Architettura



Architettura di AIDA/1



Architettura di AIDA/2

  • Uso di componenti

    • componente -> “parte indipendente di un sistema”
      • insieme di classi correlate
      • funzionalita’ omogenea
      • unita’ di “deployment”, di solito shared libraries
  • Componenti non accoppiati direttamente

    • comunicazione tramite Controller e Analyzer
    • che sono componenti anch’essi!


Componenti AIDA

  • Controller

    • interattività utente (scripting language/GUI)
  • Analyzer

    • interattività utente linguaggio nativo
      • e.s. eseguire parte della ricostruzione in C++
      • condivide dati (histo,vector,ntuple) col Controller
  • Componenti base

    • histograms
    • ntuple
    • fitter
    • plotter
    • functions


Interfacce C++ AIDA

  • Ogni componente è “self-contained”, es. Istogrammi:

    • entità statistica (density distribution)
    • non un’ entità grafica
  • Solo funzioni pure virtual

    • definiscono la forma delle sotto-classi, non la funzionalità
    • equivalenti alle Java Interfaces
  • Usano solo tipi base o altre interfacce

  • Non essendo delle vere classi richiedono l’uso di “Factory”



Factory

  • Problema

    • non si puo’ creare un ADT
    • qualcun’altro deve creare un vero oggetto che implementi l’interfaccia IHistogram1D *myHist = myFactory.create1D(“Bla”,10,0.,12.); myHist->fill(…);
  • Ogni classe astratta è associata ad una Factory che produce il vero oggetto

  • E’ un Design Pattern

    • ovvero una soluzione ricorrente (algoritmo) ad un problema generale


Interfacce istogrammi AIDA

  • Class IHistogram { virtual int entries() = 0; … } class IHistogram1D: public IHistogram { virtual void fill(double x,double w)= 0; virtual IAxis* xAxis() = 0; … } class IAxis { virtual int bins() = 0; … }



Una implementazione: AIDA_HTL

  • Interfaccia AIDA implementata col package HTL class AIDAHist1D : public IHistogram1D, public Histo1D { public: void fill( double x, double weight ) … } /// Fill histogram: just delegate to HTL fill void AIDAHist1D::fill( double x, double weight ) { Histo1D::fill( x, weight ); }



Utilizzatori

  • Le interfacce AIDA per istogrammi sono utilizzate da:

    • GAUDI (LHCB) e ATHENA (Atlas) framework
    • Modulo di analisi in Geant 4
    • JAS (Java Analysis Studio)
    • Lizard
    • Open Scientist
    • IGUANA (CMS visualization)
  • Altre interfacce in via di standardizzazione

    • ntuple,fitter,plotter,controller (parzialmente)
    • esistono in versione “draft”
    • workshop Orsay 5-7 Febbraio 2000


Vantaggi per gli utenti?

  • Esistono vantaggi anche per l’utente finale?

    • Stabilità
      • se GAUDI/Athena cambiassero implementazione da HTL ad un altro package, il codice utente non cambierebbe
    • Uniformità
      • I metodi hanno lo stesso nome e accettano/ritornano gli stessi tipi
      • anche se si cambia linguaggio: public interface IHistogram1D extends IHistogram { public void fill(double x, double weight); public int binEntries(int index); /** More JAVA methods ...*/ }
    • Fatelo da voi…
      • dati in formato arbitrario possono essere esposti “canonicamente”


Sommario 1

  • La vita del SW per LHC e’ molto lunga

  • Tutto cambierà, meglio essere preparati!

  • Parole chiave

    • architettura
    • interfacce per componenti
    • “accoppiamento debole”
  • Le interfacce AIDA si concentrano sull’analisi dati

  • Sono già utilizzate in ambienti eterogenei



Esempi di utilizzo di AIDA

  • Lizard

  • Analisi in Geant4



AIDA/Anaphe/Lizard

  • Lizard (noun):

  • 1. Relatively long-bodied reptile with usually two pairs of legs and a tapering tail

  • 2. A man who idles about in the lounges of hotels and bars in search of women who would support him

  • LIZARD è un tool di analisi interattiva (‘PAW like’)

    • realizzato da Cern IT/API
    • Basato su AIDA
  • ANAPHE (LHC++) è un insieme di implementazioni

    • es. Libreria istogrammi HTL
    • adapters AIDA_HTL


Dal documento di presentazione di Lizard (fine 1999)...

  • Obiettivo: “OO replacement for PAW”

    • analisi di “ntuple-like data”
    • visualizzazione di istogrammi, scatter-plot, vettori
    • fitting di istogrammi (ed altro)
  • Massimizzare flessibilità/interoperabilità

  • Prevedere personalizzazioni/integrazione

  • Pianificare per le estensioni future

  • Primo prototipo: Gennaio 2000 (CHEP)



Lizard

  • Un tool di analisi interattiva AIDA compatibile

    • Python scripting
    • Visualizzazione con Qt
    • Istogrammi HTL (via AIDA)
    • Persistenza con Objectivity
    • Fitting con NAG Libraries (o Minuit)
  • Componenti disponibili come shared libraries

    • indipendenti dal linguaggio di scripting
    • si possono usare anche in programmi C++ (Geant4)


Architettura di Lizard/I



Architettura di Lizard/II



Architettura/III: scripting

  • L’uso tipico del linguaggio di scripting è differente dalla programmazione (ricostruzione, analisi, ...)

    • history “tornare dov’ero prima”
    • ripetizione - con “parametri modificabili”
  • Il linguaggio di scripting e’ un’ interfaccia verso il componente Controller

    • SWIG (Simplified Wrapper Interface Generator) permette di non legarsi ad un particolare linguaggio
      • Python, Perl, (Java) …
  • Python per cominciare...

    • OO & relativamente semplice (niente $@% …)
    • usato da CMS (CARF) e Atlas (Athena)


Scripting in Lizard



Data Types in Lizard (I)

  • VectorOfPoints - collezione di punti

    • “valore misurato” in uno spazio n-dim (con errori)
      • (x,eX-,eX+(,y,eY-,eY+,...), value, eVal-, eVal+)
    • Operazioni di shifting/scaling
    • Usato dai componenti Fitter e Plotter
    • Puo’ essere creato a partire da Histogram
    • XML-like file I/O
    • associati ad un Manager


Data Types in Lizard (II)

  • Histogram - entità puramente statistica

    • associato ad un Manager
    • con “Annotation” per conservare dati non statistici
      • label degli assi, ID, titolo etc.
  • NTuple - Basate su Objectivity/DB (per ora)



Componenti in Lizard

  • Analyzer - accesso a dati/codice specifico per ogni esperimento

    • compilazione e caricamento dinamico del codice
    • makefile modificabile per tener conto del SW di esperimento
    • interfaccia semplice
      • condivide istogrammi/vettori/ntuple col tool interattivo
    • Utilizzabile anche per fitting complessi
      • es. Con funzioni fornite da librerie esterne


Componenti in Lizard (II)

  • Plotter - visualizzazione 2-D di VectorOfPoints

    • basato sulle librerie Qt
    • Postscript
  • Fitter - usa VectorOfPoints

    • NAG C o Minuit
  • Controller - interfaccia verso l’utente

    • definisce (gran parte) dei comandi
    • puo’ essere esteso dal linguaggio di script o da componenti GUI


Una sessione Lizard...

  • #Find the ntuple from database nt1=ntm.findNtuple("Charm1")

  • # Create an histogram h=hm.create1D("pt1",40,10,50)

  • # Project pT of the first # particle on the histogram nt1.cproject1D(h,"sqrt(PX1*PX1+PY1*PY1)",”pz1 >0")

  • # Fit projection with a exponential and plot it fit(h,”E")



Integrazione di Lizard

  • L’esperimento CMS ha un framework di ricostruzione e analisi (CARF).

  • L’integrazione Lizard/CARF è già stata dimostrata

    • creare istogrammi in CARF e visualizzarli con Lizard


Futuro di Lizard

  • Integrare ulteriori interfacce AIDA

  • Soluzione “free” per la persistency

  • Ntuple tipo CWN

  • Python 2.0

  • Grafica piu’ completa

    • color plot, scatter plot, lego
    • formule matematiche (MathML)
  • ...



Analisi in Geant4

  • Obiettivo

    • produrre e visualizzare istogrammi in un programma di simulazione basato su Geant4
    • senza introdurre dipendenze dai package di istogrammi e plotting
  • Soluzione

    • utilizzare le interfacce AIDA
  • Verifica

    • implementare con almeno due sistemi


Gamma Ray Telescope

  • Uno degli esempi avanzati di Geant4 “ GammaRayTel is an example of application of Geant4 in a space envinronment. It simulates a typical telescope for gamma ray analysis;the detector setup is composed by a tracker made with silicon planes,subdivided in ladders and strips, a CsI calorimeter and an anticoincidence system.

  • Analisi con sistemi diversi

    • Workshop Geant4, Parigi Ott. 2000
      • JAS
      • Lizard
      • OpenScientist


Classi di Analisi in Geant4

  • Classi astratte:

    • G4VAnalysisManager
    • G4VAnalysisSystem
  • Un AnalysisManager gestisce un insieme di AnalysisSystem

  • Classi reali

    • G4LizardSystem, sistema di analisi Lizard
    • GammaRayTelAnalysisManager manager per GammaTelescope
  • L’ AnalysisManager restituisce una “histo factory”



Come fare...

  • Se si vuole riutilizzare un AnalysisSystem preesistente

    • si crea una sottoclasse di G4VAnalysisManager
      • il costruttore inizializza l’ AnalysisSystem di back-end
      • il metodo BeginOfRun costruisce gli istogrammi
      • il metodo EndOfRun visualizza/salva gli istogrammi
        • il metodo EndOfEvent puo visualizzare gli istogrammi se si desidera una visualizzazione dinamica
    • Nella classe che implementa G4UserEventAction
      • il metodo EndOfEventAction esegue il filling degli istogrammi
  • Nel main si crea un’istanza del nostro AnalysisManager



Analisi in un programma Geant4/I

  • Analysis Manager

    • GammaRayTelAnalysisManager::GammaRayTelAnalysisManager(…) { analysisSystem = new G4LizardSystem; histoFactory = analysisSystem->GetHistogramFactory(); fVectorFactory = createIVectorFactory(); pl = createIPlotter(); } void GammaRayTelAnalysisManager::BeginOfRun() { energy = histoFactory->create1D ("Energy deposition in the last X plane (keV)", 100, 50, 200); … } void GammaRayTelAnalysisManager::EndOfRun(G4int n) { ve = fVectorFactory->from1D(energy); pl->plot(ve); pl->psPrint(); …


Analisi in un programma Geant4/II

  • void GammaRayTelAnalysisManager::InsertEnergy(double en) // This function fill the 1d histogram of the energy released in the last Si plane { energy->fill(en);} void GammaRayTelEventAction::EndOfEventAction(const G4Event* evt) { // Here we fill the histograms of the Analysis manager analysisManager->InsertEnergy(…); }

  • } Main program

    • int main(int argc, char** argv){ … // Creation of the analysis manager GammaRayTelAnalysisManager* analysisMgr = new GammaRayTelAnalysisManager(detector); … }


Risultati



Java?



Sommario 2

  • Le interfacce AIDA possono essere utilizzate per

    • produrre un sistema di analisi molto flessibile
    • implementare algoritmi di analisi indipendenti dal sistema (istogrammi,plotter) utilizzato
  • Lizard e’ un sistema che si integra facilmente con I framework di esperimento

  • Grazie ad AIDA, gli esempi di Geant4 possono produrre/visualizzare istogrammi utilizzando JAS,Lizard,OpenScientist



Conclusioni

  • L’uso di interfacce astratte migliora

    • flessibilita’
    • indipendenza
    • interoperabilita’
  • L’ implementazione dei sistemi di analisi non viene condizionata

  • Prossimo workshop AIDA

    • Boston, 1-2 May 2001


Bibliografia

  • Gamma,Helm,Johnson, Vlissides “Design Patterns” Addison Wesley

  • A. Cockburn “Surviving Object Oriented Projects” Addison Wesley

  • C. Szyperski “Component Software” Addison Wesley

  • Jacobson,Booch,Rumbaugh “The Unified Software Development Process” - Addison Wesley

  • Buschmann etc. “A system of Patterns” Wiley

  • R. Brooks, “The mythical man month



Pagine web

  • Pagina AIDA al Cern http://wwwinfo.cern.ch/asd/lhc++/AIDA/index.html

  • Pagina AIDA a SLAC http://aida.freehep.org/

  • Lizard http://wwwinfo.cern.ch/asd/lhc++/Lizard/index.html







©astratto.info 2017
invia messaggio

    Pagina principale