From ab0e3b721bdba8a06dc71559d31c91f9041fe4ba Mon Sep 17 00:00:00 2001
From: pinyili2 <pinyili2@illinois.edu>
Date: Wed, 21 Aug 2024 14:16:49 -0500
Subject: [PATCH] add

---
 mrdna/readers/segmentmodel_from_cadnano.py    |  5 +----
 .../readers/segmentmodel_from_oxdna_pinyi.py  | 21 ++++++++++++++-----
 mrdna/readers/segmentmodel_from_scadnano.py   |  8 +++++++
 3 files changed, 25 insertions(+), 9 deletions(-)

diff --git a/mrdna/readers/segmentmodel_from_cadnano.py b/mrdna/readers/segmentmodel_from_cadnano.py
index 7c6c33c..a31a134 100644
--- a/mrdna/readers/segmentmodel_from_cadnano.py
+++ b/mrdna/readers/segmentmodel_from_cadnano.py
@@ -178,10 +178,7 @@ def gen_prop_table(part):
     for i in not_stacked:
         zid=int(nt_prop.loc[i]["zid"])
         fwd=nt_prop.loc[i]["fwd"]
-        if fwd == True:
-            zid+=1
-        else:
-            zid-=1
+        zid+=fwd*2-1
         try:
             ind_tuple.index((nt_prop.loc[i]["vh"],str(zid),fwd))
             nt_prop["stack_tuple"][i]=(nt_prop.loc[i]["vh"],str(zid),fwd)
diff --git a/mrdna/readers/segmentmodel_from_oxdna_pinyi.py b/mrdna/readers/segmentmodel_from_oxdna_pinyi.py
index b14e94f..9dcbbd1 100644
--- a/mrdna/readers/segmentmodel_from_oxdna_pinyi.py
+++ b/mrdna/readers/segmentmodel_from_oxdna_pinyi.py
@@ -103,15 +103,21 @@ def mrdna_model_from_oxdna(coordinate_file, topology_file,virt2nuc=None,get_nt_p
         vh_bool=1-(nt_prop["vh"]%2)*2
         is_scaf_bool=nt_prop["is_scaf"]*2-1
         nt_prop["fwd"]=np.array((is_scaf_bool.T*vh_bool+1)/2,dtype=bool)
-        
+        bp_map=dict(zip(zip(nt_prop["vh"],nt_prop["zid"],nt_prop["fwd"]),nt_prop.index))
+
         for i in nt_prop.index:
             if nt_prop.loc[i]["threeprime"] in nt_prop.index:
                 if nt_prop.loc[nt_prop.loc[i]["threeprime"]]["vh"]!=nt_prop.loc[i]["vh"]:
-                    nt_prop["stack"][i]=-1
-        bp_map=dict(zip(zip(nt_prop["vh"],nt_prop["zid"],nt_prop["is_scaf"]),nt_prop.index))
+                    vh=nt_prop.loc[i]["vh"]
+                    zid=int(nt_prop.loc[i]["zid"])+int(nt_prop.loc[i]["fwd"])*2-1
+                    if (vh,str(zid),nt_prop.loc[i]["fwd"]) in bp_map.keys():
+                        nt_prop["stack"][i]=bp_map[ (vh,str(zid),nt_prop.loc[i]["fwd"])]
+                    else:   
+                        nt_prop["stack"][i]=-1
+        
         bp=-np.ones(len(nt_prop.index),dtype=int)
         counter=0
-        for i,j,k in zip(nt_prop["vh"],nt_prop["zid"],nt_prop["is_scaf"]):
+        for i,j,k in zip(nt_prop["vh"],nt_prop["zid"],nt_prop["fwd"]):
             try:
                 bp[counter]=bp_map[(i,j,not(k))]
             except:
@@ -121,7 +127,12 @@ def mrdna_model_from_oxdna(coordinate_file, topology_file,virt2nuc=None,get_nt_p
         
         non_stack_ind,=np.where(nt_prop["stack"]==-1)
         for i in non_stack_ind:
-            zid=nt_prop
+            zid=int(nt_prop.loc[i][zid])+int(nt_prop.loc[i]["fwd"])*2-1
+            try:
+                nt_prop["stack"][i]=bp_map[(nt_prop.loc[i]["vh"],str(zid),nt_prop.loc[i]["fwd"])]
+            except:
+                continue
+
         return nt_prop
     try:
         nt_prop=get_virt2nuc(virt2nuc,top_data)
diff --git a/mrdna/readers/segmentmodel_from_scadnano.py b/mrdna/readers/segmentmodel_from_scadnano.py
index da2d4c4..863a61b 100644
--- a/mrdna/readers/segmentmodel_from_scadnano.py
+++ b/mrdna/readers/segmentmodel_from_scadnano.py
@@ -120,6 +120,14 @@ def gen_prop_table(fname):
         except:
             continue
     nt_prop["bp"]=bp
+    non_stack_ind,=np.where(nt_prop["stack"]==-1)
+    for i in non_stack_ind:
+        zid=int(nt_prop.loc[i][zid])+int(nt_prop.loc[i]["fwd"])*2-1
+        try:
+            nt_prop["stack"][i]=bp_map[(nt_prop.loc[i]["vh"],str(zid),nt_prop.loc[i]["fwd"])]
+        except:
+            continue
+
     nt_prop["r"]=list(np.array([nt_prop["x"],nt_prop["y"],nt_prop["z"]],dtype="<f4").T)
     return nt_prop
 
-- 
GitLab