Skip to content

Commit 4c80ac1

Browse files
authored
Merge pull request #139 from c-zhou/master
fix bugs
2 parents 8b1e2dc + e407e61 commit 4c80ac1

File tree

3 files changed

+69
-26
lines changed

3 files changed

+69
-26
lines changed

alignments2txt.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,17 +94,25 @@ def update_bed(expanded_scaffold):
9494
prev_info = contig2info[prev_contig]
9595
prev_start = int(prev_attrs[1])
9696
prev_end = int(prev_attrs[2])
97-
new_prev_start = prev_start + prev_info[0]
98-
new_prev_end = prev_end + prev_info[0]
97+
if prev_info[2] == 'FOW':
98+
new_prev_start = prev_info[0] + prev_start
99+
new_prev_end = prev_info[0] + prev_end
100+
else:
101+
new_prev_start = prev_info[0] + unitig_length[prev_contig] - prev_end
102+
new_prev_end = prev_info[0] + unitig_length[prev_contig] - prev_start
99103
olines += "0\t"+prev_scaffold+'\t'+str(new_prev_start)+"\t0\t"
100104
#o_lines += prev_scaffold+'\t'+str(new_prev_start)+'\t'+str(new_prev_end)+'\t'+prev_attrs[3]+'\n'
101105
count += 1
102106

103107
curr_info = contig2info[curr_contig]
104108
curr_start = int(curr_attrs[1])
105109
curr_end = int(curr_attrs[2])
106-
new_curr_start = curr_start + curr_info[0]
107-
new_curr_end = curr_end + curr_info[0]
110+
if curr_info[2] == 'FOW':
111+
new_curr_start = curr_info[0] + curr_start
112+
new_curr_end = curr_info[0] + curr_end
113+
else:
114+
new_curr_start = curr_info[0] + unitig_length[curr_contig] - curr_end
115+
new_curr_end = curr_info[0] + unitig_length[curr_contig] - curr_start
108116
olines += "1\t"+curr_scaffold+'\t'+str(new_curr_start)+"\t1\n"
109117
#o_lines += curr_scaffold+'\t'+str(new_curr_start)+'\t'+str(new_curr_end)+'\t'+curr_attrs[3]+'\n'
110118
count += 1

layout_unitigs.py

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -743,30 +743,38 @@ def update_bed(expanded_scaffold):
743743
s_right = 0
744744
if len(path) == 2:
745745
contig = path[0].split(':')[0]
746-
scaffold_re[key] = re_counts[contig]
746+
ori = path[0].split(':')[1]
747+
left,right = re_counts[contig]
748+
if ori == 'B':
749+
scaffold_re[key] = (left,right)
750+
else:
751+
scaffold_re[key] = (right,left)
747752
else:
753+
midpoint = length/2
748754
for i in xrange(0,len(path),2):
749755
contig = path[i].split(':')[0]
750756
contig2scaffold[contig] = key
751757
left,right = re_counts[contig]
752-
midpoint = length/2
753758
curr_contig_start = contig2info[contig][0]
754759
curr_contig_end = contig2info[contig][1]
755-
curr_contig_ori = contig2info[contig][2]
760+
#curr_contig_ori = contig2info[contig][2]
756761
#print contig
757762
#print curr_contig_start
758763
#print curr_contig_end
759764
#print curr_contig_ori
760-
if curr_contig_end <= midpoint:
765+
if curr_contig_end < midpoint:
761766
s_left += (left+right)
762-
if curr_contig_start >= midpoint:
767+
if curr_contig_start > midpoint:
763768
s_right += (left+right)
764769

765770
if curr_contig_start <= midpoint and curr_contig_end >= midpoint:
766771
left_part = midpoint - curr_contig_start
767772
right_part = curr_contig_end - midpoint
768773
#print "Left part = " + str(left_part)
769774
#print "Right part = " + str(right_part)
775+
s_left += float(left+right)/contig_length[contig]*left_part
776+
s_right += float(left+right)/contig_length[contig]*right_part
777+
'''
770778
if curr_contig_ori == "FOW":
771779
s_left += (left+right)*left_part/contig_length[contig]
772780
s_right += (left+right)*right_part/contig_length[contig]
@@ -777,6 +785,7 @@ def update_bed(expanded_scaffold):
777785
s_right += (right+left)*left_part/contig_length[contig]
778786
#print "Right RE = " + str(left_part/contig_length[contig])
779787
#print "Left RE = " + str(right*right_part/contig_length[contig])
788+
'''
780789

781790
'''
782791
if offset <= length/2 and i+2 < len(path):
@@ -802,7 +811,7 @@ def update_bed(expanded_scaffold):
802811
#scaffold_length[key] += contig_length[contig]
803812
'''
804813
#print key+"\t"+str(s_left)+"\t"+str(s_right)
805-
scaffold_re[key] = (s_left,s_right)
814+
scaffold_re[key] = (int(s_left),int(s_right))
806815
#print "=============================="
807816

808817
o_lines = ""
@@ -835,16 +844,24 @@ def update_bed(expanded_scaffold):
835844
prev_info = contig2info[prev_contig]
836845
prev_start = int(prev_attrs[1])
837846
prev_end = int(prev_attrs[2])
838-
new_prev_start = prev_start + prev_info[0]
839-
new_prev_end = prev_end + prev_info[0]
847+
if prev_info[2] == 'FOW':
848+
new_prev_start = prev_info[0] + prev_start
849+
new_prev_end = prev_info[0] + prev_end
850+
else:
851+
new_prev_start = prev_info[0] + contig_length[prev_contig] - prev_end
852+
new_prev_end = prev_info[0] + contig_length[prev_contig] - prev_start
840853
o_lines += prev_scaffold+'\t'+str(new_prev_start)+'\t'+str(new_prev_end)+'\t'+prev_attrs[3]+'\n'
841854
count += 1
842855

843856
curr_info = contig2info[curr_contig]
844857
curr_start = int(curr_attrs[1])
845858
curr_end = int(curr_attrs[2])
846-
new_curr_start = curr_start + curr_info[0]
847-
new_curr_end = curr_end + curr_info[0]
859+
if curr_info[2] == 'FOW':
860+
new_curr_start = curr_info[0] + curr_start
861+
new_curr_end = curr_info[0] + curr_end
862+
else:
863+
new_curr_start = curr_info[0] + contig_length[curr_contig] - curr_end
864+
new_curr_end = curr_info[0] + contig_length[curr_contig] - curr_start
848865
o_lines += curr_scaffold+'\t'+str(new_curr_start)+'\t'+str(new_curr_end)+'\t'+curr_attrs[3]+'\n'
849866
count += 1
850867
if count == 1000000:

refactor_breaks.py

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -69,31 +69,41 @@ def update_bed(expanded_scaffold):
6969
s_right = 0
7070
if len(path) == 2:
7171
contig = path[0].split(':')[0]
72-
scaffold_re[key] = re_counts[contig]
72+
ori = path[0].split(':')[1]
73+
left,right = re_counts[contig]
74+
if ori == 'B':
75+
scaffold_re[key] = (left,right)
76+
else:
77+
scaffold_re[key] = (right,left)
7378
else:
79+
midpoint = length/2
7480
for i in xrange(0,len(path),2):
7581
contig = path[i].split(':')[0]
76-
contig2scaffold[contig] = key
7782
left,right = re_counts[contig]
78-
midpoint = length/2
7983
curr_contig_start = contig2info[contig][0]
8084
curr_contig_end = contig2info[contig][1]
81-
curr_contig_ori = contig2info[contig][2]
82-
if curr_contig_end <= midpoint:
85+
# curr_contig_ori = contig2info[contig][2]
86+
if curr_contig_end < midpoint:
8387
s_left += (left+right)
84-
if curr_contig_start >= midpoint:
88+
if curr_contig_start > midpoint:
8589
s_right += (left+right)
8690

8791
if curr_contig_start <= midpoint and curr_contig_end >= midpoint:
8892
left_part = midpoint - curr_contig_start
8993
right_part = curr_contig_end - midpoint
94+
s_left += float(left+right)/unitig_length[contig]*left_part
95+
s_right += float(left+right)/unitig_length[contig]*right_part
96+
97+
## do NOT consider forward or reverse orientation here
98+
## left is always left, right is always right
99+
'''
90100
if curr_contig_ori == "FOW":
91101
s_left += (right+left)*left_part/unitig_length[contig]
92102
s_right += (right+left)*right_part/unitig_length[contig]
93103
else:
94104
s_left += (right+left)*right_part/unitig_length[contig]
95105
s_right += (right+left)*left_part/unitig_length[contig]
96-
106+
'''
97107

98108
'''
99109
if offset <= length/2 and i+2 < len(path):
@@ -118,7 +128,7 @@ def update_bed(expanded_scaffold):
118128
offset += unitig_length[contig]
119129
#scaffold_length[key] += contig_length[contig]
120130
'''
121-
scaffold_re[key] = (s_left,s_right)
131+
scaffold_re[key] = (int(s_left),int(s_right))
122132

123133
o_lines = ""
124134
count = 0
@@ -151,16 +161,24 @@ def update_bed(expanded_scaffold):
151161
prev_info = contig2info[prev_contig]
152162
prev_start = int(prev_attrs[1])
153163
prev_end = int(prev_attrs[2])
154-
new_prev_start = prev_start + prev_info[0]
155-
new_prev_end = prev_end + prev_info[0]
164+
if prev_info[2] == 'FOW':
165+
new_prev_start = prev_info[0] + prev_start
166+
new_prev_end = prev_info[0] + prev_end
167+
else:
168+
new_prev_start = prev_info[0] + unitig_length[prev_contig] - prev_end
169+
new_prev_end = prev_info[0] + unitig_length[prev_contig] - prev_start
156170
o_lines += prev_scaffold+'\t'+str(new_prev_start)+'\t'+str(new_prev_end)+'\t'+prev_attrs[3]+'\n'
157171
count += 1
158172

159173
curr_info = contig2info[curr_contig]
160174
curr_start = int(curr_attrs[1])
161175
curr_end = int(curr_attrs[2])
162-
new_curr_start = curr_start + curr_info[0]
163-
new_curr_end = curr_end + curr_info[0]
176+
if curr_info[2] == 'FOW':
177+
new_curr_start = curr_info[0] + curr_start
178+
new_curr_end = curr_info[0] + curr_end
179+
else:
180+
new_curr_start = curr_info[0] + unitig_length[curr_contig] - curr_end
181+
new_curr_end = curr_info[0] + unitig_length[curr_contig] - curr_start
164182
o_lines += curr_scaffold+'\t'+str(new_curr_start)+'\t'+str(new_curr_end)+'\t'+curr_attrs[3]+'\n'
165183
count += 1
166184
if count == 1000000:

0 commit comments

Comments
 (0)