An identifier is a sequence of ordered pairs (fieldname, value). A coherent set of identifiers is one which may be specified by an identifier dictionary (ref?), hence may be viewed as a tree. Each node has an identifier field name, (optional) constraints on values it may take on, (optional) constraints on values of its parent node, and (optional) child nodes.
An identifier conversion acts on a subtree. The result of converting an identifier is another identifier, but need not belong to the same identifier dictionary. An identifier converter consists of a collection of identifier conversions which act on disjoint subtrees of the full set. Of course this can only be verified when the converter is applied to identifiers from a known dictionary, but a path to the root of the subtree may be written down, even when the dictionary description is not available, as a sequence of fieldnames and (optional) value constraints.
A conversion specification has three parts:
Four conversion operations are defined. All may be thought of as collapsing the collection of identifiers.
Some pictures may make this clearer.
Why would anyone care about this and what does it have to do with the LAT, anyway?
The precise way the volumes comprising an instrument description are defined and nested in the XML geometry description is conditioned by the capabilities of the simulator(s). For example, a component like the grid, logically and perhaps even structurally a single object, will be broken into several volumes. Therefore a typical detModel identifier (that is, one coming directly from the XML description of the instrument) may contain many fields which are of no interest to applications other than similution. Clients of digitized CAL data, for example, will need to know tower number, layer number, and log within layer ("column"?). Other volume fields, such as those denoting LAT (rather than, e.g., spacecraft) and CAL, are implicitly known; still others may just be uninteresting. Clients of the energy-accounting hit data might wish to sum up all energy from the grid, but the output from the simulator will necessarily be divided among several different volumes. Properly defined identifier converters will convert detModel identifiers into a form much closer to that needed by these clients.
XML elements are defined corresponding very closely to the conceptual components described above. There is an XML element for each operation. There is a <path> element and a <hasField> element which defines the condition on an identifier of having a particular specified field. (Ultimately a larger repertoire of conditions may be needed.) The <idConv> element stands for a single conversion. Its content is just a <path> followed by a <hasField> followed by one of the operations. Finally there is an <idConverter> element which contains a list of <idConv>s and optionally other things, such as constants, needed for context.
Classes (denoted, e.g., MyClass) corresponding closely to the XML elements will be used to represent an Id Converter. These classes and the primary services to be provided are as follows.