Requirements:
Each file describes a subsystem or a set of related components, and does not use any references
(constants, volumes, etc.) from files higher in the volume tree. Each subsystem has a
single entry point (root volume), and is assigned an "anchor point" (see annotated drawings).
The file that describes a subsystem defines constants AnchorX,
AnchorY, AnchorZ that correspond to the coordinates of the
anchor point in the subsystem's root volume reference frame
(if some of these constants are not defined, they are assumed to be zero).
Subsystems are positioned by placing their anchor points using these constants.
Therefore, each subsystem can be visualized and tested independently. Changes in one
subsystem do not affect code for the others. It is easy to reposition a whole subsystem,
and any changes inside the subsystem code do not affect its positioning as long as
AnchorX, AnchorY, AnchorZ are still defined correctly.
Orientation of the local reference frames of sensitive volumes is shown on this sketch.
The order of files in the configuration should follow the dependency flow - this might be important for files that contain algorithm invocations. Sample configuration file is provided.
CVSROOT: :pserver:anonymous@cmscvs.cern.ch:/cvs_server/repositories/CMSSW Package: Geometry/TrackerCommonData
Development and archive versions are available from
/afs/fnal.gov/files/home/room3/onoprien/public/FPix/In addition to CVS tags assigned to officially committed versions, each development version is given an internal version number in the AA.BB.CC format. This number can be found in the header of every file. The major version number "AA" is changed whenever there are major changes in the geometry described by the code (like adding a new subsystem), or there are major changes in the implementation of the package. The minor version number "BB" is changed whenever there are minor changes in the geometry (more elaborate description of some component, for example). Build number "CC" is changed when minor bugs are fixed or minor changes transparent to the user are made to the implementation.
I expect this "internal versioning" scheme will become unnecessary once the package is sufficiently mature, but it proved to be highly useful in the active development stage.
Current development version: 3.02.02
Current committed version: 3.02.01
Brief summary of changes made in each version can be found in the
change log.