shine offline framework basics
DESCRIPTION
Shine Offline Framework Basics. Darko Veberi č Laboratory for Astroparticle Physics University of Nova Gorica, Slovenia. Evolution of Design Concepts. Past: Client-Server : DSPACK – NA49 clients (shm) (historical parallel in OS: X11 – window applications [network transport]) - PowerPoint PPT PresentationTRANSCRIPT
Darko Veberic NA61 meeting, CERN june 2011 1
Shine Offline FrameworkBasicsDarko Veberič
Laboratory for Astroparticle Physics
University of Nova Gorica, Slovenia
Darko Veberic NA61 meeting, CERN june 2011 2
Evolution of Design Concepts
• Past:Client-Server: DSPACK – NA49 clients (shm) (historical parallel in OS: X11 – window applications [network transport])
• Present:Single-process – shared libraries: Shine Offline Framework (easier debugging, SMP memory saving)
• Future:Multi-core parallelism (OpenMP, GPU: CUDA, OpenCL [some astroparticle experiments, future CERN])
Darko Veberic NA61 meeting, CERN june 2011 3
Shine: Organization• Frameworkevent (object persistence), detector & mag. field classes, central configuration, coordinate system registry, data-source managers
• Event I/Oraw event (BOS, DS), SHOE, NDST (export)
• Modulesreading/writing, calibration, reconstruction, simulation
• NA49clients, interfaces
• EventBrowser
• Validation(of event structures, of modules)
• Utilitiesmisc. helpers, STL (containers), Math, Geometry
• Documentation(I/O, modules, reconstruction, physics)
• Build systemCMakeModules, CMakeLists
Darko Veberic NA61 meeting, CERN june 2011 4
Shine: Current Status
Lines of code:
118k NA49 (C 73%, F 19%, C++ 3%)23k Utilities12k Framework7k EventBrowser3k EventIO0.5k Modules
Total:
C 53%C++ 29%fortran 14%
Darko Veberic NA61 meeting, CERN june 2011 5
Shine vs. Auger
Lines of code:
Shine Auger
118k NA4923k Utilities 28k12k Framework 51k7k EventBrowser 38k (ADST)3k EventIO 20k0.5k Modules 97k
163k Total 234k
Darko Veberic NA61 meeting, CERN june 2011 6
Overview
Run Control
Central ConfigManager Registry
NA61:
TPC
TOF
Trigger
PSD
NA61:
TPC
TOF
Trigger
PSD
Mag. Field
Darko Veberic NA61 meeting, CERN june 2011 7
Framework• Event structures
• Detector description, mostly lazy update of leafs
• singly-linked treesinitially with pointers, later with ShadowPtr (cleanup, propagation of constness, deep copy; compiler-generated ctor, dtor, copy-ctor, assign)
• strict separation of framework classes and (physics) code
• one class per header file
• non-deletableprocessing only adds things, Has/Make/Get interfaces
• prevent accidental processing of a copyprivate ctor/dtor
• data-source Managersconfig defined queues of Managers; easy source replacementwrappers for MySQL, SQLite, Xerces
• central configuration: Detector, Managers, Modules
• Registry of Random number streams, seeding conf
Darko Veberic NA61 meeting, CERN june 2011 8
Framework: Data Managers
SQLiteMySQL Xerces
TPC
VTPC
MTPC
GTPC
TOF
BPD
Trigger
PSD
Magnetic field
Drift velocity
etc.
Darko Veberic NA61 meeting, CERN june 2011 9
Framework: Configuration
• XML
• run-time XML Schema validation: XSD
• automatic conversion of physical quantities into internal units
<energy unit=”GeV”> 137.23 </energy><position unit=”cm”> 14.3 </position>
• default configuration check-summed, modifications reported in run logs
• full configuration saved with data
Darko Veberic NA61 meeting, CERN june 2011 10
Event I/O
Currently supports:
• raw BOS reading
• DS reading
• SHOE read/write (ROOT persistent Event)
Darko Veberic NA61 meeting, CERN june 2011 11
Simulation
(Geant4)
(interaction models)
...
missing for now
Darko Veberic NA61 meeting, CERN june 2011 12
“NDST”
• summary files (ROOT) will have Event objects (no persistent/transient separation)
• needed for off-offline analysis
• GUIevent/detector browser, run configuration inspector, simple selection tools
• mega/mini/micro NDSTachieved by switching off increasing level of Event details (branches)reconstruction results only; simulation intermediaries included
Darko Veberic NA61 meeting, CERN june 2011 13
Modules
• By detector: BPD, Trigger, TPCs, TOF, PSD etc.
• calibration, reconstruction, simulation (Geant4)
• readers/writers: native event/detector, NDST
• modules replaceableimplementing several alternative or competing approaches is easy
• (if needed) Modules communicate (only) through the Event structure
Darko Veberic NA61 meeting, CERN june 2011 14
Modules: Run Control
• rudimentary control-language implemented in XML
<sequenceFile>
<enableTiming/>
<moduleControl>
<loop numTimes="unbounded">
<module> EventFileReaderSG </module>
<module> EventCheckerSG </module>
<module> BPDCalibratorSG </module>
<module> BPDEventSelectorSG </module>
<module> TPCCalibratorSG </module>
<module> TOFCalibratorSG </module>
<module> TPCClusterFinderFG </module>
<module> TPCTrackFinderWG </module>
<module> TOFTimeFinderDG </module>
<module> TPCTrackPlotterSG </module>
<module> ShineFileExporterSG </module>
</loop>
</moduleControl>
</sequenceFile>
intermediate Event states can be streamed at any time by inserting Writers
Darko Veberic NA61 meeting, CERN june 2011 15
Modules: Interface
class ModuleName : public fwk::VModule {
public:
fwk::VModule::EResultFlag Init();
fwk::VModule::EResultFlag Process(evt::Event& event,
const utl::AttributeMap& attr);
fwk::VModule::EResultFlag Finish();
REGISTER_MODULE(”ModuleName”, Modulename, ”$Id$”);
};
Darko Veberic NA61 meeting, CERN june 2011 16
NA49 Clients as Modules<sequenceFile>
<enableTiming/>
<moduleControl>
<loop numTimes="unbounded">
<module> EventFileReaderSG </module>
<module> ClientInitializerSG </module>
<module config="many"> MiniModuleSG </module>
<module config="vdinit"> MiniModuleSG </module>
<module> VdriftCorrModuleSG </module>
<module config="VTPCs"> Dipt256NewModuleSG </module>
<module config="MTPCs"> Dipt256NewModuleSG </module>
<module config="VT1"> EdistoModuleSG </module>
<module config="VT1"> VtNcalcModuleSG </module>
<module config="VT2"> EdistoModuleSG </module>
<module config="VT2"> VtNcalcModuleSG </module>
<module config="MTL"> EdistoModuleSG </module>
<module config="MTR"> EdistoModuleSG </module>
<module config="ALL"> ResCorrModuleSG </module>
<module config="TrckM1"> MtracModuleSG </module>
<module config="I2RTrck"> MtracModuleSG </module>
<module config="MTPCs"> MpatModuleSG </module>
<module config="VT-2"> MpatModuleSG </module>
<module> NA49ToShineConverterSG </module>
<module> ShineFileExporterSG </module>
</loop>
</moduleControl>
</sequenceFile>
current module sequence with wrapped clients
DSPACK assimilated into the same shared library as DSHACK, runs in local mode (still needs shm)
Darko Veberic NA61 meeting, CERN june 2011 17
Client-Module Configuration
<ResCorrModuleSG>
<commandLine config="ALL">
-vt1_chris [DOCUMENTATION_PATH]/SampleNonEventData/RES_CORR_ZG/vt1.corr
-vt2_chris [DOCUMENTATION_PATH]/SampleNonEventData/RES_CORR_ZG/vt2.corr
-mtl_chris [DOCUMENTATION_PATH]/SampleNonEventData/RES_CORR_ZG/mtl.corr
-mtr_chris [DOCUMENTATION_PATH]/SampleNonEventData/RES_CORR_ZG/mtr.corr
-p [DOCUMENTATION_PATH]/SampleNonEventData/RES_CORR_ZG/vdrift_2007.txt
</commandLine>
</ResCorrModuleSG>
example: XML configuration of RES_CORR_ZG client,run as Shine module
Darko Veberic NA61 meeting, CERN june 2011 18
Utilities
• XML Reader (Xerces library wrapper)
• SI units, internal units definition
• Mathematics, Statistics & Physics functions
• Traces, trace algorithms
• Linear Algebra, Geometry
• ODE Runge-Kutta Integrator, Mag. Field Tracker
• MD5 for configuration checksums
• custom exceptions
• logging
• special template libraryspecialized event & detector containers, shadow pointer, Meyers singleton, counted objects, safe bool cast etc.
Darko Veberic NA61 meeting, CERN june 2011 19
Utilities: Geometryone preferred coordinate system: NA61
Point(1.7*m, 2*cm, 3*cm, csMTPCR);
Vector(10*cm, 1*cm, 3.3*mm);
Local detector-aligned coordinate system
but also:
Darko Veberic NA61 meeting, CERN june 2011 20
Build System
• CMakeseems to be preferred by large projects, multiplatform
• Shapefor external dependencies and production releasessmall dependency resolution engine; python
• buildbotsautomated compile, test, validation after each commitseveral linux flavors, email blame notifications
Darko Veberic NA61 meeting, CERN june 2011 21
Validation• Unit testing: CppUnit
• I/O validation (test ROOT schema evolution)
• detect changes in reconstructed quantities on example datasets
Darko Veberic NA61 meeting, CERN june 2011 22
Main Design Principles
• Abstraction of external dependencieswrappers for geometry (ROOT), XML reader (Xerces); exceptions: STL, boost, Modules (authors responsible for compatibility with new versions)
• const-correctness
• prefer static over dynamic polymorphism (templates)
• no pointers in interfaces and strongly discouraged elsewhere (references only)
• no code duplication
• modified Google+Taligent coding styleCamelCase, naming, strict enforcement (everywhere except Modules)written down in twiki with extensive examples
• Doxygen documentation
• bug tracking with savane (previously known as savannah)
Darko Veberic NA61 meeting, CERN june 2011 23
End
Darko Veberic NA61 meeting, CERN june 2011 24