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