Software Experience
John J. Ryan, Ph.D.
Mathematica:
I have used Mathematica
for much of my analysis of data. This has included both physics from
experiments and hardware prototyping from design tests.
Its
handling of symbolic algebra makes it easy to calculate functions
analytically, and its combination of numerical and graphical functions
makes complicated exploration and presentation of data an easy thing to
accomplish.
Specifically, I used the symbolic algebra to calculate an analytic
correction to the
rescattering of hadrons, produced in the E665 muon-nucleus collisions,
in the 1 meter long liquid deuterium target, which I published in NIM.
I also calculated an analytic description of the
magnetic field components at any point in the PHOBOS detector.
We used this analytic description to determine the limit
of the effects on the RHIC ion beams, which pass between the two
Helmholtz coil pairs; the dipole fields cancel, and the primary moment
is the quadrupole.
I also used it to analyze the capacitive cross-coupling of the signal
traces on a prototype silicon detector.
TeX Expertise:
For use in producing my papers, I have
developed some TeX macros for the inclusion of Encapsulated PostScript
graphics and for living with RevTeX for submissions to Physical Review.
I have also generated some style files for PHOBOS documents.
Although I still find the debugging of TeX macros a horrendous task, I
have to consider myself a middle-grade LaTeX expert.
LabVIEW Expertise:
In the measurements of silicon devices,
I employed the LabVIEW system to automate the procedures as much as
possible. I had to develop some Virtual Instrument drivers for
some of our pieces of equipment: the SRS silicon bias power supply,
the
Keithley picoammeter/source, and the Boonton capacitance meter. Then,
Guenther Roland and I developed some Virtual Instrument test
procedures. We also employed the LabVIEW Code Interface Node system
of
linking in C-programs to speed up the I/O across the GPIB bus.
I also constructed a VME based setup for multiplexing many
channels through the test procedure. I controlled this setup through
LabVIEW, as well.
Modern Software Management:
For the ZEUS experiment, I reorganized the management of all the
software.
We migrated away from the old system, based on Patchy and
CMZ from CERN, to one based on CVS.
The modern system employs the C-PreProcessor to handle the
machine dependent program segments and the inclusion of header files.
The building of the libraries and the executables is managed by
GNUMake. The Version control is handled by CVS.
I designed the system and implemented the majority of it.
I wrote a program in lex and yacc to
convert Patchy card-files into a directory structures of files.
The system is now
quite elaborate, yet extremely flexible. I wrote a great deal of
documentation on this system, including a ``User's Guide'' and a
``Manager's Guide,'' as well as the 93 page ``Reference Manual.''
ANSI C-Library Extensions:
I have developed a suite of extensions to the ANSI C-Library which
provide a well defined programming interface to functionality not
defined in the ANSI C-Library. This primarily includes handling of
things which are grossly machine dependent, like directories,
subprocesses, and time functions. The routines contain all the
conditionalized programming necessary to implement the specified
behavior of the routine on all supported platforms; thus, these
routines are internally ugly, but they allow programs which call them
to remain clean and free of machine-dependent conditionalization.
Also, porting this library to a new platform is all that is required
to port the applications which use it; this leverages quite a bit of
software for the effort of porting only the library.
Remote Procedure Calls (RPC):
I have experimented a great deal with programming with Remote
Procedure Calls (RPC) and the Exchange Data Format (XDR) from Sun
Microsystems. It is the only reliable and portable data format for use
with the C-language family. I have used the generator utility,
rpcgen, extensively. I have a standard procedure in my
Makefiles for this operation.
Histogramming Package:
I have implemented a histogramming package, based completely on XDR
and ANSI-C. My initial goal was to add histograms to SLAC's
``Hippoplotamus'' package, which had only ``Ntuple'' data storage.
However, I chose to work from a cleaner design of data structures and
to provide a user interface closer to that of CERN's ``HBOOK''
package.
Source-Code Documentation Extractor:
Based on my experience in my thesis experiment, I always write
documentation into the routines themselves. I had written a program,
in Fortran, to extract this documentation and build a LaTeX file
from it. I converted this program to one based on lex and
yacc, which was much more powerful.
I eventually, made an identical
program for extracting documentation from my C-programs and, most
recently, from my Objective-C programs.
I built this documentation extracting program to run in a server mode.
I have another program which walks down directory trees, passing each
file in turn to the server and receiving back the documentation, which
it then places in the full document file, at the appropriate level of
sub-sectioning according to the level down the directory tree. In
this way, I regenerate documentation for large programs which are
organized in nice hierarchical fashion.
Fortran to C Translator:
As I moved more and more away from Fortran in favor of the C-language,
I wanted to translate much of my legacy software.
From my experience in extracting argument lists from Fortran routines
for inclusion in documentation, I improved my lex and yacc
program to translate more and more Fortran into its C-equivalent. I
was not interested in writing a cross-compiler but rather a one-time
translator from maintainable and well documented Fortran into
maintainable and well documented C. This program is not yet complete.
Object Oriented Programming in OpenStep:
I have studied the Objective-C language and the NeXTStep programming
environment, since I bought a NeXTStation at M.I.T. in 1991.
I worked my way through the whole Garfinkel and Mahoney book.
More recently, I have studied the OpenStep specification.
In addition, I have worked on my longer term goals of
developing an Object-Oriented analysis environment. I have
implemented Classes for detector objects such as vertices, tracks and
calorimeter clusters and their lower-level components, as well as
physics objects like particles and event kinematics.
Last modified: Mon Sep 20, 1999