예제 #1
0
        /// <summary>
        /// Método de inicialización de la clase en la cual se
        /// trae de la base de datos el registro de los sensores
        /// y se crean SeriesCollection para el dibujado de los graficos
        /// </summary>
        /// <param name="idSesion"></param>
        public void Init(int idSesion)
        {
            try
            {
                Labels = new[] { 0, 50, 100 };

                using (var entidades = new Entidades())
                {
                    this.Sesion = entidades.Sesiones
                                  .Where(s => s.Id == idSesion)
                                  .Include(s => s.FrecuenciaCardiacas)
                                  .Include(s => s.Eegs)
                                  .Include(s => s.Temperaturas)
                                  .FirstOrDefault();
                }

                this.Fecha      = String.Format("{0:dd/MM/yyyy - hh:mm t}", this.Sesion.Fecha);
                this.Comentario = this.Sesion.Comentarios;

                //Frecuencia Cardiaca
                FrecuenciaCardiacasSc = new SeriesCollection();

                LabelsTimeHR = new string[this.Sesion.FrecuenciaCardiacas.Count];

                int countH = 0;

                var lineSeriesHr = new LineSeries
                {
                    Title         = "BPM",
                    Values        = new ChartValues <int>(),
                    Stroke        = System.Windows.Media.Brushes.Yellow,
                    PointGeometry = null,
                };

                var avgHr = new List <int>();

                foreach (var item in this.Sesion.FrecuenciaCardiacas)
                {
                    lineSeriesHr.Values.Add((int)item.Valor);
                    if (item.Valor > 60)
                    {
                        avgHr.Add((int)item.Valor);
                    }
                    LabelsTimeHR[countH] = item.FechaHora.TimeOfDay.ToString(@"hh\:mm\:ss");
                    countH++;
                }

                FrecuenciaCardiacasSc.Add(lineSeriesHr);

                //Temperaturas
                this.TemperaturasSc = new SeriesCollection();

                LabelsTimeTemp = new string[this.Sesion.Temperaturas.Count];

                int countT = 0;

                var lineSeriesTemp = new LineSeries
                {
                    Title         = "Centigrados",
                    Values        = new ChartValues <double>(),
                    PointGeometry = null,
                };

                var avgTemp = new List <double>();

                foreach (var item in this.Sesion.Temperaturas)
                {
                    lineSeriesTemp.Values.Add(Math.Round((double)item.Valor, 2));
                    avgTemp.Add((double)item.Valor);
                    LabelsTimeTemp[countT] = item.FechaHora.TimeOfDay.ToString(@"hh\:mm\:ss");
                    countT++;
                }

                TemperaturasSc.Add(lineSeriesTemp);

                var mediaHr   = Math.Round((double)avgHr.Average(), 2);
                var mediaTemp = Math.Round((double)avgTemp.Average(), 2);

                //Eeg ondas Alpha
                this.EegAlphaSc = new SeriesCollection();

                var lineSeriesAlpha = new LineSeries
                {
                    Title         = "Alpha",
                    Values        = new ChartValues <float>(),
                    PointGeometry = null,
                    Stroke        = System.Windows.Media.Brushes.Green,
                };

                var maxAlpha = this.Sesion.Eegs.Max(s => s.LowAlpha);
                //var maxDelta = this.Sesion.Eegs.Max(s => s.Delta);

                List <decimal> datosAlpha = new List <decimal>();

                LabelsTimeAplha = new string[this.Sesion.Eegs.Count];

                int countA = 0;

                foreach (var item in this.Sesion.Eegs)
                {
                    float valAlpha = ((item.LowAlpha * 100) / maxAlpha);
                    lineSeriesAlpha.Values.Add(valAlpha);
                    datosAlpha.Add((decimal)valAlpha);
                    LabelsTimeAplha[countA] = item.FechaHora.TimeOfDay.ToString(@"hh\:mm\:ss");
                    countA++;
                }

                decimal resultA = datosAlpha.Average();

                EegAlphaSc.Add(lineSeriesAlpha);

                //Eeg ondas Beta
                this.EegBetaSc = new SeriesCollection();

                var lineSeriesBeta = new LineSeries
                {
                    Title         = "Beta ",
                    Values        = new ChartValues <float>(),
                    PointGeometry = null,
                    Stroke        = System.Windows.Media.Brushes.Red
                };

                var maxBeta = this.Sesion.Eegs.Max(s => s.LowBeta);

                List <decimal> datosBeta = new List <decimal>();

                LabelsTimeBeta = new string[this.Sesion.Eegs.Count];

                int countB = 0;

                foreach (var item in this.Sesion.Eegs)
                {
                    float valBeta = ((item.LowBeta * 100) / maxBeta);
                    lineSeriesBeta.Values.Add(valBeta);
                    datosBeta.Add((decimal)valBeta);
                    LabelsTimeBeta[countB] = item.FechaHora.TimeOfDay.ToString(@"hh\:mm\:ss");
                    countB++;
                }

                decimal resultB = datosBeta.Average();

                EegBetaSc.Add(lineSeriesBeta);
            }
            catch (Exception ex)
            {
                MessageBox.Show(
                    "Ocurrió un problema al leer los datos registrados o no hay datos registrados",
                    "Error",
                    MessageBoxButton.OK,
                    MessageBoxImage.Error);
                Debug.WriteLine(ex.Message);
                Logger.Log.Error("Mensaje: ", ex);
            }
        }
        public void Init(Sesion sesion)
        {
            try
            {
                this.Sesion = sesion;

                this.Sesiones = new List <Sesion>();

                using (var entidades = new Entidades())
                {
                    var usuarios = entidades.Usuarios
                                   .Where(u => u.EsMuestra)
                                   .Include(s => s.Sesiones).ToList();

                    foreach (var usuario in usuarios)
                    {
                        foreach (var item in usuario.Sesiones)
                        {
                            var sesionTemp = entidades.Sesiones
                                             .Where(s => s.Id == item.Id && s.Comentarios == "Conducción")
                                             .Include(e => e.Eegs)
                                             .FirstOrDefault();

                            if (sesionTemp != null)
                            {
                                this.Sesiones.Add(sesionTemp);
                            }
                        }
                    }
                }

                List <double> mediasAlpha = new List <double>();
                List <double> mediasBetha = new List <double>();

                foreach (var seion1 in Sesiones)
                {
                    var avgAlpha = seion1.Eegs.Select(a => a.LowAlpha).Average();
                    mediasAlpha.Add(avgAlpha);
                    var avgBeta = seion1.Eegs.Select(a => a.LowBeta).Average();
                    mediasBetha.Add(avgBeta);
                }

                var mediaMediaAplha = Math.Round((double)mediasAlpha.Average(), 2);
                var mediaMediaBetha = Math.Round((double)mediasBetha.Average(), 2);

                //Alpha
                this.EegAlphaSc = new SeriesCollection();

                var lineSeriesAlpha = new LineSeries
                {
                    Title         = "Alpha",
                    Values        = new ChartValues <double>(),
                    PointGeometry = null,
                    Stroke        = System.Windows.Media.Brushes.Green,
                };

                LabelsTimeAplha = new string[this.Sesion.Eegs.Count];

                int countA = 0;

                List <Double> alpha = new List <double>();

                foreach (var item in this.Sesion.Eegs)
                {
                    double valAlpha = Math.Round(((item.LowAlpha * 50) / mediaMediaAplha), 2);
                    lineSeriesAlpha.Values.Add(valAlpha);
                    alpha.Add(valAlpha);
                    LabelsTimeAplha[countA] = item.FechaHora.TimeOfDay.ToString(@"hh\:mm\:ss");
                    countA++;
                }

                EegAlphaSc.Add(lineSeriesAlpha);

                ////Betha
                this.EegBetaSc = new SeriesCollection();

                var lineSeriesBeta = new LineSeries
                {
                    Title         = "Beta ",
                    Values        = new ChartValues <double>(),
                    PointGeometry = null,
                    Stroke        = System.Windows.Media.Brushes.Red,
                };

                LabelsTimeBeta = new string[this.Sesion.Eegs.Count];

                int countB = 0;

                List <Double> beta = new List <double>();

                foreach (var item in this.Sesion.Eegs)
                {
                    double valBeta = Math.Round(((item.LowBeta * 50) / mediaMediaBetha), 2);
                    lineSeriesBeta.Values.Add(valBeta);
                    beta.Add(valBeta);
                    LabelsTimeBeta[countB] = item.FechaHora.TimeOfDay.ToString(@"hh\:mm\:ss");
                    countB++;
                }

                var avgAlpha2 = Math.Round((double)alpha.Average(), 4);
                var avgBeta2  = Math.Round((double)beta.Average(), 4);
                EegBetaSc.Add(lineSeriesBeta);
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
                Logger.Log.Error("Mensaje: ", ex);
            }
        }