/// <summary> /// Given three of the four current channels, calculates the /// missing channel based on the relationship IR = IA + IB + IC. /// </summary> private void CalculateMissingCurrentChannel() { Meter meter; DataSeries missingSeries; // If the data group does not have exactly 3 channels, // then there is no missing channel or there is not // enough data to calculate the missing channel if (DefinedCurrents != 3) { return; } // Get the meter associated with the channels in this data group meter = (IA ?? IB).SeriesInfo.Channel.Meter; if (m_iaIndex == -1) { // Calculate IA = IR - IB - IC missingSeries = IR.Add(IB.Negate()).Add(IC.Negate()); missingSeries.SeriesInfo = GetSeriesInfo(meter, m_dataGroup, "Current", "AN", IR.SeriesInfo.Channel.AssetID); missingSeries.Calculated = true; m_iaIndex = m_dataGroup.DataSeries.Count; m_dataGroup.Add(missingSeries); } else if (m_ibIndex == -1) { // Calculate IB = IR - IA - IC missingSeries = IR.Add(IA.Negate()).Add(IC.Negate()); missingSeries.SeriesInfo = GetSeriesInfo(meter, m_dataGroup, "Current", "BN", IR.SeriesInfo.Channel.AssetID); missingSeries.Calculated = true; m_ibIndex = m_dataGroup.DataSeries.Count; m_dataGroup.Add(missingSeries); } else if (m_icIndex == -1) { // Calculate IC = IR - IA - IB missingSeries = IR.Add(IA.Negate()).Add(IB.Negate()); missingSeries.SeriesInfo = GetSeriesInfo(meter, m_dataGroup, "Current", "CN", IR.SeriesInfo.Channel.AssetID); missingSeries.Calculated = true; m_icIndex = m_dataGroup.DataSeries.Count; m_dataGroup.Add(missingSeries); } else { // Calculate IR = IA + IB + IC missingSeries = IA.Add(IB).Add(IC); missingSeries.SeriesInfo = GetSeriesInfo(meter, m_dataGroup, "Current", "RES", IA.SeriesInfo.Channel.AssetID); missingSeries.Calculated = true; m_irIndex = m_dataGroup.DataSeries.Count; m_dataGroup.Add(missingSeries); } }
/// <summary> /// Given three of the four current channels, calculates the /// missing channel based on the relationship IR = IA + IB + IC. /// </summary> /// <param name="meterInfo">Data context for accessing configuration tables in the database.</param> public DataSeries CalculateMissingCurrentChannel(MeterInfoDataContext meterInfo) { Meter meter; DataSeries missingSeries; // If the data group does not have exactly 3 channels, // then there is no missing channel or there is not // enough data to calculate the missing channel if (DefinedCurrents != 3) { return(null); } // Get the meter associated with the channels in this data group meter = (IA ?? IB).SeriesInfo.Channel.Meter; if (m_iaIndex == -1) { // Calculate IA = IR - IB - IC missingSeries = IR.Add(IB.Negate()).Add(IC.Negate()); missingSeries.SeriesInfo = GetSeriesInfo(meterInfo, meter, m_dataGroup, "Current", "General1"); m_iaIndex = m_dataGroup.DataSeries.Count; m_dataGroup.Add(missingSeries); } else if (m_ibIndex == -1) { // Calculate IB = IR - IA - IC missingSeries = IR.Add(IA.Negate()).Add(IC.Negate()); missingSeries.SeriesInfo = GetSeriesInfo(meterInfo, meter, m_dataGroup, "Current", "General2"); m_ibIndex = m_dataGroup.DataSeries.Count; m_dataGroup.Add(missingSeries); } else if (m_icIndex == -1) { // Calculate IC = IR - IA - IB missingSeries = IR.Add(IA.Negate()).Add(IB.Negate()); missingSeries.SeriesInfo = GetSeriesInfo(meterInfo, meter, m_dataGroup, "Current", "General3"); m_icIndex = m_dataGroup.DataSeries.Count; m_dataGroup.Add(missingSeries); } else { // Calculate IR = IA + IB + IC missingSeries = IA.Add(IB).Add(IC); missingSeries.SeriesInfo = GetSeriesInfo(meterInfo, meter, m_dataGroup, "Current", "RES"); m_irIndex = m_dataGroup.DataSeries.Count; m_dataGroup.Add(missingSeries); } return(missingSeries); }
static int Test(IC n) { IA a = (IA)n; if (a.Add(0) != 5) { return(1); } if (((IA)n).Add(0) != 5) { return(1); } if (((IB)n).Add(0) != 6) { return(1); } return(0); }