1 / 24

Java Root IO Part of the FreeHEP Java Library

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 )

Download Presentation

Java Root IO Part of the FreeHEP Java Library

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. 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

  3. 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

  4. 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

  5. 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

  6. Example of Use

  7. 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.

  8. 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

  9. 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).

  10. 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.

  11. Network Root IO: Example of Use

  12. Demo Apps: Root Object Browser

  13. Demo Apps: Root Histogram Browser

  14. 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.

  15. Root Plug-in for JAIDA: Example

  16. Root Java IO: Examples of Use AIDATLD Web Interface JAS3 WIRED4

  17. AIDATLD + Root • AIDATLD = AIDA Tag Library for use in JSP pages • Trivial to put “live” histograms on web • Directly supports Root files

  18. AIDATLD Example: GLAST System Tests Web Interface

  19. 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

  20. JAS3 Access to Root Files

  21. JAS3 + Root: Scripting

  22. Root + WIRED4 • Build yourself a super cool event display for your custom Root file in under 1 hour!

  23. 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

  24. 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

More Related