Files
DP44/Common/DTS.Common.Serialization/Iso/Iso.File.Test.Channel.cs
2026-04-17 14:55:32 -04:00

857 lines
41 KiB
C#

/*
* Iso.File.Test.Channel.cs
*
* Copyright © 2009
* Diversified Technical Systems, Inc.
* All Rights Reserved
*/
using System;
using System.Collections.Generic;
using System.Text;
using DTS.Common.Enums;
using DTS.Common.Utilities;
using DTS.Common.Utilities.DotNetProgrammingConstructs;
using DTS.Common.Utils;
namespace DTS.Serialization.Iso
{
// *** Iso.File.cs ***
public partial class File
{
// *** Iso.File.Test.cs ***
public partial class Test
{ ///
/// <summary>
/// ISO-style representation of a test channel.
/// </summary>
///
public class Channel : Exceptional
{
/// <summary>
/// Get/set the data zero offset of the data (in EU).
/// </summary>
public double DataZeroOffsetEu
{
get
{
if (!_DataZeroOffsetEu.IsValueInitialized) { return 0; }
return _DataZeroOffsetEu.Value;
}
set => _DataZeroOffsetEu.Value = value;
}
private readonly Property<double> _DataZeroOffsetEu
= new Property<double>(
typeof(File).Namespace + ".Iso.File.Test.Channel.DataZeroOffsetEu",
0,
false
);
/// <summary>
/// Get/set the <see cref="int"/> number associated with this test object.
/// </summary>
public int TestObjectNumber
{
get
{
if (!_TestObjectNumber.IsValueInitialized) { return 0; }
return _TestObjectNumber.Value;
}
set => _TestObjectNumber.Value = value;
}
private const string TestObjectNumberLabel = "Test object number";
private readonly Property<int> _TestObjectNumber
= new Property<int>(
typeof(File).Namespace + ".Iso.File.Test.Channel.TestObjectNumber",
0,
false
);
/// <summary>
/// Get/set the <see cref="bool"/> indicating whether or not errors occurred in
/// the capture of this channel data.
/// </summary>
public bool ErrorsOccurred
{
get
{
if (!_ErrorsOccurred.IsValueInitialized) { return false; }
return _ErrorsOccurred.Value;
}
set => _ErrorsOccurred.Value = value;
}
private readonly Property<bool> _ErrorsOccurred
= new Property<bool>(
typeof(File).Namespace + ".Iso.File.Test.Channel.ErrorsOccurred",
false,
false
);
/// <summary>
/// Get/set the <see cref="string"/> name of the channel.
/// </summary>
public string Name
{
get
{
if (!_Name.IsValueInitialized) { return null; }
return _Name.Value;
}
set => _Name.Value = value;
}
private const string NameLabel = "Name of the channel";
private readonly Property<string> _Name
= new Property<string>(
typeof(File).Namespace + ".Iso.File.Test.Channel.Name",
null,
false
);
/// <summary>
/// Get/set the laboratory code <see cref="string"/> for the channel.
/// </summary>
public string LaboratoryCode
{
get
{
if (!_LaboratoryCode.IsValueInitialized) { return null; }
return _LaboratoryCode.Value;
}
set => _LaboratoryCode.Value = value;
}
private const string LaboratoryCodeLabel = "Laboratory channel code";
private readonly Property<string> _LaboratoryCode
= new Property<string>(
typeof(File).Namespace + ".Iso.File.Test.Channel.LaboratoryCode",
null,
false
);
/// <summary>
/// Get/set the customer code <see cref="string"/> for the channel.
/// </summary>
public string CustomerCode
{
get
{
if (!_CustomerCode.IsValueInitialized) { return null; }
return _CustomerCode.Value;
}
set => _CustomerCode.Value = value;
}
private const string CustomerCodeLabel = "Customer channel code";
private readonly Property<string> _CustomerCode
= new Property<string>(
typeof(File).Namespace + ".Iso.File.Test.Channel.CustomerCode",
null,
false
);
/// <summary>
/// Get/set the code <see cref="string"/> for the channel.
/// </summary>
public string Code
{
get
{
if (!_Code.IsValueInitialized) { return null; }
return _Code.Value;
}
set => _Code.Value = value;
}
private const string CodeLabel = "Channel code";
private readonly Property<string> _Code
= new Property<string>(
typeof(File).Namespace + ".Iso.File.Test.Channel.Code",
null,
false
);
/// <summary>
/// Get/set the location <see cref="string"/> for the channel.
/// </summary>
public string Location
{
get
{
if (!_Location.IsValueInitialized) { return "????"; }
return _Location.Value;
}
set => _Location.Value = value;
}
private const string LocationLabel = "Location";
private readonly Property<string> _Location
= new Property<string>(
typeof(File).Namespace + ".Iso.File.Test.Channel.Location",
"????",
true
);
/// <summary>
/// Get/set the location <see cref="string"/> for the channel.
/// </summary>
public string Dimension
{
get
{
if (!_Dimension.IsValueInitialized) { return null; }
return _Dimension.Value;
}
set => _Dimension.Value = value;
}
private const string DimensionLabel = "Dimension";
private readonly Property<string> _Dimension
= new Property<string>(
typeof(File).Namespace + ".Iso.File.Test.Channel.Dimension",
null,
false
);
/// <summary>
/// Get/set the direction <see cref="string"/> for the channel.
/// </summary>
public string Direction
{
get
{
if (!_Direction.IsValueInitialized) { return null; }
return _Direction.Value;
}
set => _Direction.Value = value;
}
private const string DirectionLabel = "Direction";
private readonly Property<string> _Direction
= new Property<string>(
typeof(File).Namespace + ".Iso.File.Test.Channel.Direction",
null,
false
);
/// <summary>
/// Get/set the list of <see cref="ExtraProperty"/>s for this test.
/// </summary>
public List<ExtraProperty> ExtraProperties
{
get => _ExtraProperties.Value;
set => _ExtraProperties.Value = value;
}
private readonly Property<List<ExtraProperty>> _ExtraProperties
= new Property<List<ExtraProperty>>(
typeof(File).Namespace + ".Iso.File.Test.Channel.ExtraProperties",
new List<ExtraProperty>(),
true
);
/// <summary>
/// Get/set the <see cref="ChannelFilter"/> for the channel.
/// </summary>
public ChannelFilter FilterClass
{
get
{
if (!_FilterClass.IsValueInitialized) { return ChannelFilter.Unfiltered; }
return _FilterClass.Value;
}
set => _FilterClass.Value = value;
}
private readonly Property<ChannelFilter> _FilterClass
= new Property<ChannelFilter>(
typeof(File).Namespace + ".Iso.File.Test.Channel.FilterClass",
ChannelFilter.Unfiltered,
false
);
/// <summary>
/// Get/set the <see cref="string"/> for the channel.
/// </summary>
public string ChannelFrequencyClass
{
get
{
if (!_ChannelFrequencyClass.IsValueInitialized) { return null; }
return _ChannelFrequencyClass.Value;
}
set => _ChannelFrequencyClass.Value = value;
}
private const string FrequencyClassLabel = "Channel frequency class";
private readonly Property<string> _ChannelFrequencyClass
= new Property<string>(
typeof(File).Namespace + ".Iso.File.Test.Channel.ChannelFrequencyClass",
null,
false
);
/// <summary>
/// Get/set the unit <see cref="string"/> for the channel.
/// </summary>
public string Unit
{
get
{
if (!_Unit.IsValueInitialized) { return null; }
return _Unit.Value;
}
set => _Unit.Value = value;
}
private const string UnitLabel = "Unit";
private readonly Property<string> _Unit
= new Property<string>(
typeof(File).Namespace + ".Iso.File.Test.Channel.Unit",
null,
false
);
/// <summary>
/// Get/set the reference system <see cref="string"/> for the channel.
/// </summary>
public string ReferenceSystem
{
get
{
if (!_ReferenceSystem.IsValueInitialized) { return null; }
return _ReferenceSystem.Value;
}
set => _ReferenceSystem.Value = value;
}
private const string ReferenceSystemLabel = "Reference system";
private readonly Property<string> _ReferenceSystem
= new Property<string>(
typeof(File).Namespace + ".Iso.File.Test.Channel.ReferenceSystem",
null,
false
);
/// <summary>
/// Get/set the transducer type <see cref="string"/> for the channel.
/// </summary>
public string TransducerType
{
get
{
if (!_TransducerType.IsValueInitialized) { return null; }
return _TransducerType.Value;
}
set => _TransducerType.Value = value;
}
private const string TransducerTypeLabel = "Transducer type";
private readonly Property<string> _TransducerType
= new Property<string>(
typeof(File).Namespace + ".Iso.File.Test.Channel.TransducerType",
null,
false
);
/// <summary>
/// Get/set the transducer id (sensor serial number) <see cref="string"/> for the channel.
/// </summary>
public string TransducerId
{
get
{
if (!_TransducerId.IsValueInitialized) { return null; }
return _TransducerId.Value;
}
set => _TransducerId.Value = value;
}
private const string TransducerIdLabel = "Transducer id";
private readonly Property<string> _TransducerId
= new Property<string>(
typeof(File).Namespace + ".Iso.File.Test.Channel.TransducerId",
null,
false
);
/// <summary>
/// Get/set the pre-filter type <see cref="string"/> for the channel.
/// </summary>
public string PrefilterType
{
get
{
if (!_PrefilterType.IsValueInitialized) { return null; }
return _PrefilterType.Value;
}
set => _PrefilterType.Value = value;
}
private const string PrefilterTypeLabel = "Pre-filter type";
private readonly Property<string> _PrefilterType
= new Property<string>(
typeof(File).Namespace + ".Iso.File.Test.Channel.PrefilterType",
null,
false
);
/// <summary>
/// Get/set the <see cref="double"/> cut-off frequency value for the channel.
/// </summary>
public double CutOffFrequency
{
get
{
if (!_CutOffFrequency.IsValueInitialized) { return 0D; }
return _CutOffFrequency.Value;
}
set => _CutOffFrequency.Value = value;
}
private const string CutOffFrequencyLabel = "Cut off frequency";
private readonly Property<double> _CutOffFrequency
= new Property<double>(
typeof(File).Namespace + ".Iso.File.Test.Channel.CutOffFrequency",
0.0,
false
);
public bool IsDigitalInput { get; set; }
public bool IsSquib { get; set; }
public double AmplitudeClass { get; set; }
private const string AmplitudeClassLabel = "Channel amplitude class";
private const string ReferenceChannelLabel = "Reference channel";
private const string ReferenceChannelNameLabel = "Reference channel name";
private const string DataSourceLabel = "Data source";
private const string DataStatusLabel = "Data status";
/// <summary>
/// Get/set the <see cref="double"/> sampling interval for the Test.
/// this is the max sample rate between all channels
/// </summary>
public double SamplingIntervalTest
{
get
{
if (!_SamplingIntervalTest.IsValueInitialized) { return 0D; }
return _SamplingIntervalTest.Value;
}
set => _SamplingIntervalTest.Value = value;
}
private readonly Property<double> _SamplingIntervalTest
= new Property<double>(
typeof(File).Namespace + ".Iso.File.Test.Channel.SamplingIntervalTest",
0.0,
false
);
/// <summary>
/// Get/set the <see cref="double"/> sampling interval for the channel.
/// </summary>
public double SamplingInterval
{
get
{
if (!_SamplingInterval.IsValueInitialized) { return 0D; }
return _SamplingInterval.Value;
}
set => _SamplingInterval.Value = value;
}
private const string SamplingIntervalLabel = "Sampling interval";
private readonly Property<double> _SamplingInterval
= new Property<double>(
typeof(File).Namespace + ".Iso.File.Test.Channel.SamplingInterval",
0.0,
false
);
/// <summary>
/// Get/set the <see cref="int"/> bit resolution for the channel.
/// </summary>
public int BitResolution
{
get
{
if (!_BitResolution.IsValueInitialized) { return 0; }
return _BitResolution.Value;
}
set => _BitResolution.Value = value;
}
private const string BitResolutionLabel = "Bit resolution";
private readonly Property<int> _BitResolution
= new Property<int>(
typeof(File).Namespace + ".Iso.File.Test.Channel.BitResolution",
0,
false
);
/// <summary>
/// Get/set this channel's comment <see cref="string"/>.
/// </summary>
public string Comments
{
get
{
if (!_Comments.IsValueInitialized) { return null; }
return _Comments.Value;
}
set => _Comments.Value = value;
}
private readonly Property<string> _Comments
= new Property<string>(
typeof(File).Namespace + ".Iso.File.Test.Channel.Comments",
null,
false
);
/// <summary>
/// Get/set the <see cref="double"/> time of first sample for the channel.
/// </summary>
public double TimeOfFirstSample
{
get
{
if (!_TimeOfFirstSample.IsValueInitialized) { return 0D; }
return _TimeOfFirstSample.Value;
}
set => _TimeOfFirstSample.Value = value;
}
private const string TimeOfFirstSampleLabel = "Time of first sample";
private readonly Property<double> _TimeOfFirstSample
= new Property<double>(
typeof(File).Namespace + ".Iso.File.Test.Channel.TimeOfFirstSample",
0.0,
false
);
/// <summary>
/// Get/set the <see cref="int"/> number of samples on the channel.
/// </summary>
public ulong NumberOfSamples
{
get
{
try
{
return Convert.ToUInt64(Samples.Data.Length);
}
catch (System.Exception ex)
{
throw new Exception("encountered problem getting number of samples for channel " + (_Name.IsInitialized && null != Name ? "\"" + Name + "\"" : "<NULL>"), ex);
}
}
}
private const string NumberOfSamplesLabel = "Number of samples";
/// <summary>
/// Get/set this channel's offset post test <see cref="string"/>.
/// </summary>
public double OffsetPostTest
{
get
{
if (!_OffsetPostTest.IsValueInitialized) { return 0D; }
return _OffsetPostTest.Value;
}
set => _OffsetPostTest.Value = value;
}
private const string OffsetPostTestLabel = "Offset post test";
private readonly Property<double> _OffsetPostTest
= new Property<double>(
typeof(File).Namespace + ".Iso.File.Test.Channel.OffsetPostTest",
0.0,
false
);
private const string TransducerNatFreqLabel = "Transducer natural frequency";
private const string TransducerDampRatioLabel = "Transducer damping ratio";
/// <summary>
/// Get/set the <see cref="double"/> first global maximum for the channel.
/// </summary>
public double FirstGlobalMaximum
{
get
{
try
{
if (_IsFirstGlobalMaximumValueInitialized)
return _FirstGlobalMaximumValue;
long firstMaxIndex = 0;
long maxIndex = 0;
var firstMax = double.NaN;
if (Samples != null)
{
firstMaxIndex = (Samples.Data.Length > 0) ? Samples.Data.Length - 1 : 0;
maxIndex = Samples.Data.Length;
firstMax = Samples.Data[firstMaxIndex - 1];
}
// xxx For some reason the memory mapped class is painfully slow when
// traversed in reverse, so we're going from the front. Also, indexing
// the last item causes problems, so for the moment we're stopping
// one item short.
for (long i = 0; i < maxIndex - 1; i++)
{
if (firstMax < Samples.Data[i])
{
firstMax = Samples.Data[i];
firstMaxIndex = i;
}
}
_FirstGlobalMaximumValue = firstMax - DataZeroOffsetEu;
_FirstGlobalMaximumValueIndex = firstMaxIndex;
_IsFirstGlobalMaximumValueInitialized = true;
return _FirstGlobalMaximumValue;
}
catch (System.Exception ex)
{
throw new Exception("encountered problem getting first global maximum on channel " + (_Name.IsInitialized && null != Name ? "\"" + Name + "\"" : "<NULL>"), ex);
}
}
set
{
_FirstGlobalMaximumValue = value;
_IsFirstGlobalMaximumValueInitialized = true;
}
}
private const string FirstGlobalMaximumLabel = "First global maximum";
private double _FirstGlobalMaximumValue = 0.0;
private long _FirstGlobalMaximumValueIndex = 0;
private bool _IsFirstGlobalMaximumValueInitialized = false;
/// <summary>
/// Get/set the <see cref="double"/> time of maximum value for the channel.
/// </summary>
public double TimeOfMaximumValue
{
get
{
try
{
if (!_IsTimeOfMaximumValueInitialized)
{
_TimeOfMaximumValue = TimeOfFirstSample + SamplingInterval * _FirstGlobalMaximumValueIndex;
_IsTimeOfMaximumValueInitialized = true;
}
return _TimeOfMaximumValue;
}
catch (System.Exception ex)
{
throw new Exception("encountered problem getting time of maximum value", ex);
}
}
}
private const string TimeOfMaximumValueLabel = "Time of maximum value";
private double _TimeOfMaximumValue = 0.0;
private bool _IsTimeOfMaximumValueInitialized = false;
/// <summary>
/// Get/set the <see cref="double"/> first global minimum for the channel.
/// </summary>
public double FirstGlobalMinimum
{
get
{
try
{
if (_IsFirstGlobalMinimumValueInitialized)
return _FirstGlobalMinimumValue;
long firstMinIndex = 0;
var firstMin = double.NaN;
if (Samples != null)
{
firstMinIndex = Samples.Data.Length > 0 ? Samples.Data.Length - 1 : 0;
firstMin = Samples.Data[firstMinIndex - 1];
}
// xxx correct these indicies. Have to go from front to back, also --
// for some reason the memory mapping is painfully slow when the array
// is traversed in reverse.
for (var i = firstMinIndex - 1; i >= 0; i--)
{
if (firstMin > Samples.Data[i])
{
firstMin = Samples.Data[i];
firstMinIndex = i;
}
}
_FirstGlobalMinimumValue = firstMin - DataZeroOffsetEu;
_FirstGlobalMinimumValueIndex = firstMinIndex;
_IsFirstGlobalMinimumValueInitialized = true;
return _FirstGlobalMinimumValue;
}
catch (System.Exception ex)
{
throw new Exception("encountered problem getting first global minimum on channel " + (_Name.IsInitialized && null != Name ? "\"" + Name + "\"" : "<NULL>"), ex);
}
}
set
{
_FirstGlobalMinimumValue = value;
_IsFirstGlobalMinimumValueInitialized = true;
}
}
private const string FirstGlobalMinimumLabel = "First global minimum";
private double _FirstGlobalMinimumValue = 0.0;
private long _FirstGlobalMinimumValueIndex = 0;
private bool _IsFirstGlobalMinimumValueInitialized = false;
/// <summary>
/// Get/set the <see cref="double"/> time of minimum value for the channel.
/// </summary>
public double TimeOfMinimumValue
{
get
{
try
{
if (!_IsTimeOfMinimumValueInitialized)
{
_TimeOfMinimumValue = TimeOfFirstSample + SamplingInterval * _FirstGlobalMinimumValueIndex;
_IsTimeOfMinimumValueInitialized = true;
}
return _TimeOfMinimumValue;
}
catch (System.Exception ex)
{
throw new Exception("encountered problem getting time of minimum value", ex);
}
}
}
private const string TimeOfMinimumValueLabel = "Time of minimum value";
private double _TimeOfMinimumValue = 0.0;
private bool _IsTimeOfMinimumValueInitialized = false;
/// <summary>
/// Get/set the <see cref="double"/> time of minimum value for the channel.
/// </summary>
public double StartOffsetInterval
{
get
{
try
{
return _StartOffsetInterval;
}
catch (System.Exception ex)
{
throw new Exception("encountered problem getting start offset interval", ex);
}
}
set => _StartOffsetInterval = value;
}
private const string StartOffsetIntervalLabel = "Start offset interval";
private double _StartOffsetInterval = 0.0;
/// <summary>
/// Get/set the <see cref="double"/> time of minimum value for the channel.
/// </summary>
public double EndOffsetInterval
{
get
{
try
{
return _EndOffsetInterval;
}
catch (System.Exception ex)
{
throw new Exception("encountered problem getting start offset interval", ex);
}
}
set => _EndOffsetInterval = value;
}
private const string EndOffsetIntervalLabel = "End offset interval";
private double _EndOffsetInterval = 0.0;
public FilteredData Samples
{
get
{
if (!_Samples.IsValueInitialized) { return null; }
return _Samples.Value;
}
set => _Samples.Value = value;
}
private readonly Property<FilteredData> _Samples
= new Property<FilteredData>(
typeof(File).Namespace + ".Iso.File.Test.Channel.Samples",
null,
false
);
/// <summary>
/// Generate a string representation for this object.
/// </summary>
///
/// <returns>
/// A <see cref="string"/> representation of this object.
/// </returns>
///
public override string ToString()
{
try
{
var builder = new StringBuilder();
string line = null;
builder.Append(TestObjectNumberLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => TestObjectNumber.ToString())) + (null != line ? Eol : ""));
builder.Append(NameLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => IsSquib ? Name.ReplaceStrings(Common.Constants.ExportNameFilters, StringReplacementMode.Last) : Name)) + (null != line ? Eol : "")); //17650: sanitize name output for certain exports
builder.Append(LaboratoryCodeLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => LaboratoryCode)) + (null != line ? Eol : ""));
builder.Append(CustomerCodeLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => CustomerCode)) + (null != line ? Eol : ""));
builder.Append(CodeLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => Code)) + (null != line ? Eol : ""));
builder.Append(LocationLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => Location)) + (null != line ? Eol : ""));
builder.Append(DimensionLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => Dimension)) + (null != line ? Eol : ""));
builder.Append(DirectionLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => Direction)) + (null != line ? Eol : ""));
builder.Append(FrequencyClassLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => ChannelFrequencyClass)) + (null != line ? Eol : ""));
builder.Append(UnitLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => Unit)) + (null != line ? Eol : ""));
builder.Append(ReferenceSystemLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => ReferenceSystem)) + (null != line ? Eol : ""));
builder.Append(TransducerTypeLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => TransducerType)) + (null != line ? Eol : ""));
builder.Append(TransducerIdLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => IsSquib ? TransducerId.ReplaceStrings(Common.Constants.ExportNameFilters, StringReplacementMode.Last) : TransducerId)) + (null != line ? Eol : "")); //17650: sanitize name/id output for certain exports
builder.Append(PrefilterTypeLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => IsDigitalInput ? "NOVALUE" : PrefilterType)) + (null != line ? Eol : ""));
builder.Append(CutOffFrequencyLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => IsDigitalInput ? "NOVALUE" : CutOffFrequency.ToString())) + (null != line ? Eol : ""));
builder.Append(AmplitudeClassLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => AmplitudeClass.ToString())) + (null != line ? Eol : ""));
builder.Append(ReferenceChannelLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => "implicit")) + (null != line ? Eol : ""));
builder.Append(ReferenceChannelNameLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => "NOVALUE")) + (null != line ? Eol : ""));
builder.Append(DataSourceLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => "transducer")) + (null != line ? Eol : ""));
builder.Append(DataStatusLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => "ok")) + (null != line ? Eol : ""));
//14247 Data resampled using linear interpolation to the highest sample rate in the test looks incorrect?
//we put in the test sample interval rather than the channel, since we will not be exporting at the channel's rate
builder.Append(SamplingIntervalLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => SamplingIntervalTest.ToString("F6", System.Globalization.CultureInfo.InvariantCulture.NumberFormat))) + (null != line ? Eol : ""));
builder.Append(BitResolutionLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => BitResolution.ToString())) + (null != line ? Eol : ""));
builder.Append(CommentsLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => Comments)) + (null != line ? Eol : ""));
builder.Append(TimeOfFirstSampleLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => TimeOfFirstSample.ToString())) + (null != line ? Eol : ""));
builder.Append(NumberOfSamplesLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => NumberOfSamples.ToString())) + (null != line ? Eol : ""));
builder.Append(OffsetPostTestLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => OffsetPostTest.ToString())) + (null != line ? Eol : ""));
builder.Append(TransducerNatFreqLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => "NOVALUE")) + (null != line ? Eol : ""));
builder.Append(TransducerDampRatioLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => "NOVALUE")) + (null != line ? Eol : ""));
builder.Append(FirstGlobalMaximumLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => FirstGlobalMaximum.ToString("F6", System.Globalization.CultureInfo.InvariantCulture.NumberFormat))) + (null != line ? Eol : ""));
builder.Append(TimeOfMaximumValueLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => TimeOfMaximumValue.ToString("F6", System.Globalization.CultureInfo.InvariantCulture.NumberFormat))) + (null != line ? Eol : ""));
builder.Append(FirstGlobalMinimumLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => FirstGlobalMinimum.ToString("F6", System.Globalization.CultureInfo.InvariantCulture.NumberFormat))) + (null != line ? Eol : ""));
builder.Append(TimeOfMinimumValueLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => TimeOfMinimumValue.ToString("F6", System.Globalization.CultureInfo.InvariantCulture.NumberFormat))) + (null != line ? Eol : ""));
builder.Append(StartOffsetIntervalLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => StartOffsetInterval.ToString("F6", System.Globalization.CultureInfo.InvariantCulture.NumberFormat))) + (null != line ? Eol : ""));
builder.Append(EndOffsetIntervalLabel.PadRight(SeparatorOffset) + Separator + (line = GetFieldString(() => EndOffsetInterval.ToString("F6", System.Globalization.CultureInfo.InvariantCulture.NumberFormat))) + (null != line ? Eol : ""));
foreach (var exp in ExtraProperties)
{
builder.Append(exp.Key.PadRight(SeparatorOffset) + Separator + (line = exp.Value) + (null != line ? Eol : ""));
}
return builder.ToString();
}
catch (System.Exception ex)
{
throw new Exception("encountered problem generating string representation for " + GetType().FullName, ex);
}
}
}
}
}
}