Beispiel #1
0
        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);
                });
            }
        }
Beispiel #2
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);
            }
        }