SLAC PEP-II
BABAR
SLAC<->RAL
Babar logo
HEPIC E,S & H Databases PDG HEP preprints
Organization Detector Computing Physics Documentation
Personnel Glossary Sitemap Search Hypernews
Unwrap page!
Comp. Search
Who's who?
Meetings
FAQ Homepage
Archive
Environment
Administration
New User Info.
Web Info/Tools
Monitoring
Training
Tools & Utils
Programming
C++ Standard
SRT, AFS, CVS
QA and QC
Remedy
Histogramming
Operations
PromptReco
Simulation Production
Online SW
Dataflow
Detector Control
Evt Processing
Run Control
Calibration
Databases
Offline
Workbook
Coding Standards
Simulation
Reconstruction
Prompt Reco.
BaBar Grid
Data Distribution
Beta & BetaTools
Kanga & Root
Analysis Tools
RooFit Toolkit
Data Management
Data Quality
Event display
Event Browser
Code releases
Databases
Check this page for HTML 4.01 Transitional compliance with the
W3C Validator
(More checks...)
contents index
Next: Development Software and CVS Up: B A B A Previous: B A B A

Subsections

   
B A B A R Software Release Structure

      The bulk of B A B A R specific software is organised and maintained in a single, self consistent, file system under $BFROOT/dist (for distribution). The basic unit of software is referred to as a package; with many packages being combined into releases. The whole release system is often referred to as SRT, referring to the SoftRelTools (Software Release Tools) package which is itself used to install and maintain releases.

   
Packages

B A B A R (reconstruction and simulation) software is organised in terms of ``packages''. A package is a self contained piece of software intended to perform a well defined task, e.g. find calorimeter clusters, simulate the drift chamber response. Each package has a unique name and its own library and include files. Some packages may not be usable on their own, requiring integration with others, for example the individual subsystem simulation packages which together form the Geant simulation of BaBar.

Packages are maintained by a package coordinator, who is responsible for testing the code and releasing new versions when appropriate. The source code (plus documentation etc.) for stable, self consistent versions of all packages are found in their own subtrees under $BFROOT/dist/packages. Within each package subtree, there may be one or more ``versions''. This allows the package coordinator to ``publish'' code as needed and leaves the issues of naming, timing and quality control up to the relevant experts. All the files required for the package should then be contained within the single package directory which will also include a GNUmakefile which implements some standard targets and definitions. Older packages may not conform to this rule and for these there may be a hierarchy of subdirectories within the package directory itself. In these cases all ``externally visible'' include files will be found in one of the following standard places:

  • a subdirectory with the same as the package, or
  • a subdirectory named include
Numerous problems with compilers and debuggers have meant that these freedoms are no longer recommended and all new packages should put everything in a single package (version) directory.     At the time of writing the list of packages in the Software Release tree, corresponding to the list of subdirectories under $BFROOT/dist/packages, is:
AbsEnv        EmcData       SvtData       gelhad        gnssvd
AbsEvent      EmcReco       SvtReco       gismo         gntrol
AbsTrack      FrameExample  abse.Z        gnaero        gnunt
Aslund        Framework     beget         gnbase        gnutil
AtcData       G3Data        colias        gnbbg         gweed
BaBar         G4Geom        dbin          gnbpip        jetset
BbrGeom       HepTuple      dbinPlain     gndcha        klmn_ryd
CERNLIB       IfrData       dbio          gndirc        koralb
CLHEP         McTrkr        euclid        gnemca        mcfio
DbiEvent      MicroFrame    farfalla      gnfttk        stdhep
DchData       RecoUtils     geane         gnmisc        unt
DrcData       SoftRelTools  geant         gnmuon        workdir
The Framework package, for example, then has the following subdirectories
V00-01-01  V00-03-01  V00-03-03
and each version directory contains further subdirectories for the source code, include files and documentation:
Framework/    GNUmakefile  README       doc/          src/

Note that there are no binary (executable or library) files in this tree. Also the source code is there as a reference copy for the given version and should not be modified. The actual development code, from which the reference copies are taken is maintained using the CVS package which is detailed below.

     
Creating New Packages

Developers who wish to create new packages should do so by submitting a request to the Tools Group using the web form at http://hepunx.rl.ac.uk/BFROOT/doc/Computing/www/Tools/ToolsHome.html. This form has several questions and reminders relating to the contents of the proposed package. The request will be considered by the Tools group, who may suggest modification to the contents if appropriate (e.g. Dont store binary files). An approved package consists of a cvs module for revision control, a package directory in $BFROOT/dist/packages, a gnats problem tracking group, and one or more package coordinators. After a package has been initialized, it is elegible for inclusion into the BABAR Software Release Structure and become part of an official software release after approval by the release coordinator. Package coordinators are strongly urged to monitor the BABAR Software Admin web site for up-to-date instructions and suggestions for their role.

   
Releases

A software ``release'' consists of a consistent set of packages together with the libraries and binaries created for various machine architectures. Within the $BFROOT/dist/releases subtree there is a subdirectory for each existing release. These are typically names with simply a number, e.g. $BFROOT/dist/releases/0.7.1/ will contain all the binaries and libraries for release 0.7.1. The release also contains pointers to the reference versions of the packages (implemented using UNIX links to the relevant package subdirectories). The release coordinator can create releases of various quality levels as required. Given releases may then be retained for as long as required. Links within the releases directory can be used to provide useful default names for particular releases, for example, current for the release recommended for general use at the present time.

Once this dist tree has been installed on a users machine, the source code, libraries and binaries of any particular versions can be directly accessed through the releases tree. The user can then stay with a particular release until it is appropriate to move to a newer one. In the meantime, package coordinators can be creating new versions of their code and integrating them into releases entirely asynchronously.

The $BFROOT/dist/release tree currently has the following subdirectories (when you read this, the exact listings wil be very outdated !)

drwxr-xr-x   4 bfactory bfactory     512 Jul 20 17:53 0.3.7
drwxr-xr-x   4 bfactory bfactory     512 Jul 20 17:53 0.3.8
drwxr-xr-x   4 bfactory bfactory     512 Jul 20 17:53 0.4.2
drwxr-xr-x   4 bfactory bfactory     512 Jul 21 17:53 current -> 0.3.8 
drwxr-xr-x   4 bfactory bfactory     512 Jul 21 17:53 test -> 0.4.2

At the time of writing (now long out of date !) there are 3 releases, numbered 0.3.7, 0.3.8 and 0.4.2. Release 0.3.8 is the ``current'' release as indicated by the symbolic link. The current release should be the default choice for users. It represents the most recent stable release. Release 0.3.7 is an old release which is still being used and version 0.4.2 is a new test release. After a period of testing, if found to be stable and reliable, this release may well become the "current" release. Release 0.4.0 and 0.4.1 have presumably been deleted and never made it to ``current'' due to various bugs andfeatures. Looking more closely at the subdirectory 0.3.8:

lrwxrwxrwx   1 bfactory bfactory      30 Jul  4 19:12 BaBar ->
../../packages/BaBar/V00-00-02
lrwxrwxrwx   1 bfactory bfactory      28 Jul  4 19:12 CLHEP ->
../../packages/CLHEP/V0-13-5
lrwxrwxrwx   1 bfactory bfactory      37 Jul  4 19:12 FrameExample ->
../../packages/FrameExample/V00-00-02
lrwxrwxrwx   1 bfactory bfactory      34 Jul  4 19:12 Framework ->
../../packages/Framework/V00-00-03
-r--r--r--   1 bfactory bfactory    4177 Jul  3 06:42 GNUmakefile
lrwxrwxrwx   1 bfactory bfactory      33 Jul  4 19:12 HepTuple ->
../../packages/HepTuple/V00-01-03
-rw-r--r--   1 bfactory bfactory    5037 Jul  3 06:41 ReleaseLog
lrwxrwxrwx   1 bfactory bfactory      37 Jul  4 19:12 SoftRelTools ->
../../packages/SoftRelTools/V00-01-27
lrwxrwxrwx   1 bfactory bfactory      30 Jul  4 19:12 beget ->
../../packages/beget/V00-21-04
drwxr-xr-x   4 bfactory bfactory     512 Jul 21 17:53 bin
lrwxrwxrwx   1 bfactory bfactory      31 Jul  4 19:12 colias ->
../../packages/colias/V00-01-11
lrwxrwxrwx   1 bfactory bfactory      29 Jul  4 19:12 dbin ->
../../packages/dbin/V00-02-00
drwxr-xr-x   2 bfactory bfactory     512 Aug 25 03:05 doc
lrwxrwxrwx   1 bfactory bfactory      31 Jul  4 19:12 euclid ->
../../packages/euclid/V00-02-00
lrwxrwxrwx   1 bfactory bfactory      33 Jul  4 19:12 farfalla ->
../../packages/farfalla/V00-17-04
lrwxrwxrwx   1 bfactory bfactory      30 Jul  4 19:12 geane ->
../../packages/geane/V00-02-00
lrwxrwxrwx   1 bfactory bfactory      30 Jul  4 19:12 geant ->
../../packages/geant/V03-21-02
lrwxrwxrwx   1 bfactory bfactory      31 Jul  4 19:12 gnaero ->
../../packages/gnaero/V00-02-00
drwxr-xr-x   4 bfactory bfactory    1024 Jul  3 07:20 gnbase
lrwxrwxrwx   1 bfactory bfactory      30 Jul  4 19:12 gnbbg ->
../../packages/gnbbg/V00-02-00
lrwxrwxrwx   1 bfactory bfactory      31 Jul  4 19:12 gnbpip ->
../../packages/gnbpip/V00-02-00
...
      each of the packages is included in the release via a symbolic link to the relevant subdirectory in the packages tree (i.e. $BFROOT/dist/packages). The include directory similarly contains links the include files for the packages. The bin and lib subdirectories contain further, architecture specific directories, which in turn contain the binaries and libraries for that release. For example
bin/:
total 20
drwxr-xr-x  2 jake          512 Jul  2 23:23 AIX2
drwxr-xr-x  2 jake          512 Jul  3 07:15 HP-UXA
drwxr-xr-x  2 jake          512 Jul  3 07:24 OSF1V3
drwxr-xr-x  2 jake          512 Aug  8 00:34 SunOS4
drwxr-xr-x  2 jake          512 Jul  3 02:08 SunOS5


bin/HP-UXA:
total 9600
-r-xr-xr-x   1 bfactory bfactory    2266 Jul 17 17:22 addpkg
-r-xr-xr-x   1 bfactory bfactory    4161 Jul 17 17:22 auditrel
-r-xr-xr-x   1 bfactory bfactory    2009 Jul 17 17:22 auditver
-rwxr-xr-x   1 bfactory bfactory     407 Jul 17 17:24 bbsim
-rwxr-xr-x   1 bfactory bfactory     458 Jul 17 17:24 bbsimb
-rwxr-xr-x   1 bfactory bfactory    1019 Jul 17 17:24 bbsimb20
-rwxr-xr-x   1 bfactory bfactory  656752 Jul 17 17:22 cTest
-rwxr-xr-x   1 bfactory bfactory  648560 Jul 17 17:23 cTestRead
-rwxr-xr-x   1 bfactory bfactory  106772 Jul 17 17:24 dbin
-r-xr-xr-x   1 bfactory bfactory   10927 Jul 17 17:22 f77bb
-r-xr-xr-x   1 bfactory bfactory     209 Jul 17 17:22 fix_gnbase
-r-xr-xr-x   1 bfactory bfactory    2134 Jul 17 17:22 freezerel
-rwxr-xr-x   1 bfactory bfactory  950328 Jul 17 17:24 gnbabar
-r-xr-xr-x   1 bfactory bfactory    1873 Jul 17 17:22 importarch
-r-xr-xr-x   1 bfactory bfactory    2455 Jul 17 17:22 importrel
-r-xr-xr-x   1 bfactory bfactory    2028 Jul 17 17:22 importver
-r-xr-xr-x   1 bfactory bfactory    6617 Jul 17 17:22 newrel
-r-xr-xr-x   1 bfactory bfactory    1632 Jul 17 17:22 newver
-r-xr-xr-x   1 bfactory bfactory    1570 Jul 17 17:22 rmrel
-r-xr-xr-x   1 bfactory bfactory    1509 Jul 17 17:22 rmver

etc... for other architectures.

         
Symbolic Releases

As indicated above, several symbolic links in $BFDIST/releases are used to refer to particular releases. Form release 4.2 onwards these symbolic releases are defined as follows:
latest
The most recently built release. The only quality requirement is that thre release (mostly) compiled. The release coordinator (Doug Johnson) determines which release this should point to.
test
The most recent release which has passed basic tests, such as running the full reconstruction on a small number of events. The reconstruction coordinator (Bob Jacobsen) determines which release this should point to. Not all latest releases will become test releases.
current
This release is the most recent to have reached an acceptable level of quality. Acceptable is detemined by a combination of code and physics checks as defined by the QA/QC group with input from the physics groups and detector subgoups. The QA/QC group (Dave Aston) determines which release this should point to.
prod
This release is the release currently being used for large scale production. This link is controlled by the production coordinator (Adil Hasan).
Other symbolic release names may be defined as and when required.
next up previous contents index
Next: Development Software and CVS Up: B A B A Previous: B A B A
Neil I. Geddes
1998-11-18