Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
O
openstructure
Manage
Activity
Members
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Container registry
Model registry
Analyze
Contributor 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
schwede
openstructure
Commits
d2b73c71
Commit
d2b73c71
authored
7 years ago
by
Gerardo Tauriello
Browse files
Options
Downloads
Patches
Plain Diff
SCHWED-2043: detailled tests for QSscoreEntity
parent
b388533b
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
modules/mol/alg/tests/test_qsscoring.py
+111
-2
111 additions, 2 deletions
modules/mol/alg/tests/test_qsscoring.py
with
111 additions
and
2 deletions
modules/mol/alg/tests/test_qsscoring.py
+
111
−
2
View file @
d2b73c71
import
unittest
,
os
import
unittest
,
os
import
ost
from
ost
import
io
from
ost
import
io
from
ost.mol.alg.qsscoring
import
*
from
ost.mol.alg.qsscoring
import
*
...
@@ -10,13 +11,115 @@ def _LoadFile(file_name):
...
@@ -10,13 +11,115 @@ def _LoadFile(file_name):
class
TestQSscore
(
unittest
.
TestCase
):
class
TestQSscore
(
unittest
.
TestCase
):
# TESTS base
def
test_QSscoreEntity
(
self
):
# use smallest test structure...
ent
=
_LoadFile
(
'
3ia3.1.pdb
'
)
ent
.
SetName
(
"
my_ent
"
)
# create clean one
qs_ent
=
QSscoreEntity
(
ent
)
self
.
assertTrue
(
qs_ent
.
is_valid
)
# check naming
qs_ent
.
SetName
(
"
my_qs_ent
"
)
self
.
assertEqual
(
qs_ent
.
original_name
,
"
my_ent
"
)
self
.
assertEqual
(
qs_ent
.
GetName
(),
"
my_qs_ent
"
)
# check cleanup
self
.
assertEqual
(
sorted
(
ch
.
name
for
ch
in
qs_ent
.
ent
.
chains
),
[
'
A
'
,
'
B
'
])
self
.
assertEqual
(
qs_ent
.
removed_chains
,
[
'
_
'
])
self
.
assertFalse
(
qs_ent
.
calpha_only
)
# check CA entity
ca_ent
=
qs_ent
.
ca_entity
self
.
assertEqual
(
sorted
(
ch
.
name
for
ch
in
ca_ent
.
chains
),
[
'
A
'
,
'
B
'
])
self
.
assertEqual
(
ca_ent
.
residue_count
,
ca_ent
.
atom_count
)
self
.
assertEqual
(
ca_ent
.
Select
(
'
aname=CA
'
).
atom_count
,
ca_ent
.
atom_count
)
self
.
assertEqual
(
sorted
(
qs_ent
.
ca_chains
.
keys
()),
[
'
A
'
,
'
B
'
])
for
ch
in
ca_ent
.
chains
:
self
.
assertEqual
(
''
.
join
([
r
.
one_letter_code
for
r
in
ch
.
residues
]),
str
(
qs_ent
.
ca_chains
[
ch
.
name
]))
# check chem groups
self
.
assertEqual
(
sorted
(
qs_ent
.
chem_groups
),
[[
'
A
'
],
[
'
B
'
]])
# check contacts
self
.
assertEqual
(
len
(
qs_ent
.
contacts
[
'
A
'
][
'
B
'
]),
45
)
self
.
assertAlmostEqual
(
qs_ent
.
contacts
[
'
A
'
][
'
B
'
][
23
][
127
],
10.069
,
2
)
self
.
assertEqual
(
len
(
qs_ent
.
contacts_ca
[
'
A
'
][
'
B
'
]),
42
)
self
.
assertAlmostEqual
(
qs_ent
.
contacts_ca
[
'
A
'
][
'
B
'
][
23
][
127
],
10.471
,
2
)
# check contact filtering
old_contacts
=
qs_ent
.
contacts
.
copy
()
old_contacts_ca
=
qs_ent
.
contacts_ca
.
copy
()
qs_ent
.
contacts
=
old_contacts
self
.
assertEqual
(
qs_ent
.
contacts
,
old_contacts
)
qs_ent
.
contacts_ca
=
old_contacts_ca
self
.
assertEqual
(
qs_ent
.
contacts_ca
,
old_contacts_ca
)
dummy_contacts
=
{
'
A
'
:
{
'
B
'
:
{
1
:
{
2
:
3.0
,
4
:
5.0
}},
'
C
'
:
{
10
:
{
20
:
30.0
,
40
:
50.0
}}},
'
B
'
:
{
'
C
'
:
{
100
:
{
200
:
300.0
,
400
:
500.0
}}}}
qs_ent
.
contacts
=
dummy_contacts
self
.
assertEqual
(
qs_ent
.
contacts
,
{
'
A
'
:
{
'
B
'
:
{
1
:
{
2
:
3.0
,
4
:
5.0
}}}})
self
.
assertEqual
(
qs_ent
.
contacts_ca
,
old_contacts_ca
)
qs_ent
.
contacts
=
old_contacts
qs_ent
.
contacts_ca
=
dummy_contacts
self
.
assertEqual
(
qs_ent
.
contacts
,
old_contacts
)
self
.
assertEqual
(
qs_ent
.
contacts_ca
,
{
'
A
'
:
{
'
B
'
:
{
1
:
{
2
:
3.0
,
4
:
5.0
}}}})
# check chain removal for non-amino acid chains
ent_extra
=
ent
.
Copy
()
edi
=
ent_extra
.
EditXCS
()
# classic ligand chain
ch
=
edi
.
InsertChain
(
'
C
'
)
for
_
in
range
(
30
):
r
=
edi
.
AppendResidue
(
ch
,
'
HOH
'
)
edi
.
InsertAtom
(
r
,
'
O
'
,
ost
.
geom
.
Vec3
())
# DNA chain
ch
=
edi
.
InsertChain
(
'
D
'
)
for
_
in
range
(
30
):
r
=
edi
.
AppendResidue
(
ch
,
'
A
'
)
edi
.
InsertAtom
(
r
,
'
P
'
,
ost
.
geom
.
Vec3
())
edi
.
UpdateICS
()
# ensure both removed
qs_ent_test
=
QSscoreEntity
(
ent_extra
)
self
.
assertEqual
(
sorted
(
qs_ent_test
.
removed_chains
),
[
'
C
'
,
'
D
'
,
'
_
'
])
# invalid structures: monomers (or less) before or after cleaning
ost
.
PushVerbosityLevel
(
-
1
)
# empty view
ent_empty
=
ent
.
CreateEmptyView
()
qs_ent_invalid
=
QSscoreEntity
(
ent_empty
)
self
.
assertFalse
(
qs_ent_invalid
.
is_valid
)
# monomer
ent_mono
=
ent
.
Select
(
'
cname=A
'
)
qs_ent_invalid
=
QSscoreEntity
(
ent_mono
)
self
.
assertFalse
(
qs_ent_invalid
.
is_valid
)
# short chain removed
ent_short
=
ent
.
Select
(
'
cname=A or rnum<20
'
)
qs_ent_invalid
=
QSscoreEntity
(
ent_short
)
self
.
assertFalse
(
qs_ent_invalid
.
is_valid
)
self
.
assertEqual
(
sorted
(
qs_ent_invalid
.
removed_chains
),
[
'
B
'
,
'
_
'
])
# non-AA chain removal
ent_non_AA
=
ent_extra
.
Select
(
'
cname=A,C,D
'
)
qs_ent_invalid
=
QSscoreEntity
(
ent_non_AA
)
self
.
assertFalse
(
qs_ent_invalid
.
is_valid
)
self
.
assertEqual
(
sorted
(
qs_ent_invalid
.
removed_chains
),
[
'
C
'
,
'
D
'
])
ost
.
PopVerbosityLevel
()
# exception when scoring with invalid QSscoreEntity
with
self
.
assertRaises
(
QSscoreError
):
qs_scorer_tst
=
QSscorer
(
qs_ent_invalid
,
qs_ent
)
qs_scorer_tst
.
global_score
with
self
.
assertRaises
(
QSscoreError
):
qs_scorer_tst
=
QSscorer
(
qs_ent
,
qs_ent_invalid
)
qs_scorer_tst
.
global_score
# TESTS HETERO
def
test_HeteroCase1
(
self
):
def
test_HeteroCase1
(
self
):
# additional chains
# additional chains
ent_1
=
_LoadFile
(
'
4ux8.1.pdb
'
)
# A2 B2 C2, symmetry: C2
ent_1
=
_LoadFile
(
'
4ux8.1.pdb
'
)
# A2 B2 C2, symmetry: C2
ent_2
=
_LoadFile
(
'
3fub.2.pdb
'
)
# A2 B2 , symmetry: C2
ent_2
=
_LoadFile
(
'
3fub.2.pdb
'
)
# A2 B2 , symmetry: C2
qs_scorer
=
QSscorer
(
ent_1
,
ent_2
)
qs_scorer
=
QSscorer
(
ent_1
,
ent_2
)
# check properties
# check properties
self
.
assert
Equal
(
qs_scorer
.
calpha_only
,
False
)
self
.
assert
False
(
qs_scorer
.
calpha_only
)
# check mappings
# check mappings
self
.
assertEqual
(
qs_scorer
.
chem_mapping
,
self
.
assertEqual
(
qs_scorer
.
chem_mapping
,
{(
'
D
'
,
'
F
'
):
(
'
B
'
,
'
D
'
),
(
'
C
'
,
'
E
'
):
(
'
A
'
,
'
C
'
)})
{(
'
D
'
,
'
F
'
):
(
'
B
'
,
'
D
'
),
(
'
C
'
,
'
E
'
):
(
'
A
'
,
'
C
'
)})
...
@@ -36,7 +139,7 @@ class TestQSscore(unittest.TestCase):
...
@@ -36,7 +139,7 @@ class TestQSscore(unittest.TestCase):
ent_2
=
_LoadFile
(
'
3fub.au.pdb
'
)
ent_2
=
_LoadFile
(
'
3fub.au.pdb
'
)
qs_scorer
=
QSscorer
(
ent_1
,
ent_2
)
qs_scorer
=
QSscorer
(
ent_1
,
ent_2
)
# check properties
# check properties
self
.
assert
Equal
(
qs_scorer
.
calpha_only
,
False
)
self
.
assert
False
(
qs_scorer
.
calpha_only
)
# check mappings
# check mappings
self
.
assertEqual
(
qs_scorer
.
chem_mapping
,
self
.
assertEqual
(
qs_scorer
.
chem_mapping
,
{(
'
C
'
,
'
E
'
):
(
'
A
'
,
'
C
'
),
(
'
D
'
,
'
F
'
):
(
'
D
'
,
'
B
'
)})
{(
'
C
'
,
'
E
'
):
(
'
A
'
,
'
C
'
),
(
'
D
'
,
'
F
'
):
(
'
D
'
,
'
B
'
)})
...
@@ -81,11 +184,17 @@ class TestQSscore(unittest.TestCase):
...
@@ -81,11 +184,17 @@ class TestQSscore(unittest.TestCase):
qs_scorer
=
QSscorer
(
ent_1
,
ent_2
)
qs_scorer
=
QSscorer
(
ent_1
,
ent_2
)
self
.
assertAlmostEqual
(
qs_scorer
.
global_score
,
0.980
,
2
)
self
.
assertAlmostEqual
(
qs_scorer
.
global_score
,
0.980
,
2
)
self
.
assertAlmostEqual
(
qs_scorer
.
best_score
,
0.980
,
2
)
self
.
assertAlmostEqual
(
qs_scorer
.
best_score
,
0.980
,
2
)
# check properties
self
.
assertFalse
(
qs_scorer
.
calpha_only
)
# check mappings
self
.
assertEqual
(
qs_scorer
.
chem_mapping
,
{(
'
A
'
,):
(
'
B
'
,),
(
'
B
'
,):
(
'
A
'
,)})
self
.
assertEqual
(
qs_scorer
.
chain_mapping
,
{
'
A
'
:
'
B
'
,
'
B
'
:
'
A
'
})
# check if CA-only scoring is close to this
# check if CA-only scoring is close to this
ent_2_ca
=
ent_2
.
Select
(
'
aname=CA
'
)
ent_2_ca
=
ent_2
.
Select
(
'
aname=CA
'
)
# use QSscoreEntity to go faster
# use QSscoreEntity to go faster
qs_scorer_ca
=
QSscorer
(
qs_scorer
.
qs_ent_1
,
ent_2_ca
)
qs_scorer_ca
=
QSscorer
(
qs_scorer
.
qs_ent_1
,
ent_2_ca
)
self
.
assertTrue
(
qs_scorer_ca
.
calpha_only
)
self
.
assertAlmostEqual
(
qs_scorer_ca
.
global_score
,
qs_scorer
.
global_score
,
2
)
self
.
assertAlmostEqual
(
qs_scorer_ca
.
global_score
,
qs_scorer
.
global_score
,
2
)
self
.
assertAlmostEqual
(
qs_scorer_ca
.
best_score
,
qs_scorer
.
best_score
,
2
)
self
.
assertAlmostEqual
(
qs_scorer_ca
.
best_score
,
qs_scorer
.
best_score
,
2
)
# throw exception for messed up chains without CA atoms
# throw exception for messed up chains without CA atoms
...
...
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