Пример #1
0
        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));
        }
Пример #2
0
        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);
        }
Пример #3
0
        /// <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));
            }
        }
Пример #4
0
        /// <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;
            }
        }
Пример #5
0
        /// <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));
            }
        }
Пример #6
0
        /// <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));
            }
        }
Пример #7
0
 private bool Equals(ThreeKeyIndex other)
 {
     return(windDirectionId == other.windDirectionId &&
            closingSituationId == other.closingSituationId &&
            illustrationPointId == other.illustrationPointId);
 }