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

6.5 KiB

source_files, generated_at, model, schema_version, sha256
source_files generated_at model schema_version sha256
DTS Viewer/DTS.Viewer.Reports/DTS.Viewer.PSDReportSettings/Model/PSDReportSettingsModel.cs
2026-04-16T11:01:19.271156+00:00 zai-org/GLM-5-FP8 1 b9213b8d6a0e210e

Documentation: PSDReportSettingsModel

1. Purpose

PSDReportSettingsModel is a model class that stores and manages configuration settings for Power Spectral Density (PSD) report generation within the DTS Viewer application. It encapsulates filter parameters (low-pass and high-pass), windowing configuration (width, type, averaging, overlapping), and data range boundaries. The class implements INotifyPropertyChanged via BasePropertyChanged and coordinates with a parent view model through the IPSDReportSettingsModel interface, automatically notifying the parent of changes when CanPublishChanges is enabled.


2. Public Interface

Properties

Property Type Default Value Description
Parent IPSDReportSettingsViewModel null Reference to the parent view model. Setter includes equality check to avoid redundant updates.
CanPublishChanges bool true Controls whether property changes trigger Parent.PublishChanges() notification.
LowPassFilterEnabled bool false Enables/disables low-pass filter. Sets ReadData = true on change.
LowPassFilterFrequency double 2000 Low-pass filter cutoff frequency. Sets ReadData = true on change.
LowPassFilterType PassFilterType PassFilterType.Butterworth Low-pass filter algorithm type. Sets ReadData = true on change.
LowPassFilterOrder int 8 Low-pass filter order. Sets ReadData = true on change.
HighPassFilterEnabled bool false Enables/disables high-pass filter. Sets ReadData = true on change.
HighPassFilterFrequency double 5 High-pass filter cutoff frequency. Sets ReadData = true on change.
HighPassFilterType PassFilterType PassFilterType.Butterworth High-pass filter algorithm type. Sets ReadData = true on change.
HighPassFilterOrder int 8 High-pass filter order. Sets ReadData = true on change.
WindowWidth WindowWidth WindowWidth.FortyNinetySix Window width for spectral analysis. Sets ReadData = true on change.
WindowType WindowType WindowType.Hanning Window function type. Sets ReadData = true on change.
WindowAveragingType WindowAveragingType WindowAveragingType.Averaging Averaging method for windows. Sets ReadData = true on change.
WindowOverlappingPercent double 50 Window overlap percentage. Sets ReadData = true on change.
ShowEnvelope bool false Controls envelope display. Sets ReadData = true on change.
IsSaved bool (not visible) Read-only property indicating save state. No setter visible in source.
ReadData bool false Flag indicating whether data should be re-read.
DataStart double 0D Start boundary for data range. Sets ReadData = true on change.
DataEnd double 0D End boundary for data range. Sets ReadData = true on change.

Methods

Method Signature Description
OnPropertyChanged void OnPropertyChanged(string propertyName) Override that raises PropertyChanged event and conditionally calls Parent?.PublishChanges() unless the property is CanPublishChanges, Parent, or ReadData.

Events

Event Type Description
PropertyChanged PropertyChangedEventHandler Override of base event; raised when any property value changes.

3. Invariants

  1. ReadData Side Effect: The following properties always set ReadData = true when modified:

    • LowPassFilterEnabled, LowPassFilterFrequency, LowPassFilterType, LowPassFilterOrder
    • HighPassFilterEnabled, HighPassFilterFrequency, HighPassFilterType, HighPassFilterOrder
    • WindowWidth, WindowType, WindowAveragingType, WindowOverlappingPercent, ShowEnvelope
    • DataStart, DataEnd
  2. Publishing Exclusion: Changes to CanPublishChanges, Parent, or ReadData do not trigger Parent.PublishChanges().

  3. Publishing Gate: Parent?.PublishChanges() is only invoked when CanPublishChanges == true.

  4. Parent Equality Check: The Parent property setter checks _parent != null && _parent.Equals(value) before updating, preventing redundant property change notifications.

  5. IsSaved Immutability: IsSaved has no setter visible in the source; its value is determined externally (possibly via constructor or reflection).


4. Dependencies

This Module Depends On:

  • DTS.Common.Enums.Viewer.Reports — Provides PassFilterType, WindowWidth, WindowType, WindowAveragingType enums
  • DTS.Common.Interface — Provides IPSDReportSettingsViewModel interface
  • Common.Base.BasePropertyChanged — Base class providing SetProperty method and INotifyPropertyChanged infrastructure

Consumers (Inferred):

  • Any module implementing IPSDReportSettingsViewModel (the parent view model)
  • Any code referencing IPSDReportSettingsModel interface

5. Gotchas

  1. ReadData Never Auto-Resets: Setting ReadData = true via property changes never automatically resets it back to false. The consuming code must manage this flag's lifecycle.

  2. IsSaved Has No Setter: The IsSaved property is read-only with no initialization visible in this file. Its value must be set through a mechanism not shown in the source (possibly constructor injection, reflection, or partial class extension).

  3. Parent Can Be Null: The Parent property is not validated for null before use in OnPropertyChanged. While Parent?.PublishChanges() uses null-conditional operator, if Parent is null during other operations, behavior is undefined.

  4. Inconsistent Setter Patterns: The Parent setter uses manual equality checking and OnPropertyChanged("Parent"), while most other properties use SetProperty(). The CanPublishChanges setter uses direct field assignment with OnPropertyChanged("CanPublishChanges"). This inconsistency may lead to subtle behavioral differences.

  5. No Validation on Numeric Inputs: Properties like LowPassFilterFrequency, HighPassFilterFrequency, WindowOverlappingPercent, DataStart, and DataEnd accept any double value without bounds checking. Invalid values (e.g., negative frequencies, overlapping > 100) are not prevented at the model level.