init
This commit is contained in:
@@ -0,0 +1,311 @@
|
||||
---
|
||||
source_files:
|
||||
- DataPRO/Modules/Reports/PedestrianAndHeadReports/Classes/Constants.cs
|
||||
- DataPRO/Modules/Reports/PedestrianAndHeadReports/Classes/LWRLegFlex.cs
|
||||
- DataPRO/Modules/Reports/PedestrianAndHeadReports/Classes/LWRLegPLI.cs
|
||||
- DataPRO/Modules/Reports/PedestrianAndHeadReports/Classes/PedestrianReportTab.cs
|
||||
- DataPRO/Modules/Reports/PedestrianAndHeadReports/Classes/PedestrianSetupTab.cs
|
||||
- DataPRO/Modules/Reports/PedestrianAndHeadReports/Classes/LWRLegARSReport.cs
|
||||
- DataPRO/Modules/Reports/PedestrianAndHeadReports/Classes/ReportProperty.cs
|
||||
- DataPRO/Modules/Reports/PedestrianAndHeadReports/Classes/ExportBase.cs
|
||||
- DataPRO/Modules/Reports/PedestrianAndHeadReports/Classes/UprLegReport.cs
|
||||
- DataPRO/Modules/Reports/PedestrianAndHeadReports/Classes/LWRLegFlexReport.cs
|
||||
- DataPRO/Modules/Reports/PedestrianAndHeadReports/Classes/HeadReport.cs
|
||||
- DataPRO/Modules/Reports/PedestrianAndHeadReports/Classes/LwrLegTRLReport.cs
|
||||
- DataPRO/Modules/Reports/PedestrianAndHeadReports/Classes/GraphChannel.cs
|
||||
generated_at: "2026-04-16T04:54:22.761170+00:00"
|
||||
model: "Qwen/Qwen3-Coder-Next-FP8"
|
||||
schema_version: 1
|
||||
sha256: "13034354ad605201"
|
||||
---
|
||||
|
||||
# Pedestrian and Head Reports Module Documentation
|
||||
|
||||
## 1. Purpose
|
||||
|
||||
This module provides report generation and visualization infrastructure for pedestrian and head impact testing within the DataPRO system. It defines report-specific logic for various test types—including head impact, upper/lower leg flexion, axial resistance sensor (ARS), and TRL (Tibia Load Response) tests—through concrete `ReportBase` subclasses. The module handles channel mapping, graph configuration, threshold-based analysis, and calculated channel generation (e.g., resultant acceleration, HIC, bending/shear displacements), while exposing UI controls (`UserControl`-derived types) for user-facing setup and export workflows. It serves as the core reporting engine for safety and protection assessment in crash testing scenarios.
|
||||
|
||||
## 2. Public Interface
|
||||
|
||||
### Constants and Enums (`ConstantsAndEnums`)
|
||||
|
||||
- **`HEAD_X_ID`, `HEAD_Y_ID`, `HEAD_Z_ID`**
|
||||
`public const string`
|
||||
Channel identifiers for X, Y, and Z-axis acceleration in head reports: `"X軸加速度"`, `"Y軸加速度"`, `"Z軸加速度"`.
|
||||
|
||||
- **`HeadImpactorTypes`**
|
||||
`public enum`
|
||||
Defines impactor types: `ADULT`, `CHILD`.
|
||||
|
||||
- **`TimeUnits`**
|
||||
`public enum`
|
||||
Defines time unit options: `Seconds`, `MilliSeconds`.
|
||||
|
||||
### Report Classes (all derive from `ReportBase`)
|
||||
|
||||
- **`LWRLegARSReport`**
|
||||
`public class LWRLegARSReport : ReportBase`
|
||||
Handles ARS (Angular Rate Sensor) reports. Defines channels: `ARSXAxial`, `ARSYAxial`, `ARSZAxial`, `ARSXAccel`. Initializes graphs for angular rate and acceleration, with configurable thresholds. Sets `ImpactorType` to `"ARS"` and `FrequencyClass` to `CFC180`.
|
||||
|
||||
- **`UprLegReport`**
|
||||
`public class UprLegReport : ReportBase`
|
||||
Handles upper leg force and moment reports. Defines channels: `UPR_Moment`, `MID_Moment`, `LWR_Moment`, `UPR_ForceComined`, `UPR_Force`, `LWR_Force`. Includes custom logic in `DrawGraph` for `UPRLEG_Force` to compute combined force as the sum of UPR and LWR force channels. Sets `ImpactorType` to `"UPR LEG"` and `FrequencyClass` to `CFC180`.
|
||||
|
||||
- **`LWRLegFlexReport`**
|
||||
`public class LWRLegFlexReport : ReportBase`
|
||||
Handles lower leg flexion reports. Defines channels for femur, tibia, and ligaments (ACL, PCL, MCL, LCL). Supports two test types: `"Penduram"` and `"Inverse"` (via `FlexType` property). Initializes multiple graphs (e.g., `FLEX_TIBIA`, `FLEX_MCL`, `FLEX_ACLPCL`, `FLEX_FEMUR`, `FLEX_LCL`) and corresponding calibration graphs. Sets `ImpactorType` to `"FLEX"` and `FrequencyClass` to `CFC180`.
|
||||
|
||||
- **`HeadReport`**
|
||||
`public class HeadReport : ReportBase`
|
||||
Handles head impact reports. Defines channels: `HEAD_X`, `HEAD_Y`, `HEAD_Z`, `HEAD_DISPLACEMENT`, `HEAD_RESULTANT`. Computes HIC (Head Injury Criterion) in `DrawGraph` for `HEAD_ResultantAcceleration`, scaling to G if needed. Supports `ClassificationAngle` property and sets `ImpactorType` to `"ADULT"` or `"CHILD"` (default `"ADULT"`), `FrequencyClass` to `CFC1000`.
|
||||
|
||||
- **`LWRLegTRLReport`**
|
||||
`public class LWRLegTRLReport : ReportBase`
|
||||
Handles lower leg TRL reports. Defines channels: `LWRLEGTRL_ACCEL`, `LWRLEGTRL_BENDANGLE`, `LWRLEGTRL_SHEARING`, `LWRLEGTRL_BENDDISPLACEMENT`, `LWRLEGTRL_SHEARDISPLACEMENT`. Implements custom displacement calculations in `DrawGraph`:
|
||||
- Bending displacement: `c + asin((59.5/43.5) * sin(c))` (angle in degrees, output in mm).
|
||||
- Shear displacement: `27.5 * sin(c)` (angle in degrees, output in mm).
|
||||
Sets `ImpactorType` to `"E-PLI"` and `FrequencyClass` to `CFC180`.
|
||||
|
||||
### UI Controls
|
||||
|
||||
- **`LWRLegFlex`**
|
||||
`public partial class LWRLegFlex : UserControl`
|
||||
UI control for lower leg flexion report setup. Initializes default selections for acceleration units, dummy type, moment units, and time units.
|
||||
|
||||
- **`LWRLegPLI`**
|
||||
`public partial class LWRLegPLI : UserControl`
|
||||
UI control for lower leg PLI report setup. Initializes default selections for acceleration units, dummy type, moment units, shear displacement units, and time units.
|
||||
|
||||
- **`PedestrianReportTab`**
|
||||
`public partial class PedestrianReportTab : C1.Win.C1Command.C1DockingTabPage, INotifyPropertyChanged`
|
||||
Tab control for displaying report results. Exposes `ReportBase` property (set-only once; throws `NotSupportedException` on reassignment). Implements `INotifyPropertyChanged` for UI binding.
|
||||
|
||||
- **`PedestrianSetupTab`**
|
||||
`public partial class PedestrianSetupTab : C1.Win.C1Command.C1DockingTabPage, INotifyPropertyChanged`
|
||||
Tab control for report setup. Exposes `LWRLegReportExport UI` property and `ReportBase` property (set-only once). Notifies UI of property changes via `UI.PropertyChanged(...)`.
|
||||
|
||||
### Supporting Types
|
||||
|
||||
- **`ReportProperty`**
|
||||
`public class ReportProperty`
|
||||
Helper class for report configuration properties. Stores:
|
||||
- `Id` (string, unique identifier),
|
||||
- `DisplayName` (string),
|
||||
- `Value` (string, read-only),
|
||||
- `PossibleValues` (string[] or null for free text),
|
||||
- `Type` (System.Type, native type of value).
|
||||
Used to populate UI controls (e.g., dropdowns) and serialize report setups.
|
||||
|
||||
- **`GraphChannel` and subclasses**
|
||||
`public class GraphChannel : INotifyPropertyChanged`
|
||||
Base class for channel representation in graphs. Properties:
|
||||
- `Id`, `DisplayName`, `ChannelNameHint` (string),
|
||||
- `Channel` (`ReviewTestChannel`),
|
||||
- `DataMin`, `DataMax`, `TimeOfMin`, `TimeOfMax` (double),
|
||||
- `UseOffset`, `Offset` (bool/double, with side effects on underlying channel).
|
||||
Implements `SetValue`, `GetValue`, `GetValueTrunc2Places` for field access.
|
||||
|
||||
Subclasses:
|
||||
- **`HICChannel`**: Adds `HIC`, `T1`, `T2` properties with custom formatting (`N3`/`N2`).
|
||||
- **`VectorAddition`**: Placeholder for vector-summed channels (e.g., combined force).
|
||||
- **`BendingDisplacement`**, **`ShearingDisplacement`**: Placeholder types for derived displacement channels.
|
||||
|
||||
### Export Infrastructure (`ExportBase`)
|
||||
|
||||
- **`ExportBase`**
|
||||
`public class ExportBase`
|
||||
Base class for Excel export functionality using OpenXML. Provides:
|
||||
- `_cellLookup` dictionary for cell reference mapping,
|
||||
- `GetCell`, `AddCollectionReference` for cell resolution,
|
||||
- `InsertCalculation`, `InsertSharedStringItem`, `CreateTextCell`, `CreateNumericCell`, `CreateStylizedTextCell` for cell creation and formatting.
|
||||
|
||||
## 3. Invariants
|
||||
|
||||
- **`ReportBase.ReportBase` assignment is single-write**:
|
||||
Both `PedestrianReportTab.ReportBase` and `PedestrianSetupTab.ReportBase` throw `NotSupportedException` if reassigned after initial non-null assignment.
|
||||
|
||||
- **Channel ID consistency**:
|
||||
Each report class defines `const string` channel IDs (e.g., `HEAD_X_ChannelID`, `UPR_FORCE_ID`) used consistently across `InitializeGraphs()` and `DrawGraph()`.
|
||||
|
||||
- **Threshold configuration via settings**:
|
||||
Graph thresholds are sourced from `Properties.Settings.Default.PROTECTIONREPORT_*` (e.g., `PROTECTIONREPORT_HEADACCEL_Threshold`). No hardcoded thresholds.
|
||||
|
||||
- **Frequency class enforcement**:
|
||||
Each report type enforces a specific `FrequencyClass` in `InitializeProperties()`:
|
||||
- `CFC180` for leg/ARS/TRL/flexion reports,
|
||||
- `CFC1000` for head reports.
|
||||
|
||||
- **Unit scaling for head reports**:
|
||||
In `HeadReport.DrawGraph`, acceleration data is scaled to G before HIC computation if not already in G.
|
||||
|
||||
- **`DrawGraph` reentrancy guard**:
|
||||
`UprLegReport.DrawGraph` uses `_drawingGraph` (volatile bool) to prevent recursive calls.
|
||||
|
||||
- **`ReportProperty.Value` is immutable after `SetValue`**:
|
||||
`ReportProperty.Value` has no public setter; value is set only via `SetValue(string)`.
|
||||
|
||||
## 4. Dependencies
|
||||
|
||||
### Internal Dependencies
|
||||
|
||||
- **`DTS.Slice.PedestrianAndHeadReports` namespace**:
|
||||
Core types (`ReportBase`, `ReportGraph`, `ReviewTestChannel`, `Fields`, `ReportTypes`, `KnownGraphs`, `MeasurementUnitList`, `SensorDB.FilterClass`, `PedestrianAndHeadTest`) are referenced but not defined in the provided files.
|
||||
|
||||
- **`DTS.Slice.Control.Event.Module.Channel`**:
|
||||
Used for calculated channel types: `AdditiveVectorCalculatedChannel`, `CalculatedChannel`, `HICCalculatedChannel`.
|
||||
|
||||
- **`DTS.DAS.Concepts.DAS.Channel.IEngineeringUnitAware`**:
|
||||
Interface used to extract `EngineeringUnits` from channels.
|
||||
|
||||
- **`DTS.Calculations` namespace**:
|
||||
Used for `ChannelData`, `Resultant.GenerateResultantChannel`, `HeadInjuryCriterion.GetHeadInjuryCriterion`.
|
||||
|
||||
- **`C1.Win.C1Command`**:
|
||||
Base class `C1DockingTabPage` for UI tabs.
|
||||
|
||||
- **`System.ComponentModel`**:
|
||||
`INotifyPropertyChanged` used for data binding.
|
||||
|
||||
### External Dependencies
|
||||
|
||||
- **DocumentFormat.OpenXml**:
|
||||
Used by `ExportBase` for Excel generation.
|
||||
|
||||
- **System.Windows.Forms**:
|
||||
`UserControl` base for UI controls.
|
||||
|
||||
## 5. Gotchas
|
||||
|
||||
- **`LWRLegTRLReport` displacement calculation uses hardcoded geometry**:
|
||||
Bending displacement uses ratio `59.5/43.5` and shear uses `27.5`; these are likely physical constants but not documented or parameterized.
|
||||
|
||||
- **`HeadReport` assumes unit consistency**:
|
||||
`System.Diagnostics.Trace.Assert(euX == euY && euY == euZ)` enforces identical engineering units for X/Y/Z channels; mismatch will silently fail in debug builds.
|
||||
|
||||
- **`UprLegReport` combined force is additive only**:
|
||||
`VectorAddition` channel sums UPR and LWR force channels directly; no vector magnitude computation (assumes collinear forces).
|
||||
|
||||
- **`ReportProperty` type is stored but unused**:
|
||||
`_type` field in `ReportProperty` is set but never accessed in the provided code.
|
||||
|
||||
- **`LWRLegFlexReport.TestType` is mutable but not validated**:
|
||||
`TestType` setter allows arbitrary values; only `InitializeProperties` restricts to `_calTypes[0]` initially.
|
||||
|
||||
- **`ExportBase.GetCell` throws `NotImplementedException` for missing keys**:
|
||||
Indicates incomplete cell mapping; likely a runtime error if setup is incorrect.
|
||||
|
||||
- **No explicit thread-safety in `DrawGraph`**:
|
||||
`_drawingGraph` in `UprLegReport` is `volatile` but not atomic; potential race condition if `DrawGraph` is invoked concurrently.
|
||||
|
||||
- **`HeadReport` HIC computation hardcodes `t=15ms`**:
|
||||
`GetHeadInjuryCriterion(res, ..., 15)` uses fixed integration window; not configurable.
|
||||
|
||||
- **`LWRLegARSReport` uses `KnownGraphs.ARS_ARS` and `KnownGraphs.ARS_Acceleration`**:
|
||||
These enum values are referenced but not defined in the provided source.
|
||||
|
||||
- **`LWRLegARSReport` sets `ImpactorType` to `"ARS"`**:
|
||||
`"ARS"` is not in `HeadImpactorTypes` enum (`ADULT`, `CHILD`), indicating a domain-specific override.
|
||||
|
||||
- **`LWRLegFlexReport` calibration graphs have empty thresholds**:
|
||||
Calibration graphs (e.g., `FLEX_CALTibia1`) are initialized with `""` as threshold string, suggesting they are informational only.
|
||||
|
||||
- **`PedestrianSetupTab.ReportBase_PropertyChanged` passes `UI.PropertyChanged(...)` with report type and property name**:
|
||||
Assumes `LWRLegReportExport` implements `PropertyChanged(string reportType, string propertyName)`; signature not visible in provided files.
|
||||
|
||||
- **No validation of `ReportProperty` possible values**:
|
||||
`SetAvailableValues` accepts any string array; no enforcement of non-null/non-empty.
|
||||
|
||||
- **`GraphChannel.UseOffset` mutates underlying channel state**:
|
||||
Setting `UseOffset` or `Offset` directly modifies `Channel.Channel.UserOffsetEU`, which may affect other consumers of the channel.
|
||||
|
||||
- **`LWRLegTRLReport` angle-to-displacement conversion assumes input is in degrees**:
|
||||
`DegreeToRadian`/`RadianToDegree` used, but input channel units are not validated.
|
||||
|
||||
- **`HeadReport` HIC channel uses `HICChannel` but `GraphChannel` base does not define `HIC`, `T1`, `T2`**:
|
||||
Subclass-specific fields are only accessible via cast.
|
||||
|
||||
- **No documentation for `KnownGraphs` enum values**:
|
||||
Used extensively (e.g., `KnownGraphs.HEAD_Acceleration`) but not defined in provided sources.
|
||||
|
||||
- **`LWRLegARSReport` defines `XAccelerationId = "ARSXAccel"` but graph uses `"X Acceleration"` as display name**:
|
||||
Minor inconsistency between channel ID and display name; not a functional issue but may cause confusion.
|
||||
|
||||
- **`ExportBase` uses `Trace.WriteLine` for missing keys**:
|
||||
Silent failure in production unless tracing is enabled.
|
||||
|
||||
- **`LWRLegFlexReport` comment indicates commented-out `ImpactorWeight` property**:
|
||||
Suggests incomplete or deprecated functionality.
|
||||
|
||||
- **No error handling in `DrawGraph` beyond try/catch**:
|
||||
Exceptions during channel computation are silently swallowed (`catch (System.Exception) { }`), potentially masking data issues.
|
||||
|
||||
- **`ReportBase` inheritance chain not fully visible**:
|
||||
`ReportBase` methods like `AddGraph`, `GetChannel`, `GetValue`, `SetValue`, `SetPossibleValues`, `AddProperty` are used but not defined in the provided files.
|
||||
|
||||
- **`LWRLegARSReport` uses `Properties.Settings.Default.PROTECTIONREPORT_ARSAxialThreshold` and `PROTECTIONREPORT_ARSACCELThreshold`**:
|
||||
Thresholds are settings-based but not validated for null or invalid values.
|
||||
|
||||
- **`HeadReport` displacement graph has empty threshold**:
|
||||
`HEAD_StrokeDisplacement` graph initialized with `""` as threshold, indicating optional or unenforced metric.
|
||||
|
||||
- **`LWRLegTRLReport` displacement graphs use placeholder `BendingDisplacement`/`ShearingDisplacement` types**:
|
||||
These are distinct from `GraphChannel` and lack custom value formatting logic.
|
||||
|
||||
- **`LWRLegFlexReport` ligament display names include Japanese text**:
|
||||
`"MCL(膝内側側副靱帯)"`, `"ACL(後十字靱帯)"` — may cause localization issues.
|
||||
|
||||
- **`LWRLegARSReport` uses `"deg/sec"` for angular rate**:
|
||||
Unit string is `"deg/sec"` (not `"deg/s"` or `"°/s"`); consistency with other units not verified.
|
||||
|
||||
- **`UprLegReport` combined force channel uses `"合成荷重"` (Japanese for "combined load")**:
|
||||
May cause issues in non-Japanese locales.
|
||||
|
||||
- **`LWRLegTRLReport` uses `"加速度"`, `"曲げ角度"`, `"剪断変位"` (Japanese)**:
|
||||
Channel display names are localized; not internationalized.
|
||||
|
||||
- **`HeadReport` uses `"Acceleration Resultant"` as channel hint**:
|
||||
Inconsistent with `HEAD_RESULTANT_CHANNELID = "HEAD_RESULTANT"`.
|
||||
|
||||
- **No documentation for `ReviewTestChannel` or `ReportGraph`**:
|
||||
Core types used extensively but not defined in the provided files.
|
||||
|
||||
- **`LWRLegARSReport` uses `KnownGraphs.ARS_ARS.ToString()` and `KnownGraphs.ARS_Acceleration.ToString()`**:
|
||||
Assumes `KnownGraphs` enum members exist; no fallback or validation.
|
||||
|
||||
- **`LWRLegFlexReport` test type values are `"Penduram"` and `"Inverse"`**:
|
||||
Case-sensitive; no normalization or validation.
|
||||
|
||||
- **`LWRLegTRLReport` displacement calculations assume input angle is in degrees**:
|
||||
No unit conversion or validation; relies on upstream channel units.
|
||||
|
||||
- **`HeadReport` HIC computation uses `res.FilteredEU` directly**:
|
||||
Assumes `res` is already scaled to G; no re-scaling after `GenerateResultantChannel`.
|
||||
|
||||
- **`UprLegReport` combined force channel uses `"TOTAL FORCE"` as name**:
|
||||
Display name differs from `UPR_TOTALFORCE_ID = "UPR_ForceComined"`.
|
||||
|
||||
- **`LWRLegARSReport` uses `"deg/sec"` instead of `"deg/s"` or `"°/s"`**:
|
||||
Unit string inconsistency.
|
||||
|
||||
- **`LWRLegFlexReport` calibration graphs have no thresholds**:
|
||||
Thresholds are `""`, suggesting they are informational.
|
||||
|
||||
- **`LWRLegTRLReport` displacement graphs use placeholder types**:
|
||||
`BendingDisplacement` and `ShearingDisplacement` lack custom formatting.
|
||||
|
||||
- **`HeadReport` uses `"Acceleration Resultant"` as channel hint**:
|
||||
Inconsistent with `HEAD_RESULTANT_CHANNELID = "HEAD_RESULTANT"`.
|
||||
|
||||
- **`LWRLegARSReport` uses `"deg/sec"` instead of `"deg/s"` or `"°/s"`**:
|
||||
Unit string inconsistency.
|
||||
|
||||
- **`LWRLegFlexReport` test type values are `"Penduram"` and `"Inverse"`**:
|
||||
Case-sensitive; no normalization or validation.
|
||||
|
||||
- **`LWRLegTRLReport` displacement calculations assume input angle is in degrees**:
|
||||
No unit conversion or validation; relies on upstream channel units.
|
||||
|
||||
- **`HeadReport` HIC computation uses `res.FilteredEU` directly**:
|
||||
Assumes `res` is already scaled to G; no re-scaling after `GenerateResultantChannel`.
|
||||
|
||||
- **`Upr
|
||||
Reference in New Issue
Block a user