private void button2_Click(object sender, EventArgs e) { if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) { StreamReader sr = new StreamReader(openFileDialog1.FileName); sr.ReadLine();//Title Dictionary <string, List <PeaksFromResult> > dictAllPeaks = new Dictionary <string, List <PeaksFromResult> >(); do { string[] tmpAry = sr.ReadLine().Split(','); PeaksFromResult PKResult = new PeaksFromResult(Convert.ToSingle(tmpAry[0]), Convert.ToSingle(tmpAry[3]), tmpAry[6]); string GlycanKey = tmpAry[5]; if (!dictAllPeaks.ContainsKey(GlycanKey)) { dictAllPeaks.Add(GlycanKey, new List <PeaksFromResult>()); } dictAllPeaks[GlycanKey].Add(PKResult); } while (!sr.EndOfStream); foreach (string GKey in dictAllPeaks.Keys) { Dictionary <float, float> MergeIntensity = new Dictionary <float, float>(); List <float> Time = new List <float>(); foreach (PeaksFromResult PKR in dictAllPeaks[GKey]) { if (!MergeIntensity.ContainsKey(PKR.Time)) { MergeIntensity.Add(PKR.Time, 0); } MergeIntensity[PKR.Time] = MergeIntensity[PKR.Time] + PKR.Intensity; if (!Time.Contains(PKR.Time)) { Time.Add(PKR.Time); } } //Merge Intensity Time.Sort(); float[] ArryIntesity = new float[Time.Count]; float[] ArryTime = Time.ToArray(); for (int i = 0; i < Time.Count; i++) { ArryIntesity[i] = MergeIntensity[Time[i]]; } List <float[]> PeaksTime = new List <float[]>(); List <float[]> PeaksIntensity = new List <float[]>(); do { //Iter to find peak int MaxIdx = FindMaxIdx(ArryIntesity); int PeakStart = MaxIdx - 1; if (PeakStart < 0) { PeakStart = 0; } int PeakEnd = MaxIdx + 1; if (PeakEnd > ArryTime.Length - 1) { PeakEnd = ArryTime.Length - 1; } //PeakStartPoint while (PeakStart > 0) { if (ArryTime[PeakStart] - ArryTime[PeakStart - 1] < 0.5 && ArryTime[MaxIdx] - ArryTime[PeakStart] < 5.0) { PeakStart = PeakStart - 1; } else { break; } } //PeakEndPoint while (PeakEnd < ArryTime.Length - 1) { if (ArryTime[PeakEnd + 1] - ArryTime[PeakEnd] < 0.5 && ArryTime[PeakEnd] - ArryTime[MaxIdx] < 5.0) { PeakEnd = PeakEnd + 1; } else { break; } } //Peak Array float[] PeakTime = new float[PeakEnd - PeakStart + 1]; float[] PeakInt = new float[PeakEnd - PeakStart + 1]; Array.Copy(ArryTime, PeakStart, PeakTime, 0, PeakEnd - PeakStart + 1); Array.Copy(ArryIntesity, PeakStart, PeakInt, 0, PeakEnd - PeakStart + 1); PeaksTime.Add(PeakTime); PeaksIntensity.Add(PeakInt); //MergeRest int SizeOfRestArray = ArryTime.Length - PeakEnd + PeakStart - 1; float[] NewArryTime = new float[SizeOfRestArray]; float[] NewArryIntensity = new float[SizeOfRestArray]; Array.Copy(ArryTime, 0, NewArryTime, 0, PeakStart); Array.Copy(ArryTime, PeakEnd + 1, NewArryTime, PeakStart, ArryTime.Length - 1 - PeakEnd); Array.Copy(ArryIntesity, 0, NewArryIntensity, 0, PeakStart); Array.Copy(ArryIntesity, PeakEnd + 1, NewArryIntensity, PeakStart, ArryTime.Length - 1 - PeakEnd); ArryTime = NewArryTime; ArryIntesity = NewArryIntensity; } while (ArryTime.Length != 0); } } }
private void button2_Click(object sender, EventArgs e) { if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) { StreamReader sr = new StreamReader(openFileDialog1.FileName); sr.ReadLine();//Title Dictionary<string, List<PeaksFromResult>> dictAllPeaks = new Dictionary<string, List<PeaksFromResult>>(); do { string[] tmpAry = sr.ReadLine().Split(','); PeaksFromResult PKResult = new PeaksFromResult(Convert.ToSingle(tmpAry[0]), Convert.ToSingle(tmpAry[3]), tmpAry[6]); string GlycanKey = tmpAry[5]; if (!dictAllPeaks.ContainsKey(GlycanKey)) { dictAllPeaks.Add(GlycanKey, new List<PeaksFromResult>()); } dictAllPeaks[GlycanKey].Add(PKResult); } while (!sr.EndOfStream); foreach (string GKey in dictAllPeaks.Keys) { Dictionary<float, float> MergeIntensity = new Dictionary<float, float>(); List<float> Time = new List<float>(); foreach (PeaksFromResult PKR in dictAllPeaks[GKey]) { if (!MergeIntensity.ContainsKey(PKR.Time)) { MergeIntensity.Add(PKR.Time, 0); } MergeIntensity[PKR.Time] = MergeIntensity[PKR.Time] + PKR.Intensity; if (!Time.Contains(PKR.Time)) { Time.Add(PKR.Time); } } //Merge Intensity Time.Sort(); float[] ArryIntesity = new float[Time.Count]; float[] ArryTime = Time.ToArray(); for (int i = 0; i < Time.Count; i++) { ArryIntesity[i] = MergeIntensity[Time[i]]; } List<float[]> PeaksTime = new List<float[]>(); List<float[]> PeaksIntensity = new List<float[]>(); do { //Iter to find peak int MaxIdx = FindMaxIdx(ArryIntesity); int PeakStart = MaxIdx - 1; if (PeakStart < 0) { PeakStart = 0; } int PeakEnd = MaxIdx + 1; if (PeakEnd > ArryTime .Length- 1) { PeakEnd = ArryTime.Length - 1; } //PeakStartPoint while (PeakStart>0) { if (ArryTime[PeakStart] - ArryTime[PeakStart - 1] < 0.5 && ArryTime[MaxIdx] - ArryTime[PeakStart] < 5.0) { PeakStart = PeakStart - 1; } else { break; } } //PeakEndPoint while (PeakEnd < ArryTime.Length - 1) { if (ArryTime[PeakEnd + 1] - ArryTime[PeakEnd] < 0.5 && ArryTime[PeakEnd] - ArryTime[MaxIdx] < 5.0) { PeakEnd = PeakEnd + 1; } else { break; } } //Peak Array float[] PeakTime = new float[PeakEnd - PeakStart + 1]; float[] PeakInt = new float[PeakEnd - PeakStart + 1]; Array.Copy(ArryTime, PeakStart, PeakTime, 0,PeakEnd - PeakStart + 1); Array.Copy(ArryIntesity, PeakStart, PeakInt, 0, PeakEnd - PeakStart + 1); PeaksTime.Add(PeakTime); PeaksIntensity.Add(PeakInt); //MergeRest int SizeOfRestArray = ArryTime.Length - PeakEnd + PeakStart - 1; float[] NewArryTime = new float[SizeOfRestArray]; float[] NewArryIntensity = new float[SizeOfRestArray]; Array.Copy(ArryTime, 0, NewArryTime, 0, PeakStart); Array.Copy(ArryTime, PeakEnd+1, NewArryTime, PeakStart, ArryTime.Length-1- PeakEnd ); Array.Copy(ArryIntesity, 0, NewArryIntensity, 0, PeakStart); Array.Copy(ArryIntesity, PeakEnd+1, NewArryIntensity, PeakStart, ArryTime.Length - 1 - PeakEnd); ArryTime = NewArryTime; ArryIntesity = NewArryIntensity; } while (ArryTime.Length!=0); } } }