OO-Design in PHENIX PHENIX, a BIG Collaboration A Liberal Data Model Simple (and fast) DST I/O Design Patterns OO-Database, an example for the abstract extreme Does it really work? Ergo. . . CHEP-2000 Matthias Messer, BNL
Under Construction . . . Software infrastructure CHEP-2000 Matthias Messer, BNL
From RAW to DST Official Language is C++ FORTRAN legacy now only in simulation (GEANT 3) 200,000 lines of code and still growing fast Limited manpower and financial resources How unusual, what? Usage of many free open-source packages Linux, automake, Root, Bonsai, CVS, CLHEP (well, sort of) many more Good experience as compared to commercial software Maintenance(!), upgrades, necessary modifications CHEP-2000 Matthias Messer, BNL
PHENIXians Picture shows only a third of the collaboration Many developers Ideas Strong opinions about programming Software infrastructure has to integrate them all CHEP-2000 Matthias Messer, BNL
A Liberal OO Model Old OO: Everything is one grand song Have a (preferably) complete design before you start coding Work done by experienced OO-programmers Well . . . Liberal OO: Have it your way Data-objects with some methods method-collections (functors) with some data-members shallow inheritance structures for modularity Independently designed packages work on one data-structure Composite Objects: A node-tree to hold (and share) data CHEP-2000 Matthias Messer, BNL
PHOOL, The PHENIX OO Library Composite Objects: A node-tree to hold (and share) data Composite Nodes Data Node CHEP-2000 Matthias Messer, BNL
PHNode the Data-Classes Data node is template type-safe But all inherit from PHNode Navigation class PHNodeIterator uses Polymorphism PHNodeIterator Unix-like navigation cd(“ . . .”) find(“ . . .”) Can use abstract strategies for_each(PHStrategy) CHEP-2000 Matthias Messer, BNL
PHModule the Functor Classes Method-container class common interface or entry-point, the event() function Can be used with a PHModuleManager PHDataNode<PHModule> for implementation of strategies CHEP-2000 Matthias Messer, BNL
Abstract Strategies Used in Node tree Used in Module Manager apply a method to all nodes of a branch Used in Module Manager call event() function of all Modules in the collection: the event-loop CHEP-2000 Matthias Messer, BNL
OODBs in PHENIX Two autonomous partitions Counting House RCF (RHIC Computing Facility) Robust against the ‘bulldozer incident’ The picture shows a subset Pdbcal is only one of many DB applications, but The one most of all used in reconstruction code The biggest data volume order of Tbyte/Year CHEP-2000 Matthias Messer, BNL
Pdbcal a user-friendly database-application small set of wrapped control-classes start, end transactions easily expandable by the user himself provide a storage class (e.g. a hardware-channel) gets picked up by code-generators for integration into the DB-package you handle only a very abstract (2.5 layers) bank-class applications do not depend on later generated code transparent low-level activity Open a new DB-file when 2 Gbyte limit is reached traverse from Tag-DB to calibration-DB CHEP-2000 Matthias Messer, BNL
Data-Storage in Objy/Root No need for elaborate design of the base classes concentrate on functionality and on ONE application (objy) for now add Root I/O later by way of inheritance transparent for the user interface CHEP-2000 Matthias Messer, BNL
Useful (and used) Design-Patterns singletons database application manager a classmap hash-table (STL-map) abstract base-classes and factories change low-level applications without changing interfaces Objectivity Root protect the user from implementation details (and vice versa) composite objects flexible, yet type-safe node-tree abstract strategies standardized operations on no-tree-data great flexibility in choosing analysis methods CHEP-2000 Matthias Messer, BNL
The Very Real Life . . . . . . of simulated data processing MDC: Mock Data Challenge two weeks of simultaneous data sinking into HPSS data mining from HPSS parallel data processing using the PHOOL environment the new reconstruction software is fast: 30s / event is factor two faster than with old data-model (STAF) is reliable: few crashes, none related to memory-management in the reconstruction code no memory leaks (non trivial in such a liberal data-model) CHEP-2000 Matthias Messer, BNL
In Somma . . . The relaxed OO-philosophy (PHOOL) has: slightly more separation between data and methods shallow inheritance trees you buy what you want, or “I don’t want a three-vector that can send me email” can: integrate many peoples software efforts allow flexible usage of outside-packages The approach of the abstract extreme (Pdbcal) shields user, prevents fear of first contact maintains flexibility in usage of low-level software Contact email: mm@bnl.gov more info: www.phenix.bnl.gov/~messer CHEP-2000 Matthias Messer, BNL