From 78408ed5ebfb8a424aea333d5a747214f3eea7da Mon Sep 17 00:00:00 2001 From: Milan Hanajik Date: Thu, 8 Nov 2018 10:54:26 +0100 Subject: [PATCH] Density calculated from (T up + T dn) / 2 and (Pr up + Pr dn) / 2 used everywhere, ver. 2.18.1053 --- .../CombinedWithDetectionSeq.cs | 15 +++++++-------- .../FixedStartAdvanced/FixedStartAdvancedSeq.cs | 5 ++++- .../FixedStartDeferredEvaluationSeq.cs | 5 ++++- .../FixedStartMassCollectionSeq.cs | 6 ++++-- .../FlyingStartFirstRepetWithMassCollSeq.cs | 13 ++++++------- .../FlyingStartMassCollProlongedSeq.cs | 13 ++++++------- .../FlyingStartMassCollectionSeq.cs | 3 +-- .../FlyingStartTankCollectionSeq.cs | 1 - TBF/Properties/AssemblyInfo.cs | 4 ++-- TBF/Screens/ProcessTabPageCtrl24.cs | 7 +++++-- TBF/Screens/ProcessTabPageCtrl48.cs | 7 +++++-- TBF/Screens/ProcessTabPageCtrl6.cs | 7 +++++-- 12 files changed, 49 insertions(+), 37 deletions(-) diff --git a/TBF/BenchControl/TestMethods/CombinedWithDetection/CombinedWithDetectionSeq.cs b/TBF/BenchControl/TestMethods/CombinedWithDetection/CombinedWithDetectionSeq.cs index 5d624f80e..8300b7aef 100644 --- a/TBF/BenchControl/TestMethods/CombinedWithDetection/CombinedWithDetectionSeq.cs +++ b/TBF/BenchControl/TestMethods/CombinedWithDetection/CombinedWithDetectionSeq.cs @@ -621,16 +621,15 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection tstRslt.MassStart = Config.Formulas.CorrectedValue(tstRslt.MassStartRaw, scale.Corrections); tstRslt.MassEndRaw = EndMass.Val; tstRslt.MassEnd = Config.Formulas.CorrectedValue(tstRslt.MassEndRaw, scale.Corrections); - tstRslt.FlowMass = 3600.0 * (tstRslt.MassEnd - tstRslt.MassStart) / tstRslt.TestTime; /// [kg/h] - tstRslt.FlowVolume = 3.6 * LtrPerRefPulse * cBrd.EtPulses(0) / tstRslt.TestTime; /// [m3/h] + tstRslt.FlowMass = 3600.0 * (tstRslt.MassEnd - tstRslt.MassStart) / tstRslt.TestTime; /// [kg/h] + tstRslt.FlowVolume = 3.6 * LtrPerRefPulse * cBrd.EtPulses(0) / tstRslt.TestTime; /// [m3/h] tstRslt.Buoyancy = Config.Formulas.Buoyancy(); - double density = Config.Formulas.WaterDensityFromTemp((tstRslt.TempUpMean + tstRslt.TempDownMean) / 2.0, Program.LocalSettings.RealDensity, Program.LocalSettings.AtTemperature); - tstRslt.VolumeCTV = 1000.0 * tstRslt.Buoyancy * (tstRslt.MassEnd - tstRslt.MassStart) / density; /// [l] 1000.0f is because density is in [kg/m3] - tstRslt.VolumeMaster = LtrPerRefPulse * tstRslt.PulsesMaster; /// [l] volume from the master flow meter - tstRslt.ConstMasterRaw = outPath.FlowMeter.LtrPerPulse; /// Uncorrected master flowmeter coefficient - tstRslt.ConstMasterCorr = outPath.FlowMeter.LtrPerPulseCorrected(tstRslt.FlowVolume, rangeIx); /// Corrected master pulses per liter + tstRslt.VolumeCTV = 1000 * tstRslt.Buoyancy * (tstRslt.MassEnd - tstRslt.MassStart) / tstRslt.DensityLine; /// [l] commercially true volume + tstRslt.VolumeMaster = LtrPerRefPulse * tstRslt.PulsesMaster; /// [l] volume from the master flow meter + tstRslt.ConstMasterRaw = outPath.FlowMeter.LtrPerPulse; /// Uncorrected master flowmeter coefficient + tstRslt.ConstMasterCorr = outPath.FlowMeter.LtrPerPulseCorrected(tstRslt.FlowVolume, rangeIx); /// Corrected master pulses per liter tstRslt.ConstMaster = (tstRslt.VolumeMaster == 0) ? tstRslt.ConstMasterCorr : (LtrPerRefPulse * tstRslt.VolumeCTV / tstRslt.VolumeMaster); - /// Calculated master pulses per liter + /// Calculated master pulses per liter tstRslt.ErrorMaster = Config.Formulas.ErrorFromVolumes(tstRslt.VolumeMaster, tstRslt.VolumeCTV); tstRslt.FlowMean = (float)RefFlowStat.Average; diff --git a/TBF/BenchControl/TestMethods/FixedStartAdvanced/FixedStartAdvancedSeq.cs b/TBF/BenchControl/TestMethods/FixedStartAdvanced/FixedStartAdvancedSeq.cs index 4c2d72619..60065b757 100644 --- a/TBF/BenchControl/TestMethods/FixedStartAdvanced/FixedStartAdvancedSeq.cs +++ b/TBF/BenchControl/TestMethods/FixedStartAdvanced/FixedStartAdvancedSeq.cs @@ -488,7 +488,10 @@ namespace TBF.BenchControl.TestMethods.FixedStartAdvanced double massStart = Config.Formulas.CorrectedValue(StartMass.Val, scale.Corrections); double massEnd = Config.Formulas.CorrectedValue(EndMass.Val, scale.Corrections); - double densityOut = Config.Formulas.WaterDensityFromTemp(TempDownStat.Average, Program.LocalSettings.RealDensity, Program.LocalSettings.AtTemperature); + double densityOut = Config.Formulas.WaterDensityFromTempPress((TempUpStat.Average + TempDownStat.Average) / 2, + (PressUpStat.Average + PressDownStat.Average) / 2, + Program.LocalSettings.RealDensity, + Program.LocalSettings.AtTemperature); /// [kg/m3] /// double buoyancy = Config.Formulas.Buoyancy(); double volumeCTV = 1000.0 * buoyancy * (massEnd - massStart) / densityOut; diff --git a/TBF/BenchControl/TestMethods/FixedStartDeferredEvaluation/FixedStartDeferredEvaluationSeq.cs b/TBF/BenchControl/TestMethods/FixedStartDeferredEvaluation/FixedStartDeferredEvaluationSeq.cs index 3523c57f0..1f6648b3d 100644 --- a/TBF/BenchControl/TestMethods/FixedStartDeferredEvaluation/FixedStartDeferredEvaluationSeq.cs +++ b/TBF/BenchControl/TestMethods/FixedStartDeferredEvaluation/FixedStartDeferredEvaluationSeq.cs @@ -853,7 +853,10 @@ namespace TBF.BenchControl.TestMethods.FixedStartDeferredEvaluation double massStart = Config.Formulas.CorrectedValue(StartMass.Val, scale.Corrections); double massEnd = Config.Formulas.CorrectedValue(EndMass.Val, scale.Corrections); - double densityOut = Config.Formulas.WaterDensityFromTemp(TempDownStat.Average, Program.LocalSettings.RealDensity, Program.LocalSettings.AtTemperature); /// [kg/m3] + double densityOut = Config.Formulas.WaterDensityFromTempPress((TempUpStat.Average + TempDownStat.Average) / 2, + (PressUpStat.Average + PressDownStat.Average) / 2, + Program.LocalSettings.RealDensity, + Program.LocalSettings.AtTemperature); /// [kg/m3] /// double buoyancy = Config.Formulas.Buoyancy(); double volumeCTV = 1000.0 * buoyancy * (massEnd - massStart) / densityOut; diff --git a/TBF/BenchControl/TestMethods/FixedStartMassCollection/FixedStartMassCollectionSeq.cs b/TBF/BenchControl/TestMethods/FixedStartMassCollection/FixedStartMassCollectionSeq.cs index 42e22c08a..1d39a2bbf 100644 --- a/TBF/BenchControl/TestMethods/FixedStartMassCollection/FixedStartMassCollectionSeq.cs +++ b/TBF/BenchControl/TestMethods/FixedStartMassCollection/FixedStartMassCollectionSeq.cs @@ -841,9 +841,11 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection double massStart = Config.Formulas.CorrectedValue(StartMass.Val, scale.Corrections); double massEnd = Config.Formulas.CorrectedValue(EndMass.Val, scale.Corrections); - double densityOut = Config.Formulas.WaterDensityFromTemp(TempDownStat.Average, Program.LocalSettings.RealDensity, Program.LocalSettings.AtTemperature); /// [kg/m3] + double densityOut = Config.Formulas.WaterDensityFromTempPress((TempUpStat.Average + TempDownStat.Average) / 2, + (PressUpStat.Average + PressDownStat.Average) / 2, + Program.LocalSettings.RealDensity, + Program.LocalSettings.AtTemperature); /// [kg/m3] /// double buoyancy = Config.Formulas.Buoyancy(); - double volumeCTV = 1000.0 * buoyancy * (massEnd - massStart) / densityOut; if (debugLevel == Config.Entities.DebugMode.Simulate) volumeCTV = test.Volume; diff --git a/TBF/BenchControl/TestMethods/FlyingStartFirstRepetWithMassColl/FlyingStartFirstRepetWithMassCollSeq.cs b/TBF/BenchControl/TestMethods/FlyingStartFirstRepetWithMassColl/FlyingStartFirstRepetWithMassCollSeq.cs index 0aca2c8b7..fc3e82d05 100644 --- a/TBF/BenchControl/TestMethods/FlyingStartFirstRepetWithMassColl/FlyingStartFirstRepetWithMassCollSeq.cs +++ b/TBF/BenchControl/TestMethods/FlyingStartFirstRepetWithMassColl/FlyingStartFirstRepetWithMassCollSeq.cs @@ -774,14 +774,13 @@ namespace TBF.BenchControl.TestMethods.FlyingStartFirstRepetWithMassColl tstRslt.MassStart = Config.Formulas.CorrectedValue(tstRslt.MassStartRaw, scale.Corrections); tstRslt.MassEndRaw = EndMass.Val; tstRslt.MassEnd = Config.Formulas.CorrectedValue(tstRslt.MassEndRaw, scale.Corrections); - tstRslt.FlowMass = 3600.0 * (tstRslt.MassEnd - tstRslt.MassStart) / tstRslt.TestTime; /// [kg/h] - double density = Config.Formulas.WaterDensityFromTemp((tstRslt.TempUpMean + tstRslt.TempDownMean) / 2.0, Program.LocalSettings.RealDensity, Program.LocalSettings.AtTemperature); - tstRslt.VolumeCTV = 1000.0 * tstRslt.Buoyancy * (tstRslt.MassEnd - tstRslt.MassStart) / density; /// [l] 1000.0f is because density is in [kg/m3] - tstRslt.VolumeMaster = LtrPerRefPulse * tstRslt.PulsesMaster; /// [l] volume from the master flow meter - tstRslt.ConstMasterRaw = outPath.FlowMeter.LtrPerPulse; /// Uncorrected master flowmeter coefficient - tstRslt.ConstMasterCorr = outPath.FlowMeter.LtrPerPulseCorrected(tstRslt.FlowVolume, rangeIx); /// Corrected master pulses per liter + tstRslt.FlowMass = 3600 * (tstRslt.MassEnd - tstRslt.MassStart) / tstRslt.TestTime; /// [kg/h] + tstRslt.VolumeCTV = 1000 * tstRslt.Buoyancy * (tstRslt.MassEnd - tstRslt.MassStart) / tstRslt.DensityLine; /// [l] commercially true volume + tstRslt.VolumeMaster = LtrPerRefPulse * tstRslt.PulsesMaster; /// [l] volume from the master flow meter + tstRslt.ConstMasterRaw = outPath.FlowMeter.LtrPerPulse; /// Uncorrected master flowmeter coefficient + tstRslt.ConstMasterCorr = outPath.FlowMeter.LtrPerPulseCorrected(tstRslt.FlowVolume, rangeIx); /// Corrected master pulses per liter tstRslt.ConstMaster = (tstRslt.VolumeMaster == 0) ? tstRslt.ConstMasterCorr : (LtrPerRefPulse * tstRslt.VolumeCTV / tstRslt.VolumeMaster); - /// Calculated master pulses per liter + /// Calculated master pulses per liter tstRslt.ErrorMaster = Config.Formulas.ErrorFromVolumes(tstRslt.VolumeMaster, tstRslt.VolumeCTV); tstRslt.DiverterStart = switchTimeStart.Val; diff --git a/TBF/BenchControl/TestMethods/FlyingStartMassCollProlonged/FlyingStartMassCollProlongedSeq.cs b/TBF/BenchControl/TestMethods/FlyingStartMassCollProlonged/FlyingStartMassCollProlongedSeq.cs index c136be4be..50f92e90c 100644 --- a/TBF/BenchControl/TestMethods/FlyingStartMassCollProlonged/FlyingStartMassCollProlongedSeq.cs +++ b/TBF/BenchControl/TestMethods/FlyingStartMassCollProlonged/FlyingStartMassCollProlongedSeq.cs @@ -770,17 +770,16 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollProlonged tstRslt.MassStart = Formulas.CorrectedValue(tstRslt.MassStartRaw, scale.Corrections); tstRslt.MassEndRaw = EndMass.Val; tstRslt.MassEnd = Formulas.CorrectedValue(tstRslt.MassEndRaw, scale.Corrections); - tstRslt.FlowMass = 3600.0 * (tstRslt.MassEnd - tstRslt.MassStart) * totalPulses / (tstRslt.TestTime * massPulses); /// [kg/h] + tstRslt.FlowMass = 3600 * (tstRslt.MassEnd - tstRslt.MassStart) * totalPulses / (tstRslt.TestTime * massPulses); /// [kg/h] tstRslt.FlowVolume = 3.6 * LtrPerRefPulse * tstRslt.PulsesMaster / tstRslt.TestTime; /// [m3/h] tstRslt.Buoyancy = Formulas.Buoyancy(); - double density = Formulas.WaterDensityFromTemp((tstRslt.TempUpMean + tstRslt.TempDownMean) / 2.0, Program.LocalSettings.RealDensity, Program.LocalSettings.AtTemperature); - double collectedVoluemCTV = 1000.0 * tstRslt.Buoyancy * (tstRslt.MassEnd - tstRslt.MassStart) / density; /// [l] 1000.0f is because density is in [kg/m3] - tstRslt.ConstMasterRaw = outPath.FlowMeter.LtrPerPulse; /// Uncorrected master flowmeter coefficient - tstRslt.ConstMasterCorr = outPath.FlowMeter.LtrPerPulseCorrected(tstRslt.FlowVolume, rangeIx); /// Corrected master pulses per liter + double collectedVoluemCTV = 1000 * tstRslt.Buoyancy * (tstRslt.MassEnd - tstRslt.MassStart) / tstRslt.DensityLine; /// [l] commercially true volume of collected water + tstRslt.ConstMasterRaw = outPath.FlowMeter.LtrPerPulse; /// Uncorrected master flowmeter coefficient + tstRslt.ConstMasterCorr = outPath.FlowMeter.LtrPerPulseCorrected(tstRslt.FlowVolume, rangeIx); /// Corrected master pulses per liter tstRslt.ConstMaster = (massPulses == 0) ? tstRslt.ConstMasterCorr : (collectedVoluemCTV / massPulses); - /// Calculated master pulses per liter + /// Calculated master pulses per liter tstRslt.VolumeCTV = tstRslt.ConstMaster * totalPulses; - tstRslt.VolumeMaster = LtrPerRefPulse * totalPulses; /// [l] volume from the master flow meter + tstRslt.VolumeMaster = LtrPerRefPulse * totalPulses; /// [l] volume from the master flow meter tstRslt.ErrorMaster = Formulas.ErrorFromVolumes(tstRslt.VolumeMaster, tstRslt.VolumeCTV); tstRslt.FlowMean = (float)RefFlowStat.Average; diff --git a/TBF/BenchControl/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs b/TBF/BenchControl/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs index 7ed176585..360259eed 100644 --- a/TBF/BenchControl/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs +++ b/TBF/BenchControl/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs @@ -762,8 +762,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollection tstRslt.FlowMass = 3600.0 * (tstRslt.MassEnd - tstRslt.MassStart) / tstRslt.TestTime; /// [kg/h] tstRslt.FlowVolume = 3.6 * LtrPerRefPulse * tstRslt.PulsesMaster / tstRslt.TestTime; /// [m3/h] tstRslt.Buoyancy = Config.Formulas.Buoyancy(); - double density = Config.Formulas.WaterDensityFromTemp((tstRslt.TempUpMean + tstRslt.TempDownMean) / 2.0, Program.LocalSettings.RealDensity, Program.LocalSettings.AtTemperature); - tstRslt.VolumeCTV = 1000.0 * tstRslt.Buoyancy * (tstRslt.MassEnd - tstRslt.MassStart) / density; /// [l] 1000.0f is because density is in [kg/m3] + tstRslt.VolumeCTV = 1000 * tstRslt.Buoyancy * (tstRslt.MassEnd - tstRslt.MassStart) / tstRslt.DensityLine; /// [l] commercially true volume tstRslt.VolumeMaster = LtrPerRefPulse * tstRslt.PulsesMaster; /// [l] volume from the master flow meter tstRslt.ConstMasterRaw = outPath.FlowMeter.LtrPerPulse; /// Uncorrected master flowmeter coefficient tstRslt.ConstMasterCorr = outPath.FlowMeter.LtrPerPulseCorrected(tstRslt.FlowVolume, rangeIx); /// Corrected master pulses per liter diff --git a/TBF/BenchControl/TestMethods/FlyingStartTankCollection/FlyingStartTankCollectionSeq.cs b/TBF/BenchControl/TestMethods/FlyingStartTankCollection/FlyingStartTankCollectionSeq.cs index 86c19d696..98fc11899 100644 --- a/TBF/BenchControl/TestMethods/FlyingStartTankCollection/FlyingStartTankCollectionSeq.cs +++ b/TBF/BenchControl/TestMethods/FlyingStartTankCollection/FlyingStartTankCollectionSeq.cs @@ -486,7 +486,6 @@ namespace TBF.BenchControl.TestMethods.FlyingStartTankCollection tstRslt.FlowMass = 0; tstRslt.FlowVolume = 3.6 * LtrPerRefPulse * tstRslt.PulsesMaster / tstRslt.TestTime; /// [m3/h] tstRslt.Buoyancy = 0; - double density = Config.Formulas.WaterDensityFromTemp((tstRslt.TempUpMean + tstRslt.TempDownMean) / 2.0, Program.LocalSettings.RealDensity, Program.LocalSettings.AtTemperature); tstRslt.VolumeCTV = volumeBox.Val; /// [l] tstRslt.VolumeMaster = LtrPerRefPulse * tstRslt.PulsesMaster; /// [l] volume from the master flow meter tstRslt.ConstMasterRaw = outPath.FlowMeter.LtrPerPulse; /// Uncorrected master flowmeter coefficient diff --git a/TBF/Properties/AssemblyInfo.cs b/TBF/Properties/AssemblyInfo.cs index 4741e3374..7ae1f41ba 100644 --- a/TBF/Properties/AssemblyInfo.cs +++ b/TBF/Properties/AssemblyInfo.cs @@ -29,5 +29,5 @@ using System.Runtime.InteropServices; // Build Number // Revision // -[assembly: AssemblyVersion("2.18.1052.0")] -[assembly: AssemblyFileVersion("2.18.1052.0")] +[assembly: AssemblyVersion("2.18.1053.0")] +[assembly: AssemblyFileVersion("2.18.1053.0")] diff --git a/TBF/Screens/ProcessTabPageCtrl24.cs b/TBF/Screens/ProcessTabPageCtrl24.cs index efd81aa01..7f06173c8 100644 --- a/TBF/Screens/ProcessTabPageCtrl24.cs +++ b/TBF/Screens/ProcessTabPageCtrl24.cs @@ -453,8 +453,11 @@ namespace TBF.Screens double massDiff = ProcessData.Mass.Val - ProcessData.StartMass.Val; massDiffLabel.Text = massDiff.ToString("F3"); - double volumeCtv = 1000.0 * Config.Formulas.Buoyancy() * massDiff / Config.Formulas.WaterDensityFromTemp((ProcessData.TempUp.Val + ProcessData.TempDown.Val) / 2, Program.LocalSettings.RealDensity, Program.LocalSettings.AtTemperature); - volumeCtvLabel.Text = volumeCtv.ToString("F2"); + double volumeCtv = 1000 * Config.Formulas.Buoyancy() * massDiff / Config.Formulas.WaterDensityFromTempPress((ProcessData.TempUp.Val + ProcessData.TempDown.Val) / 2, + (ProcessData.PressUp.Val + ProcessData.PressDown.Val) / 2, + Program.LocalSettings.RealDensity, + Program.LocalSettings.AtTemperature); /// [kg/m3] + volumeCtvLabel.Text = volumeCtv.ToString("F2"); double refError = Config.Formulas.ErrorFromVolumes(refVolume, volumeCtv); refErrorLabel.Text = refError.ToString("F3"); diff --git a/TBF/Screens/ProcessTabPageCtrl48.cs b/TBF/Screens/ProcessTabPageCtrl48.cs index a26336840..963fb8b4d 100644 --- a/TBF/Screens/ProcessTabPageCtrl48.cs +++ b/TBF/Screens/ProcessTabPageCtrl48.cs @@ -482,8 +482,11 @@ namespace TBF.Screens double massDiff = ProcessData.Mass.Val - ProcessData.StartMass.Val; massDiffLabel.Text = massDiff.ToString("F3"); - double volumeCtv = 1000.0 * Config.Formulas.Buoyancy() * massDiff / (float)Config.Formulas.WaterDensityFromTemp((ProcessData.TempUp.Val + ProcessData.TempDown.Val) / 2, Program.LocalSettings.RealDensity, Program.LocalSettings.AtTemperature); - volumeCtvLabel.Text = volumeCtv.ToString("F2"); + double volumeCtv = 1000 * Config.Formulas.Buoyancy() * massDiff / Config.Formulas.WaterDensityFromTempPress((ProcessData.TempUp.Val + ProcessData.TempDown.Val) / 2, + (ProcessData.PressUp.Val + ProcessData.PressDown.Val) / 2, + Program.LocalSettings.RealDensity, + Program.LocalSettings.AtTemperature); /// [kg/m3] + volumeCtvLabel.Text = volumeCtv.ToString("F2"); double refError = Config.Formulas.ErrorFromVolumes(refVolume, volumeCtv); refErrorLabel.Text = refError.ToString("F3"); diff --git a/TBF/Screens/ProcessTabPageCtrl6.cs b/TBF/Screens/ProcessTabPageCtrl6.cs index d20a9dae5..eaaa540f6 100644 --- a/TBF/Screens/ProcessTabPageCtrl6.cs +++ b/TBF/Screens/ProcessTabPageCtrl6.cs @@ -486,8 +486,11 @@ namespace TBF.Screens double massDiff = ProcessData.Mass.Val - ProcessData.StartMass.Val; massDiffLabel.Text = massDiff.ToString("F3"); - double volumeCtv = 1000.0 * Config.Formulas.Buoyancy() * massDiff / (float)Config.Formulas.WaterDensityFromTemp((ProcessData.TempUp.Val + ProcessData.TempDown.Val) / 2, Program.LocalSettings.RealDensity, Program.LocalSettings.AtTemperature); - volumeCtvLabel.Text = volumeCtv.ToString("F2"); + double volumeCtv = 1000 * Config.Formulas.Buoyancy() * massDiff / Config.Formulas.WaterDensityFromTempPress((ProcessData.TempUp.Val + ProcessData.TempDown.Val) / 2, + (ProcessData.PressUp.Val + ProcessData.PressDown.Val) / 2, + Program.LocalSettings.RealDensity, + Program.LocalSettings.AtTemperature); /// [kg/m3] + volumeCtvLabel.Text = volumeCtv.ToString("F2"); double refError = Config.Formulas.ErrorFromVolumes(refVolume, volumeCtv); refErrorLabel.Text = refError.ToString("F3");