public CorrectionProfile(CorrectionProfile profile1, CorrectionProfile profile2) { ArrayList newList = new ArrayList(); /* first sort the list by frequency */ List <CorrectionProfilePoint> list1 = new List <CorrectionProfilePoint>(profile1.ProfilePoints); List <CorrectionProfilePoint> list2 = new List <CorrectionProfilePoint>(profile2.ProfilePoints); list1.Sort(delegate(CorrectionProfilePoint p1, CorrectionProfilePoint p2) { return((int)(p1.Frequency - p2.Frequency)); }); list2.Sort(delegate(CorrectionProfilePoint p1, CorrectionProfilePoint p2) { return((int)(p1.Frequency - p2.Frequency)); }); int pos1 = 0; int pos2 = 0; while ((pos1 < list1.Count) || (pos2 < list2.Count)) { if (pos1 >= list1.Count) { newList.Add(new CorrectionProfilePoint(list2[pos2].Frequency, list2[pos2].CorrectionOffset)); pos2++; } else if (pos2 >= list2.Count) { newList.Add(new CorrectionProfilePoint(list1[pos1].Frequency, list1[pos1].CorrectionOffset)); pos1++; } else if (list1[pos1].Frequency == list2[pos2].Frequency) { newList.Add(new CorrectionProfilePoint(list1[pos1].Frequency, (list1[pos1].CorrectionOffset + list2[pos2].CorrectionOffset) / 2)); pos1++; pos2++; } else if (list1[pos1].Frequency < list2[pos2].Frequency) { newList.Add(new CorrectionProfilePoint(list1[pos1].Frequency, list1[pos1].CorrectionOffset)); pos1++; } else if (list1[pos1].Frequency > list2[pos2].Frequency) { newList.Add(new CorrectionProfilePoint(list2[pos2].Frequency, list2[pos2].CorrectionOffset)); pos2++; } } LinkedList <CorrectionProfilePoint> profilePoints = new LinkedList <CorrectionProfilePoint>((CorrectionProfilePoint[])newList.ToArray(typeof(CorrectionProfilePoint))); ProfilePoints = new LinkedList <CorrectionProfilePoint>(profilePoints); }
public AttenuationCorrection(string fileName) { Profile = new CorrectionProfile(fileName); }
public AttenuationCorrection(CorrectionProfile profile) { Profile = profile; }
public AttenuationCorrection() { Profile = new CorrectionProfile(); }