private void btnReset_Click(object sender, EventArgs e)
 {
     if (ccb_Added.Items.Count != 0)
     {
         mz_id_to_process.Clear();
         ccb_Added.Items.Clear();
         R_matrix.refresh();
         update_figure(threshold);
     }
 }
        public void save_data()
        {
            try
            {
                string fileNameofNet = file;
                string data_name     = String.Format("{0}\\{1}_{2}_{3}_{4}.txt", Path.GetDirectoryName(file),
                                                     Path.GetFileNameWithoutExtension(file),
                                                     X.ToString(),
                                                     Y.ToString(),
                                                     DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss"));

                using (StreamWriter file_stream = new StreamWriter(data_name))
                {
                    file_stream.WriteLine("selected X and Y");
                    file_stream.WriteLine("{0}\t{1}", X.ToString(), Y.ToString());

                    file_stream.WriteLine("X selected file");
                    file_stream.WriteLine(scanNamesListSelected[X] + " — " + sampleScanListSelected[X]);

                    file_stream.WriteLine("Y selected file");
                    file_stream.WriteLine(scanNamesListSelected[Y] + " — " + sampleScanListSelected[Y]);

                    file_stream.WriteLine("Threshold value and outliers level");
                    file_stream.WriteLine("{0}\t{1}", threshold.ToString(), threshold_outliers.ToString());

                    file_stream.WriteLine("m/z array values");
                    file_stream.WriteLine(R_matrix.mz_array.ToString <double>().Replace(' ', '\t'));

                    file_stream.WriteLine("scan X included values");
                    file_stream.WriteLine(R_matrix.scan(X).Multiply(mz_id_to_process).ToString <double>().Replace(' ', '\t'));

                    file_stream.WriteLine("scan X excluded values");
                    file_stream.WriteLine(R_matrix.scan(X).Multiply(mz_id_to_process.Multiply(-1).Add(1)).ToString <double>().Replace(' ', '\t'));

                    file_stream.WriteLine("scan Y included values");
                    file_stream.WriteLine(R_matrix.scan(Y).Multiply(mz_id_to_process).ToString <double>().Replace(' ', '\t'));

                    file_stream.WriteLine("scan Y excluded values");
                    file_stream.WriteLine(R_matrix.scan(Y).Multiply(mz_id_to_process.Multiply(-1).Add(1)).ToString <double>().Replace(' ', '\t'));

                    file_stream.WriteLine("Similarity matrix");
                    for (int i = 0; i < R_matrix.matrix.Rows(); i++)
                    {
                        file_stream.WriteLine(R_matrix.matrix.GetRow(i).ToString <double>().Replace(' ', '\t'));
                    }
                    file_stream.Close();
                }
            }
            catch (Exception)
            { }
        }
        public void clicked_pixel(int X, int Y)
        {
            picture_R.Refresh();

            GraphPane plot1 = master.PaneList[0];
            GraphPane plot2 = master.PaneList[1];

            plot1.CurveList.Clear();
            plot2.CurveList.Clear();
            plot1.YAxis.Scale.Min = 0;
            plot2.YAxis.Scale.Min = 0;

            LineItem myCurve1 = plot1.AddCurve("Included in calculations", R_matrix.mz_array, R_matrix.scan(Y).Multiply(mz_id_to_process.Add(-0.5).Multiply(2)), Color.Blue, SymbolType.None);
            LineItem myCurve2 = plot2.AddCurve("", R_matrix.mz_array, R_matrix.scan(X).Multiply(mz_id_to_process.Add(-0.5).Multiply(2)), Color.Blue, SymbolType.None);
            LineItem myCurve3 = plot1.AddCurve("Excluded from calculations", R_matrix.mz_array, R_matrix.scan(Y).Multiply(mz_id_to_process.Add(-0.5).Multiply(-2)), Color.Red, SymbolType.None);
            LineItem myCurve4 = plot2.AddCurve("", R_matrix.mz_array, R_matrix.scan(X).Multiply(mz_id_to_process.Add(-0.5).Multiply(-2)), Color.Red, SymbolType.None);

            plot1.Legend.Position = LegendPos.Float;
            plot1.Legend.Location.CoordinateFrame = CoordType.ChartFraction;
            plot1.Legend.Location.AlignH          = AlignH.Right;
            plot1.Legend.Location.AlignV          = AlignV.Top;
            plot1.Legend.Location.TopLeft         = new PointF(1.0f - 0.02f, 0.02f);

            plot1.XAxis.Title.FontSpec.Size = 20.0f;
            plot2.XAxis.Title.FontSpec.Size = 20.0f;
            plot1.YAxis.Title.FontSpec.Size = 20.0f;
            plot2.YAxis.Title.FontSpec.Size = 20.0f;
            plot1.Title.FontSpec.Size       = 20.0f;
            plot2.Title.FontSpec.Size       = 20.0f;


            plot1.XAxis.Title.Text = "m/z, Th";
            plot2.XAxis.Title.Text = "m/z, Th";
            plot1.YAxis.Title.Text = "intensity";
            plot2.YAxis.Title.Text = "intensity";

            plot1.Title.Text = scanNamesListSelected[Y] + " — " + sampleScanListSelected[Y];

            plot2.Title.Text = scanNamesListSelected[X] + " — " + sampleScanListSelected[X];

            labelR.Text = "R=" + (R_matrix.matrix[X, Y]).ToString();

            zgc.AxisChange();
            zgc.Invalidate();
            zgc.Refresh();
        }
        public void update_ccbox()
        {
            ccb_Added.Items.Clear();
            int st_inc = 0;
            int st_exc = 0;

            if (mz_id_to_process.Sum() > 0 && mz_id_to_process.Sum() < R_matrix.mz_array.Length)
            {
                for (int i = 1; i < mz_id_to_process.Length; i++)
                {
                    if (mz_id_to_process[i] != mz_id_to_process[i - 1])
                    {
                        if (mz_id_to_process[i - 1] == 0)
                        {
                            CCBoxItem item = new CCBoxItem(R_matrix.mz_array[st_exc], R_matrix.mz_array[i - 1], false);
                            ccb_Added.Items.Add(item);
                            st_inc = i;
                        }
                        else
                        {
                            CCBoxItem item = new CCBoxItem(R_matrix.mz_array[st_inc], R_matrix.mz_array[i - 1], true);
                            ccb_Added.Items.Add(item);
                            st_exc = i;
                        }
                    }
                }
                if (mz_id_to_process[mz_id_to_process.Length - 1] == 0)
                {
                    CCBoxItem item = new CCBoxItem(R_matrix.mz_array[st_exc], R_matrix.mz_array[mz_id_to_process.Length - 1], false);
                    ccb_Added.Items.Add(item);
                }
                else
                {
                    CCBoxItem item = new CCBoxItem(R_matrix.mz_array[st_inc], R_matrix.mz_array[mz_id_to_process.Length - 1], true);
                    ccb_Added.Items.Add(item);
                }
            }
            else
            {
                R_matrix.refresh();
            }
        }
        public void read_r_matrix(string fileName)
        {
            try
            {
                //var mzxml = new LIMPFileReader.LimpXml(fileName, (float)0, true);

                Cursor = Cursors.WaitCursor;
                var reader    = new MatReader(fileName);
                var structure = reader["data"];
                var cType     = structure["spectra"].ValueType;
                var fields    = structure.Fields;

                //var scans = (reader["result"]["scans"].GetValue<int[,]>()).ToDouble();
                var scans = reader["data"]["spectra"].GetValue <double[, ]>().Transpose();
                R_matrix.mz_array = reader["data"]["mz"].GetValue <double[, ]>().ToJagged()[0];
                mzmin             = R_matrix.mz_array[0];
                mzmax             = R_matrix.mz_array[R_matrix.mz_array.Length - 1];
                n_precision       = (int)(Math.Round(1.0 / (R_matrix.mz_array[1] - R_matrix.mz_array[0])));


                rf = new double[scans.Columns(), scans.Columns()];
                R_matrix.matrix = rf;
                rf2             = new double[rf.Columns(), rf.Rows()];

                R_matrix.scans = scans.Transpose();
                int mzlength     = scans.GetLength(0);
                var scannames    = reader["data"]["filenames"];
                var scan_of_file = (reader["data"]["scan_of_file"].GetValue <double[, ]>()).ToInt32();
                scannames_count = scan_of_file.Length;
                sampleNameList.Clear();
                sampleNameList.Add(scannames[scan_of_file[0, 0]].Value.ToString());
                sampleCoordList.Clear();
                sampleCoordList.Add(0.0);
                scanNamesList.Clear();
                int intercept = 0;
                for (int i = 0; i < scannames_count; i++)
                {
                    scanNamesList.Add(scannames[scan_of_file[0, i]].Value.ToString());
                    if (i > 0)
                    {
                        if (scannames[scan_of_file[0, i]].Value.ToString() != scannames[scan_of_file[0, i - 1]].Value.ToString())
                        {
                            sampleNameList.Add(scannames[scan_of_file[0, i]].Value.ToString());
                            sampleCoordList.Add(i);
                            intercept = i;
                        }
                    }
                    sampleScanList.Add(Convert.ToString(i + 1 - intercept));
                }
                R_matrix.scan_names = sampleScanList;
                R_matrix.file_names = sampleNameList;
                R_matrix.refresh();
                update_figure(threshold);
                Cursor = Cursors.Arrow;
            }
            catch (Exception e)
            {
                var msg = e.Message;
                Cursor = Cursors.Arrow;
                MessageBox.Show(msg, "Warning", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly);
                return;
            }
        }