Files
2026-04-17 14:55:32 -04:00

17 KiB
Raw Permalink Blame History

source_files, generated_at, model, schema_version, sha256
source_files generated_at model schema_version sha256
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
2026-04-16T04:54:22.761170+00:00 Qwen/Qwen3-Coder-Next-FP8 1 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