FreeHEP Java Library
Mark Dönszelmann, SLAC
CHEP, La Jolla, 24-28 March 2003
FreeHEP
Java Library
Content
The FreeHEP Java Library

Components and Tools for Java
"Will talk about a small sample of components“

General Components
 Application Framework
 VectorGraphics
 AID - Abstract Interface Definition compiler

HEP Component
 HEPIO – Java RootIO
Mark Dönszelmann, SLAC
CHEP, La Jolla, 24-28 March 2003
2
FreeHEP
Tools and Components for Java
Java Library
Started as a convergence of


WIRED
Java Analysis Studio (JAS)
A common base library


minimize unnecessary duplication of work
maximize code reuse
Contents is a library of HEP-wide Java software


Some very HEP specific (c.f. CLHEP)
Some general purpose components and tools
Open source

All code and documentation in CVS, web browsable
All code licensed under LGPL to make it freely reusable

Take what you like, leave what you don’t.

We include some C++ code for wrappers to make components available to C++

Minimal interdependence between packages
Pure Java where possible
Now have contributions from


Atlas, Babar, IceCube, US Linear Collider Detector (LCD)
Others welcome to contribute
Mark Dönszelmann, SLAC
CHEP, La Jolla, 24-28 March 2003
3
FreeHEP
Java Library
HEP Specific Components
Physics package



3-vector, 4-vector’s and utilities
Jet Finding, Event Shape routines
Diagnostic Event Generator
HEP IO

HEP3D

StdHEP
MCFIO
HBook
Root




XML Particle Property Database
Interfaces and JHepRep - Java
reference implementation
HepRepJNI – C++ wrapper around
HepRep
see several other talks and
posters
Future

Mark Dönszelmann, SLAC
Interfaces and JAIDA - Java
reference implementation
AIDAJNI – C++ wrapper around
AIDA
More on this in Max Turri’s talk on
Tuesday
HepRep - HEP Representables for
Event Display
Extensions to Java3D specific for
Geant4
YaPPI – Yet another Particle
Property Interface



Access to a number of common
HEP formats:




AIDA - Abstract Interfaces for
Data Analysis
Plot Widget (JAS)
CHEP, La Jolla, 24-28 March 2003
4
FreeHEP
Java Library
General Components
Application Framework

Swing Extensions
FreeHEP Tools
General framework for Java
applications using plugin and
service technology.

AID – Abstract Interface
Definition


Compiler to make C++ headers and
Java Interfaces from aid files.
Graphics3D

Non-Java3D implementation of 3D
graphics, for WIRED.
FreeHEP IO

Extensions to the JavaIO system
to handle specific encodings,
ASCII85, …
PSViewer

PostScript Viewer to embed
viewing of EPS in applications, or
for previews.
Mark Dönszelmann, SLAC
JNeeds – java package
dependency
Ant – extensions to the build
system
VectorGraphics


Low level Input and Output of
binary vector graphics formats
(CGM, EMF, PDF, SVG)
Vector output files, extension to
Java2D
XML

XMLIO – classes to store/restore
state of an application
Future

RecordLoop/EventLoop (IceCube)
and more…
CHEP, La Jolla, 24-28 March 2003
5
FreeHEP
Java Library
Infrastructure
CVS

for the repository
ant (from apache.org)

for building the java parts and the distributions
gmake

for building the C and C++ parts
JUnit

for Unit testing
Java WebStart

for application distribution
Mark Dönszelmann, SLAC
CHEP, La Jolla, 24-28 March 2003
6
FreeHEP Application Framework
General Application Framework for Java
FreeHEP
Java Library
Application Framework
Framework to build Java Applications, which contains:

a Plugin facility

a Services facility

a MenuBuilder

a Command Dispatcher

a Save/Restore facility
 to add extra Modules
 to publish and look up information of other modules
 XML for Menu and Popup Menu definitions
 Callbacks to user methods
 to route GUI commands, disable and enable them
 to handle saving and restoring of the application’s state via XMLIO
Can be run from WebStart
Users:


JAS, WIRED
and Demo Applications (available via Webstart)
Mark Dönszelmann, SLAC
CHEP, La Jolla, 24-28 March 2003
8
FreeHEP
Application Framework Demos
Java Library
Java3D Lego Plot Demo
Vector Graphics
Export Demo
Mark Dönszelmann, SLAC
Icon Browser
CHEP, La Jolla, 24-28 March 2003
9
FreeHEP Vector Graphics
Export System for Vector Graphics in Java
FreeHEP
Java Library
VectorGraphics
Adds Graphics Export functionality in the following Formats:




Bitmap: GIF, JPEG, PNG and PPM
Vector: CGM, EMF, PDF, PostScript/EPS, SVG, and SWF
Easily extendible for new formats
Different from Printing in Java which is machine dependent
Unique API, extended from java.awt.Graphics2D which adds:

Double precision drawing of primitives
Fast drawing of markers
Handling of Colors for Screen and Printing in color, grayscale and black and white

EMF (Win32) and PDF (MacOS X)


Copy & Paste:
Standard Export Dialog
Utility classes for:


FreeHEP
ExportDialog
Fonts inclusion or embedding (PS and PDF)
“path” (line and curve) handling
Users:

JAS, WIRED
and many outside users
Java Graphics2D
FreeHEP VectorGraphics
FreeHEP Graphics IO
low-level formatting
(CGM, EMF, PDF and SWF)
FreeHEP IO streams
Java IO streams
Mark Dönszelmann, SLAC
CHEP, La Jolla, 24-28 March 2003
11
FreeHEP
Java Library
VectorGraphics Examples
Data - pawdemo.hbook - MULTIPLICITY - WEIGHTED
12,000
11,000
10,000
9,000
8,000
7,000
6,000
5,000
4,000
3,000
2,000
1,000
0
Mark Dönszelmann, SLAC
0
10
20
30
40
50
60
CHEP, La Jolla, 24-28 March 2003
70
80
90
100
12
FreeHEP
Java Library
java.awt
VectorGraphics Classes
org.freehep.graphics2d
Graphics
Graphics2D
VectorGraphicsConstants
VectorGraphics
AbstractVectorGraphics
org.freehep.graphicsio
PixelGraphics2D
VectorGraphicsIO
ImageGraphicsIO
MultiPageDocument
AbstractVectorGraphicsIO
individual packages
CGMGraphics2D
EMFGraphics2D
GIFGraphics2D
PDFGraphics2D
PSGraphics2D
JPGGraphics2D
SVGGraphics2D
PPMGraphics2D
SWFGraphics2D
PNGGraphics2D
Mark Dönszelmann, SLAC
CHEP, La Jolla, 24-28 March 2003
13
FreeHEP
VectorGraphics Path Classes
Java Library
org.freehep.graphicsio
PathConstructor
AbstractPathConstructor
QuadToCubic
PathConstructor
CubicToQuad
PathConstructor
org.freehep.graphicsio.font
CubicToLine
PathConstructor
CharStringEncoder
PolylinePathConstructor
individual packages
CGMPathConstructor
EMFPathConstructor
PSPathConstructor
PDFPathConstructor
Mark Dönszelmann, SLAC
SWFPathConstructor
CHEP, La Jolla, 24-28 March 2003
14
FreeHEP
VectorGraphics Font Classes
Java Library
org.freehep.graphicsio.font
FontIncluder
FontEmbedder
FontEmbedderType1
PDFFontIncluder
PSFontEmbedder
PDFFontEmbedder
PDFFontEmbedderType3
PDFFontEmbedderType1
Mark Dönszelmann, SLAC
FontTable
PSFontTable
PDFFontTable
individual packages
CHEP, La Jolla, 24-28 March 2003
15
FreeHEP AID
Abstract Interface Definition
One source for the Interface for C++ and Java
FreeHEP AID-Abstract Interface Definition
Java Library
Tool to translate language independent Interface definitions into
Interfaces of a number target languages (C++, Java)



Unique source for Abstract Interface Definition
Support for usage of Parameterized Types (templates)
Preservation of Comments
User/Developer sees definition file in his own (C++, Java) language
AID language


looks like Java with C++ markup (&, *, <>)
Property Configuration files define:



AID type mapping to target type
AID value mapping to target value
Target type to include / import statement
AID Generator (in Java) extendible for other target languages (Python?)
Could write Generator to attach to Java/C++ glue systems such as JACE
Users:

AIDA, HepRep and LCIO (linear collider)
Mark Dönszelmann, SLAC
CHEP, La Jolla, 24-28 March 2003
17
FreeHEP
Java Library
AID System
*.aid
Source
Files
AID System
CPPHeaderGenerator
AID Compiler
*.h
C++
Header
Files
JavaInterfaceGenerator
*.java
Java
Interfaces
*.properties
Configuration
Files
Mark Dönszelmann, SLAC
JavaClassGenerator
*.java
Abstract
Java
Classes
CHEP, La Jolla, 24-28 March 2003
18
FreeHEP
Java Library
AID Compiler
*.aid
Source
Files
AID Compiler
RTTI
RunTime Type Info
JavaInterfaceGenerator
AIDParser
JavaClassGenerator
1
CPPHeaderGenerator
JavaCC Compiler
AIDParser.jj
AID Language
Definition
Mark Dönszelmann, SLAC
CHEP, La Jolla, 24-28 March 2003
*.h
C++
Header
Files
19
FreeHEP AID RTTI – RunTime Type Info
Java Library
org.freehep.jaco.rtti
RTTI
n
IClass
n
1
IConstructor
IDestructor
params
n
INamedType
params
paramtype
n
IMethod
returntype
1
n
fieldtype
IField
1
IType
1
next
Mark Dönszelmann, SLAC
CHEP, La Jolla, 24-28 March 2003
n
template
20
FreeHEP Java Root IO
Reader for RootIO in Java
FreeHEP
Java RootIO: Goals and Usage
Java Library
Features




Pure Java package for reading Root Files
 Could be extended to writing later
Should work with any Root file
Should not need to know about objects ahead of reading
(no need for dll’s, .so files etc.)
Provide access to data, not C++ methods
 Much of root functionality duplicates functionality already available in Java,
so data is more useful than methods

Easy to use
Possible Usage



Accessing Root data from Java Event Displays and Analysis Tools
 WIRED, JAIDA, JAS3
Accessing Root data from Java Servlets, Server Pages (JSP) and
Applets.
Using Root for scripting languages such as Jython, Pnuts, Beanshell etc.
 More on these in Tony Johnson’s JAS talk on Tuesday.
Mark Dönszelmann, SLAC
CHEP, La Jolla, 24-28 March 2003
22
FreeHEP
Java RootIO: Implementation
Java Library
Implementation



Uses “streamer info” objects inside Root files (since Root 3.0) to
decode contents of file
Dynamically generates 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 Just-in-Time compiler & HotSpot

Includes tool to generate Java interfaces from Root file
 Allows Java code to be compiled against custom user objects in file
Performance

Now uses java.nio package (new since Java 1.4)
 Designed to support efficient binary IO


Dynamic proxies much better performance than earlier Java Root IO
release
Faster than equivalent Root-CInt program, comparable to compiled C++
Mark Dönszelmann, SLAC
CHEP, La Jolla, 24-28 March 2003
23
FreeHEP
Java Root IO - Benchmark
Java Library
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.

in later runs file is typically
cached in memory == faster
if task IO limited
Mark Dönszelmann, SLAC
Java Root Benchmark
18
16
14
12
mS/event
10
8
6
4
2
c=1, s=2
c=1, s=1
c=1, s=0
c=0, s=2
c=0, s=1
0
c=0, s=0
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
 Red = CINT
 Green = CINT (coded for split)
 Black = Java
CHEP, La Jolla, 24-28 March 2003
24
FreeHEP
Java Library
Mark Dönszelmann, SLAC
JAS and Java RootIO
CHEP, La Jolla, 24-28 March 2003
25
FreeHEP
Java Library
Java RootIO Examples
GLAST
Histogram Servlet
RootIO
Histogram Browser
RootIO
Object Browser
Mark Dönszelmann, SLAC
CHEP, La Jolla, 24-28 March 2003
26
FreeHEP Summary and Acknowledgements
Java Library
FreeHEP Java Library


Authors
Library with HEP and nonHEP components
Actively in use by several
projects
New (revamped) web site

see next slide







Gary Bower (SLAC)
Julius Hrivnac (LAL)
Tony Johnson (SLAC)
Charles Loomis (LAL)
Joseph Perl (SLAC)
Victor V. Serbo (SLAC)
Massimiliano Turri (SLAC)
and others…
Mark Dönszelmann, SLAC
CHEP, La Jolla, 24-28 March 2003
27
FreeHEP
Java Library
References
FreeHEP Java Libraries - http://java.freehep.org






AID
JAIDA
AIDAJNI
RootIO
VectorGraphics
…
JAS – Java Analysis Studio - http://jas.freehep.org
WIRED – http://wired.freehep.org
AIDA – http://aida.freehep.org
HepRep – http://heprep.freehep.org
FreeHEP - http://www.freehep.org
Come and see the other FreeHEP related talks.
Mark Dönszelmann, SLAC
CHEP, La Jolla, 24-28 March 2003
28
Descargar

Slide 1