diff --git a/mrdna/segmentmodel.py b/mrdna/segmentmodel.py index 5c3875b817ce674f27e9f48f8bc443d91f95eea8..346b6c6c633e1530110ef8ba5f7bb6aec19986f4 100644 --- a/mrdna/segmentmodel.py +++ b/mrdna/segmentmodel.py @@ -2488,16 +2488,25 @@ class SegmentModel(ArbdModel): terminal_only = True) - def convert_crossovers_to_intrahelical(self, position_filter=None, terminal_only=False): - conn = self.get_crossovers_at_ends() if terminal_only else [c for c,A,B in self.get_connections('crossover')] + def convert_crossovers(self, new_connection_type=None, position_filter=None, terminal_only=False): + conn = self.get_crossovers_at_ends() if terminal_only else [c for c,A,B in self.get_connections('crossover')]+[c for c,A,B in self.get_connections('terminal_crossover')] for c in conn: + _condition = True if position_filter is not None: r1,r2 = [l.container.contour_to_position(l.address) for l in (c.A,c.B)] - if position_filter(r1,r2): + _condition = position_filter(r1,r2) + + if _condition: + if new_connection_type is None: + c.delete() + elif new_connection_type == 'intrahelical': self.convert_crossover_to_intrahelical(c) - else: - self.convert_crossover_to_intrahelical(c) + else: + raise NotImplementedError('convert_crossovers currently only supports removing crossovers') + + def convert_crossovers_to_intrahelical(self, position_filter=None, terminal_only=False): + return self.convert_crossovers('intrahelical', position_filter, terminal_only) def convert_close_crossovers_to_intrahelical(self,cutoff): if cutoff < 0: