//generate pIsobariQ.cfg void pQuant_Inter.pIsobariQ_write(_Task _task) { try { MS2Quant _ms2quant = _task.T_MS2Quant; File _file = _task.T_File; string filepath = _task.Path + "param\\pIsobariQ.cfg"; FileStream qfst = new FileStream(filepath, FileMode.Create, FileAccess.Write); StreamWriter qsw = new StreamWriter(qfst, Encoding.Default); qsw.WriteLine("# This is a standard pIsobariQ configure file."); qsw.WriteLine("# For help: mail to [email protected]"); qsw.WriteLine("# Time: " + DateTime.Now.ToString()); qsw.WriteLine(); qsw.WriteLine("[Basic Options]"); qsw.WriteLine("resultDatapath=" + _task.Path + "result\\pFind.spectra"); string pf1path = ""; for (int i = 0; i < _file.Data_file_list.Count; i++) { string tmp = _file.Data_file_list[i].FilePath; pf1path += tmp.Substring(0, tmp.LastIndexOf(".")) + ".pf1|"; } // 这里我只给出了所有pf1的路径,内核可以自动切割字符串并查找相关的pf2的路径 qsw.WriteLine("pfDatapath=" + pf1path); qsw.WriteLine("quantResultDatapath=" + _task.Path + "result\\pQuant-ms2_result.spectra"); qsw.WriteLine(); qsw.WriteLine("[Database Options]"); qsw.WriteLine("fastaDatapath=" + _task.T_Search.Db.Db_path); qsw.WriteLine("modificationDatapath=" + ConfigHelper.startup_path + "\\modification.ini"); qsw.WriteLine(); qsw.WriteLine("[Method Options]"); qsw.WriteLine("quantitativeMethod=" + _task.T_MS2Quant.QuantitativeMethod); string tmpstr = ""; if (_task.T_MS2Quant.ReporterIonMZ.Count > 0) { tmpstr += _task.T_MS2Quant.ReporterIonMZ[0].ToString(); } for (int i = 1; i < _task.T_MS2Quant.ReporterIonMZ.Count; ++i) { tmpstr += ", " + _task.T_MS2Quant.ReporterIonMZ[i].ToString(); } qsw.WriteLine("reporterIonMZ=" + tmpstr); tmpstr = ""; if (_task.T_MS2Quant.PIDL.Count > 0) { tmpstr += _task.T_MS2Quant.PIDL[0].Nterm_modmass.Name + " " + _task.T_MS2Quant.PIDL[0].Nterm_modmass.Mass.ToString() + ", "; tmpstr += _task.T_MS2Quant.PIDL[0].Cterm_modmass.Name + " " + _task.T_MS2Quant.PIDL[0].Cterm_modmass.Mass.ToString(); } for (int i = 1; i < _task.T_MS2Quant.PIDL.Count; ++i) { tmpstr += "; " + _task.T_MS2Quant.PIDL[i].Nterm_modmass.Name + " " + _task.T_MS2Quant.PIDL[i].Nterm_modmass.Mass.ToString() + ", "; tmpstr += _task.T_MS2Quant.PIDL[i].Cterm_modmass.Name + " " + _task.T_MS2Quant.PIDL[i].Cterm_modmass.Mass.ToString(); } qsw.WriteLine("pIDLplex=" + tmpstr); qsw.WriteLine(); qsw.WriteLine("[Advanced Options]"); qsw.WriteLine("FTMSType=" + ((_task.T_MS2Quant.MS2_Advanced.FTMS_Tolerance.Isppm == 1) ? "ppm":"Da")); qsw.WriteLine("FTMS=" + _task.T_MS2Quant.MS2_Advanced.FTMS_Tolerance.Tl_value.ToString()); qsw.WriteLine("minRange=" + _task.T_MS2Quant.MS2_Advanced.Peak_Range.Left_value.ToString()); qsw.WriteLine("maxRange=" + _task.T_MS2Quant.MS2_Advanced.Peak_Range.Right_value.ToString()); qsw.WriteLine("PIF=" + _task.T_MS2Quant.MS2_Advanced.Pif.ToString()); qsw.WriteLine("PsmFDR=" + (_task.T_MS2Quant.MS2_Advanced.Psm_Fdr / 100.0).ToString()); qsw.WriteLine("ProteinFDR=" + (_task.T_MS2Quant.MS2_Advanced.Protein_Fdr / 100.0).ToString()); qsw.WriteLine("Correct=" + (_task.T_MS2Quant.MS2_Advanced.Correct ? "1":"0")); qsw.WriteLine("runVSN=" + (_task.T_MS2Quant.MS2_Advanced.RunVSN ? "1":"0")); qsw.WriteLine(); qsw.Close(); qfst.Close(); } catch (Exception exe) { throw new Exception("[pIsobariQ_write] Error in pIsobariQ configuration file.\n" + exe.Message); } }
//read from pIsobariQ param void pQuant_Inter.pIsobariQ_read(string task_path, ref _Task _task) { try { FileStream fst = new FileStream(task_path + "\\param\\pIsobariQ.cfg", FileMode.Open); StreamReader sr = new StreamReader(fst, Encoding.Default); string strLine = sr.ReadLine(); #region MS2Quant _ms2quant = _task.T_MS2Quant; while (strLine != null) { strLine = strLine.Trim(); if (strLine.Length > 0 && strLine.Contains("=")) { if (strLine.Length > ("quantitativeMethod").Length && strLine.Substring(0, strLine.LastIndexOf("=")).Equals("quantitativeMethod")) { int tmp = strLine.LastIndexOf("="); _ms2quant.QuantitativeMethod = int.Parse(strLine.Substring(tmp + 1)); } else if (strLine.Length > ("reporterIonMZ").Length && strLine.Substring(0, strLine.LastIndexOf("=")).Equals("reporterIonMZ")) { int tmp = strLine.LastIndexOf("="); string tmpstr = strLine.Substring(tmp + 1); string[] tmparray = tmpstr.Split(new string[] { ", " }, StringSplitOptions.RemoveEmptyEntries); foreach (string str in tmparray) { _ms2quant.ReporterIonMZ.Add(double.Parse(str)); } } else if (strLine.Length > ("pIDLplex").Length && strLine.Substring(0, strLine.LastIndexOf("=")).Equals("pIDLplex")) { int tmp = strLine.LastIndexOf("="); string tmpstr = strLine.Substring(tmp + 1); string[] tmparray = tmpstr.Split(new string[] { "; " }, StringSplitOptions.RemoveEmptyEntries); foreach (string str in tmparray) { string[] modmass = str.Split(new string[] { ", " }, StringSplitOptions.RemoveEmptyEntries); if (modmass.Length != 2) { continue; } string[] nterm = modmass[0].Split(new Char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); string[] cterm = modmass[1].Split(new Char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); if (nterm.Length != 2 || cterm.Length != 2) { continue; } _ms2quant.PIDL.Add(new pIDLplex(nterm[0], double.Parse(nterm[1]), cterm[0], double.Parse(cterm[1]))); } } else if (strLine.Length > ("FTMSType").Length && strLine.Substring(0, strLine.LastIndexOf("=")).Equals("FTMSType")) { int tmp = strLine.LastIndexOf("="); string ftoltype = strLine.Substring(tmp + 1); if (ftoltype.ToLower() == "da") { _ms2quant.MS2_Advanced.FTMS_Tolerance.Isppm = 0; } else if (ftoltype.ToLower() == "ppm") { _ms2quant.MS2_Advanced.FTMS_Tolerance.Isppm = 1; } } else if (strLine.Length > ("FTMS").Length && strLine.Substring(0, strLine.LastIndexOf("=")).Equals("FTMS")) { int tmp = strLine.LastIndexOf("="); _ms2quant.MS2_Advanced.FTMS_Tolerance.Tl_value = double.Parse(strLine.Substring(tmp + 1)); } else if (strLine.Length > ("minRange").Length && strLine.Substring(0, strLine.LastIndexOf("=")).Equals("minRange")) { int tmp = strLine.LastIndexOf("="); _ms2quant.MS2_Advanced.Peak_Range.Left_value = double.Parse(strLine.Substring(tmp + 1)); } else if (strLine.Length > ("maxRange").Length && strLine.Substring(0, strLine.LastIndexOf("=")).Equals("maxRange")) { int tmp = strLine.LastIndexOf("="); _ms2quant.MS2_Advanced.Peak_Range.Right_value = double.Parse(strLine.Substring(tmp + 1)); } else if (strLine.Length > ("PIF").Length && strLine.Substring(0, strLine.LastIndexOf("=")).Equals("PIF")) { int tmp = strLine.LastIndexOf("="); _ms2quant.MS2_Advanced.Pif = double.Parse(strLine.Substring(tmp + 1)); } else if (strLine.Length > ("PsmFDR").Length && strLine.Substring(0, strLine.LastIndexOf("=")).Equals("PsmFDR")) { int tmp = strLine.LastIndexOf("="); _ms2quant.MS2_Advanced.Psm_Fdr = double.Parse(strLine.Substring(tmp + 1)) * 100; } else if (strLine.Length > ("ProteinFDR").Length && strLine.Substring(0, strLine.LastIndexOf("=")).Equals("ProteinFDR")) { int tmp = strLine.LastIndexOf("="); _ms2quant.MS2_Advanced.Protein_Fdr = double.Parse(strLine.Substring(tmp + 1)) * 100; } else if (strLine.Length > ("Correct").Length && strLine.Substring(0, strLine.LastIndexOf("=")).Equals("Correct")) { int tmp = strLine.LastIndexOf("="); _ms2quant.MS2_Advanced.Correct = (int.Parse(strLine.Substring(tmp + 1)) == 1) ? true : false; } else if (strLine.Length > ("runVSN").Length && strLine.Substring(0, strLine.LastIndexOf("=")).Equals("runVSN")) { int tmp = strLine.LastIndexOf("="); _ms2quant.MS2_Advanced.RunVSN = (int.Parse(strLine.Substring(tmp + 1)) == 1) ? true : false; } } strLine = sr.ReadLine(); } #endregion sr.Close(); fst.Close(); } catch (Exception exe) { throw new Exception("[pIsobariQ_read] Error in pIsobariQ configuration file.\n" + exe.Message); } }