Exemplo n.º 1
0
        public List <ModResModel> getPmFromDB(double ipaco)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append("SELECT max(z) MAXZ,Parent_ions.* FROM Parent_ions group by seq,mod_res");
            //sb.Append(" WHERE ABS(MZ - " + pmFromFile.ToString() + ") < " + deviation + "order by FORUMLA");

            DataSet ds = sqlHelper.Query(sb.ToString());

            int count = ds.Tables[0].Rows.Count;

            List <ModResModel> lst = new List <ModResModel>();

            ModResModel model = new ModResModel();

            for (int i = 0; i < count; i++)
            {
                //if (model.Forumla == ds.Tables[0].Rows[i]["FORUMLA"].ToString())
                //{
                //continue;
                //}
                model          = new ModResModel();
                model.ID       = ds.Tables[0].Rows[i]["ID"].ToString();
                model.Mod_Res  = ds.Tables[0].Rows[i]["MOD_RES"].ToString();
                model.Z        = int.Parse(ds.Tables[0].Rows[i]["MAXZ"].ToString());
                model.Sequence = ds.Tables[0].Rows[i]["SEQ"].ToString();
                model.M_Z      = double.Parse(ds.Tables[0].Rows[i]["MZ"].ToString());
                model.Forumla  = ds.Tables[0].Rows[i]["FORUMLA"].ToString();
                model.M_Z_ALL  = ds.Tables[0].Rows[i]["MZ_ALL"].ToString().Split(',').Select(ms => double.Parse(ms)).ToList();
                model.M_ALL    = ds.Tables[0].Rows[i]["Relative_Abundance_ALL"].ToString().Split(',').Select(ms => double.Parse(ms)).ToList();
                List <MassPoint> lstMassPoint = new List <MassPoint>();

                for (int j = 0; j < model.M_Z_ALL.Count; j++)
                {
                    MassPoint mp = new MassPoint();

                    mp.Mass      = Convert.ToDouble(model.M_Z_ALL[j]);
                    mp.Intensity = Convert.ToDouble(model.M_ALL[j]);

                    if (Convert.ToDouble(model.M_ALL[j]) * 100 > ipaco)
                    {
                        if (Convert.ToDouble(model.M_ALL[j]) == 1.000)
                        {
                            model.M = lstMassPoint.Count;
                        }
                        lstMassPoint.Add(mp);
                    }
                }

                model.Mass_Point = lstMassPoint;
                lst.Add(model);
            }

            return(lst);
        }
Exemplo n.º 2
0
        public List <ModResModel> getPmFromDB(double pmFromFile, double deviation, double ipaco)
        {
            StringBuilder sb = new StringBuilder();

            //sb.AppendFormat("SELECT * FROM {0}", sTableName);
            //sb.AppendFormat(" WHERE ABS(MZ - {0}) < {1}", pmFromFile, deviation);
            //sb.Append(" ORDER BY FORUMLA");

            sb.AppendFormat("SELECT * FROM {0}", sTableName);
            sb.AppendFormat(" WHERE MZ < {0} + {1} AND MZ > {2}", pmFromFile, deviation, pmFromFile);
            sb.AppendFormat("    OR MZ < {0} AND MZ > {1} - {2}", pmFromFile, pmFromFile, deviation);
            sb.Append(" ORDER BY FORUMLA");
            DataSet ds = sqlHelper.Query(sb.ToString());

            List <ModResModel> lst = new List <ModResModel>();

            ModResModel model;

            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                model          = new ModResModel();
                model.ID       = ds.Tables[0].Rows[i]["ID"].ToString();
                model.Mod_Res  = ds.Tables[0].Rows[i]["MOD_RES"].ToString();
                model.Z        = int.Parse(ds.Tables[0].Rows[i]["Z"].ToString());
                model.Sequence = ds.Tables[0].Rows[i]["SEQ"].ToString();
                model.M_Z      = double.Parse(ds.Tables[0].Rows[i]["MZ"].ToString());
                model.Forumla  = ds.Tables[0].Rows[i]["FORUMLA"].ToString();
                model.M_Z_ALL  = ds.Tables[0].Rows[i]["MZ_ALL"].ToString().Split(',').Select(ms => double.Parse(ms)).ToList();
                model.M_ALL    = ds.Tables[0].Rows[i]["Relative_Abundance_ALL"].ToString().Split(',').Select(ms => double.Parse(ms)).ToList();

                List <MassPoint> lstMassPoint = new List <MassPoint>();
                for (int j = 0; j < model.M_Z_ALL.Count; j++)
                {
                    MassPoint mp = new MassPoint();

                    mp.Mass      = Convert.ToDouble(model.M_Z_ALL[j]);
                    mp.Intensity = Convert.ToDouble(model.M_ALL[j]);

                    if (Convert.ToDouble(model.M_ALL[j]) * 100 > ipaco)
                    {
                        if (Convert.ToDouble(model.M_ALL[j]) == 1.000)
                        {
                            model.M = lstMassPoint.Count;
                        }
                        lstMassPoint.Add(mp);
                    }
                }

                model.Mass_Point = lstMassPoint;
                lst.Add(model);
            }

            return(lst);
        }
        public List<string[]> getFmFromDB(string ID, string mod_res,string scanTpye,string seq)
        {
            StringBuilder sb = new StringBuilder();
            List<string[]> returnValue = new List<string[]>();
            sb.Append("SELECT * FROM " + "Fragment_ions");
            sb.Append(" WHERE MOD_RES='" + mod_res + "'");
            //sb.Append(" and SEQ='" + seq + "'");
            //sb.Append(" WHERE ID ='" + ID+"' and MOD_RES='"+mod_res+"'");
            //sb.Append(" WHERE ID ='" + ID + "' and MOD_RES='S1,ac;K20,me2;'");
            //sb.Append(" WHERE ID ='" + ID + "' and MOD_RES=''");
            DataSet ds = sqlHelper.Query(sb.ToString());

            //int count = ds.Tables[0].Rows.Count;
            var drrArr = ds.Tables[0].AsEnumerable().Where(query => query["SEQ"].Equals(seq));
            DataTable dt = drrArr.CopyToDataTable();
            int count = dt.Rows.Count;

            List<ModResModel> lst = new List<ModResModel>();

            ModResModel model = new ModResModel();

            string[] etd_mz = null;
            string[] etd_m = null;
            string[] etd_max = null;
            string useStr = "";
            for (int i = 0; i < count; i++)
            {
                if (scanTpye == "ETD")
                {
                    dt.Rows[i]["ETD_MZ"].ToString();
                    dt.Rows[i]["ETD_Relative_Abundance"].ToString();
                    dt.Rows[i]["ETD_MZ_MAX"].ToString();
                    useStr = dt.Rows[i]["ETD_MZ"].ToString();
                    useStr = System.Text.RegularExpressions.Regex.Replace(useStr, @"([\r\n])[\s]+", "", RegexOptions.IgnoreCase);
                    etd_mz = useStr.Split(new string[] { "&" }, StringSplitOptions.RemoveEmptyEntries);
                    useStr = dt.Rows[i]["ETD_Relative_Abundance"].ToString();
                    useStr = System.Text.RegularExpressions.Regex.Replace(useStr, @"([\r\n])[\s]+", "", RegexOptions.IgnoreCase);
                    etd_m = useStr.Split(new string[] { "&" }, StringSplitOptions.RemoveEmptyEntries);
                    useStr = dt.Rows[i]["ETD_MZ_MAX"].ToString();
                    useStr = System.Text.RegularExpressions.Regex.Replace(useStr, @"([\r\n])[\s]+", "", RegexOptions.IgnoreCase);
                    etd_max = useStr.Split(new string[] { "&" }, StringSplitOptions.RemoveEmptyEntries);
                }
                else
                {
                    dt.Rows[i]["CID_MZ"].ToString();
                    dt.Rows[i]["CID_Relative_Abundance"].ToString();
                    dt.Rows[i]["CID_MZ_MAX"].ToString();
                    useStr = dt.Rows[i]["CID_MZ"].ToString();
                    useStr = System.Text.RegularExpressions.Regex.Replace(useStr, @"([\r\n])[\s]+", "", RegexOptions.IgnoreCase);
                    etd_mz = useStr.Split(new string[] { "&" }, StringSplitOptions.RemoveEmptyEntries);
                    useStr = dt.Rows[i]["CID_Relative_Abundance"].ToString();
                    useStr = System.Text.RegularExpressions.Regex.Replace(useStr, @"([\r\n])[\s]+", "", RegexOptions.IgnoreCase);
                    etd_m = useStr.Split(new string[] { "&" }, StringSplitOptions.RemoveEmptyEntries);
                    useStr = dt.Rows[i]["CID_MZ_MAX"].ToString();
                    useStr = System.Text.RegularExpressions.Regex.Replace(useStr, @"([\r\n])[\s]+", "", RegexOptions.IgnoreCase);
                    etd_max = useStr.Split(new string[] { "&" }, StringSplitOptions.RemoveEmptyEntries);

                }
                returnValue.Add(etd_mz);
                returnValue.Add(etd_m);
                returnValue.Add(etd_max);
            }

            return returnValue;
        }
        public List<ModResModel> getPmFromDB(double ipaco)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("SELECT max(z) MAXZ,Parent_ions.* FROM Parent_ions group by seq,mod_res");
            //sb.Append(" WHERE ABS(MZ - " + pmFromFile.ToString() + ") < " + deviation + "order by FORUMLA");

            DataSet ds = sqlHelper.Query(sb.ToString());

            int count = ds.Tables[0].Rows.Count;

            List<ModResModel> lst = new List<ModResModel>();

            ModResModel model = new ModResModel();
            for (int i = 0; i < count; i++)
            {

                //if (model.Forumla == ds.Tables[0].Rows[i]["FORUMLA"].ToString())
                //{
                //continue;
                //}
                model = new ModResModel();
                model.ID = ds.Tables[0].Rows[i]["ID"].ToString();
                model.Mod_Res = ds.Tables[0].Rows[i]["MOD_RES"].ToString();
                model.Z = int.Parse(ds.Tables[0].Rows[i]["MAXZ"].ToString());
                model.Sequence = ds.Tables[0].Rows[i]["SEQ"].ToString();
                model.M_Z = double.Parse(ds.Tables[0].Rows[i]["MZ"].ToString());
                model.Forumla = ds.Tables[0].Rows[i]["FORUMLA"].ToString();
                model.M_Z_ALL = ds.Tables[0].Rows[i]["MZ_ALL"].ToString().Split(',').Select(ms => double.Parse(ms)).ToList();
                model.M_ALL = ds.Tables[0].Rows[i]["Relative_Abundance_ALL"].ToString().Split(',').Select(ms => double.Parse(ms)).ToList();
                List<MassPoint> lstMassPoint = new List<MassPoint>();

                for (int j = 0; j < model.M_Z_ALL.Count; j++)
                {
                    MassPoint mp = new MassPoint();

                    mp.Mass = Convert.ToDouble(model.M_Z_ALL[j]);
                    mp.Intensity = Convert.ToDouble(model.M_ALL[j]);

                    if (Convert.ToDouble(model.M_ALL[j]) * 100 > ipaco)
                    {
                        if (Convert.ToDouble(model.M_ALL[j]) == 1.000)
                        {
                            model.M = lstMassPoint.Count;
                        }
                        lstMassPoint.Add(mp);
                    }

                }

                model.Mass_Point = lstMassPoint;
                lst.Add(model);
            }

            return lst;
        }
        public List<ModResModel> getPmFromDB(double pmFromFile, double deviation, double ipaco)
        {
            StringBuilder sb = new StringBuilder();

            //sb.AppendFormat("SELECT * FROM {0}", sTableName);
            //sb.AppendFormat(" WHERE ABS(MZ - {0}) < {1}", pmFromFile, deviation);
            //sb.Append(" ORDER BY FORUMLA");

            sb.AppendFormat("SELECT * FROM {0}", sTableName);
            sb.AppendFormat(" WHERE MZ < {0} + {1} AND MZ > {2}", pmFromFile, deviation, pmFromFile);
            sb.AppendFormat("    OR MZ < {0} AND MZ > {1} - {2}", pmFromFile, pmFromFile, deviation);
            sb.Append(" ORDER BY FORUMLA");
            DataSet ds = sqlHelper.Query(sb.ToString());

            List<ModResModel> lst = new List<ModResModel>();

            ModResModel model;
            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                model = new ModResModel();
                model.ID = ds.Tables[0].Rows[i]["ID"].ToString();
                model.Mod_Res = ds.Tables[0].Rows[i]["MOD_RES"].ToString();
                model.Z = int.Parse(ds.Tables[0].Rows[i]["Z"].ToString());
                model.Sequence = ds.Tables[0].Rows[i]["SEQ"].ToString();
                model.M_Z = double.Parse(ds.Tables[0].Rows[i]["MZ"].ToString());
                model.Forumla = ds.Tables[0].Rows[i]["FORUMLA"].ToString();
                model.M_Z_ALL = ds.Tables[0].Rows[i]["MZ_ALL"].ToString().Split(',').Select(ms => double.Parse(ms)).ToList();
                model.M_ALL = ds.Tables[0].Rows[i]["Relative_Abundance_ALL"].ToString().Split(',').Select(ms => double.Parse(ms)).ToList();

                List<MassPoint> lstMassPoint = new List<MassPoint>();
                for (int j = 0; j < model.M_Z_ALL.Count; j++)
                {
                    MassPoint mp = new MassPoint();

                    mp.Mass = Convert.ToDouble(model.M_Z_ALL[j]);
                    mp.Intensity = Convert.ToDouble(model.M_ALL[j]);

                    if (Convert.ToDouble(model.M_ALL[j]) * 100 > ipaco)
                    {
                        if (Convert.ToDouble(model.M_ALL[j]) == 1.000)
                        {
                            model.M = lstMassPoint.Count;
                        }
                        lstMassPoint.Add(mp);
                    }
                }

                model.Mass_Point = lstMassPoint;
                lst.Add(model);
            }

            return lst;
        }
Exemplo n.º 6
0
        public List <string[]> getFmFromDB(string ID, string mod_res, string scanTpye, string seq)
        {
            StringBuilder   sb          = new StringBuilder();
            List <string[]> returnValue = new List <string[]>();

            sb.Append("SELECT * FROM " + "Fragment_ions");
            sb.Append(" WHERE MOD_RES='" + mod_res + "'");
            //sb.Append(" and SEQ='" + seq + "'");
            //sb.Append(" WHERE ID ='" + ID+"' and MOD_RES='"+mod_res+"'");
            //sb.Append(" WHERE ID ='" + ID + "' and MOD_RES='S1,ac;K20,me2;'");
            //sb.Append(" WHERE ID ='" + ID + "' and MOD_RES=''");
            DataSet ds = sqlHelper.Query(sb.ToString());

            //int count = ds.Tables[0].Rows.Count;
            var       drrArr = ds.Tables[0].AsEnumerable().Where(query => query["SEQ"].Equals(seq));
            DataTable dt     = drrArr.CopyToDataTable();
            int       count  = dt.Rows.Count;

            List <ModResModel> lst = new List <ModResModel>();

            ModResModel model = new ModResModel();

            string[] etd_mz  = null;
            string[] etd_m   = null;
            string[] etd_max = null;
            string   useStr  = "";

            for (int i = 0; i < count; i++)
            {
                if (scanTpye == "ETD")
                {
                    dt.Rows[i]["ETD_MZ"].ToString();
                    dt.Rows[i]["ETD_Relative_Abundance"].ToString();
                    dt.Rows[i]["ETD_MZ_MAX"].ToString();
                    useStr  = dt.Rows[i]["ETD_MZ"].ToString();
                    useStr  = System.Text.RegularExpressions.Regex.Replace(useStr, @"([\r\n])[\s]+", "", RegexOptions.IgnoreCase);
                    etd_mz  = useStr.Split(new string[] { "&" }, StringSplitOptions.RemoveEmptyEntries);
                    useStr  = dt.Rows[i]["ETD_Relative_Abundance"].ToString();
                    useStr  = System.Text.RegularExpressions.Regex.Replace(useStr, @"([\r\n])[\s]+", "", RegexOptions.IgnoreCase);
                    etd_m   = useStr.Split(new string[] { "&" }, StringSplitOptions.RemoveEmptyEntries);
                    useStr  = dt.Rows[i]["ETD_MZ_MAX"].ToString();
                    useStr  = System.Text.RegularExpressions.Regex.Replace(useStr, @"([\r\n])[\s]+", "", RegexOptions.IgnoreCase);
                    etd_max = useStr.Split(new string[] { "&" }, StringSplitOptions.RemoveEmptyEntries);
                }
                else
                {
                    dt.Rows[i]["CID_MZ"].ToString();
                    dt.Rows[i]["CID_Relative_Abundance"].ToString();
                    dt.Rows[i]["CID_MZ_MAX"].ToString();
                    useStr  = dt.Rows[i]["CID_MZ"].ToString();
                    useStr  = System.Text.RegularExpressions.Regex.Replace(useStr, @"([\r\n])[\s]+", "", RegexOptions.IgnoreCase);
                    etd_mz  = useStr.Split(new string[] { "&" }, StringSplitOptions.RemoveEmptyEntries);
                    useStr  = dt.Rows[i]["CID_Relative_Abundance"].ToString();
                    useStr  = System.Text.RegularExpressions.Regex.Replace(useStr, @"([\r\n])[\s]+", "", RegexOptions.IgnoreCase);
                    etd_m   = useStr.Split(new string[] { "&" }, StringSplitOptions.RemoveEmptyEntries);
                    useStr  = dt.Rows[i]["CID_MZ_MAX"].ToString();
                    useStr  = System.Text.RegularExpressions.Regex.Replace(useStr, @"([\r\n])[\s]+", "", RegexOptions.IgnoreCase);
                    etd_max = useStr.Split(new string[] { "&" }, StringSplitOptions.RemoveEmptyEntries);
                }
                returnValue.Add(etd_mz);
                returnValue.Add(etd_m);
                returnValue.Add(etd_max);
            }

            return(returnValue);
        }
        private List<ModResModel> comparePMFromDB(string pmMZ, string pmM, string pmMAX, List<MassPoint> msFromFile, int Z, double fat)
        {
            string[] pmMS = pmM.Split(new char[] { ';', '=', ',' });
            string[] pmMZS = pmMZ.Split(new char[] { ';', '=', ',' });
            string[] pmMAXS = pmMAX.Split('=');
            int matchedMZ = 0;
            //int matchedIndex = 0;
            double mz_N = 0.0;
            MassPoint massPoint = null;
            List<ModResModel> returnValue = new List<ModResModel>();
            List<MassPoint> returnMassPointList = null;
            for (int i = 1; i < Z; i++)
            {
                mz_N = (Convert.ToDouble(Convert.ToDouble(pmMAXS[1])) + (i - 1) * 1.00782) / i;
                int j = 0;
                if (mz_N < msFromFile[0].Mass || mz_N > msFromFile[msFromFile.Count - 1].Mass)
                {
                    continue;
                }
                int cutFlag = 0;
                for (j = 100; j < msFromFile.Count; j = j + 100)
                {
                    //double deviationInten = msFromFile[j].Mass - msFromFile[j].Mass / (mz_N / 1000000.0 + 1.0);

                    if (mz_N <= msFromFile[j].Mass)
                    {
                        cutFlag = 1;
                        break;

                    }
                }
                if (j <= 100)
                    j = 100;
                if (cutFlag == 0)
                    j = msFromFile.Count;

                int k = 0;

                for (k = j - 100; k < j; k++)
                {
                    double deviationInten = msFromFile[k].Mass - msFromFile[k].Mass / (mz_N / 1000000.0 + 1.0);

                    if ((System.Math.Abs(msFromFile[k].Mass - mz_N)) < deviationInten)
                    {
                        matchedMZ = i;
                        ModResModel modResModel = new ModResModel();
                        returnMassPointList = new List<MassPoint>();
                        //for (int l = 2; l < pmMS.Count(); l++)
                        //{
                        //    massPoint = new MassPoint();
                        //    massPoint.Mass = Convert.ToDouble(pmMZS[l]);
                        //    massPoint.Intensity = Convert.ToDouble(pmMZS[l]);
                        //    returnMassPointList.Add(massPoint);
                        //}

                        modResModel.ID = pmMAXS[0];
                        double MZ_N = 0.0;
                        modResModel.Z = i;
                        for (int m = 2; m < pmMS.Count(); m++)
                        {
                            if (Convert.ToDouble(pmMS[m]) * 100 > fat)
                            {

                                MassPoint Mass_Point = new MassPoint();
                                MZ_N = (Convert.ToDouble(Convert.ToDouble(pmMZS[m])) + (modResModel.Z - 1) * 1.00782) / modResModel.Z;
                                Mass_Point.Mass = MZ_N;
                                Mass_Point.Intensity = Convert.ToDouble(pmMS[m]);

                                if (Mass_Point.Intensity == 1.00)
                                {
                                    modResModel.M_Z = returnMassPointList.Count;
                                }

                                returnMassPointList.Add(Mass_Point);

                            }
                        }
                        modResModel.Mass_Point = returnMassPointList;

                        //modResModel.M_Z = k;
                        modResModel.ID = pmMS[0];
                        modResModel.M = k;
                        returnValue.Add(modResModel);
                        break;
                    }
                }
            }

            return returnValue;
        }
        public void getMS2MatchsTopDown(MassScan msScan2, MatchedData matchedData)
        {
            testParameter.IPMD = ParameterModel.MS2_IPMD;
            testParameter.IPACO = ParameterModel.MS2_IPACO;
            testParameter.IPAD = ParameterModel.MS2_IPAD;
            testParameter.IPADOM = ParameterModel.MS2_IPADOM;
            testParameter.IPMDOM = ParameterModel.MS2_IPMDOM;
            testParameter.IPADO = ParameterModel.MS2_IPADO;
            testParameter.IPMDO = ParameterModel.MS2_IPMDO;
            if (testParameter.IPMD > testParameter.IPMDOM)
                testParameter.IPMDOM = testParameter.IPMD;

            if (testParameter.IPAD > testParameter.IPADOM)
                testParameter.IPADOM = testParameter.IPAD;
            //testParameter.Window = 5;
            testParameter.PAT = ParameterModel.MS2_FAT;
            List<MassPoint> ms2FromFile = null;
            List<MassPoint> msFromDB = null;
            //ModResModel ms2Matched = new ModResModel();
            List<ModResModel> MatchedMs2 = new List<ModResModel>();
            double maxInten = msScan2.BasePeakIntensity;
            //���˵�5%���µķ�
            ms2FromFile = Base64Convert.CalcMz(msScan2.Peaks, msScan2.PeaksCount);
            List<MassPoint> msFromFileReal = getRealMS2FromFile(ms2FromFile, testParameter.PAT, maxInten);

            List<string[]> fmValue = peptideModResDAL.getFmFromDB(matchedData.ID, matchedData.MOD_RES, msScan2.ScanType, matchedData.Sequence);
            if (fmValue.Count == 0)
            {
                return;
            }
            while (true)
            {
                //ȡ����ߵ�1
                int maxMZIndex = getMaxMZ(msFromFileReal);
                if (maxMZIndex == -1)
                {
                    break;
                }
                if (maxMZIndex == 157)
                {
                    maxMZIndex = 157;
                }
                //����ƫ��
                double deviationInten = msFromFileReal[maxMZIndex].Mass - msFromFileReal[maxMZIndex].Mass / (testParameter.IPMD / 1000000.0 + 1.0);

                //MS��ߵ���DBƥ�� �������㴦��
                List<ModResModel> modResFromDB = getFMPointInfo(msFromFileReal[maxMZIndex].Mass, deviationInten, fmValue, matchedData.Z, testParameter.IPACO);
                msFromFileReal[maxMZIndex].IsSearch = false;
                if (modResFromDB == null)
                {
                    //û��ƥ����
                    continue;

                }
                else
                {
                    for (int k = 0; k < modResFromDB.Count; k++)
                    {
                        msFromDB = modResFromDB[k].Mass_Point;
                        int maxMZindex_DB = Convert.ToInt16(modResFromDB[k].M_Z);
                        //��һƥ����ͼ
                        List<MassPoint> msReturn = comparePMAll(msFromFileReal, maxMZIndex, maxMZindex_DB, msFromDB);
                        if (modResFromDB[k].ID == "B5")
                        {
                            modResFromDB[k].ID = "B5";
                        }
                        //��֤ƥ������ƥ��
                        if (getComparePercentage(msReturn, maxMZindex_DB, msFromDB))
                        {
                            ModResModel ms2Matched = new ModResModel();
                            double baseIntens = msFromFileReal[maxMZIndex].Intensity;
                            ms2Matched.Mass_Point = new List<MassPoint>(msFromDB.ToArray());
                            ms2Matched.Mass_Point_FromFile = new List<MassPoint>();
                            for (int j = 0; j < msReturn.Count; j++)
                            {
                                MassPoint massPoint = new MassPoint();
                                massPoint.Index = msReturn[j].Index;
                                //massPoint.Intensity = new Double();
                                massPoint.Intensity = msReturn[j].Intensity;
                                massPoint.IPAD_R = msReturn[j].IPAD_R;
                                massPoint.IPADOM_R = msReturn[j].IPADOM_R;
                                massPoint.IPMD_R = msReturn[j].IPMD_R;
                                massPoint.IPMDOM_R = msReturn[j].IPMDOM_R;
                                massPoint.Mass = msReturn[j].Mass;
                                massPoint.Index = msReturn[j].Index;
                                massPoint.IntensityPercentage = msReturn[j].IntensityPercentage;
                                ms2Matched.Mass_Point_FromFile.Add(massPoint);
                            }
                            ms2Matched.Z = modResFromDB[k].Z;
                            ms2Matched.ID = modResFromDB[k].ID;

                            MatchedMs2.Add(ms2Matched);
                            //matchedData.MatchedMs2DataExp = ms2Matched;

                            for (int j = 0; j < msReturn.Count; j++)
                            {
                                baseIntens = msFromFileReal[j].Intensity / msReturn[j].IntensityPercentage;
                                msFromFileReal[msReturn[j].MatchIndex].Intensity =
                                        msFromFileReal[msReturn[j].MatchIndex].Intensity - (baseIntens * msFromDB[j].Intensity);
                            }
                        }
                    }
                }
            }
            matchedData.MatchedMs2 = MatchedMs2;
        }
        public void getMS2MatchsTargeted(MassScan msScan2, MatchedData matchedData)
        {
            //testParameter.IPMD = 10;
            //testParameter.IPACO = 5;
            //testParameter.IPAD = 50;
            //testParameter.IPADOM = 100;
            //testParameter.IPMDOM = 30;
            //testParameter.IPADO = 20;
            //testParameter.IPMDO = 20;
            //testParameter.Window = 5;
            //testParameter.PAT = 0.2;

            testParameter.IPMD = ParameterModel.MS2_IPMD;
            testParameter.IPACO = ParameterModel.MS2_IPACO;
            testParameter.IPAD = ParameterModel.MS2_IPAD;
            testParameter.IPADOM = ParameterModel.MS2_IPADOM;
            testParameter.IPMDOM = ParameterModel.MS2_IPMDOM;
            testParameter.IPADO = ParameterModel.MS2_IPADO;
            testParameter.IPMDO = ParameterModel.MS2_IPMDO;
            if (testParameter.IPMD > testParameter.IPMDOM)
                testParameter.IPMDOM = testParameter.IPMD;

            if (testParameter.IPAD > testParameter.IPADOM)
                testParameter.IPADOM = testParameter.IPAD;

            //testParameter.Window = 5;
            testParameter.PAT = ParameterModel.MS2_FAT;

            //if (msScan2.ScanType == "CID")
            //{
            //    return;
            //}
            List<MassPoint> ms2FromFile = null;
            List<MassPoint> msFromDB = null;
            //ModResModel ms2Matched = new ModResModel();
            List<ModResModel> MatchedMs2 = new List<ModResModel>();
            double maxInten = msScan2.BasePeakIntensity;
            //���˵�5%���µķ�
            ms2FromFile = Base64Convert.CalcMz(msScan2.Peaks, msScan2.PeaksCount);
            List<MassPoint> msFromFileReal = getRealMS2FromFile(ms2FromFile, testParameter.PAT, maxInten);

            List<string[]> fmValue = peptideModResDAL.getFmFromDB(matchedData.ID, matchedData.MOD_RES, msScan2.ScanType, matchedData.Sequence);
            if (fmValue.Count == 0)
            {
                return;
            }
            //msFromDB = getFMDataPoints(fmValue);
            for (int i = 0; i < fmValue[0].Count(); i++)
            {
                //��һƥ����ͼ
                List<ModResModel> modResFromDB = comparePMFromDB(fmValue[0][i], fmValue[1][i], fmValue[2][i], msFromFileReal, matchedData.Z, testParameter.IPACO);
                if (modResFromDB.Count > 1)
                {
                    //modResFromDB = null;
                }
                for (int m = 0; m < modResFromDB.Count; m++)
                {
                    if (modResFromDB[m].ID == "Y40")
                    {
                        modResFromDB[m].ID = "Y40";
                    }
                    msFromDB = modResFromDB[m].Mass_Point;
                    int maxMZIndex = Convert.ToInt16(modResFromDB[m].M);//��ʱʹ��
                    int maxMZindex_DB = Convert.ToInt16(modResFromDB[m].M_Z);
                    //��һƥ����ͼ
                    List<MassPoint> msReturn = comparePMAll(msFromFileReal, maxMZIndex, maxMZindex_DB, msFromDB);
                    //��֤ƥ������ƥ��
                    if (getComparePercentage(msReturn, maxMZindex_DB, msFromDB))
                    {
                        ModResModel ms2Matched = new ModResModel();
                        double baseIntens = msFromFileReal[maxMZIndex].Intensity;
                        ms2Matched.Mass_Point = new List<MassPoint>(msFromDB.ToArray());
                        ms2Matched.Mass_Point_FromFile = new List<MassPoint>();
                        for (int j = 0; j < msReturn.Count; j++)
                        {
                            MassPoint massPoint = new MassPoint();
                            massPoint.Index = msReturn[j].Index;
                            //massPoint.Intensity = new Double();
                            massPoint.Intensity = msReturn[j].Intensity;
                            massPoint.IPAD_R = msReturn[j].IPAD_R;
                            massPoint.IPADOM_R = msReturn[j].IPADOM_R;
                            massPoint.IPMD_R = msReturn[j].IPMD_R;
                            massPoint.IPMDOM_R = msReturn[j].IPMDOM_R;
                            massPoint.Mass = msReturn[j].Mass;
                            massPoint.Index = msReturn[j].Index;
                            massPoint.IntensityPercentage = msReturn[j].IntensityPercentage;
                            ms2Matched.Mass_Point_FromFile.Add(massPoint);
                        }
                        //matchedData.ID = modResFromDB[0].ID;
                        //matchedData.MOD_RES = modResFromDB[0].Mod_Res;
                        //matchedData.Z = modResFromDB[0].Z;
                        ms2Matched.Z = modResFromDB[m].Z;
                        ms2Matched.ID = modResFromDB[m].ID;
                        MatchedMs2.Add(ms2Matched);
                        //matchedData.MatchedMs2DataExp = ms2Matched;

                        for (int j = 0; j < msReturn.Count; j++)
                        {
                            //ms2Matched.Mass_Point_FromFile[j].Intensity = new Double();
                            //ms2Matched.Mass_Point_FromFile[j].Intensity = msFromFileReal[msReturn[j].MatchIndex].Intensity;
                            baseIntens = msFromFileReal[j].Intensity / msReturn[j].IntensityPercentage;
                            msFromFileReal[msReturn[j].MatchIndex].Intensity =
                                    msFromFileReal[msReturn[j].MatchIndex].Intensity - (baseIntens * msFromDB[j].Intensity);
                            //if (maxInten * testParameter.IPACO / 100 > msFromFileReal[msReturn[j].MatchIndex].Intensity)
                            //{
                            //    msFromFileReal[msReturn[j].MatchIndex].Intensity = 0;
                            //}
                        }

                    }
                }
            }

            matchedData.MatchedMs2 = MatchedMs2;
            //for (int i = 0; i < MatchedMs2.Count; i++)
            //{
            //    Console.WriteLine("Ion:  " + MatchedMs2[i].ID + "\t" + "Z:  " + MatchedMs2[i].Z);
            //    for (int j = 0; j < MatchedMs2[i].Mass_Point.Count; j++)
            //    {
            //        Console.WriteLine("Mass: \t " + MatchedMs2[i].Mass_Point[j].Mass + "\t" + MatchedMs2[i].Mass_Point_FromFile[j].Mass + "\tIntensity: \t" + MatchedMs2[i].Mass_Point[j].Intensity + "\t" + MatchedMs2[i].Mass_Point_FromFile[j].IntensityPercentage + "\t" + MatchedMs2[i].Mass_Point_FromFile[j].IPAD_R);
            //    }

            //}
        }
        private List<ModResModel> getFMPointInfo(double mzs, double deviationInten, List<string[]> fmValue, int Z, double fat)
        {
            string[] useStr;
            string[] maxMZ = fmValue[2];
            string[] ETD_MZ = fmValue[0];//.Split(new char[] { ';', '=', ',' });
            string[] ETD_M = fmValue[1];//.Split(new char[] { ';', '=', ',' });
            string[] ETD_FM_MZ = null;
            string[] ETD_FM_M = null;
            double MZ_N = 0.0;
            double deviationIntenNow = deviationInten;
            List<ModResModel> returnValue = new List<ModResModel>();
            ModResModel modResModel = new ModResModel();
            List<MassPoint> Mass_PointList = new List<MassPoint>();
            int flag = -1;
            List<int> matchedList = new List<int>();
            for (int i = 0; i < maxMZ.Count(); i++)
            {
                //MZ_N = mzs * j - (j - 1) * 1.00782;
                useStr = maxMZ[i].Split('=');

                for (int j = 1; j < Z; j++)
                {
                    MZ_N = (Convert.ToDouble(useStr[1]) + (j - 1) * 1.00782) / j;
                    if (System.Math.Abs(MZ_N - mzs) < deviationIntenNow)
                    {
                        deviationIntenNow = System.Math.Abs(MZ_N - mzs);
                        modResModel = new ModResModel();
                        modResModel.Z = j;
                        flag = i;
                        modResModel.M_Z = MZ_N;
                        matchedList.Add(i);
                        returnValue.Add(modResModel);
                        //i = maxMZ.Count();
                        // break;
                    }
                }

            }

            //ETD_FM_MZ = ETD_MZ[i].Split(new char[] { ';', '=', ',' });
            //ETD_FM_M = ETD_M[i].Split(new char[]{';','=',','});
            if (flag < 0)
            {
                return null;
            }
            for (int k = 0; k < matchedList.Count(); k++)
            {
                ETD_FM_MZ = ETD_MZ[matchedList[k]].Split(new char[] { ';', '=', ',' });
                ETD_FM_M = ETD_M[matchedList[k]].Split(new char[] { ';', '=', ',' });
                returnValue[k].ID = ETD_FM_MZ[0];
                modResModel.ID = ETD_FM_MZ[0];
                Mass_PointList = new List<MassPoint>();
                for (int i = 2; i < ETD_FM_MZ.Count(); i++)
                {
                    if (Convert.ToDouble(ETD_FM_M[i]) * 100 > fat)
                    {
                        MassPoint Mass_Point = new MassPoint();
                        MZ_N = (Convert.ToDouble(Convert.ToDouble(ETD_FM_MZ[i])) + (returnValue[k].Z - 1) * 1.00782) / returnValue[k].Z;
                        Mass_Point.Mass = MZ_N;
                        Mass_Point.Intensity = Convert.ToDouble(ETD_FM_M[i]);

                        if (Mass_Point.Intensity == 1.00)
                        {
                            returnValue[k].M_Z = Mass_PointList.Count;
                        }
                        Mass_PointList.Add(Mass_Point);

                    }
                }
                returnValue[k].Mass_Point = Mass_PointList;
            }
            /*
                if (flag >= 0)
                {
                    ETD_FM_MZ = ETD_MZ[flag].Split(new char[] { ';', '=', ',' });
                    ETD_FM_M = ETD_M[flag].Split(new char[] { ';', '=', ',' });
                    modResModel.ID = ETD_FM_MZ[0];

                    for (int i = 2; i < ETD_FM_MZ.Count(); i++)
                    {
                        if (Convert.ToDouble(ETD_FM_M[i]) * 100 > fat)
                        {
                            MassPoint Mass_Point = new MassPoint();
                            MZ_N = (Convert.ToDouble(Convert.ToDouble(ETD_FM_MZ[i])) + (modResModel.Z - 1) * 1.00782) / modResModel.Z;
                            Mass_Point.Mass = MZ_N;
                            Mass_Point.Intensity = Convert.ToDouble(ETD_FM_M[i]);

                            if (Mass_Point.Intensity == 1.00)
                            {
                                modResModel.M_Z = Mass_PointList.Count;
                            }
                            Mass_PointList.Add(Mass_Point);

                        }
                    }
                }
            modResModel.Mass_Point = Mass_PointList;
             */
            //returnValue.Add(modResModel);
            return returnValue;
        }