def spanners_3prime(self): for (name, spanners_fwd), (name1, spanners_rev) in itertools.izip( self.spanners_over(lambda item: item.ambiguous_depths[0].spanner_ends()), self.spanners_over(lambda item: item.ambiguous_depths[1].spanner_starts()), ): yield name, spanner.zip_spanners( spanner.map_spanner(sum, spanners_fwd), spanner.map_spanner(sum, spanners_rev), )
def spanners_total(self): for (name,fwd_spanner),(name1,rev_spanner) in itertools.izip( self.spanners_over(lambda item: item.ambiguous_depths[0].spanner()), self.spanners_over(lambda item: item.ambiguous_depths[1].spanner()) ): yield name, spanner.zip_spanners( spanner.map_spanner(sum, fwd_spanner), spanner.map_spanner(sum, rev_spanner), )
def spanner_ambiguity(self): def ambiguity((depths, ambiguous_depths)): total_ambiguous = sum(ambiguous_depths) if not total_ambiguous: return (0.0,) else: return (1.0 - float(sum(depths)) / total_ambiguous,) for (name, spanner_depths), (name1, spanner_ambiguous_depths) in itertools.izip( self.spanners_over_unstranded(lambda item: item.depths), self.spanners_over_unstranded(lambda item: item.ambiguous_depths)): yield name, spanner.map_spanner(ambiguity, spanner.zip_spanners(spanner_depths, spanner_ambiguous_depths))
def spanners_over(self, access_func): for name in self.chromosome_names: yield name, spanner.zip_spanners(*[ access_func(item[name]) for item in self.depths ])