public override void MapReadToFeature(List <FeatureLocation> features, Dictionary <string, Dictionary <char, List <SAMAlignedLocation> > > chrStrandReadMap) { base.MapReadToFeature(features, chrStrandReadMap); if (allowNTA) { //NTA has to be at the end of tRNA. features.RemoveAll(m => { m.SamLocations.RemoveAll(l => { var loc = l.SamLocation; if (!loc.Parent.Qname.Contains(SmallRNAConsts.NTA_TAG)) { return(false); } var nta = loc.Parent.Qname.StringAfter(SmallRNAConsts.NTA_TAG); if (nta.Length == 0) { return(false); } if (loc.End != l.FeatureLocation.End || !allowedNTAs.Contains(nta)) { return(true); } if (nta.Equals("CC")) { return(!cca.Contains(loc.Parent.Qname.StringBefore(SmallRNAConsts.NTA_TAG))); } return(false); }); return(m.SamLocations.Count == 0); }); SmallRNAUtils.SelectBestMatchedNTA(features); } else { //all queries with NTA will be removed. features.RemoveAll(m => { m.SamLocations.RemoveAll(l => { var loc = l.SamLocation; if (!loc.Parent.Qname.Contains(SmallRNAConsts.NTA_TAG)) { return(false); } var nta = loc.Parent.Qname.StringAfter(SmallRNAConsts.NTA_TAG); return(nta.Length > 0); }); return(m.SamLocations.Count == 0); }); } }
public override void MapReadToFeature(List <FeatureLocation> features, Dictionary <string, Dictionary <char, List <SAMAlignedLocation> > > chrStrandReadMap) { base.MapReadToFeature(features, chrStrandReadMap); //For each query, keep the one with the best offset var fsls = (from m in features from l in m.SamLocations select l).GroupBy(m => m.SamLocation.Parent).ToList().ConvertAll(m => m.ToArray()); //filter offset by priority foreach (var fsl in fsls) { if (fsl.Count() == 1) { continue; } var bestOffset = fsl.Min(m => Options.Offsets.IndexOf(m.Offset)); foreach (var f in fsl) { if (Options.Offsets.IndexOf(f.Offset) != bestOffset) { f.FeatureLocation.SamLocations.Remove(f); f.SamLocation.Features.Remove(f.FeatureLocation); } } } //filter NTA if (hasNTA) { //remove all CCAA NTA which is designed for tRNA features.RemoveAll(m => { m.SamLocations.RemoveAll(s => s.SamLocation.Parent.Qname.StringAfter(SmallRNAConsts.NTA_TAG).Equals("CCAA")); return(m.SamLocations.Count == 0); }); SmallRNAUtils.SelectBestMatchedNTA(features); } }