public static void AddToList(List <OverlappedChipSeqItem> currResult, ChipSeqItem chipSeqItem) { var maxpercentage = 0.0; OverlappedChipSeqItem maxcr = null; foreach (var cr in currResult) { foreach (var item in cr) { var oc = item.GetOverlapPercentage(chipSeqItem); if (oc > maxpercentage) { maxcr = cr; maxpercentage = oc; } } } if (maxcr != null) { maxcr.Add(chipSeqItem); } else { maxcr = new OverlappedChipSeqItem(); maxcr.Add(chipSeqItem); currResult.Add(maxcr); } }
public static Dictionary <string, List <OverlappedChipSeqItem> > ReadItems(List <string> sourceFiles) { if (sourceFiles.Count <= 2) { throw new ArgumentException("Input at least two data files first!"); } var firstFile = ReadInGeneItem(sourceFiles[0]); var curResult = OverlappedChipSeqItem.Build(firstFile); for (int i = 1; i < sourceFiles.Count; i++) { var curFile = ReadInGeneItem(sourceFiles[i]); foreach (var item in curFile) { if (!curResult.ContainsKey(item.GeneSymbol)) { var oi = new OverlappedChipSeqItem(); oi.Add(item); var oil = new List <OverlappedChipSeqItem>(); oil.Add(oi); curResult[item.GeneSymbol] = oil; continue; } var curGroup = curResult[item.GeneSymbol]; OverlappedChipSeqItem.AddToList(curGroup, item); } } return(curResult); }
public static Dictionary <string, List <OverlappedChipSeqItem> > Build(List <ChipSeqItem> items) { var result = new Dictionary <string, List <OverlappedChipSeqItem> >(); var grp = items.GroupBy(m => m.GeneSymbol); foreach (var g in grp) { var currResult = new List <OverlappedChipSeqItem>(); var cs = g.OrderBy(m => m.Start).ToList(); var r = new OverlappedChipSeqItem(); r.Add(cs[0]); currResult.Add(r); for (int i = 1; i < cs.Count; i++) { AddToList(currResult, cs[i]); } result[g.Key] = currResult; } return(result); }