--- source_files: - Common/DTS.Common.SerializationPlus/Control/Event/DasModuleAccessor.cs - Common/DTS.Common.SerializationPlus/Control/Event/DasChannelAccessor.cs - Common/DTS.Common.SerializationPlus/Control/Event/ChannelAccessor.cs - Common/DTS.Common.SerializationPlus/Control/Event/ModuleChannelAccessor.cs - Common/DTS.Common.SerializationPlus/Control/Event/DasModuleChannelAccessor.cs - Common/DTS.Common.SerializationPlus/Control/Event/TestInformation.cs generated_at: "2026-04-16T03:30:58.722127+00:00" model: "Qwen/Qwen3-Coder-Next-FP8" schema_version: 1 sha256: "cdfba6906b172be2" --- # Event ## Documentation: DTS.Slice.Control.Event Accessor Types --- ### 1. **Purpose** This module defines a set of specialized accessor types used to navigate hierarchical channel and module data associated with a DAS (Data Acquisition System) event. These types (`DasModuleAccessor`, `DasChannelAccessor`, `DasModuleChannelAccessor`, `ModuleChannelAccessor`, `ChannelAccessor`) are nested within the `Event` class and provide structured, type-safe access to event data indexed by DAS identifiers (e.g., DAS ID, module number, channel number). They are intended to be instantiated and populated during `Event` construction, enabling consumers to retrieve module and channel information using multi-level keys. The module also includes `TestInformation`, an internal helper class to encapsulate test metadata (ID and description) associated with the event. --- ### 2. **Public Interface** All classes are nested within `DTS.Slice.Control.Event` and are declared `public`. | Type | Inheritance | Constructor(s) | Key Type | Value Type | Description | |------|-------------|----------------|----------|------------|-------------| | `DasModuleAccessor` | `ExceptionalDictionary>` | `DasModuleAccessor()` | `Common.DAS.Concepts.DAS.Id` | `List` | Maps a DAS ID to a list of modules associated with that DAS in the event. | | `DasChannelAccessor` | `ExceptionalDictionary>` | `DasChannelAccessor()` | `Common.DAS.Concepts.DAS.Id` | `List` | Maps a DAS ID to a list of channels (across all modules) associated with that DAS in the event. | | `ChannelAccessor` | `ExceptionalDictionary` | `ChannelAccessor()` | `int` | `Module.Channel` | Maps a *module-local* channel number (as `int`) to a `Module.Channel` instance. Used internally by `ModuleChannelAccessor`. | | `ModuleChannelAccessor` | `ExceptionalDictionary` | `ModuleChannelAccessor()` | `int` | `ChannelAccessor` | Maps a *module ID* (as `int`) to a `ChannelAccessor`, which in turn maps channel numbers to channels. Used internally by `DasModuleChannelAccessor`. | | `DasModuleChannelAccessor` | `ExceptionalDictionary` | `DasModuleChannelAccessor()` | `Common.DAS.Concepts.DAS.Id` | `ModuleChannelAccessor` | Maps a DAS ID to a `ModuleChannelAccessor`, enabling lookup of channels by DAS ID → module ID → channel number. | | `TestInformation` | `Exceptional` | `TestInformation()`
`TestInformation(string id, string description)` | — | — | Internal class holding test ID and description. Not intended for direct external use. | > **Note**: All accessor types inherit from `ExceptionalDictionary` (from `DTS.Common.Utilities`), implying they support exception-based error handling for missing keys (e.g., `KeyNotFoundException` or custom behavior defined in `ExceptionalDictionary`). --- ### 3. **Invariants** - **Hierarchical Key Structure**: - `DasModuleChannelAccessor` → `ModuleChannelAccessor` → `ChannelAccessor` → `Module.Channel` provides a 3-level lookup: `DAS.Id` → `int (module ID)` → `int (channel number)` → `Module.Channel`. - `DasModuleAccessor` and `DasChannelAccessor` provide 2-level lookup: `DAS.Id` → `List` or `List`. - **Null Handling**: - All `Property` fields in `TestInformation` are initialized with `null` as the default value and `false` for `allowNull` (per constructor args), but the `Property` wrapper likely enforces nullability semantics (exact behavior depends on `Property` implementation, not visible here). - **No Validation Logic Visible**: - No validation rules (e.g., range checks on channel/module IDs) are present in the source. Assumption: validation (if any) is handled upstream or by `ExceptionalDictionary`. - **Partial Class**: - All types are declared `partial class Event`, meaning these accessors are part of a larger `Event` class defined elsewhere (likely in `DTS.Slice.Control.Event.cs`, referenced in comments). --- ### 4. **Dependencies** #### Internal Dependencies (from source): - `DTS.Common.Utilities.ExceptionalDictionary` Base class for all accessor types. - `DTS.Common.Utilities.Property` Used in `TestInformation` for property encapsulation. - `DTS.Common.DASResource` Namespace imported by `TestInformation` (likely contains DAS resource types). - `DTS.Common.Utilities.DotNetProgrammingConstructs` Namespace imported by `TestInformation` (likely contains `Property` or similar constructs). - `DTS.Slice.Control.Event` All types are nested inside `Event` (partial class). - `Common.DAS.Concepts.DAS.Id` Key type for DAS-level accessors (`DasModuleAccessor`, `DasChannelAccessor`, `DasModuleChannelAccessor`). #### External Dependencies (inferred): - `DTS.Slice.Control.Module` and `Module.Channel` Referenced as value types in `DasModuleAccessor` and `DasChannelAccessor`. Must be defined elsewhere in the `DTS.Slice.Control` namespace. - `DTS.Common.Utilities` Core utilities library (contains `ExceptionalDictionary`, `Property`, `Strings`). #### What Depends on This Module? - Any code that consumes `Event` objects and needs to access channel/module data by DAS identifiers (e.g., event processing, analysis, or reporting modules). - Likely used in serialization/deserialization logic for `Event` (given `SerializationPlus` in namespace path). --- ### 5. **Gotchas** - **Ambiguous Integer Keys**: - `ChannelAccessor` uses `int` as key for channel number, and `ModuleChannelAccessor` uses `int` as key for module ID. These are *not* strongly typed (e.g., no `DAS.Module.Id` or `DAS.Module.Channel.Id`), despite comments (`xxx change this int to ...`) suggesting future refactoring. This risks confusion or misuse if module/channel IDs overlap or are misinterpreted. - **No Public Setters or Initialization Logic Visible**: - All accessor types have only parameterless constructors. It is unclear how they are populated (likely via internal logic in the parent `Event` class). Consumers must assume they are constructed and filled by the `Event` constructor. - **`TestInformation` is `private sealed class`**: - Not exposed outside `Event`, so external code cannot instantiate or inspect it directly. Only accessible via `Event`’s public surface (not shown here). - **Missing Context on `ExceptionalDictionary` Behavior**: - Since all types inherit from `ExceptionalDictionary`, behavior for missing keys (e.g., exceptions, defaults) depends on that base class. Without its source, exact runtime behavior is unknown. - **No Documentation for `Module` or `Module.Channel` Types**: - The types `Module` and `Module.Channel` are used as value types but not defined here. Their structure and relationship to DAS IDs is critical for correct usage but not documented in this module. - **Historical Quirk in Comments**: - All files include `// *** see DTS.Slice.Control.Event.cs ***`, indicating these are fragments of a larger file split for maintainability. This may complicate navigation for new developers. None identified beyond the above.