private IllustrationPointTreeNode BuildSubMechanism(Tuple <int, WindDirection, int, string> windDirectionClosingSituation, int subMechanismId) { var dataKey = new ThreeKeyIndex(windDirectionClosingSituation.Item1, windDirectionClosingSituation.Item3, subMechanismId); var illustrationPointStochasts = new List <SubMechanismIllustrationPointStochast>(); var illustrationPointResults = new List <IllustrationPointResult>(); if (!subMechanismBetaValues.ContainsKey(dataKey)) { return(null); } double subMechanismIllustrationPointBeta = subMechanismBetaValues[dataKey]; if (subMechanismStochasts.ContainsKey(dataKey)) { AddRange(illustrationPointStochasts, subMechanismStochasts[dataKey]); } if (subMechanismResults.ContainsKey(dataKey)) { AddRange(illustrationPointResults, subMechanismResults[dataKey]); } string subMechanismIllustrationPointName = subMechanisms[subMechanismId]; var illustrationPoint = new SubMechanismIllustrationPoint(subMechanismIllustrationPointName, illustrationPointStochasts, illustrationPointResults, subMechanismIllustrationPointBeta); return(new IllustrationPointTreeNode(illustrationPoint)); }
private IllustrationPointTreeNode BuildFaultTree( Tuple <int, WindDirection, int, string> windDirectionClosingSituation, int faultTreeId, CombinationType combinationType, IEnumerable <Tuple <int?, int, Type, CombinationType> > results) { var dataKey = new ThreeKeyIndex(windDirectionClosingSituation.Item1, windDirectionClosingSituation.Item3, faultTreeId); var faultTreeIllustrationPointStochasts = new List <Stochast>(); if (!faultTreeBetaValues.ContainsKey(dataKey)) { return(null); } if (faultTreeStochasts.ContainsKey(dataKey)) { AddRange(faultTreeIllustrationPointStochasts, faultTreeStochasts[dataKey]); } var illustrationPoint = new FaultTreeIllustrationPoint(faultTrees[faultTreeId], faultTreeBetaValues[dataKey], faultTreeIllustrationPointStochasts, combinationType); var node = new IllustrationPointTreeNode(illustrationPoint); node.SetChildren(results.Where(r => r.Item1 == faultTreeId) .Select(child => child.Item3 == typeof(FaultTreeIllustrationPoint) ? BuildFaultTree(windDirectionClosingSituation, child.Item2, child.Item4, results) : BuildSubMechanism(windDirectionClosingSituation, child.Item2)).ToArray()); return(node); }
/// <summary> /// Parses <see cref="SubMechanismIllustrationPointStochast"/> objects from the <paramref name="reader"/>. /// </summary> /// <param name="reader">The database reader.</param> /// <exception cref="HydraRingFileParserException">Thrown when the read <see cref="IllustrationPointsDatabaseConstants.Duration"/>, /// <see cref="IllustrationPointsDatabaseConstants.AlphaValue"/>, or <see cref="IllustrationPointsDatabaseConstants.Realization"/> /// is <see cref="DBNull"/>.</exception> private void ParseSubMechanismAlphaValues(HydraRingDatabaseReader reader) { foreach (Dictionary <string, object> readSubMechanismAlphaValue in GetIterator(reader)) { int subMechanismId = Convert.ToInt32(readSubMechanismAlphaValue[IllustrationPointsDatabaseConstants.SubMechanismId]); int windDirectionId = Convert.ToInt32(readSubMechanismAlphaValue[IllustrationPointsDatabaseConstants.WindDirectionId]); int closingSituationid = Convert.ToInt32(readSubMechanismAlphaValue[IllustrationPointsDatabaseConstants.ClosingSituationId]); string name = Convert.ToString(readSubMechanismAlphaValue[IllustrationPointsDatabaseConstants.StochastName]); string unit = Convert.ToString(readSubMechanismAlphaValue[IllustrationPointsDatabaseConstants.IllustrationPointUnit]); double duration = ConvertToDouble(readSubMechanismAlphaValue[IllustrationPointsDatabaseConstants.Duration], IllustrationPointsDatabaseConstants.Duration); double alpha = ConvertToDouble(readSubMechanismAlphaValue[IllustrationPointsDatabaseConstants.AlphaValue], IllustrationPointsDatabaseConstants.AlphaValue); double realization = ConvertToDouble(readSubMechanismAlphaValue[IllustrationPointsDatabaseConstants.Realization], IllustrationPointsDatabaseConstants.Realization); var key = new ThreeKeyIndex(windDirectionId, closingSituationid, subMechanismId); if (!subMechanismStochasts.ContainsKey(key)) { subMechanismStochasts[key] = new List <SubMechanismIllustrationPointStochast>(); } subMechanismStochasts[key].Add(new SubMechanismIllustrationPointStochast(name, unit, duration, alpha, realization)); } }
/// <summary> /// Parses fault tree beta values from the <paramref name="reader"/>. /// </summary> /// <param name="reader">The database reader.</param> /// <exception cref="HydraRingFileParserException">Thrown when: /// <list type="bullet"> /// <item>The read <see cref="IllustrationPointsDatabaseConstants.BetaValue"/> is <see cref="DBNull"/>;</item> /// <item>Multiple values for beta of illustration point found.</item> /// </list> /// </exception> private void ParseFaultTreeBetaValues(HydraRingDatabaseReader reader) { foreach (Dictionary <string, object> readFaultTreeBetaValue in GetIterator(reader)) { int faultTreeId = Convert.ToInt32(readFaultTreeBetaValue[IllustrationPointsDatabaseConstants.FaultTreeId]); int windDirectionId = Convert.ToInt32(readFaultTreeBetaValue[IllustrationPointsDatabaseConstants.WindDirectionId]); int closingSituationid = Convert.ToInt32(readFaultTreeBetaValue[IllustrationPointsDatabaseConstants.ClosingSituationId]); double faultTreeBeta = ConvertToDouble(readFaultTreeBetaValue[IllustrationPointsDatabaseConstants.BetaValue], IllustrationPointsDatabaseConstants.BetaValue); var threeKeyIndex = new ThreeKeyIndex(windDirectionId, closingSituationid, faultTreeId); if (faultTreeBetaValues.ContainsKey(threeKeyIndex)) { throw new HydraRingFileParserException(Resources.IllustrationPointsParser_Parse_Multiple_values_for_beta_of_illustration_point_found); } faultTreeBetaValues[threeKeyIndex] = faultTreeBeta; } }
/// <summary> /// Parses <see cref="IllustrationPointResult"/> objects from the <paramref name="reader"/>. /// </summary> /// <param name="reader">The database reader.</param> /// <exception cref="HydraRingFileParserException">Thrown when the read <see cref="IllustrationPointsDatabaseConstants.IllustrationPointResultValue"/> /// is <see cref="DBNull"/>.</exception> private void ParseSubMechanismResults(HydraRingDatabaseReader reader) { foreach (Dictionary <string, object> readSubMechanismResult in GetIterator(reader)) { int subMechanismId = Convert.ToInt32(readSubMechanismResult[IllustrationPointsDatabaseConstants.SubMechanismId]); int windDirectionId = Convert.ToInt32(readSubMechanismResult[IllustrationPointsDatabaseConstants.WindDirectionId]); int closingSituationid = Convert.ToInt32(readSubMechanismResult[IllustrationPointsDatabaseConstants.ClosingSituationId]); string description = Convert.ToString(readSubMechanismResult[IllustrationPointsDatabaseConstants.IllustrationPointResultDescription]); string unit = Convert.ToString(readSubMechanismResult[IllustrationPointsDatabaseConstants.IllustrationPointUnit]); double value = ConvertToDouble(readSubMechanismResult[IllustrationPointsDatabaseConstants.IllustrationPointResultValue], IllustrationPointsDatabaseConstants.IllustrationPointResultValue); var key = new ThreeKeyIndex(windDirectionId, closingSituationid, subMechanismId); if (!subMechanismResults.ContainsKey(key)) { subMechanismResults[key] = new List <IllustrationPointResult>(); } subMechanismResults[key].Add(new IllustrationPointResult(description, unit, value)); } }
/// <summary> /// Parses <see cref="Stochast"/> objects from the <paramref name="reader"/>. /// </summary> /// <param name="reader">The database reader.</param> /// <exception cref="HydraRingFileParserException">Thrown when the read <see cref="IllustrationPointsDatabaseConstants.AlphaValue"/> /// or <see cref="IllustrationPointsDatabaseConstants.Duration"/> is <see cref="DBNull"/>.</exception> private void ParseFaultTreeAlphaValues(HydraRingDatabaseReader reader) { foreach (Dictionary <string, object> readFaultTreeAlphaValue in GetIterator(reader)) { int faultTreeId = Convert.ToInt32(readFaultTreeAlphaValue[IllustrationPointsDatabaseConstants.FaultTreeId]); int windDirectionId = Convert.ToInt32(readFaultTreeAlphaValue[IllustrationPointsDatabaseConstants.WindDirectionId]); int closingSituationid = Convert.ToInt32(readFaultTreeAlphaValue[IllustrationPointsDatabaseConstants.ClosingSituationId]); string name = Convert.ToString(readFaultTreeAlphaValue[IllustrationPointsDatabaseConstants.StochastName]); double duration = ConvertToDouble(readFaultTreeAlphaValue[IllustrationPointsDatabaseConstants.Duration], IllustrationPointsDatabaseConstants.Duration); double alpha = ConvertToDouble(readFaultTreeAlphaValue[IllustrationPointsDatabaseConstants.AlphaValue], IllustrationPointsDatabaseConstants.AlphaValue); var key = new ThreeKeyIndex(windDirectionId, closingSituationid, faultTreeId); if (!faultTreeStochasts.ContainsKey(key)) { faultTreeStochasts[key] = new List <Stochast>(); } faultTreeStochasts[key].Add(new Stochast(name, duration, alpha)); } }
private bool Equals(ThreeKeyIndex other) { return(windDirectionId == other.windDirectionId && closingSituationId == other.closingSituationId && illustrationPointId == other.illustrationPointId); }