# Presentation: 153138

## Recent and Proposed Changes to ZOOM

- Recent entries
- Intended future additions
- Possibilities
- D0 and CDF users can affect which new “possible” additions become actual
- Is it right to think about altering our mode of working now that the push to production is real?

## Areas

- Special Functions
- CLHEP
- StdHepC++
- Graded asserts
- From the Gurus
- gcc
- Collective Error Logging
- Possible or Probable

## Gnu Scientific LibrarySpecial Functions

- Will other gsl sections be ZOOM-packaged
- Could do some preemptively, but prefer to react to specific needs
- At a minimum, we must think through and implement sensible C++-looking syntax for any section we incorporate into ZOOM
- Example:  y = Ai(x) rather than Ai(double, double*)
- For many packages this may be non-trivial

## Gnu Scientific LibraryOther Sections

- gsl includes
- Numerical Integration
- Monte Carlo Integration (including VEGAS)
- Statistics
- FFT
- Equation solving
- Minimization
- Accelerated series convergence
- Simulated annealing
- and ...
- Random numbers and distributions
- Linear Algebra, Vectors, Matrices, and BLAS

## Gnu Scientific LibraryOther Sections

- Will other gsl sections be packaged?
- Could do some preemptively, but prefer to react to specific needs
- At a minimum, we must think through and implement sensible C++-looking syntax for any section we incorporate into ZOOM
- Example:  y = Ai(x) rather than Ai(double, double*)
- For many packages this may be non-trivial
- If we can’t spare this much time, package won’t go in
- Please don’t look for ZOOM to replace existing working ZOOM packages with gsl equivalents
- Comparative testing takes a lot of work
- If *external* work proves a major advantage, ...

## Gnu Scientific LibrarySpecial Functions

- Will other gsl sections be ZOOM-packaged
- Could do some preemptively, but prefer to react to specific needs
- At a minimum, we must think through and implement sensible C++-looking syntax for any section we incorporate into ZOOM
- Example:  y = Ai(x) rather than Ai(double, double*)
- For many packages this may be non-trivial

## CLHEP

- Exceptions
- ErrorLogger
- PhysicsVectors will derive from CLHEP classes
- This is going slowly
- In all cases, ZOOM package will be kept in place so user code won’t need to change
- Random
- Random Engine Factory
- Object properties of distributions
- Easy recipe for adding engines
- Zoom is not looking to add more engines per se
- Additional distributions coming from gsl (e.g. Fdist)
- if users have specific needs!

## StdHepC++

- Intention is for a common format usable by generators, simulators, recon, and so forth
- Also utilities to move from that format to forms used by existing generators, simulators, ...
- hepevt
- StdHepC++ is CLHEP 1.5
- which is our latest ZOOM CLHEP release
- Major restructuring coming to take advantage of C++, make Particle class more standard and abstract, and separate particle properties form event relationships
- A collision is a “Directed Acyclic Graph” of Particles/Vertices
- Possible coordination with HepMC, aimed at ATLAS

## Graded Asserts

- assert1, assert2, assert3 (easiest to deactivate) controlled by NDEBUG, NDEBUG1, NDEBUG2, NDEBUG3
- Same behavior as assert
*Goes away completely when deactivated*
- sanityCheck
- assert that is to be left in even if NDEBUG is on
- Versions that route to the ErrorLogger
- Elassert, ELwarningAssert, ...

## From the Gurus

- ZOOM is a fine place to keep the collection of useful small tools, contributed by experts in the experiments or the CD special projects group, which are carefully implemented and make good use of C++.
**Block** <float, 4> a = {0.5, 1.2, 3.1, 4.2};
- std::container syntax, but simple enough to block-initialize
**IteratorFilter**
- behaves like an std::iterator but with a user-supplied filtering function.  Simplifies loops.
**HolderPtr **<double> xptr;
- when a HolderPtr is copied, a copy or clone is made of the pointed-to object
- To come:  ZMnew allocator

## gcc

- gcc (as of cvs checking we will do today!) is a working ZOOM platform coordinating with ISOcxx so standard C++ can be used
- One library header (locales) is still missing
- sstring is present but with caveates...
- Will be cutting a release ASAP because this is considered important
- Debuggers
- Memory leak tools available
- Speed of compilation
- Worry about KAI being acquired by Intel
- Will be seeing if the production build of CDF, and a “golden build” for a D0 release, will go smoothly with gcc.

## Collective Error Logging

- New ELcollected  destination derived from ELoutput
- (so changes needed to use it are very minimal)
- Transport scheme must be provided by experiment
- send ( nbytes, data )
- some way to know when data has arrived
- errlog ( nbytes, data ) on the server
- will log that message in a sensible way
- More about this mechanism Thursday
- Handholding to get it into a framework is appropriate

## Possible and Probable

- Package of Boudreau generic-functions, automated derivatives, and approximations
- Splines
- 1-D splines already being tested
- Small correlation matrix objects
- much less general, much simpler, faster than general Linear Algebra constructs
- Other gsl sections, if needs arise