240 likes | 270 Views
Java Root IO Part of the FreeHEP Java Library. Tony Johnson ( tony_johnson@slac.stanford.edu ) Mark Dönszelmann ( duns@slac.stanford.edu ) Victor Serbo ( serbo@slac.stanford.edu ) Max Turri ( turri@slac.stanford.edu )
E N D
Java Root IOPart of the FreeHEP Java Library Tony Johnson (tony_johnson@slac.stanford.edu) Mark Dönszelmann (duns@slac.stanford.edu) Victor Serbo (serbo@slac.stanford.edu) Max Turri (turri@slac.stanford.edu) Presented at Computing in High Energy PhysicsInterlaken, Switzerland, September 2004
Contents • Goals • Java IO library for Root • Implementation • Test Suite • Benchmarks • Networked Root IO (rootd/xrootd) • Demo tools • Root Plugin for AIDA • Examples of Use • AIDATLD Web Interface • JAS3 • WIRED4 • Future plans • Links for more information
Java Root IO: Goals • Goals • Pure Java package for reading Root Files • Will be extended to writing later • High Performance • We want to do data analysis so we need very good performance • Should not need to know about objects ahead of time(no need for dll’s, .so files etc.) • But should provide full support for reading user-defined objects • Easy to use • Provide access to Root data, not C++ code
Implementation • Use “TStreamerInfo” objects inside Root files (since Root 3.0) to decode contents of file • Dynamically generate Java proxies for each Root object read • Each proxy has custom “streamer” • Build as Java bytecode using BCEL (http://jakarta.apache.org/bcel) • Converted at runtime to machine code by HotSpot VM • Uses java.nio package (new since Java 1.4) • Standard Java package for high-performance binary IO
Implementation Details Java Interface Accessor method for each data member .java file Interface Generator Implements TStreamerInfo Java Proxy Custom version based on how object is stored in file
Test Suite • Most classes are dynamically generated from info in Root file, so are fairly robust against changes • Need bootstrap process, in particularly need enough custom Java classes to read the streamer info, and interpret it • Relatively few classes, but • This tends to change from one Root release to another • Typically have to make small changes in the bootstrap code for each new Root release • We have test suite that creates a set of test files from each new root release, and verifies that our library can read the files. • Currently test 3.00.06, 3.01.06, 3.02.07, 3.03.07, 3.05.07, 3.10.02, 4.00.08 • In addition we have a set of Root files collected from users, and the test suite verifies that we can (continue) to read these files with each release.
Java Root IO - Benchmark • Task: Loop over all events, loop over all tracks, sum px for all tracks. 5000 event files created with “event” test program distributed with Root (200-400 MByte). • 1.4GHz AMD Athlon, Windows XP, 512MByte DDR, ATA100 disk.. • S= Split level = 0,1,2 • C= Compression = 0,1 • Each test run 5 times in succession, lines show range in results • in later runs file is typically cached in memory == faster if task IO limited
Network Root IO (x)rootd • Recently added ability for Java library to talk directly to rootd or xrootd server • Defined “root:” protocol handler for URL class. • Defined Authenticator for authenticating to rootd • Extended RootFileReader to accept (any) URL argument to constructor • If URL corresponds to file: read the file directly • If URL corresponds to root: protocol use xrootd/rootd (random access) • If URL corresponds to http: and web server supports http 1.1 “ranges”, use extended http • Otherwise buffer URL contents into memory and read from there (suitable for small files only).
Authentification Issues • Authentification can be set programmatically, or via GUI Authenticator • Rootd supports many authentification schemes • Anonymous (c.f. anonymous ftp) • User/Password (clear text) • User/Password (RSA encrypted) • SCP • SSH like • GSI certificate • UID/GID • Currently FreeHep library supports only 1 and 2 • Work underway on 3 (but some compatibility problems between Root and Java RSA implementations) • Java libraries exist for all other methods, so can be supported in future.
Root Plug-in for JAIDA • JAIDA = Java implementation of AIDA • AIDA = Abstract Interfaces for Data Analysis = Histograms + Tuples + Fitting + Plotting + IO data analysis package • (See Monday’s talk by Victor Serbo) • Root plugin for JAIDA makes it possible to read root files via the AIDA interfaces and treat the objects contained in the root file as AIDA objects • Useful if: • You like AIDA interfaces better than root interfaces • You want to use language not supported by Root • You want to analyze data in mixed formats • You want to work in J2EE, J2ME, Applet etc.
Root Java IO: Examples of Use AIDATLD Web Interface JAS3 WIRED4
AIDATLD + Root • AIDATLD = AIDA Tag Library for use in JSP pages • Trivial to put “live” histograms on web • Directly supports Root files
JAS3 + Root • JAS3 = Modular, Extensible, Data Format Independent data analysis system. • Among many other formats JAS3 supports Root • Contents of Root files can be accessed directly, or via Root->AIDA interface • Full access to AIDA functionality for fitting, projections, plotting etc. • Can operate on Root data • using GUI • using scripting (Python, Pnuts) • using compiled Java code
Root + WIRED4 • Build yourself a super cool event display for your custom Root file in under 1 hour!
Future Plans • Continue to track new Root releases • Root network protocol • More work on authentification • Root file writing • Most of work already done by Petr Vokac/Julius Hrivnac • Easier than reading because only need to support one root protocol version • Support Root XML format • Will be much slower, but perhaps more robust • Use LCGDICT system to allow Java access to C++ methods as well as data? • Probably also slower, but more flexible
More Info • Freehep Java Library • http://java.freehep.org/ • Root IO component of library • http://java.freehep.org/lib/freehep/doc/root/ • AIDATLD • http://aidatld.freehep.org/ • JAIDA • http://java.freehep.org/jaida/index.html • JAS3 • http://jas.freehep.org/jas3