Exemple #1
0
        private void compare_btn_clk(object sender, RoutedEventArgs e)
        {
            if (this.all_tasks_lv.Items.Count <= 1 || this.all_tasks_lv.Items.Count >= 4)
            {
                MessageBox.Show(Message_Help.TASK_COMPARE_WRONG);
                return;
            }
            List <Task>           tasks      = new List <Task>();
            List <List <string> > rawss_path = new List <List <string> >();

            for (int i = 0; i < this.all_tasks_lv.Items.Count; ++i)
            {
                Task task = new Task(this.all_tasks_lv.Items[i] as string, "pTop");
                tasks.Add(task);
                rawss_path.Add(task.get_raws_path());
            }
            bool is_right = true;

            for (int i = 0; i < rawss_path.Count; ++i)
            {
                for (int j = i + 1; j < rawss_path.Count; ++j)
                {
                    if (is_not_equal(rawss_path[i], rawss_path[j]))
                    {
                        string caption       = "Warning";
                        string wrong_message = Message_Help.TASK_NOT_EQUAL + "\r\n";
                        for (int k = 0; k < rawss_path.Count; ++k)
                        {
                            wrong_message += (k + 1) + ":\r\n";
                            for (int p = 0; p < rawss_path[k].Count; ++p)
                            {
                                wrong_message += rawss_path[k][p] + "\r\n";
                            }
                        }
                        //MessageBoxButton buttons = MessageBoxButton.YesNo;
                        //MessageBoxImage icon = MessageBoxImage.Warning;
                        //if (MessageBox.Show(wrong_message, caption, buttons, icon) == MessageBoxResult.Yes)
                        //{
                        //    is_right = true;
                        //}
                        //else
                        //{
                        //    is_right=false;
                        //}
                    }
                }
            }
            if (!is_right)
            {
                return;
            }

            //对比List<task>的结果
            int raws_number = rawss_path[0].Count;

            System.Collections.Hashtable raw_index = new System.Collections.Hashtable();
            for (int i = 0; i < raws_number; ++i)
            {
                raw_index[rawss_path[0][i]] = i;
            }
            List <Task_Compare_Sample> task_compares = new List <Task_Compare_Sample>();

            for (int i = 0; i < tasks.Count; ++i)
            {
                Task_Compare_Sample tcs = new Task_Compare_Sample(tasks[i], rawss_path[i].Count);
                for (int j = 0; j < rawss_path[i].Count; ++j)
                {
                    string raw_path = rawss_path[i][j];
                    string raw_name = raw_path.Split('\\').Last();
                    raw_name = raw_name.Split('.').First();
                    tcs.update_psms((int)raw_index[rawss_path[i][j]], raw_name);
                }
                task_compares.Add(tcs);
            }
            //分RAW来进行比较
            if (task_compares.Count == 2) //两个任务的比较
            {
                Task_Compare_Sample ta = task_compares[0];
                Task_Compare_Sample tb = task_compares[1];
                string     result      = "";
                List <int> numbers     = new List <int>();
                for (int i = 0; i < raws_number; ++i)
                {
                    List <PSM> ta_psms     = ta.psms[i];
                    List <PSM> tb_psms     = tb.psms[i];
                    int        same_number = get_same_number(ta_psms, tb_psms);
                    string     raw_name    = ta_psms[0].Title.Split('.')[0] + ".raw";
                    result += "---------------------" + "\r\n";
                    result += raw_name + " :\r\n";
                    result += "A: " + ta_psms.Count + "\r\n";
                    result += "B: " + tb_psms.Count + "\r\n";
                    result += "A&B: " + same_number + "\r\n";
                    result += "---------------------" + "\r\n";
                    numbers.Add(ta_psms.Count);
                    numbers.Add(tb_psms.Count);
                    numbers.Add(same_number);
                }
                Display_Help dh = new Display_Help();
                //有两个任务,有多个RAW的结果,每个RAW的结果都有一张图
                PlotModel model   = dh.display_compare_result(numbers);
                Plot      oxyplot = new Plot();
                oxyplot.Model  = model;
                oxyplot.Width  = 400;
                oxyplot.Height = 400;
                this.compare_result_sp.Children.Add(oxyplot);
                MessageBox.Show(result);
            }
            else if (task_compares.Count == 3) //三个任务的比较
            {
                Task_Compare_Sample ta = task_compares[0];
                Task_Compare_Sample tb = task_compares[1];
                Task_Compare_Sample tc = task_compares[2];
                string     result      = "";
                List <int> numbers     = new List <int>();
                for (int i = 0; i < raws_number; ++i)
                {
                    List <PSM> ta_psms      = ta.psms[i];
                    List <PSM> tb_psms      = tb.psms[i];
                    List <PSM> tc_psms      = tc.psms[i];
                    int        same_number1 = get_same_number(ta_psms, tb_psms);
                    int        same_number2 = get_same_number(ta_psms, tc_psms);
                    int        same_number3 = get_same_number(tb_psms, tc_psms);
                    int        same_number4 = get_same_number(ta_psms, tb_psms, tc_psms);
                    string     raw_name     = ta_psms[0].Title.Split('.')[0] + ".raw";
                    result += "---------------------" + "\r\n";
                    result += raw_name + " :\r\n";
                    result += "A: " + ta_psms.Count + "\r\n";
                    result += "B: " + tb_psms.Count + "\r\n";
                    result += "C: " + tc_psms.Count + "\r\n";
                    result += "A&B: " + same_number1 + "\r\n";
                    result += "A&C: " + same_number2 + "\r\n";
                    result += "B&C: " + same_number3 + "\r\n";
                    result += "A&B&C: " + same_number4 + "\r\n";
                    result += "---------------------" + "\r\n";
                    numbers.Add(ta_psms.Count);
                    numbers.Add(tb_psms.Count);
                    numbers.Add(tc_psms.Count);
                    numbers.Add(same_number1);
                    numbers.Add(same_number2);
                    numbers.Add(same_number3);
                    numbers.Add(same_number4);
                }
                Display_Help dh = new Display_Help();
                //有三个任务,有多个RAW的结果,每个RAW的结果都有一张图
                PlotModel model   = dh.display_compare_result2(numbers);
                Plot      oxyplot = new Plot();
                oxyplot.Model  = model;
                oxyplot.Width  = 400;
                oxyplot.Height = 400;
                this.compare_result_sp.Children.Add(oxyplot);
                MessageBox.Show(result);
            }
        }
Exemple #2
0
        private void compare_btn_clk(object sender, RoutedEventArgs e)
        {
            if (this.all_tasks_lv.Items.Count != 1 || this.all_tasks_lv2.Items.Count != 1)
            {
                return;
            }
            StreamReader  sr_max     = new StreamReader(all_tasks_lv2.Items[0] as string);
            StreamWriter  sw_same    = new StreamWriter("same.txt");
            StreamWriter  sw_notSame = new StreamWriter("MaxQuant_pFindNot.txt");
            List <string> max_str    = new List <string>();
            List <string> find_str   = new List <string>();
            string        line       = sr_max.ReadLine();

            string[] titles = line.Split('\t');
            int      raw_index = -1, scan_index = -1, sq_index = -1;

            for (int i = 0; i < titles.Length; ++i)
            {
                if (titles[i] == "Raw file")
                {
                    raw_index = i;
                }
                else if (titles[i] == "Scan number")
                {
                    scan_index = i;
                }
                else if (titles[i] == "Sequence")
                {
                    sq_index = i;
                }
            }
            if (raw_index == -1 || scan_index == -1 || sq_index == -1)
            {
                return;
            }
            while (!sr_max.EndOfStream)
            {
                line = sr_max.ReadLine();
                if (line.Trim() == "")
                {
                    continue;
                }
                string[] strs = line.Split('\t'); //9 scan,11 sq
                string   sq   = strs[sq_index];
                sq = sq.Replace('L', 'I');
                string scan_sq = strs[raw_index] + "@" + strs[scan_index] + "@" + sq; //raw@scan@sq
                max_str.Add(scan_sq);
            }
            sr_max.Close();

            string       pfind_task_path = all_tasks_lv.Items[0] as string;
            Task         task            = new Task(pfind_task_path, "pTop");
            StreamReader sr_find         = new StreamReader(task.identification_file);

            while (!sr_find.EndOfStream)
            {
                line = sr_find.ReadLine();
                if (line.Trim() == "")
                {
                    continue;
                }
                string[] strs  = line.Split('\t'); //1 scan, 5 sq
                string   sq    = strs[5];
                string   title = strs[0];
                string[] strs2 = title.Split('.');
                sq = sq.Replace('L', 'I');
                string scan_sq = strs2[0] + "@" + strs[1] + "@" + sq;
                double q_value = double.Parse(strs[4]);
                if (q_value > 0.01)
                {
                    continue;
                }
                find_str.Add(scan_sq);
            }
            sr_find.Close();

            max_str.Sort();
            find_str.Sort();

            int same_num = 0;
            int mi = 0, fi = 0;

            while (mi < max_str.Count && fi < find_str.Count)
            {
                if (string.Compare(max_str[mi], find_str[fi]) < 0)
                {
                    sw_notSame.WriteLine(max_str[mi]);
                    ++mi;
                }
                else if (string.Compare(max_str[mi], find_str[fi]) > 0)
                {
                    ++fi;
                }
                else
                {
                    sw_same.WriteLine(max_str[mi]);
                    ++same_num;
                    ++mi;
                    ++fi;
                }
            }
            sw_same.Flush();
            sw_same.Close();
            sw_notSame.Flush();
            sw_notSame.Close();
            string msg = "Same: " + same_num;

            msg += "\r\nMaxQuant: " + max_str.Count;
            msg += "\r\npFind 3.0: " + find_str.Count;
            List <int> numbers = new List <int>();

            numbers.Add(find_str.Count);
            numbers.Add(max_str.Count);
            numbers.Add(same_num);
            Display_Help dh = new Display_Help();
            //有两个任务,有多个RAW的结果,每个RAW的结果都有一张图
            PlotModel model   = dh.display_compare_result(numbers);
            Plot      oxyplot = new Plot();

            oxyplot.Model  = model;
            oxyplot.Width  = 400;
            oxyplot.Height = 400;
            this.compare_result_sp.Children.Add(oxyplot);
            MessageBox.Show(msg);
        }