Exemple #1
0
        private void Calculate_Params_in_EndBreath(StepOfAnalysis flag)
        {
            QRSRequested?.Invoke(this, EventArgs.Empty);
            Expiration  = spiroData.GetRange(indexOfPhase[2], spiroData.Count - indexOfPhase[2]);
            Inspiration = spiroData.GetRange(indexOfPhase[0], indexOfPhase[1] - indexOfPhase[0]);
            var basics = Basics.GetData(Expiration.Select(i => i.Flow.ParameterValue.Value).ToList(), Inspiration.Select(i => i.Flow.ParameterValue.Value).ToList(), C1_fromATPtoSTPD(), C2_fromBTPStoSTPD(), indexOfPhase[3] - indexOfPhase[0], _settingsPulmonary_Analysis.SampleTime, Logger);


            if (flag == StepOfAnalysis.TestInRest || flag == StepOfAnalysis.TestInForcedExpiration || flag == StepOfAnalysis.TestInMVV)
            {
                _testInRest.WriteData(Expiration.Select(i => i.Flow.ParameterValue.Value).ToList(), Inspiration.Select(i => i.Flow.ParameterValue.Value).ToList(), _settingsPulmonary_Analysis.SampleTime, basics, flag, Logger);
            }
            else if (flag == StepOfAnalysis.TestInWorkload)
            {
                try
                {
                    var bufferFET = 10;
                    var volume    = Volume.GetData(Expiration.Select(x => x.Flow.ParameterValue.Value).ToList(), Inspiration.Select(x => x.O2.ParameterValue.Value).ToList(), Expiration.Select(x => x.O2.ParameterValue.Value).ToList(), Expiration.Select(x => x.CO2.ParameterValue.Value).ToList(), _settingsPulmonary_Analysis.SampleTime, basics, bufferFET, Logger);

                    var coeff    = (Coefficient.Calculate(volume.VE.ParameterValue.Value, volume.VO2_ET.ParameterValue.Value, volume.VCO2_ET.ParameterValue.Value, basics.BF.ParameterValue.Value, _settingsPulmonary_Analysis.Person.Bodyweight, 0, _settingsPulmonary_Analysis.Vdm, Logger));
                    var pressure = (Pressure.GetData(Inspiration.Select(x => x.O2.ParameterValue.Value).ToList(), Expiration.Select(x => x.CO2.ParameterValue.Value).ToList(), Expiration.Select(x => x.O2.ParameterValue.Value).ToList(), volume.VO2_ET.ParameterValue.Value, volume.VCO2_ET.ParameterValue.Value, volume.VA.ParameterValue.Value, coeff.RER.ParameterValue.Value, bufferFET, Logger));

                    _breathInWorkLoad.Add(new BreathInWorkLoad(Expiration, Inspiration, basics, volume, coeff, pressure));

                    IEnumerable <Parameter> parameters = new List <Parameter>();
                    foreach (var parameter in basics.GetParameters())
                    {
                        (parameters as List <Parameter>).Add(parameter);
                    }
                    foreach (var parameter in volume.GetParameters())
                    {
                        (parameters as List <Parameter>).Add(parameter);
                    }
                    foreach (var parameter in coeff.GetParameters())
                    {
                        (parameters as List <Parameter>).Add(parameter);
                    }

                    foreach (var parameter in pressure.GetParameters())
                    {
                        (parameters as List <Parameter>).Add(parameter);
                    }
                    (parameters as List <Parameter>).Add(currentQRS);
                    RaiseBreathEnd(parameters);

                    if (_breathInWorkLoad.Count == _settingsPulmonary_Analysis.RangeForDataBreathWriter)
                    {
                        WriterDataBreath(flag);
                    }
                }
                catch (Exception ex)
                {
                    Logger.LogError(string.Format("Error: {0}, Stack: {1}", ex.Message, ex.StackTrace));
                }
            }
        }
Exemple #2
0
        private async Task WriterDataBreath(StepOfAnalysis flag)
        {
            try
            {
                switch (flag)
                {
                case StepOfAnalysis.TestInRest:
                    await WriteDataInJSON(Path.Combine(_settingsPulmonary_Analysis.PathDirectoryForDataBreath, _nameFileDataRest), _rest);

                    GetTestData(spiroData);
                    _breathInWorkLoad.Clear();
                    Logger.LogInformation("data {Breath} written successfully", typeof(Rest).Name);
                    break;

                case StepOfAnalysis.TestInForcedExpiration:
                    await WriteDataInJSON(Path.Combine(_settingsPulmonary_Analysis.PathDirectoryForDataBreath, _nameFileDataRest), _forcedExpiration);

                    GetTestData(spiroData);
                    _breathInWorkLoad.Clear();
                    Logger.LogInformation("data {Breath} written successfully", typeof(ForcedExpiration).Name);
                    break;

                case StepOfAnalysis.TestInMVV:
                    await WriteDataInJSON(Path.Combine(_settingsPulmonary_Analysis.PathDirectoryForDataBreath, _nameFileDataRest), _mVV);

                    GetTestData(spiroData);
                    _breathInWorkLoad.Clear();
                    Logger.LogInformation("data {Breath} written successfully", typeof(MVV).Name);
                    break;

                case StepOfAnalysis.TestInWorkload:
                    await WriteDataInJSON(Path.Combine(_settingsPulmonary_Analysis.PathDirectoryForDataBreath, _nameFileDataWorkLoad), _breathInWorkLoad);

                    GetTestData(spiroData);
                    _breathInWorkLoad.Clear();
                    Logger.LogInformation("data {Breath}={_rangeForDataBreathWriter} written successfully", typeof(BreathInWorkLoad).Name, _settingsPulmonary_Analysis.RangeForDataBreathWriter);
                    break;

                case StepOfAnalysis.EndStep2:
                    await WriteDataInJSON(Path.Combine(_settingsPulmonary_Analysis.PathDirectoryForDataBreath, _nameFileDataWorkLoad), _breathInWorkLoad);

                    GetTestData(spiroData);
                    _breathInWorkLoad.Clear();
                    Logger.LogInformation("data is fulled {Breath} written successfully", typeof(BreathInWorkLoad).Name);
                    break;

                default:
                    break;
                }
            }
            catch (Exception ex)
            {
                Logger.LogError(string.Format("Error: {0}, Stack: {1}", ex.Message, ex.StackTrace));
            }
        }
Exemple #3
0
 public void FilterData(SampleBreathing data, StepOfAnalysis flag)
 {
     q.Enqueue(data);
     lock (lockObject)
     {
         if (q.Count % SizePack == 0)
         {
             var result = UseMedianaFilter(q);
             DataFiltred?.Invoke(result, flag, DateTime.Now);
         }
         while (q.Count >= Limit && q.TryDequeue(out overflow))
         {
             Limit = BuffLimit - SizePack + 1;
             Console.WriteLine($"\n Overflow = " + (overflow as SampleBreathing).Flow.ParameterValue.Value);
         }
         Limit = BuffLimit;
     }
Exemple #4
0
        public IEnumerable <Parameter> EndStep(StepOfAnalysis flag)
        {
            try
            {
                switch (flag)
                {
                case StepOfAnalysis.TestInRest:
                    _rest = _testInRest.GetDataRest();
                    WriterDataBreath(flag);
                    return(_rest.GetParameters());

                case StepOfAnalysis.TestInForcedExpiration:
                    if (_rest == null)
                    {
                        _forcedExpiration = _testInRest.GetDataForcedExpiration(0);
                    }
                    else
                    {
                        _forcedExpiration = _testInRest.GetDataForcedExpiration(_rest.VC.ParameterValue.Value);
                    }
                    WriterDataBreath(flag);
                    return(_forcedExpiration.GetParameters());

                case StepOfAnalysis.TestInMVV:
                    _mVV = _testInRest.GetDataMVV();
                    WriterDataBreath(flag);
                    return(_mVV.GetParameters());

                case StepOfAnalysis.EndStep2:
                    WriterDataBreath(flag);
                    IEnumerable <Parameter> parameters = new List <Parameter>();
                    (parameters as List <Parameter>).Add(new Parameter("none", new ParameterValue(0, "none")));
                    return(parameters);

                default:
                    return(null);
                }
            }
            catch (Exception ex)
            {
                Logger.LogError(string.Format("Error: {0}, Stack: {1}", ex.Message, ex.StackTrace));
                return(null);
            }
        }
Exemple #5
0
        private void DetectPhaseOfBreath(SampleBreathing sampleBreathing, StepOfAnalysis flag, DateTime dateTime)
        {
            try
            {
                spiroData.Add(sampleBreathing);
                switch (indexOfPhase.IndexOf(0))
                {
                case 0:
                    if (sampleBreathing.Flow.ParameterValue.Value >= _flowThreshold)    //Inspiration flow
                    {
                        try
                        {
                            indexOfPhase[0] = spiroData.Count;
                            Logger.LogDebug($"Phase Inspiration dataFlow : {sampleBreathing.Flow.ParameterValue.Value} - dataO2 : {sampleBreathing.O2} - dataCO2 : {sampleBreathing.CO2}");
                        }
                        catch (Exception ex)
                        {
                            Logger.LogError(string.Format("Error: {0}, Stack: {1}", ex.Message, ex.StackTrace));
                        }
                    }
                    break;

                case 1:
                    if (sampleBreathing.Flow.ParameterValue.Value <= 0 && previous_dataflow >= 0)    //End inspiration
                    {
                        try
                        {
                            indexOfPhase[1] = spiroData.Count;
                            Logger.LogDebug($"Phase End inspiration dataFlow : {sampleBreathing.Flow.ParameterValue.Value} - previous_dataflow : {previous_dataflow} - dataO2 : {sampleBreathing.O2} - dataCO2 : {sampleBreathing.CO2}");
                        }
                        catch (Exception ex)
                        {
                            Logger.LogError(string.Format("Error: {0}, Stack: {1}", ex.Message, ex.StackTrace));
                        }
                    }
                    break;

                case 2:
                    if (sampleBreathing.Flow.ParameterValue.Value <= -_flowThreshold)    //Expiration
                    {
                        try
                        {
                            indexOfPhase[2] = spiroData.Count;
                            Logger.LogDebug($"Phase Expiration dataFlow : {sampleBreathing.Flow.ParameterValue.Value} - dataO2 : {sampleBreathing.O2} - dataCO2 : {sampleBreathing.CO2}");
                        }
                        catch (Exception ex)
                        {
                            Logger.LogError(string.Format("Error: {0}, Stack: {1}", ex.Message, ex.StackTrace));
                        }
                    }
                    break;

                case 3:
                    if (sampleBreathing.Flow.ParameterValue.Value >= 0 & previous_dataflow <= 0)    //End Expiration
                    {
                        try
                        {
                            Logger.LogDebug($"Phase End Expiration  dataFlow : {sampleBreathing.Flow.ParameterValue.Value} - previous_dataflow : {previous_dataflow} - dataO2 : {sampleBreathing.O2} - dataCO2 : {sampleBreathing.CO2}");

                            indexOfPhase[3] = spiroData.Count;
                            Calculate_Params_in_EndBreath(flag);
                            spiroData.Clear();
                            indexOfPhase = new List <int>(4)
                            {
                                0, 0, 0, 0
                            };
                        }
                        catch (Exception ex)
                        {
                            Logger.LogError(string.Format("Error: {0}, Stack: {1}", ex.Message, ex.StackTrace));
                        }
                    }
                    break;

                default:
                    break;
                }
                CalculateVolume(sampleBreathing, dateTime);
                previous_dataflow = sampleBreathing.Flow.ParameterValue.Value;
            }
            catch (Exception ex)
            {
                Logger.LogError(string.Format("Error: {0}, Stack: {1}", ex.Message, ex.StackTrace));
            }
        }
Exemple #6
0
 /// <summary>
 /// Основной метод, в который мы посылаем наши данные с периодом дискретизации, который задается в в методе Instance (sampleTime). В данном методе реализована логика разделения по данным Потока на фазы дыхания: 1. Вдох  (после преодоления порога в 0.3 л/с  и до первого пересечения с нулевой линией). Почему был выбран порог в 0.3 л.с-  при попадании в диапозон [-0.3;0.3] л/с идет резкий перепад значений концентраций, также нам надо избавиться от помех [-0.3;0.3] л/с. 2. Фаза конца вдоха - это первый переход через нулевую линию. 3. Фаза выдоха - от -0.3 л.с и до первого перехода через нулевую линию. 4. Фаза конца вдоха - переход через нулевую линию
 /// </summary>
 /// <param name="dataFlow">текущее значение потока в л/с</param>
 /// <param name="dataO2">текущее значение О2 в Об.% (обьемные проценты)</param>
 /// <param name="dataCO2">текущее значение СО2 в Об.% (обьемные проценты).</param>
 /// <param name="flag"> Указывает на какой стадии сейчас программа</param>
 public void AnalyzeSpiroData(double dataFlow, double dataO2, double dataCO2, StepOfAnalysis flag)
 {
     _filter.FilterData(new SampleBreathing(dataFlow, dataO2, dataCO2), flag);
 }
Exemple #7
0
        /// <summary>
        /// (Не надо им пользоваться)Данный метод записывает в режиме реального времени данные в буфер (формирует листы с BasicsCalculations), чтобы по окончании теста провести анализ
        /// </summary>
        /// <param name="basics">Базовые вычисления</param>
        /// <param name="logger">The logger.</param>
        public void WriteData(List <double> expList, List <double> insList, double sampleTime, Basics basics, StepOfAnalysis flag, ILogger logger)
        {
            _logger     = logger;
            _sampleTime = sampleTime;
            switch (flag)
            {
            case StepOfAnalysis.TestInRest:
                try
                {
                    Basics_Rest.Add(basics);
                }
                catch (Exception ex)
                {
                    _logger.LogError(string.Format("Error: {0}, Stack: {1}", ex.Message, ex.StackTrace));
                }
                break;

            case StepOfAnalysis.TestInForcedExpiration:
                try
                {
                    expirationList.Add(expList);
                    inspirationList.Add(insList);
                    Basics_ForcedExp.Add(basics);
                }
                catch (Exception ex)
                {
                    _logger.LogError(string.Format("Error: {0}, Stack: {1}", ex.Message, ex.StackTrace));
                }
                break;

            case StepOfAnalysis.TestInMVV:
                try
                {
                    Basics_MVV.Add(basics);
                }
                catch (Exception ex)
                {
                    _logger.LogError(string.Format("Error: {0}, Stack: {1}", ex.Message, ex.StackTrace));
                }
                break;

            default:
                break;
            }
        }