Detector description David Adams 10apr02 1115 Detector description should be provided as a series of layers which build on earlier layers and add services. Here we describe such a high-level design. The goal is to provide a common description that can be shared by different consumers including simulation, reconstruction and visualization. This description must have at least one realization in each programming language (C++ and possibly Java, FORTRAN, Python and others) and at least one persistent representation so the description can be shared between executables. 1. Identification ----------------- The first level is identification. Each detector element is is assigned an identity which is used as the key for discovering properties described below. Each identifier has a string representation so it can be understood by humans. 2. Structure ------------ An identified element and is typically associated with a collection of other elements. The totality of these associations constitute the structure of the detector. The simplest description would be a single tree where each element has one parent and a collection of children. However, it appears that a single tree cannot satisfy the needs of both simulation and reconstruction and perhaps not the needs of their subsystems (e.g. readout and track-finding). We should decide whether to use a more complex structure (elements have multiple parents) or have multiple trees. The (or each) structure provides a means to navigate between elements, i.e. discover the parent(s) and children for a given element. 3. Properties ------------- There are properties associated with each detector element. Thes include: a) shape and size b) position c) orientation d) digitization data (e.g. to convert position to TDC count) e) reconstruction data (e.g. to convert TDC count to drift distance) f) Material properties (density, Lrad, X0) All of these properties can be accessed the appropriate identifier as as a key.