private void MapIndexes() { m_iaIndex = -1; m_ibIndex = -1; m_icIndex = -1; m_irIndex = -1; List <int> vaIndices = new List <int>(); List <int> vbIndices = new List <int>(); List <int> vcIndices = new List <int>(); List <int> vabIndices = new List <int>(); List <int> vbcIndices = new List <int>(); List <int> vcaIndices = new List <int>(); for (int i = 0; i < m_cycleDataGroups.Count; i++) { if (isVoltage("AN", m_cycleDataGroups[i])) { vaIndices.Add(i); } else if (isVoltage("BN", m_cycleDataGroups[i])) { vbIndices.Add(i); } else if (isVoltage("CN", m_cycleDataGroups[i])) { vcIndices.Add(i); } else if (isVoltage("AB", m_cycleDataGroups[i])) { vabIndices.Add(i); } else if (isVoltage("BC", m_cycleDataGroups[i])) { vbcIndices.Add(i); } else if (isVoltage("CA", m_cycleDataGroups[i])) { vcaIndices.Add(i); } } //Walk through all Va and try to get corresponding Vb and Vc... List <int?> ProcessedIndices = new List <int?>(); foreach (int?VaIndex in vaIndices) { int assetID = m_cycleDataGroups[(int)VaIndex].Asset.ID; int VbIndex = vbIndices.Cast <int?>().FirstOrDefault(i => m_cycleDataGroups[(int)i].Asset.ID == assetID && !ProcessedIndices.Contains(i)) ?? -1; int VcIndex = vcIndices.Cast <int?>().FirstOrDefault(i => m_cycleDataGroups[(int)i].Asset.ID == assetID && !ProcessedIndices.Contains(i)) ?? -1; int VabIndex = vabIndices.Cast <int?>().FirstOrDefault(i => m_cycleDataGroups[(int)i].Asset.ID == assetID && !ProcessedIndices.Contains(i)) ?? -1; int VbcIndex = vbcIndices.Cast <int?>().FirstOrDefault(i => m_cycleDataGroups[(int)i].Asset.ID == assetID && !ProcessedIndices.Contains(i)) ?? -1; int VcaIndex = vcaIndices.Cast <int?>().FirstOrDefault(i => m_cycleDataGroups[(int)i].Asset.ID == assetID && !ProcessedIndices.Contains(i)) ?? -1; VIndices set = new VIndices(); ProcessedIndices.Add(VaIndex); set.Va = (int)VaIndex; if (VbIndex > -1) { ProcessedIndices.Add(VbIndex); set.Vb = VbIndex; } if (VcIndex > -1) { ProcessedIndices.Add(VcIndex); set.Vc = VcIndex; } if (VabIndex > -1) { ProcessedIndices.Add(VabIndex); set.Vab = VabIndex; } if (VbcIndex > -1) { ProcessedIndices.Add(VbcIndex); set.Vbc = VbcIndex; } if (VcaIndex > -1) { ProcessedIndices.Add(VcaIndex); set.Vca = VcaIndex; } if (assetID == m_asset.ID) { set.distance = 0; } else { set.distance = m_asset.DistanceToAsset(assetID); } m_vIndices.Add(set); } for (int i = 0; i < m_cycleDataGroups.Count; i++) { string measurementType = m_cycleDataGroups[i].RMS.SeriesInfo.Channel.MeasurementType.Name; string phase = m_cycleDataGroups[i].RMS.SeriesInfo.Channel.Phase.Name; if (measurementType == "Current" && phase == "AN") { m_iaIndex = i; } else if (measurementType == "Current" && phase == "BN") { m_ibIndex = i; } else if (measurementType == "Current" && phase == "CN") { m_icIndex = i; } else if (measurementType == "Current" && phase == "RES") { m_irIndex = i; } } }
public VIDataGroup(DataGroup dataGroup) { // Initialize each of // the indexes to -1 m_vIndices = new List <VIndices>(); m_iaIndex = -1; m_ibIndex = -1; m_icIndex = -1; m_irIndex = -1; // Initialize the data group m_dataGroup = new DataGroup(dataGroup.DataSeries, dataGroup.Asset); // List of Indices matching channel type List <int> vaIndices = new List <int>(); List <int> vbIndices = new List <int>(); List <int> vcIndices = new List <int>(); List <int> vabIndices = new List <int>(); List <int> vbcIndices = new List <int>(); List <int> vcaIndices = new List <int>(); List <int> iaIndices = new List <int>(); List <int> ibIndices = new List <int>(); List <int> icIndices = new List <int>(); List <int> iresIndices = new List <int>(); for (int i = 0; i < dataGroup.DataSeries.Count; i++) { if (isVoltage("AN", dataGroup[i])) { vaIndices.Add(i); } else if (isVoltage("BN", dataGroup[i])) { vbIndices.Add(i); } else if (isVoltage("CN", dataGroup[i])) { vcIndices.Add(i); } else if (isVoltage("AB", dataGroup[i])) { vabIndices.Add(i); } else if (isVoltage("BC", dataGroup[i])) { vbcIndices.Add(i); } else if (isVoltage("CA", dataGroup[i])) { vcaIndices.Add(i); } else if (isCurrent("AN", dataGroup[i])) { iaIndices.Add(i); } else if (isCurrent("BN", dataGroup[i])) { ibIndices.Add(i); } else if (isCurrent("CN", dataGroup[i])) { icIndices.Add(i); } else if (isCurrent("RES", dataGroup[i])) { iresIndices.Add(i); } } //Walk through all Va and try to get corresponding Vb and Vc... List <int?> ProcessedIndices = new List <int?>(); foreach (int?VaIndex in vaIndices) { int assetID = dataGroup[(int)VaIndex].SeriesInfo.Channel.AssetID; int VbIndex = vbIndices.Cast <int?>().FirstOrDefault(i => dataGroup[(int)i].SeriesInfo.Channel.AssetID == assetID && !ProcessedIndices.Contains(i)) ?? -1; int VcIndex = vcIndices.Cast <int?>().FirstOrDefault(i => dataGroup[(int)i].SeriesInfo.Channel.AssetID == assetID && !ProcessedIndices.Contains(i)) ?? -1; int VabIndex = vabIndices.Cast <int?>().FirstOrDefault(i => dataGroup[(int)i].SeriesInfo.Channel.AssetID == assetID && !ProcessedIndices.Contains(i)) ?? -1; int VbcIndex = vbcIndices.Cast <int?>().FirstOrDefault(i => dataGroup[(int)i].SeriesInfo.Channel.AssetID == assetID && !ProcessedIndices.Contains(i)) ?? -1; int VcaIndex = vcaIndices.Cast <int?>().FirstOrDefault(i => dataGroup[(int)i].SeriesInfo.Channel.AssetID == assetID && !ProcessedIndices.Contains(i)) ?? -1; VIndices set = new VIndices(); ProcessedIndices.Add(VaIndex); set.Va = (int)VaIndex; if (VbIndex > -1) { ProcessedIndices.Add(VbIndex); set.Vb = VbIndex; } if (VcIndex > -1) { ProcessedIndices.Add(VcIndex); set.Vc = VcIndex; } if (VabIndex > -1) { ProcessedIndices.Add(VabIndex); set.Vab = VabIndex; } if (VbcIndex > -1) { ProcessedIndices.Add(VbcIndex); set.Vbc = VbcIndex; } if (VcaIndex > -1) { ProcessedIndices.Add(VcaIndex); set.Vca = VcaIndex; } if (assetID == dataGroup.Asset.ID) { set.distance = 0; } else { set.distance = dataGroup.Asset.DistanceToAsset(assetID); } m_vIndices.Add(set); } // Start by matching //Check if a voltage and current channnel exist on this asset if (iaIndices.Where(i => dataGroup[i].SeriesInfo.Channel.AssetID == dataGroup.Asset.ID).Count() > 0) { m_iaIndex = iaIndices.Where(i => dataGroup[i].SeriesInfo.Channel.AssetID == dataGroup.Asset.ID).First(); } if (ibIndices.Where(i => dataGroup[i].SeriesInfo.Channel.AssetID == dataGroup.Asset.ID).Count() > 0) { m_ibIndex = ibIndices.Where(i => dataGroup[i].SeriesInfo.Channel.AssetID == dataGroup.Asset.ID).First(); } if (icIndices.Where(i => dataGroup[i].SeriesInfo.Channel.AssetID == dataGroup.Asset.ID).Count() > 0) { m_icIndex = icIndices.Where(i => dataGroup[i].SeriesInfo.Channel.AssetID == dataGroup.Asset.ID).First(); } if (iresIndices.Where(i => dataGroup[i].SeriesInfo.Channel.AssetID == dataGroup.Asset.ID).Count() > 0) { m_irIndex = iresIndices.Where(i => dataGroup[i].SeriesInfo.Channel.AssetID == dataGroup.Asset.ID).First(); } // use one of the connected Assets List <int> connectedAssets = dataGroup.Asset.ConnectedAssets.Select(item => item.ID).ToList(); if (m_iaIndex == -1 && iaIndices.Where(i => connectedAssets.Contains(dataGroup[i].SeriesInfo.Channel.AssetID)).Count() > 0) { m_iaIndex = iaIndices.Where(i => connectedAssets.Contains(dataGroup[i].SeriesInfo.Channel.AssetID)).First(); } if (m_ibIndex == -1 && ibIndices.Where(i => connectedAssets.Contains(dataGroup[i].SeriesInfo.Channel.AssetID)).Count() > 0) { m_ibIndex = ibIndices.Where(i => connectedAssets.Contains(dataGroup[i].SeriesInfo.Channel.AssetID)).First(); } if (m_icIndex == -1 && icIndices.Where(i => connectedAssets.Contains(dataGroup[i].SeriesInfo.Channel.AssetID)).Count() > 0) { m_icIndex = icIndices.Where(i => connectedAssets.Contains(dataGroup[i].SeriesInfo.Channel.AssetID)).First(); } if (m_irIndex == -1 && iresIndices.Where(i => connectedAssets.Contains(dataGroup[i].SeriesInfo.Channel.AssetID)).Count() > 0) { m_irIndex = iresIndices.Where(i => connectedAssets.Contains(dataGroup[i].SeriesInfo.Channel.AssetID)).First(); } if (m_iaIndex == -1 && iaIndices.Count() > 0) { m_iaIndex = iaIndices.First(); } if (m_ibIndex == -1 && ibIndices.Count() > 0) { m_ibIndex = ibIndices.First(); } if (m_ibIndex == -1 && ibIndices.Count() > 0) { m_ibIndex = icIndices.First(); } if (m_irIndex == -1 && iresIndices.Count() > 0) { m_irIndex = iresIndices.First(); } if (m_vIndices.Count() == 0) { m_vIndices.Add(new VIndices()); } CalculateMissingCurrentChannel(); CalculateMissingLLVoltageChannels(); //sort by all available Channels and number of Hops to actual Asset m_vIndices.Sort((a, b) => { if (b.allVoltagesDefined && !a.allVoltagesDefined) { return(1); } if (a.allVoltagesDefined && !b.allVoltagesDefined) { return(-1); } return(a.distance.CompareTo(b.distance)); }); }