This is a very brief introduction. See the documentation for details.
The primary method to input parameters for D0 run II software is the RCP (run control parameter) system. Programs fetch parameters from named RCP objects. The parameters are typed and include int, float, double, string and RCP. One can also have lists of any of the above.
The RCP name consists of two parts: a package name (pkgname) and an object name (objname). Most (all?) RCP objects are defined in software packages whose name matches the package name. They are constructed from scripts which reside in the rcp subdirectory of the package. These scripts have the name objname.rcp.
RCP objects are stored in an RCP database. Each RCP object is associated with a software release. Once a user has selected a release (see "Choosing a release"), only the RCP's defined for that release are available by specifying the package and object names. This is the mode by which RCP's point to other RCP's.
The combination of the release name, package name and object name uniquely specifies any RCP object in the database. Each RCP object is assigned a unique ID which may be recorded and used to fetch the same RCP object at a later time. This makes it possible to access an RCP from a different release.
The chunks containing output event data typicaly include the ID's of the RCP's used in their processing. This enables users to recover the parameters used to produce the data.
The script used to define RCP object objname in package pkgname for the selected release may be found at $SRT_PUBLIC_CONTEXT/pkgname/rcp/objname.rcp. The environmental variable SRT_PUBLIC_CONTEXT is defined when the release is selected.
The objects associated with these overriding RCP definitions are not stored in the permanent database. They are stored in an in-memory database and the associated RCP ID's may be used later in the current process but not in another process. For this reason, RCP definitions should not be overridden during production running.
The command d0setwa defines RCP_SCRIPT_BASE to be the directory where the command is run. If it is run in a local release area then the scripts for any checked out packages will override the RCP's in the database. This is a common usage pattern.
If you desire to define RCP parameters specific to a particular run, you can set RCP_SCRIPT_BASE to point to the run directory or a subdirectory thereof. I use ./rcpdb. You can use d0setwa to make this definition or you can do it by hand. Note that d0setwa will also add a local subdirectory to your binary search path.
Unfortunately RCP_SCRIPT_BASE can only point to one directory so it is not possible to first search the run directory and then the local release area.