# Presentation: 091670

## Advanced Analysis Environments

**What is the role of Java in physics analysis?**
- Will programming languages at all be relevant?
- Can commercial products help meet our needs in this area?
**What is the role of modularity and abstract interfaces**?
- Do we want an all encompassing framework or a collection of configurable tools?

## What is the role of Java in physics analysis?

**Java is a great language for analysis (among many other things)**
- Clean, modern, OO language, relatively simple
- Platform independent
- Mainstream language
- Enormous set of standard and third party libraries
- Distributed computing, networking, CORBA, RMI
- Graphics, 2D and 3D, GUI’s
- Collections, Hash tables, Maps, Vectors, Binary Trees, Sorting
- IO, Compression, Encryption
- Large research teams working on development and performance

## Java for Data Analysis

**Maximizes programmer/physicist efficiency**
- Memory allocation taken care of for you
- No dangling pointers
- No core dumps
- No memory leaks (unless you try hard)
- No need to reinvent the wheel
- Very fast compile/(dynamic) load/debug cycle
**Spend time designing analysis program + solving physics problems, not working around language problems**

## Java for Data Analysis

- Previous generation of experiments used **Fortran** + **Data Management System** (== Jazelle, Zebra, BOS)
- Solves Three Problems
- Ability to Represent **Complex Data Structures**
**Persistence** (i.e. read in and write out complex structures)
- Run time **access to named data** in structures (for analysis)

- Now time has marched on and modern experiments use **C++**
- Represent Complex Data
- Persistence
- Run time access to data
- Still need to build (or buy and deploy) data management system (e.g. Root, Objectivity)
**Java**
- Represent Complex Data
- Persistence (serialization)
- Run time access to data (reflection)
- support **built-in** to language

## Isn’t Java too damn slow?

**No!**
- Huge advances have been made in last 4 years
- Dynamic code optimization
- Optimizes code **while it is running**
- Java now gives average of 60% of C++ performance
- Java performance continues to improve
- Static optimization (C++) is mature – no improvement expected

## Examples of Java in Data Analysis

**WIRED** – Experiment independent event display
**JAS** – Java Analysis Studio
**Linear Collider Detector**
- Entire reconstruction/analysis framework is in Java
- Modular components are also reusable and are being moved to FreeHEP library
**FreeHEP** library
- CLHep for Java (see talk ISAT201 tomorrow)
- Code from WIRED, JAS, Atlas, Babar, LCD
- In future JAS+WIRED will both become plugins for “HEP Studio”, part of FreeHEP Java library

## JAS + WIRED + LCD

## Example Analysis

## Java and the GRID

- Java has **built-in** support for **distributed computing** and **Networking**
- Rather than move all the data to the user, transparently move code to data
- Download JAVA analysis “agents” into remote server
- flexible **built-in padded cell** protects server  from analysis modules
- Give user impression code is running locally

## Will programming languages at all be relevant?

- Not once we can say “Computer – please analyze the LEP data and compute the mass of the Higgs”
- Until then - Yes
- GUI tools are important too but
- The complexity of physics analysis algorithms are best expressed in terms of programs
- Graphical representation of analysis is simply inadequate and inefficient

## Can commercial products help meet our needs in this area? 

**Yes** – we will not use a single tool, we will use many tools which can inter-operate
- Some commercial
- Some HENP specific
- Home grown tools will always have a place
- Our statistical usage of data and volume of data still tends to make mainstream commercial tools difficult to use

## What is the role of modularity and abstract interfaces?

- Fundamental to good OO design
- Separate **interface** keyword in Java language highlights importance of abstract interfaces
- Separation of interface and implementation
- Allows isolation of components within tools
- Allows interoperability between tools
- Allows user extensibility
- Allows substitution or co-existence of components/tools
- Prevents us getting stuck in a rut
- PAW/CERNLIB

## JAS Modules

## AIDA – Abstract Interface for Data Analysis
LHC++/Lizard, JAS, Open Scientist, COLT
Interoperability/data exchange
Familiarity to users
Geant4 – AIDA test bed

- LHC++/Lizard, JAS, Open Scientist, COLT
- Interoperability/data exchange
- Familiarity to users
- Geant4 – AIDA test bed

- Java
- Program

- A
- I
- D
- A

- Java AIDA
- Implementation

- C++
- Program

- A
- I
- D
- A

- C++ AIDA
- Implementation

- Java AIDA
- Implementation

- C++
- Program

- A
- I
- D
- A

- A
- I
- D
- A

- C++ -> Java

## Do we want an all encompassing framework or a collection of configurable tools?

- Why not both?
- JAS/FreeHEP provides set of highly modular tools
- A framework which brings them all together
- Framework is extensible and customizable
- Users can pick and choose

## Links

- JAS – _[http://jas.freehep.org](http://jas.freehep.org/)_
- WIRED – _[http://wired.cern.ch](http://wired.cern.ch/)_
- FreeHEP Java Library – _[http://java.](http://java.freehep.org/)__[freehep](http://java.freehep.org/)__[.org](http://java.freehep.org/)_