Пример #1
0
        public double Classify(Patient patient, PatientVisitData visitData)
        {
            var enumerable = RuntimeClassificationModel
                             .Properties
                             .Select(p => p.Scaler[Convert.ToDouble(PatientPropertyProvider.GetPropertyValue(p.Name, patient, visitData))] * p.ModelCoefficient)
                             .ToList();

            var intermediateResult = enumerable.Sum() + RuntimeClassificationModel.FreeCoefficient;

            return(Math.Exp(intermediateResult) / (1 + Math.Exp(intermediateResult)));
        }
        private static object CurrentObject(ref string propertyName, Patient patient, PatientVisitData visitData)
        {
            object currentObject;

            if (propertyName.StartsWith(PatientVisitDataPrefix))
            {
                currentObject = visitData;
                propertyName  = propertyName.Substring(PatientVisitDataPrefix.Length);
            }
            else
            {
                currentObject = patient;
            }
            return(currentObject);
        }
        public static object GetPropertyValue(string propertyName, Patient patient, PatientVisitData visitData)
        {
            var currentObject = CurrentObject(ref propertyName, patient, visitData);

            foreach (var propertyNamePart in propertyName.Split('.'))
            {
                var type         = currentObject.GetType();
                var propertyInfo = type.GetProperty(propertyNamePart);
                if (propertyInfo == null)
                {
                    throw new InvalidOperationException($"Property '{propertyNamePart}' not found");
                }

                currentObject = propertyInfo.GetValue(currentObject);
            }

            return(currentObject);
        }
        public static void UpdatePatientByProperty(string propertyName, Patient patient, PatientVisitData visitData, object value)
        {
            var currentObject = CurrentObject(ref propertyName, patient, visitData);
            var pathStrings   = propertyName.Split('.');

            for (var i = 0; i < pathStrings.Length - 1; i++)
            {
                var propertyNamePart = pathStrings[i];
                var type             = currentObject.GetType();
                var propertyInfo     = type.GetProperty(propertyNamePart);
                if (propertyInfo == null)
                {
                    throw new InvalidOperationException($"Property '{propertyNamePart}' not found");
                }

                currentObject = propertyInfo.GetValue(currentObject);
            }

            var propertyInfoLast = currentObject.GetType().GetProperty(pathStrings[pathStrings.Length - 1]);

            if (propertyInfoLast == null)
            {
                throw new InvalidOperationException($"Property '{propertyName}' not found");
            }
            propertyInfoLast.SetValue(currentObject, Convert(value, propertyInfoLast.PropertyType));
        }
Пример #5
0
        public static Patient ReadPatientFromDictionary(IDictionary <string, string> patientProperties)
        {
            var patient = new Patient();
            PatientVisitData patientVisitData = new PatientVisitData {
                Patient = patient
            };

            var ruCulture = new CultureInfo("RU-ru");

            patient.PatientVisitDataHistory.Add(patientVisitData);

            if (!String.IsNullOrEmpty(patientProperties["HDurability"]))
            {
                double duration = 0;
                try
                {
                    duration = Convert.ToDouble(patientProperties["HDurability"], ruCulture);
                }
                catch (Exception e)
                {
                }
                patient.TreatmentDuration = duration;
            }
            else
            {
                patient.TreatmentDuration = 0;
            }

            if (!String.IsNullOrEmpty(patientProperties["Hheredity"]))
            {
                var hHeredity = Convert.ToInt32(patientProperties["Hheredity"]);
                if (hHeredity == 3)
                {
                    patient.HypertensionAncestralAnamnesis = HypertensionAncestralAnamnesis.BothMotherAndFather;
                }
                else if (hHeredity == 2)
                {
                    patient.HypertensionAncestralAnamnesis = HypertensionAncestralAnamnesis.Father;
                }
                else if (hHeredity == 1)
                {
                    patient.HypertensionAncestralAnamnesis = HypertensionAncestralAnamnesis.Mother;
                }
                else
                {
                    patient.HypertensionAncestralAnamnesis = HypertensionAncestralAnamnesis.None;
                }
            }
            var nameParts = patientProperties["name"].Split(' ');

            patient.Name       = nameParts[1];
            patient.Surname    = nameParts[0];
            patient.MiddleName = nameParts[2];

            patient.BirthDate = DateTime.Today - TimeSpan.FromDays(Convert.ToInt32(patientProperties["age"]) * 365);

            patient.Gender = patientProperties["gender"].Contains("ж") ? GenderType.Female : GenderType.Male;
            if (!String.IsNullOrEmpty(patientProperties["AGT"]))
            {
                patient.Genes.Add(new Gene {
                    Name  = "AGT",
                    Value = Convert.ToInt32(patientProperties["AGT"])
                });
            }
            if (!String.IsNullOrEmpty(patientProperties["AGTR2"]))
            {
                patient.Genes.Add(new Gene
                {
                    Name  = "AGTR2",
                    Value = Convert.ToInt32(patientProperties["AGTR2"])
                });
            }
            if (!String.IsNullOrEmpty(patientProperties["MaleHeredity"]))
            {
                patient.MaleHeredity = Convert.ToBoolean(Convert.ToInt32(patientProperties["MaleHeredity"]));
            }
            if (!String.IsNullOrEmpty(patientProperties["FemaleHeredity"]))
            {
                patient.FemaleHeredity = Convert.ToBoolean(Convert.ToInt32(patientProperties["FemaleHeredity"]));
            }

            if (patientProperties["smoke"].Contains("1"))
            {
                patientVisitData.Smoking.Type = SmokingType.Never;
            }
            else if (patientProperties["smoke"].Contains("2"))
            {
                patientVisitData.Smoking.Type = SmokingType.InPast;
            }
            else
            {
                patientVisitData.Smoking.Type = SmokingType.Now;
            }
            if (patientProperties["HStage"].Contains("1"))
            {
                patientVisitData.HypertensionStage = HypertensionStage.Stage1;
            }
            if (patientProperties["HStage"].Contains("2"))
            {
                patientVisitData.HypertensionStage = HypertensionStage.Stage2;
            }
            if (patientProperties["HStage"].Contains("3"))
            {
                patientVisitData.HypertensionStage = HypertensionStage.Stage3;
            }
            if (patientProperties["HStage"].Contains("зд"))
            {
                patientVisitData.HypertensionStage = HypertensionStage.Healthy;
            }


            if (!String.IsNullOrEmpty(patientProperties["WaistCircumference"]))
            {
                patientVisitData.WaistCircumference = Convert.ToDouble(patientProperties["WaistCircumference"], ruCulture);
            }
            if (!String.IsNullOrEmpty(patientProperties["BMI"]))
            {
                patientVisitData.TemporaryBMI = Convert.ToDouble(patientProperties["BMI"], ruCulture);
            }
            if (patientProperties["HStage"].Contains("1"))
            {
                patientVisitData.HypertensionStage = HypertensionStage.Stage1;
            }
            else if (patientProperties["HStage"].Contains("2"))
            {
                patientVisitData.HypertensionStage = HypertensionStage.Stage2;
            }
            else if (patientProperties["HStage"].Contains("3"))
            {
                patientVisitData.HypertensionStage = HypertensionStage.Stage3;
            }
            else
            {
                patientVisitData.HypertensionStage = HypertensionStage.Healthy;
            }

            if (!String.IsNullOrEmpty(patientProperties["phiz"]))
            {
                var phiz = Convert.ToInt32(patientProperties["phiz"]);
                if (phiz == 4)
                {
                    patientVisitData.PhysicalActivity = PhysicalActivity.MoreThenTreeTimesPerWeek;
                }
                else if (phiz == 3)
                {
                    patientVisitData.PhysicalActivity = PhysicalActivity.FromOneToThreeTimesPerWeek;
                }
                else if (phiz == 2)
                {
                    patientVisitData.PhysicalActivity = PhysicalActivity.OncePerWeekOrLess;
                }
                else
                {
                    patientVisitData.PhysicalActivity = PhysicalActivity.Never;
                }
            }
            else
            {
            }
            return(patient);
        }