예제 #1
0
        private void CalculateMaximumData()
        {
            if (maxData > 0f)
            {
                return;
            }

            List <ITestFlightReliability> reliabilityModules = TestFlightUtil.GetReliabilityModules(this.part, Alias);

            if (reliabilityModules == null)
            {
                return;
            }

            if (reliabilityModules.Count < 1)
            {
                return;
            }

            for (int i = 0, reliabilityModulesCount = reliabilityModules.Count; i < reliabilityModulesCount; i++)
            {
                ITestFlightReliability rm    = reliabilityModules[i];
                FloatCurve             curve = rm.GetReliabilityCurve();
                if (curve != null)
                {
                    if (curve.maxTime > maxData)
                    {
                        maxData = curve.maxTime;
                    }
                }
            }
        }
예제 #2
0
        // Get the base or static failure rate
        public double GetBaseFailureRate()
        {
            if (baseFailureRate > 0)
            {
                Log("Returning cached failure rate");
                return(baseFailureRate);
            }

            double totalBFR = 0f;
            List <ITestFlightReliability> reliabilityModules = TestFlightUtil.GetReliabilityModules(this.part, Alias);

            if (reliabilityModules == null)
            {
                Log("Unable to locate any reliability modules.  Using min failure rate");
                return(TestFlightUtil.MIN_FAILURE_RATE);
            }

            for (int i = 0, reliabilityModulesCount = reliabilityModules.Count; i < reliabilityModulesCount; i++)
            {
                ITestFlightReliability rm = reliabilityModules[i];
                totalBFR += rm.GetBaseFailureRate(initialFlightData);
            }
            Log(String.Format("BFR: {0:F7}, Modifier: {1:F7}", totalBFR, failureRateModifier));
            totalBFR        = totalBFR * failureRateModifier;
            totalBFR        = Math.Max(totalBFR, TestFlightUtil.MIN_FAILURE_RATE);
            baseFailureRate = totalBFR;
            return(baseFailureRate);
        }
예제 #3
0
        private void CalculateMaximumData()
        {
            if (maxData > 0f)
            {
                return;
            }

            List <ITestFlightReliability> reliabilityModules = TestFlightUtil.GetReliabilityModules(this.part, Alias);

            if (reliabilityModules == null)
            {
                return;
            }

            if (reliabilityModules.Count < 1)
            {
                return;
            }

            foreach (ITestFlightReliability rm in reliabilityModules)
            {
                FloatCurve curve = rm.GetReliabilityCurve();
                if (curve != null)
                {
                    if (curve.maxTime > maxData)
                    {
                        maxData = curve.maxTime;
                    }
                }
            }
        }
예제 #4
0
        public List <string> GetTestFlightInfo()
        {
            List <string> infoStrings = new List <string>();
            string        partName    = Alias;

            infoStrings.Add("<b>Core</b>");
            infoStrings.Add("<b>Active Part</b>: " + partName);
            float flightData = TestFlightManagerScenario.Instance.GetFlightDataForPartName(partName);

            if (flightData < 0f)
            {
                flightData = 0f;
            }
            infoStrings.Add(String.Format("<b>Flight Data</b>: {0:f2}/{1:f2}", flightData, maxData));

            List <ITestFlightReliability> reliabilityModules = TestFlightUtil.GetReliabilityModules(this.part, Alias);

            if (reliabilityModules != null)
            {
                for (int i = 0, reliabilityModulesCount = reliabilityModules.Count; i < reliabilityModulesCount; i++)
                {
                    ITestFlightReliability reliabilityModule = reliabilityModules[i];
                    infoStrings.AddRange(reliabilityModule.GetTestFlightInfo());
                }
            }
            return(infoStrings);
        }
예제 #5
0
        public List <string> GetTestFlightInfo()
        {
            List <string> infoStrings = new List <string>();
            string        partName    = Alias;

            infoStrings.Add("<b>Core</b>");
            infoStrings.Add("<b>Active Part</b>: " + partName);
            float flightData = TestFlightManagerScenario.Instance.GetFlightDataForPartName(partName);

            if (flightData < 0f)
            {
                flightData = 0f;
            }
            infoStrings.Add(String.Format("<b>Flight Data</b>: {0:f2}/{1:f2}", flightData, maxData));

            List <ITestFlightReliability> reliabilityModules = TestFlightUtil.GetReliabilityModules(this.part, Alias);

            if (reliabilityModules != null)
            {
                Log("Getting info from reliability modules");
                foreach (ITestFlightReliability reliabilityModule in reliabilityModules)
                {
                    infoStrings.AddRange(reliabilityModule.GetTestFlightInfo());
                }
            }
            return(infoStrings);
        }
예제 #6
0
        public double GetBaseFailureRateForScope(String scope)
        {
            // Since the Base Failure Rate does not change during the lifetime of a part
            // we cache that data internally so as to not have to call the Reliability module
            // constantly.  Therefore here we are returning what we have if we have it,
            // or else getting it from the Reliability module and caching that for next time.
            scope = scope.ToLower().Trim();
//            LogFormatted_DebugOnly(String.Format("TestFlightCore: GetBaseFailureRateForScope({0})",scope));
            if (baseFailureRate == null)
            {
//                LogFormatted_DebugOnly("BaseFailureRate data is invalid");
                return(TestFlightUtil.MIN_FAILURE_RATE);
            }
            if (baseFlightData == null)
            {
//                LogFormatted_DebugOnly("baseFlightData is invalid");
                return(TestFlightUtil.MIN_FAILURE_RATE);
            }
            if (baseFailureRate.ContainsKey(scope))
            {
//                LogFormatted_DebugOnly("TestFlightCore: Returning cached Base Failure Rate");
                return(baseFailureRate[scope]);
            }
            else
            {
//                LogFormatted_DebugOnly("TestFlightCore: Calculating Base Failure Rate from Reliability modules");
                double         totalBFR = 0;
                double         data     = 0;
                FlightDataBody body     = baseFlightData.GetFlightData(scope);
                if (body != null)
                {
                    data = body.flightData;
                }

                List <ITestFlightReliability> reliabilityModules = TestFlightUtil.GetReliabilityModules(this.part);
                if (reliabilityModules == null)
                {
                    return(TestFlightUtil.MIN_FAILURE_RATE);
                }

                foreach (ITestFlightReliability rm in reliabilityModules)
                {
                    totalBFR += rm.GetBaseFailureRateForScope(data, scope);
                }
                totalBFR = Mathf.Max((float)totalBFR, (float)TestFlightUtil.MIN_FAILURE_RATE);
                baseFailureRate.Add(scope, totalBFR);
                return(totalBFR);
            }
        }
예제 #7
0
        public override string GetInfo()
        {
            // This methods collects data from all the TestFlight modules and combines it into one string
            List <string> infoStrings = new List <string>();

            List <ITestFlightReliability> reliabilityModules = TestFlightUtil.GetReliabilityModules(this.part, Alias, false);

            if (reliabilityModules != null)
            {
                for (int i = 0, reliabilityModulesCount = reliabilityModules.Count; i < reliabilityModulesCount; i++)
                {
                    ITestFlightReliability reliabilityModule = reliabilityModules[i];
                    var s = reliabilityModule.GetModuleInfo();
                    if (!string.IsNullOrEmpty(s))
                    {
                        infoStrings.Add(s);
                    }
                }
            }

            List <ITestFlightFailure> failureModules = TestFlightUtil.GetFailureModules(this.part, Alias, false);

            if (failureModules != null)
            {
                for (int i = 0, failureModulesCount = failureModules.Count; i < failureModulesCount; i++)
                {
                    ITestFlightFailure failureModule = failureModules[i];
                    var s = failureModule.GetModuleInfo();
                    if (!string.IsNullOrEmpty(s))
                    {
                        infoStrings.Add(s);
                    }
                }
            }

            if (infoStrings.Count > 0)
            {
                return(string.Join("\n", infoStrings.ToArray()));
            }

            return(base.GetInfo());
        }
예제 #8
0
        // Get the Reliability Curve for the part
        public FloatCurve GetBaseReliabilityCurve()
        {
            FloatCurve curve;

            List <ITestFlightReliability> reliabilityModules = TestFlightUtil.GetReliabilityModules(this.part, Alias);

            if (reliabilityModules == null)
            {
                return(null);
            }

            foreach (ITestFlightReliability rm in reliabilityModules)
            {
                curve = rm.GetReliabilityCurve();
                if (curve != null)
                {
                    return(curve);
                }
            }

            return(null);
        }
예제 #9
0
        public FloatCurve GetBaseReliabilityCurveForScope(String scope)
        {
            scope = scope.ToLower().Trim();
            FloatCurve curve;

            List <ITestFlightReliability> reliabilityModules = TestFlightUtil.GetReliabilityModules(this.part);

            if (reliabilityModules == null)
            {
                return(null);
            }

            foreach (ITestFlightReliability rm in reliabilityModules)
            {
                curve = rm.GetReliabilityCurveForScope(scope);
                if (curve != null)
                {
                    return(curve);
                }
            }

            return(null);
        }
예제 #10
0
        // Get the Reliability Curve for the part
        public FloatCurve GetBaseReliabilityCurve()
        {
            FloatCurve curve;

            List <ITestFlightReliability> reliabilityModules = TestFlightUtil.GetReliabilityModules(this.part, Alias);

            if (reliabilityModules == null)
            {
                return(null);
            }

            for (int i = 0, reliabilityModulesCount = reliabilityModules.Count; i < reliabilityModulesCount; i++)
            {
                ITestFlightReliability rm = reliabilityModules[i];
                curve = rm.GetReliabilityCurve();
                if (curve == null)
                {
                    continue;
                }
                return(curve);
            }

            return(null);
        }
예제 #11
0
        // Get the base or static failure rate
        public double GetBaseFailureRate()
        {
            if (baseFailureRate != 0)
            {
                return(baseFailureRate);
            }

            double totalBFR = 0f;
            List <ITestFlightReliability> reliabilityModules = TestFlightUtil.GetReliabilityModules(this.part);

            if (reliabilityModules == null)
            {
                return(TestFlightUtil.MIN_FAILURE_RATE);
            }

            foreach (ITestFlightReliability rm in reliabilityModules)
            {
                totalBFR += rm.GetBaseFailureRate(initialFlightData);
            }
            totalBFR        = totalBFR * failureRateModifier;
            totalBFR        = Math.Max(totalBFR, TestFlightUtil.MIN_FAILURE_RATE);
            baseFailureRate = totalBFR;
            return(baseFailureRate);
        }
예제 #12
0
 // Get all Reliability Modules that are bound to a given alias
 public static List <ITestFlightReliability> GetReliabilityModules(Part part, string alias)
 {
     return(TestFlightUtil.GetReliabilityModules(part, alias));
 }