Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
A
arbdmodel
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
tbgl
tools
arbdmodel
Commits
3de7bae1
Commit
3de7bae1
authored
1 year ago
by
cmaffeo2
Browse files
Options
Downloads
Patches
Plain Diff
Remove old polymer.py
parent
3973fd72
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
arbdmodel/polymer.py
+0
-159
0 additions, 159 deletions
arbdmodel/polymer.py
with
0 additions
and
159 deletions
arbdmodel/polymer.py
deleted
100644 → 0
+
0
−
159
View file @
3973fd72
class
PolymerParticle
(
PointParticle
):
def
__init__
(
self
,
type_
,
position
,
name
=
"
A
"
,
**
kwargs
):
self
.
name
=
name
self
.
contour_position
=
None
PointParticle
.
__init__
(
self
,
type_
,
position
,
name
=
name
,
**
kwargs
)
self
.
intrahelical_neighbors
=
[]
self
.
other_neighbors
=
[]
self
.
locations
=
[]
def
get_intrahelical_above
(
self
):
"""
Returns bead directly above self
"""
# assert( len(self.intrahelical_neighbors) <= 2 )
for
b
in
self
.
intrahelical_neighbors
:
if
b
.
get_contour_position
(
self
.
parent
,
self
.
contour_position
)
>
self
.
contour_position
:
return
b
def
get_intrahelical_below
(
self
):
"""
Returns bead directly below self
"""
# assert( len(self.intrahelical_neighbors) <= 2 )
for
b
in
self
.
intrahelical_neighbors
:
if
b
.
get_contour_position
(
self
.
parent
,
self
.
contour_position
)
<
self
.
contour_position
:
return
b
def
_neighbor_should_be_added
(
self
,
b
):
if
type
(
self
.
parent
)
!=
type
(
b
.
parent
):
return
True
c1
=
self
.
contour_position
c2
=
b
.
get_contour_position
(
self
.
parent
,
c1
)
if
c2
<
c1
:
b0
=
self
.
get_intrahelical_below
()
else
:
b0
=
self
.
get_intrahelical_above
()
if
b0
is
not
None
:
c0
=
b0
.
get_contour_position
(
self
.
parent
,
c1
)
if
np
.
abs
(
c2
-
c1
)
<
np
.
abs
(
c0
-
c1
):
## remove b0
self
.
intrahelical_neighbors
.
remove
(
b0
)
b0
.
intrahelical_neighbors
.
remove
(
self
)
return
True
else
:
return
False
return
True
def
make_intrahelical_neighbor
(
self
,
b
):
add1
=
self
.
_neighbor_should_be_added
(
b
)
add2
=
b
.
_neighbor_should_be_added
(
self
)
if
add1
and
add2
:
# assert(len(b.intrahelical_neighbors) <= 1)
# assert(len(self.intrahelical_neighbors) <= 1)
self
.
intrahelical_neighbors
.
append
(
b
)
b
.
intrahelical_neighbors
.
append
(
self
)
def
conceptual_get_position
(
self
,
context
):
"""
context: object
Q: does this function do too much?
Danger of mixing return values
Q: does context describe the system or present an argument?
"""
## Validate Inputs
...
## Algorithm
"""
context specifies:
- kind of output: real space, nt within segment, fraction of segment
- absolute or relative
- constraints: e.g. if passing through
"""
"""
given context, provide the position
input
"""
def
get_nt_position
(
self
,
seg
,
near_address
=
None
):
"""
Returns the
"
address
"
of the nucleotide relative to seg in
nucleotides, taking the shortest (intrahelical) contour length route to seg
"""
if
seg
==
self
.
parent
:
pos
=
self
.
contour_position
else
:
pos
=
self
.
get_contour_position
(
seg
,
near_address
)
return
seg
.
contour_to_nt_pos
(
pos
)
def
get_contour_position
(
self
,
seg
,
address
=
None
):
"""
TODO: fix paradigm where a bead maps to exactly one location in a polymer
- One way: modify get_contour_position to take an optional argument that indicates where in the polymer you are looking from
"""
if
seg
==
self
.
parent
:
return
self
.
contour_position
else
:
cutoff
=
30
*
3
target_seg
=
seg
## depth-first search
## TODO cache distances to nearby locations?
def
descend_search_tree
(
seg
,
contour_in_seg
,
distance
=
0
,
visited_segs
=
None
):
nonlocal
cutoff
if
visited_segs
is
None
:
visited_segs
=
[]
if
seg
==
target_seg
:
# pdb.set_trace()
## Found a segment in our target
sign
=
1
if
contour_in_seg
==
1
else
-
1
if
sign
==
-
1
:
assert
(
contour_in_seg
==
0
)
if
distance
<
cutoff
:
# TODO: check if this does anything
cutoff
=
distance
return
[[
distance
,
contour_in_seg
+
sign
*
seg
.
nt_pos_to_contour
(
distance
)]],
[(
seg
,
contour_in_seg
,
distance
)]
if
distance
>
cutoff
:
return
None
,
None
ret_list
=
[]
hist_list
=
[]
## Find intrahelical locations in seg that we might pass through
conn_locs
=
seg
.
get_connections_and_locations
(
"
intrahelical
"
)
if
isinstance
(
target_seg
,
SingleStrandedSegment
):
tmp
=
seg
.
get_connections_and_locations
(
"
sscrossover
"
)
conn_locs
=
conn_locs
+
list
(
filter
(
lambda
x
:
x
[
2
].
container
==
target_seg
,
tmp
))
for
c
,
A
,
B
in
conn_locs
:
if
B
.
container
in
visited_segs
:
continue
dx
=
seg
.
contour_to_nt_pos
(
A
.
address
,
round_nt
=
False
)
-
seg
.
contour_to_nt_pos
(
contour_in_seg
,
round_nt
=
False
)
dx
=
np
.
abs
(
dx
)
results
,
history
=
descend_search_tree
(
B
.
container
,
B
.
address
,
distance
+
dx
,
visited_segs
+
[
seg
]
)
if
results
is
not
None
:
ret_list
.
extend
(
results
)
hist_list
.
extend
(
history
)
return
ret_list
,
hist_list
results
,
history
=
descend_search_tree
(
self
.
parent
,
self
.
contour_position
)
if
results
is
None
or
len
(
results
)
==
0
:
raise
Exception
(
"
Could not find location in segment
"
)
# TODO better error
if
address
is
not
None
:
return
sorted
(
results
,
key
=
lambda
x
:(
x
[
0
],(
x
[
1
]
-
address
)
**
2
))[
0
][
1
]
else
:
return
sorted
(
results
,
key
=
lambda
x
:
x
[
0
])[
0
][
1
]
# nt_pos = self.get_nt_position(seg)
# return seg.nt_pos_to_contour(nt_pos)
def
update_position
(
self
,
contour_position
):
self
.
contour_position
=
contour_position
self
.
position
=
self
.
parent
.
contour_to_position
(
contour_position
)
if
'
orientation_bead
'
in
self
.
__dict__
:
o
=
self
.
orientation_bead
o
.
contour_position
=
contour_position
orientation
=
self
.
parent
.
contour_to_orientation
(
contour_position
)
if
orientation
is
None
:
print
(
"
WARNING: local_twist is True, but orientation is None; using identity
"
)
orientation
=
np
.
eye
(
3
)
o
.
position
=
self
.
position
+
orientation
.
dot
(
np
.
array
((
Segment
.
orientation_bond
.
r0
,
0
,
0
))
)
def
__repr__
(
self
):
return
"
<SegmentParticle {} on {}[{:.2f}]>
"
.
format
(
self
.
name
,
self
.
parent
,
self
.
contour_position
)
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment