From 6f32fe3ef8da3ac0fd4e8ee56fb48a574993c103 Mon Sep 17 00:00:00 2001
From: Chris Maffeo <cmaffeo2@illinois.edu>
Date: Fri, 13 Sep 2024 18:03:18 -0500
Subject: [PATCH] Add utility for converting crossovers to types other than
 intrahelical

---
 mrdna/segmentmodel.py | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/mrdna/segmentmodel.py b/mrdna/segmentmodel.py
index 5c3875b..346b6c6 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:
-- 
GitLab