private void button4_Click(object sender, EventArgs e)//Открыть файл { string adres = "q"; string adres2 = "q"; string datapath = "w"; int da5 = 0; StringBuilder buffer2 = new StringBuilder(); FolderBrowserDialog fbd = new FolderBrowserDialog(); OpenFileDialog qqq = new OpenFileDialog(); qqq.Filter = "Файлы txt|*.txt"; if (qqq.ShowDialog() == System.Windows.Forms.DialogResult.OK) { adres = qqq.FileName; buffer2.Insert(0, qqq.FileName); da5 = buffer2.Length; buffer2.Remove(da5 - 8, 8); adres2 = buffer2.ToString(); datapath = Path.Combine(Application.StartupPath); System.IO.File.Copy(Path.Combine(qqq.InitialDirectory, qqq.FileName), Path.Combine(datapath, "test.txt"), true); try { System.IO.File.Copy(adres2 + "Информация о пациенте.txt", Path.Combine(datapath, "Информация о пациенте.txt"), true); } catch { } } /////////////////////////////////////////////////////////// int reg = Convert.ToInt32(this.textBox1.Text); int ekg = 1; try { Initial_data init_data = new Initial_data("test.txt", reg, ekg); init_data.Shift_Row1_To_Time_0(); //Сдвигаем время к 0 init_data.Smoothe_Row1(); // Сглаживаем полученные данные init_data.Write_In_File_Row1("test3.txt"); usergraph = new UseZedgraph(zedGraph1); usergraph.ClearAll(); //Очищаем полотно usergraph.MakeGraph_4_Canal(init_data.Get_Row1(), init_data.Get_Number_Strings()); //Строим график usergraph.Install_Pane("t, мc", "R, Ом", "Каналы"); //Устанавливаем оси и загавие usergraph.ResetGraph(); //Обновляем } catch (Exception ex) { MessageBox.Show("Выбран неправильный файл"); } }
private void button6_Click(object sender, EventArgs e)//Обновить данные { Clear_list_zed(); int reg = System.Convert.ToInt32(this.textBox1.Text); int ekg = 1; try { Initial_data init_data = new Initial_data("test3.txt", reg, ekg); usergraph = new UseZedgraph(zedGraph1); usergraph.ClearAll(); //Очищаем полотно usergraph.MakeGraph_4_Canal(init_data.Get_Row1(), init_data.Get_Number_Strings()); //Строим график usergraph.Install_Pane("t, мc", "R, Ом", "Каналы"); //Устанавливаем оси и загавие usergraph.ResetGraph(); //Обновляем } catch (Exception ex) { MessageBox.Show("Выбран неправильный файл"); } }
}//Очистить график - функция public void Maker_graph_one_period() { richTextBox2.Clear(); int reg = System.Convert.ToInt32(this.textBox1.Text); int ekg = 1; int B2 = System.Convert.ToInt32(textBox4.Text); int B3 = System.Convert.ToInt32(textBox6.Text); int B4 = System.Convert.ToInt32(textBox8.Text); Initial_data init_data = new Initial_data("Исправляемый цикл.txt", reg, ekg); long[,] row = init_data.Get_Row1(); usergraph = new UseZedgraph(zedGraph1, init_data); usergraph.ClearAll();//Очищаем полотно usergraph.MakeGraph_On_Canal_Only_One_Graph(); usergraph.MakeGraph_Special_Point_Without_EKG_One_Period(row, B2, B3, B4); usergraph.ResetGraph(); usergraph.Install_Pane("t, мc", "R, Ом", " "); //Устанавливаем оси и заглавие usergraph.ResetGraph(); //Обновляем for (int q = 1; q < init_data.Get_Number_Strings(); q++) { richTextBox2.AppendText(System.Convert.ToString(q) + "\t" + System.Convert.ToString(row[q, 1]) + "\n"); } StreamWriter rw2 = new StreamWriter("Исправляемый цикл - точки.txt"); rw2.WriteLine(row[B2, 0] + "\t" + row[B2, 1]); rw2.WriteLine(row[B3, 0] + "\t" + row[B3, 1]); rw2.WriteLine(row[B4, 0] + "\t" + row[B4, 1]); rw2.Close(); }
/// <summary> /// Построить график от выбранных каналов ЭКГ и РЭГ + производная РЭГ /// </summary> public void MakeGraph_On_Chosen_Canal() { long[,] row_1 = initdata.Get_Row1(); long[] row_3 = initdata.Get_Row3(); long[] row_4 = initdata.Get_Row4(); int b = initdata.Get_Number_Strings(); for (int y = 100; y < b - 10; y++) { if (maximum < row_1[y, initdata.REG]) { maximum = row_1[y, initdata.REG]; } if (minimum > row_1[y, initdata.REG]) { minimum = row_1[y, initdata.REG]; } } if ((maximum - minimum) < 200) { shift_grafh = 200; shift_grafh_ekg = 200; } else if ((maximum - minimum) > 500) { shift_grafh = -500; shift_grafh_ekg = 400; } else if ((maximum - minimum) > 1000) { shift_grafh = -5500; shift_grafh_ekg = 5500; } else { shift_grafh_ekg = 200; shift_grafh = -300; } // Создадим список точек для кривой f1(x) PointPairList f1_list = new PointPairList(); PointPairList f2_list = new PointPairList(); PointPairList f3_list = new PointPairList(); PointPairList f4_list = new PointPairList(); PointPairList f5_list_diff = new PointPairList(); // Заполним массив точек для кривой f1-3(x) for (int y = 3; y < b - 10; y++) { f1_list.Add(row_1[y, 0] / 1000, row_4[y] + (shift_grafh_ekg)); f2_list.Add(row_1[y, 0] / 1000, 570); f3_list.Add(row_1[y, 0] / 1000, shift_grafh); f4_list.Add(row_1[y, 0] / 1000, row_1[y, initdata.REG]); f5_list_diff.Add(row_1[y, 0] / 1000, row_3[y] / 10 + shift_grafh); } pane.XAxis.Title.Text = "t, мc"; pane.YAxis.Title.Text = "R, Ом"; pane.Title.Text = "Данные"; LineItem f1_curve = pane.AddCurve("ЭКГ", f1_list, Color.Blue, SymbolType.None); LineItem f2_curve = pane.AddCurve("", f2_list, Color.Black, SymbolType.None); LineItem f3_curve = pane.AddCurve("", f3_list, Color.Black, SymbolType.None); LineItem f4_curve = pane.AddCurve(" РЭГ", f4_list, Color.Red, SymbolType.None); LineItem f5_curve_diff = pane.AddCurve("Производная РЭГ", f5_list_diff, Color.Green, SymbolType.None); }
private void button11_Click(object sender, EventArgs e)//Редактировать особые точки { button12.Enabled = true; button13.Enabled = true; button14.Enabled = true; button15.Enabled = true; button16.Enabled = true; button17.Enabled = true; nomer_period = System.Convert.ToInt32(textBox2.Text); Boolean povtor = false; richTextBox2.Clear(); int reg = System.Convert.ToInt32(this.textBox1.Text); int ekg = 1; Initial_data init_data = new Initial_data("test3.txt", reg, ekg); init_data.Shift_Row1_To_Time_0(); //Сдвигаем время к 0 init_data.Smoothe_Row1(); // Сглаживаем полученные данные init_data.Calculate_Derivative_Row2(); init_data.Average_Canal_REG_Row3(); init_data.Smoothing_Ekg_Row4(); long[,] row_1 = init_data.Get_Row1(); int b = init_data.Get_Number_Strings(); Initial_processing.Divided_by_periods_data divided_row = new Initial_processing.Divided_by_periods_data(init_data, this.comboBox2.Text); Special_point osob_point = new Special_point(divided_row, init_data); long[,] osob = null; osob_point.Calculate_Special_Point(this.comboBox2.Text); osob = osob_point.Get_Special_Point(); int arre = osob.Length; int ew = arre / 15;//счетчик найденных максимумов ///////////////////////// ///////////////////////// // новое //ЭКГ мах - 0 //ЭКГ мах -х - 1 // В1, В5 - 2 // В1x, В5x - 3 // В2 - 4 // В2x - 5 // В3 - 6 // В3x - 7 // В4 - 8 // В4x - 9 //osob_10 - Изначальная высота //////////////////////// long[,] osob_x = new long[5, ew];// список особых точек для вывода на график long[,] osob_y = new long[5, ew]; for (int i = 0; i < ew - 1; i++) { osob_x[0, i] = osob[1, i]; osob_y[0, i] = osob[0, i]; osob_x[1, i] = osob[3, i]; osob_y[1, i] = osob[2, i]; osob_x[2, i] = osob[5, i]; osob_y[2, i] = osob[4, i] + osob[10, i]; osob_x[3, i] = osob[7, i]; osob_y[3, i] = osob[6, i] + osob[10, i]; osob_x[4, i] = osob[9, i]; osob_y[4, i] = osob[8, i] + osob[10, i]; } // Файлы для редактирования StreamWriter rw = new StreamWriter("Исправляемый цикл.txt"); StreamWriter rw2 = new StreamWriter("Исправляемый цикл - точки.txt"); GraphPane pane = zedGraph1.GraphPane; pane.CurveList.Clear(); // Создадим список точек для кривой f2(x) PointPairList f2_list = new PointPairList(); PointPairList f4_list = new PointPairList(); int scah_max = 1; int B2 = 0; int B3 = 0; int B4 = 0; for (int q = 3; q < b; q++)// считаем производную { if (row_1[q, 0] >= osob_x[1, nomer_period] && row_1[q, 0] < osob_x[1, nomer_period + 1]) { f2_list.Add(row_1[q, 0] / 1000, 570); f4_list.Add(row_1[q, 0] / 1000, row_1[q, reg]); rw.WriteLine(row_1[q, 0] + "\t" + row_1[q, reg]); richTextBox2.AppendText(System.Convert.ToString(scah_max) + "\t" + System.Convert.ToString(row_1[q, reg]) + "\n"); if (osob_x[2, nomer_period] > row_1[q, 0]) { B2 = scah_max; } if (osob_x[3, nomer_period] > row_1[q, 0]) { B3 = scah_max; } if (osob_x[4, nomer_period] > row_1[q, 0]) { B4 = scah_max; } scah_max++; povtor = true; } //rw.WriteLine(row1[q, 0] + "\t" + row1[q, reg]); } // Заполним массив точек для кривой f1-3(x) textBox5.Text = System.Convert.ToString(scah_max); textBox7.Text = System.Convert.ToString(scah_max); textBox9.Text = System.Convert.ToString(scah_max); textBox4.Text = System.Convert.ToString(B2); textBox6.Text = System.Convert.ToString(B3); textBox8.Text = System.Convert.ToString(B4); usergraph = new UseZedgraph(zedGraph1, init_data); usergraph.ClearAll();//Очищаем полотно usergraph.MakeGraph_On_Chosen_Canal_Only_One_Graph(reg, osob_x[1, nomer_period], osob_x[1, nomer_period + 1]); if (povtor == true) { usergraph.MakeGraph_Special_Point_Without_EKG_One_Period(osob_x, osob_y, B2, B3, B4, nomer_period); usergraph.ResetGraph(); usergraph.Install_Pane("t, мc", "R, Ом", " "); //Устанавливаем оси и заглавие usergraph.ResetGraph(); //Обновляем } rw.Close(); rw2.Close(); }
private void button3_Click(object sender, EventArgs e)//Сохранить 1 период { nomer_period = System.Convert.ToInt32(textBox2.Text); Boolean povtor = false; richTextBox2.Clear(); long n2_x = 0; long n3_x = 0; long n4_x = 0; long n2_y = 0; long n3_y = 0; long n4_y = 0; int B2 = System.Convert.ToInt32(textBox4.Text); int B3 = System.Convert.ToInt32(textBox6.Text); int B4 = System.Convert.ToInt32(textBox8.Text); int reg = System.Convert.ToInt32(this.textBox1.Text); int ekg = 1; Initial_data init_data = new Initial_data("test3.txt", reg, ekg); init_data.Shift_Row1_To_Time_0(); //Сдвигаем время к 0 init_data.Smoothe_Row1(); // Сглаживаем полученные данные init_data.Calculate_Derivative_Row2(); init_data.Average_Canal_REG_Row3(); init_data.Smoothing_Ekg_Row4(); long[,] row_1 = init_data.Get_Row1(); int b = init_data.Get_Number_Strings(); Initial_processing.Divided_by_periods_data divided_row = new Initial_processing.Divided_by_periods_data(init_data, this.comboBox2.Text); Special_point osob_point = new Special_point(divided_row, init_data); long[,] osob = null; osob_point.Calculate_Special_Point(this.comboBox2.Text); osob = osob_point.Get_Special_Point(); int arre = osob.Length; int ew = arre / 15;//счетчик найденных максимумов ///////////////////////// ///////////////////////// // новое //ЭКГ мах - 0 //ЭКГ мах -х - 1 // В1, В5 - 2 // В1x, В5x - 3 // В2 - 4 // В2x - 5 // В3 - 6 // В3x - 7 // В4 - 8 // В4x - 9 //osob_10 - Изначальная высота //////////////////////// long[,] osob_x = new long[5, ew];// список особых точек для вывода на график long[,] osob_y = new long[5, ew]; for (int i = 0; i < ew - 1; i++) { osob_x[0, i] = osob[1, i]; osob_y[0, i] = osob[0, i]; osob_x[1, i] = osob[3, i]; osob_y[1, i] = osob[2, i]; osob_x[2, i] = osob[5, i]; osob_y[2, i] = osob[4, i] + osob[10, i]; osob_x[3, i] = osob[7, i]; osob_y[3, i] = osob[6, i] + osob[10, i]; osob_x[4, i] = osob[9, i]; osob_y[4, i] = osob[8, i] + osob[10, i]; } StreamWriter rw = new StreamWriter("Данные обработанные.txt", true); StreamWriter rw2 = new StreamWriter("Особые точки.txt", true); int nub_dop = 0; for (int q = 3; q < b; q++)// Выбираем отрезок { if (row_1[q, 0] >= osob_x[1, nomer_period] && row_1[q, 0] < osob_x[1, nomer_period + 1]) { rw.Write(row_1[q, reg] + "\t"); povtor = true; if (nub_dop == B2) { n2_x = B2; n2_y = row_1[q, reg]; } if (nub_dop == B3) { n3_x = B3; n3_y = row_1[q, reg]; } if (nub_dop == B4) { n4_x = B4; n4_y = row_1[q, reg]; } nub_dop++; } } //Дополняем отрезок нулями до равной длины for (int i = nub_dop; i < number_point_line; i++) { if (i == number_point_line - 1) { rw2.Write(0); } else { rw.Write(0 + "\t"); } } rw.WriteLine(); for (int i = 0; i < number_point_line; i++) { if (i == n2_x) { rw2.Write(n2_y + "\t"); } else if (i == n3_x) { rw2.Write(n3_y + "\t"); } else if (i == n4_x) { rw2.Write(n4_y + "\t"); } else if (i == number_point_line - 1) { rw2.Write(0); } else { rw2.Write(0 + "\t"); } } rw2.WriteLine(); rw.Close(); rw2.Close(); scet_period++; textBox10.Text = System.Convert.ToString(scet_period); StreamWriter scetch = new StreamWriter("счетчик.txt"); scetch.WriteLine(scet_period); scetch.Close(); }
/// <summary> /// Получить особые точки РЭГ и ЭКГ, используя стандартный алгоритм /// </summary> /// <param name="combobox3"></param> public void Return_Point_EKG(String combobox3) { int b = initial_data.Get_Number_Strings(); long[,] row1 = initial_data.Get_Row1(); long[,] row2 = initial_data.Get_Row2(); long[] row3 = initial_data.Get_Row3(); long[] row4 = initial_data.Get_Row4(); int reg = initial_data.REG; ///////////////////////// int b0 = 0; //второй счетчик строк int ew = 0; //счетчик найденных максимумов int est = 0; int maxim = 0; // счетчик массива long[] max1_y = new long[2000]; // счетчик максимума long[] max1_x = new long[2000]; long[] max1_coor = new long[2000]; for (int u = 0; u < 1000; u++) { max1_x[u] = 1; max1_y[u] = 1; } // while (ew<2) int N_propusk = 0; while (b0 < b)/////////////поиск опорных точек { for (int t = 0; t < 200; t++) { b0++; if ((row3[t + 1 + est]) > max1_y[maxim]) { max1_y[maxim] = (row3[t + 1 + est]); max1_x[maxim] = row1[t + 1 + est, 0]; max1_coor[maxim] = t + 1 + est; } } if (max1_y[maxim] > System.Convert.ToInt64(combobox3) * mass) ////////////////////!!!!!! { ew++; // счетчик пиков производной maxim++; N_propusk = 0; } est = est + 200; N_propusk++; int period = 0; double period2 = 0; for (int u = 1; u < ew; u++) { period2 = period2 + (max1_coor[u] - max1_coor[u - 1]); } period = System.Convert.ToInt32(Math.Round(period2 / (ew - 1))); double Left_shift = 0.1 * period; double Right_shift = 0.75 * period; double Shift_03n = 300; if (period < 400) { Shift_03n = 0.65 * period; } int Left_Border = System.Convert.ToInt32(Math.Round(Left_shift)); int Right_Border = System.Convert.ToInt32(Math.Round(Right_shift)); int Shift_03 = System.Convert.ToInt32(Math.Round(Shift_03n)); ///////////////////////////////////////////////////// long[,] osob_x = new long[14, ew]; // список особых точек для вывода на график long[,] osob_y = new long[14, ew]; long[,] schet = new long[15, ew]; // список особых точек для расчета (должны отличаться!!!!!) long[] EKG_max = new long[ew]; long[] EKG_max_x = new long[ew]; for (int w = 0; w < ew; w++) //н.у. { for (int i = 0; i < 14; i++) { osob_x[i, w] = 1; osob_y[i, w] = 512; } EKG_max[w] = 512; EKG_max_x[w] = 0; } for (int w = 2; w < ew - 1; w++)//перебираем пики { ///////////////////////////// Ищем максимум ЭКГ--1 for (long i = max1_coor[w]; i > max1_coor[w] - Shift_03; i--)//2 { if (row4[i] > EKG_max[w]) { EKG_max[w] = row4[i]; EKG_max_x[w] = row1[i, 0]; } } } for (int w = 1; w < ew - 1; w++)//перебираем пики { spec_point[0, w] = EKG_max[w]; spec_point[1, w] = EKG_max_x[w]; } } }