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
519c1cb7
Commit
519c1cb7
authored
1 year ago
by
Bienchen
Browse files
Options
Downloads
Patches
Plain Diff
mmCIF Writer test, di-nucleotide
parent
dacba0e3
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
modules/io/tests/test_mmcif_writer.cc
+107
-31
107 additions, 31 deletions
modules/io/tests/test_mmcif_writer.cc
with
107 additions
and
31 deletions
modules/io/tests/test_mmcif_writer.cc
+
107
−
31
View file @
519c1cb7
...
...
@@ -92,37 +92,25 @@ BOOST_AUTO_TEST_CASE(mmcif_writer_poly_vs_non_poly)
mol
::
ChainHandle
ch
=
edi
.
InsertChain
(
"A"
);
edi
.
SetChainType
(
ch
,
mol
::
CHAINTYPE_POLY_PEPTIDE_L
);
// ALA
mol
::
ResidueHandle
r1
=
edi
.
AppendResidue
(
ch
,
"ALA"
);
// is_hetatm=false
edi
.
InsertAtom
(
r1
,
"N"
,
geom
::
Vec3
(
44.987
,
17.389
,
12.362
),
"N"
,
0.81
,
25.57
);
edi
.
InsertAtom
(
r1
,
"CA"
,
geom
::
Vec3
(
45.936
,
16.434
,
12.890
),
"C"
,
0.81
,
28.21
);
edi
.
InsertAtom
(
r1
,
"C"
,
geom
::
Vec3
(
47.196
,
17.227
,
13.152
),
"C"
,
0.81
,
33.78
);
edi
.
InsertAtom
(
r1
,
"O"
,
geom
::
Vec3
(
47.506
,
18.153
,
12.401
),
"O"
,
0.81
,
23.02
);
edi
.
InsertAtom
(
r1
,
"CB"
,
geom
::
Vec3
(
46.244
,
15.293
,
11.961
),
"C"
,
0.81
,
29.85
);
mol
::
ResidueHandle
r1
=
edi
.
AppendResidue
(
ch
,
"ALA"
);
edi
.
InsertAtom
(
r1
,
"N"
,
geom
::
Vec3
(
44.987
,
17.389
,
12.362
),
"N"
);
edi
.
InsertAtom
(
r1
,
"CA"
,
geom
::
Vec3
(
45.936
,
16.434
,
12.890
),
"C"
);
edi
.
InsertAtom
(
r1
,
"C"
,
geom
::
Vec3
(
47.196
,
17.227
,
13.152
),
"C"
);
edi
.
InsertAtom
(
r1
,
"O"
,
geom
::
Vec3
(
47.506
,
18.153
,
12.401
),
"O"
);
edi
.
InsertAtom
(
r1
,
"CB"
,
geom
::
Vec3
(
46.244
,
15.293
,
11.961
),
"C"
);
// PRO
mol
::
ResidueHandle
r2
=
edi
.
AppendResidue
(
ch
,
"PRO"
);
// is_hetatm=false
edi
.
InsertAtom
(
r2
,
"N"
,
geom
::
Vec3
(
47.953
,
16.910
,
14.229
),
"N"
,
0.81
,
32.19
);
edi
.
InsertAtom
(
r2
,
"CA"
,
geom
::
Vec3
(
47.673
,
15.829
,
15.187
),
"C"
,
0.81
,
33.89
);
edi
.
InsertAtom
(
r2
,
"C"
,
geom
::
Vec3
(
46.564
,
16.052
,
16.233
),
"C"
,
0.81
,
37.97
);
edi
.
InsertAtom
(
r2
,
"O"
,
geom
::
Vec3
(
46.059
,
17.169
,
16.417
),
"O"
,
0.81
,
34.43
);
edi
.
InsertAtom
(
r2
,
"CB"
,
geom
::
Vec3
(
49.054
,
15.755
,
15.880
),
"C"
,
0.81
,
36.60
);
edi
.
InsertAtom
(
r2
,
"CG"
,
geom
::
Vec3
(
49.357
,
17.213
,
16.030
),
"C"
,
0.81
,
34.77
);
edi
.
InsertAtom
(
r2
,
"CD"
,
geom
::
Vec3
(
49.098
,
17.714
,
14.637
),
"C"
,
0.81
,
34.62
);
edi
.
InsertAtom
(
r2
,
"OXT"
,
geom
::
Vec3
(
46.144
,
15.129
,
16.950
),
"O"
,
0.81
,
34.03
);
conop
::
HeuristicProcessor
heu_proc
;
mol
::
ResidueHandle
r2
=
edi
.
AppendResidue
(
ch
,
"PRO"
);
edi
.
InsertAtom
(
r2
,
"N"
,
geom
::
Vec3
(
47.953
,
16.910
,
14.229
),
"N"
);
edi
.
InsertAtom
(
r2
,
"CA"
,
geom
::
Vec3
(
47.673
,
15.829
,
15.187
),
"C"
);
edi
.
InsertAtom
(
r2
,
"C"
,
geom
::
Vec3
(
46.564
,
16.052
,
16.233
),
"C"
);
edi
.
InsertAtom
(
r2
,
"O"
,
geom
::
Vec3
(
46.059
,
17.169
,
16.417
),
"O"
);
edi
.
InsertAtom
(
r2
,
"CB"
,
geom
::
Vec3
(
49.054
,
15.755
,
15.880
),
"C"
);
edi
.
InsertAtom
(
r2
,
"CG"
,
geom
::
Vec3
(
49.357
,
17.213
,
16.030
),
"C"
);
edi
.
InsertAtom
(
r2
,
"CD"
,
geom
::
Vec3
(
49.098
,
17.714
,
14.637
),
"C"
);
edi
.
InsertAtom
(
r2
,
"OXT"
,
geom
::
Vec3
(
46.144
,
15.129
,
16.950
),
"O"
);
// Make sure that the two residues r1, r2 are actually connected
conop
::
HeuristicProcessor
heu_proc
;
heu_proc
.
Process
(
ent
);
BOOST_CHECK_EQUAL
(
mol
::
InSequence
(
r1
,
r2
),
true
);
...
...
@@ -132,14 +120,15 @@ BOOST_AUTO_TEST_CASE(mmcif_writer_poly_vs_non_poly)
std
::
stringstream
out
;
writer
.
Write
(
"test"
,
out
);
// Check that the mmCIF output contains 2 non-polymer entities
String
s
=
out
.
str
();
// Check that the mmCIF output contains 2 non-polymer entities
BOOST_CHECK_NE
(
s
.
find
(
"loop_
\n
_entity.id
\n
_entity.type
\n
1 non-polymer
\n
2 non-polymer"
),
String
::
npos
);
BOOST_CHECK_NE
(
s
.
find
(
"loop_
\n
_struct_asym.id
\n
_struct_asym.entity_id
\n
A 1
\n
B 2"
),
String
::
npos
);
// Check that atoms are HETATMs since non-poly
BOOST_CHECK_NE
(
s
.
find
(
"HETATM N N ALA"
),
String
::
npos
);
BOOST_CHECK_NE
(
s
.
find
(
"HETATM C CA ALA"
),
String
::
npos
);
BOOST_CHECK_NE
(
s
.
find
(
"HETATM C C ALA"
),
String
::
npos
);
...
...
@@ -154,7 +143,94 @@ BOOST_AUTO_TEST_CASE(mmcif_writer_poly_vs_non_poly)
BOOST_CHECK_NE
(
s
.
find
(
"HETATM C CD PRO"
),
String
::
npos
);
BOOST_CHECK_NE
(
s
.
find
(
"HETATM O OXT PRO"
),
String
::
npos
);
// write mmCIF, check atoms are marked HETATM
// Nucleic acid: 2 bases in a chain are 2 entities for RCSB (check 4K9A)
ent
=
mol
::
CreateEntity
();
edi
=
ent
.
EditXCS
();
ch
=
edi
.
InsertChain
(
"A"
);
edi
.
SetChainType
(
ch
,
mol
::
CHAINTYPE_POLY_RN
);
// G
r1
=
edi
.
AppendResidue
(
ch
,
"G"
);
r1
.
SetChemClass
(
mol
::
ChemClass
(
'R'
));
edi
.
InsertAtom
(
r1
,
"OP3"
,
geom
::
Vec3
(
-
19.992
,
-
12.612
,
-
22.535
),
"O"
);
edi
.
InsertAtom
(
r1
,
"P"
,
geom
::
Vec3
(
-
20.743
,
-
13.990
,
-
22.451
),
"P"
);
edi
.
InsertAtom
(
r1
,
"OP1"
,
geom
::
Vec3
(
-
20.093
,
-
14.853
,
-
23.494
),
"O"
);
edi
.
InsertAtom
(
r1
,
"OP2"
,
geom
::
Vec3
(
-
20.592
,
-
14.510
,
-
21.074
),
"O"
);
edi
.
InsertAtom
(
r1
,
"O5'"
,
geom
::
Vec3
(
-
22.258
,
-
13.779
,
-
22.864
),
"O"
);
edi
.
InsertAtom
(
r1
,
"C5'"
,
geom
::
Vec3
(
-
22.956
,
-
12.621
,
-
22.414
),
"C"
);
edi
.
InsertAtom
(
r1
,
"C4'"
,
geom
::
Vec3
(
-
24.433
,
-
12.831
,
-
22.071
),
"C"
);
edi
.
InsertAtom
(
r1
,
"O4'"
,
geom
::
Vec3
(
-
24.958
,
-
11.618
,
-
21.688
),
"O"
);
edi
.
InsertAtom
(
r1
,
"C3'"
,
geom
::
Vec3
(
-
25.196
,
-
13.187
,
-
23.283
),
"C"
);
edi
.
InsertAtom
(
r1
,
"O3'"
,
geom
::
Vec3
(
-
26.335
,
-
13.801
,
-
22.833
),
"O"
);
edi
.
InsertAtom
(
r1
,
"C2'"
,
geom
::
Vec3
(
-
25.568
,
-
11.908
,
-
23.910
),
"C"
);
edi
.
InsertAtom
(
r1
,
"O2'"
,
geom
::
Vec3
(
-
26.792
,
-
12.071
,
-
24.602
),
"O"
);
edi
.
InsertAtom
(
r1
,
"C1'"
,
geom
::
Vec3
(
-
25.819
,
-
11.112
,
-
22.709
),
"C"
);
edi
.
InsertAtom
(
r1
,
"N9"
,
geom
::
Vec3
(
-
25.646
,
-
9.689
,
-
22.974
),
"N"
);
edi
.
InsertAtom
(
r1
,
"C8"
,
geom
::
Vec3
(
-
26.518
,
-
8.728
,
-
22.814
),
"C"
);
edi
.
InsertAtom
(
r1
,
"N7"
,
geom
::
Vec3
(
-
25.994
,
-
7.595
,
-
23.153
),
"N"
);
edi
.
InsertAtom
(
r1
,
"C5"
,
geom
::
Vec3
(
-
24.781
,
-
7.838
,
-
23.527
),
"C"
);
edi
.
InsertAtom
(
r1
,
"C6"
,
geom
::
Vec3
(
-
23.815
,
-
7.062
,
-
23.942
),
"C"
);
edi
.
InsertAtom
(
r1
,
"O6"
,
geom
::
Vec3
(
-
23.953
,
-
5.880
,
-
24.055
),
"O"
);
edi
.
InsertAtom
(
r1
,
"N1"
,
geom
::
Vec3
(
-
22.652
,
-
7.575
,
-
24.269
),
"N"
);
edi
.
InsertAtom
(
r1
,
"C2"
,
geom
::
Vec3
(
-
22.453
,
-
8.886
,
-
24.153
),
"C"
);
edi
.
InsertAtom
(
r1
,
"N2"
,
geom
::
Vec3
(
-
21.312
,
-
9.419
,
-
24.474
),
"N"
);
edi
.
InsertAtom
(
r1
,
"N3"
,
geom
::
Vec3
(
-
23.422
,
-
9.638
,
-
23.738
),
"N"
);
edi
.
InsertAtom
(
r1
,
"C4"
,
geom
::
Vec3
(
-
24.577
,
-
9.122
,
-
23.422
),
"C"
);
// A
r2
=
edi
.
AppendResidue
(
ch
,
"A"
);
r2
.
SetChemClass
(
mol
::
ChemClass
(
'R'
));
edi
.
InsertAtom
(
r2
,
"P"
,
geom
::
Vec3
(
-
27.082
,
-
11.572
,
-
26.017
),
"P"
);
edi
.
InsertAtom
(
r2
,
"OP1"
,
geom
::
Vec3
(
-
28.487
,
-
11.993
,
-
26.469
),
"O"
);
edi
.
InsertAtom
(
r2
,
"OP2"
,
geom
::
Vec3
(
-
27.228
,
-
10.079
,
-
25.961
),
"O"
);
edi
.
InsertAtom
(
r2
,
"O5'"
,
geom
::
Vec3
(
-
26.066
,
-
11.826
,
-
27.005
),
"O"
);
edi
.
InsertAtom
(
r2
,
"C5'"
,
geom
::
Vec3
(
-
25.894
,
-
13.010
,
-
27.689
),
"C"
);
edi
.
InsertAtom
(
r2
,
"C4'"
,
geom
::
Vec3
(
-
24.500
,
-
13.055
,
-
28.234
),
"C"
);
edi
.
InsertAtom
(
r2
,
"O4'"
,
geom
::
Vec3
(
-
24.168
,
-
11.802
,
-
28.703
),
"O"
);
edi
.
InsertAtom
(
r2
,
"C3'"
,
geom
::
Vec3
(
-
23.540
,
-
13.333
,
-
27.140
),
"C"
);
edi
.
InsertAtom
(
r2
,
"O3'"
,
geom
::
Vec3
(
-
22.424
,
-
13.995
,
-
27.663
),
"O"
);
edi
.
InsertAtom
(
r2
,
"C2'"
,
geom
::
Vec3
(
-
23.101
,
-
11.988
,
-
26.770
),
"C"
);
edi
.
InsertAtom
(
r2
,
"O2'"
,
geom
::
Vec3
(
-
21.831
,
-
12.081
,
-
26.257
),
"O"
);
edi
.
InsertAtom
(
r2
,
"C1'"
,
geom
::
Vec3
(
-
23.037
,
-
11.318
,
-
28.071
),
"C"
);
edi
.
InsertAtom
(
r2
,
"N9"
,
geom
::
Vec3
(
-
23.277
,
-
9.902
,
-
27.855
),
"N"
);
edi
.
InsertAtom
(
r2
,
"C8"
,
geom
::
Vec3
(
-
24.331
,
-
9.311
,
-
27.370
),
"C"
);
edi
.
InsertAtom
(
r2
,
"N7"
,
geom
::
Vec3
(
-
24.073
,
-
8.040
,
-
27.362
),
"N"
);
edi
.
InsertAtom
(
r2
,
"C5"
,
geom
::
Vec3
(
-
22.856
,
-
7.821
,
-
27.812
),
"C"
);
edi
.
InsertAtom
(
r2
,
"C6"
,
geom
::
Vec3
(
-
22.091
,
-
6.735
,
-
27.998
),
"C"
);
edi
.
InsertAtom
(
r2
,
"N6"
,
geom
::
Vec3
(
-
22.544
,
-
5.535
,
-
27.711
),
"N"
);
edi
.
InsertAtom
(
r2
,
"N1"
,
geom
::
Vec3
(
-
20.885
,
-
6.823
,
-
28.480
),
"N"
);
edi
.
InsertAtom
(
r2
,
"C2"
,
geom
::
Vec3
(
-
20.381
,
-
8.034
,
-
28.799
),
"C"
);
edi
.
InsertAtom
(
r2
,
"N3"
,
geom
::
Vec3
(
-
21.167
,
-
9.113
,
-
28.595
),
"N"
);
edi
.
InsertAtom
(
r2
,
"C4"
,
geom
::
Vec3
(
-
22.379
,
-
8.993
,
-
28.116
),
"C"
);
// Make sure that the two residues r1, r2 are actually connected
/* In the RCSB entry 4K9A, G O2' and A P are linked, but we force a regular
nucleotide link for the test
*/
edi
.
Connect
(
r1
.
FindAtom
(
"O3'"
),
r2
.
FindAtom
(
"P"
));
BOOST_CHECK_EQUAL
(
mol
::
InSequence
(
r1
,
r2
),
true
);
// Create mmCIF stream
writer
=
MMCifWriter
();
writer
.
SetStructure
(
ent
,
SetDefaultCompoundLib
(),
false
);
writer
.
Write
(
"test"
,
out
);
s
=
out
.
str
();
// Check that the mmCIF output contains 2 non-polymer entities
BOOST_CHECK_NE
(
s
.
find
(
"loop_
\n
_entity.id
\n
_entity.type
\n
1 non-polymer
\n
2 non-polymer"
),
String
::
npos
);
BOOST_CHECK_NE
(
s
.
find
(
"loop_
\n
_struct_asym.id
\n
_struct_asym.entity_id
\n
A 1
\n
B 2"
),
String
::
npos
);
// Check that atoms are HETATMs since non-poly
for
(
auto
i
:
ch
.
GetAtomList
()){
BOOST_CHECK_NE
(
s
.
find
(
"HETATM "
+
i
.
GetElement
()
+
" "
+
i
.
GetName
()
+
" "
+
i
.
GetResidue
().
GetName
()),
String
::
npos
);
}
// 3AXH, 1A4G
BOOST_TEST_MESSAGE
(
" done."
);
}
...
...
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