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)); } }