Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
L
libcifpp
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
open
libcifpp
Commits
58f1b626
Unverified
Commit
58f1b626
authored
Apr 06, 2022
by
Maarten L. Hekkelman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
change getResidue
parent
c104a08e
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
52 additions
and
34 deletions
+52
-34
CMakeLists.txt
+1
-1
changelog
+4
-0
include/cif++/Structure.hpp
+29
-14
src/BondMap.cpp
+14
-15
src/Structure.cpp
+0
-0
test/rename-compound-test.cpp
+1
-1
test/structure-test.cpp
+2
-2
test/unit-test.cpp
+1
-1
No files found.
CMakeLists.txt
View file @
58f1b626
...
...
@@ -25,7 +25,7 @@
cmake_minimum_required
(
VERSION 3.16
)
# set the project name
project
(
cifpp VERSION
3.0.5
LANGUAGES CXX
)
project
(
cifpp VERSION
4.0.0
LANGUAGES CXX
)
list
(
PREPEND CMAKE_MODULE_PATH
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/cmake"
)
...
...
changelog
View file @
58f1b626
Version
4.0.0
-
getResidue
in
mmcif
::
Structure
now
requires
both
a
sequence
ID
and
an
auth
sequence
ID
.
Very
unfortunate
.
Version
3.0.5
-
mmcif
::
Structure
redesign
.
It
is
now
a
wrapper
around
a
cif
::
Datablock
.
...
...
include/cif++/Structure.hpp
View file @
58f1b626
...
...
@@ -296,7 +296,7 @@ class Residue
public
:
// constructor
Residue
(
const
Structure
&
structure
,
const
std
::
string
&
compoundID
,
const
std
::
string
&
asymID
,
int
seqID
=
0
,
const
std
::
string
&
authSeqID
=
{}
)
const
std
::
string
&
asymID
,
int
seqID
,
const
std
::
string
&
authSeqID
)
:
mStructure
(
&
structure
)
,
mCompoundID
(
compoundID
)
,
mAsymID
(
asymID
)
...
...
@@ -383,9 +383,6 @@ class Residue
const
Structure
*
mStructure
=
nullptr
;
std
::
string
mCompoundID
,
mAsymID
;
int
mSeqID
=
0
;
// Watch out, this is used only to label waters... The rest of the code relies on
// MapLabelToAuth to get this info. Perhaps we should rename this member field.
std
::
string
mAuthSeqID
;
AtomView
mAtoms
;
};
...
...
@@ -625,26 +622,41 @@ class Structure
/// \brief Return the atom closest to point \a p with atom type \a type in a residue of type \a res_type
Atom
getAtomByPositionAndType
(
Point
p
,
std
::
string_view
type
,
std
::
string_view
res_type
)
const
;
/// \brief Get a residue
, if \a seqID is zero, the non-polymers are searched
const
Residue
&
getResidue
(
const
std
::
string
&
asymID
,
const
std
::
string
&
compID
,
int
seqID
=
0
)
const
;
/// \brief Get a residue
for an asym with id \a asymID seq id \a seqID and authSeqID \a authSeqID
Residue
&
getResidue
(
const
std
::
string
&
asymID
,
int
seqID
,
const
std
::
string
&
authSeqID
)
;
/// \brief Get a residue, if \a seqID is zero, the non-polymers are searched
Residue
&
getResidue
(
const
std
::
string
&
asymID
,
const
std
::
string
&
compID
,
int
seqID
=
0
);
/// \brief Get a the single residue for an asym with id \a asymID seq id \a seqID and authSeqID \a authSeqID
const
Residue
&
getResidue
(
const
std
::
string
&
asymID
,
int
seqID
,
const
std
::
string
&
authSeqID
)
const
{
return
const_cast
<
Structure
*>
(
this
)
->
getResidue
(
asymID
,
seqID
,
authSeqID
);
}
/// \brief Get a
the single residue for an asym with id \a asym
ID
const
Residue
&
getResidue
(
const
std
::
string
&
asymID
)
const
;
/// \brief Get a
residue for an asym with id \a asymID, compound id \a compID, seq id \a seqID and authSeqID \a authSeq
ID
Residue
&
getResidue
(
const
std
::
string
&
asymID
,
const
std
::
string
&
compID
,
int
seqID
,
const
std
::
string
&
authSeqID
)
;
/// \brief Get a the single residue for an asym with id \a asymID and seq id \a seqID
const
Residue
&
getResidue
(
const
std
::
string
&
asymID
,
int
seqID
)
const
;
/// \brief Get a residue for an asym with id \a asymID, compound id \a compID, seq id \a seqID and authSeqID \a authSeqID
const
Residue
&
getResidue
(
const
std
::
string
&
asymID
,
const
std
::
string
&
compID
,
int
seqID
,
const
std
::
string
&
authSeqID
)
const
{
return
const_cast
<
Structure
*>
(
this
)
->
getResidue
(
asymID
,
compID
,
seqID
,
authSeqID
);
}
/// \brief Get a the single residue for an asym with id \a asymID
Residue
&
getResidue
(
const
std
::
string
&
asymID
);
/// \brief Get a the single residue for an asym with id \a asymID
const
Residue
&
getResidue
(
const
std
::
string
&
asymID
)
const
{
return
const_cast
<
Structure
*>
(
this
)
->
getResidue
(
asymID
);
}
/// \brief Get a the residue for atom \a atom
Residue
&
getResidue
(
const
mmcif
::
Atom
&
atom
);
/// \brief Get a the residue for atom \a atom
const
Residue
&
getResidue
(
const
mmcif
::
Atom
&
atom
)
const
;
const
Residue
&
getResidue
(
const
mmcif
::
Atom
&
atom
)
const
{
return
const_cast
<
Structure
*>
(
this
)
->
getResidue
(
atom
);
}
// map between auth and label locations
...
...
@@ -697,11 +709,14 @@ class Structure
/// \brief Create a new (sugar) branch with one first NAG containing atoms \a nag_atoms
Branch
&
createBranch
(
std
::
vector
<
std
::
vector
<
cif
::
Item
>>
&
nag_atoms
);
/// \brief Extend an existing (sugar) branch identified by \a asymID with one sugar containing atoms \a atoms
Branch
&
extendBranch
(
const
std
::
string
&
asym_id
,
std
::
vector
<
std
::
vector
<
cif
::
Item
>>
&
atoms
);
/// \brief Remove a residue, can be monomer or nonpoly
///
/// \param asym_id The asym ID
/// \param seq_id The sequence ID
void
removeResidue
(
const
std
::
string
&
sym_id
,
int
seq_id
);
void
removeResidue
(
const
std
::
string
&
a
sym_id
,
int
seq_id
);
/// \brief To sort the atoms in order of model > asym-id > res-id > atom-id
/// Will asssign new atom_id's to all atoms. Be carefull
...
...
src/BondMap.cpp
View file @
58f1b626
...
...
@@ -255,10 +255,10 @@ BondMap::BondMap(const Structure &p)
cif
::
Progress
progress
(
compounds
.
size
(),
"Creating bond map"
);
// some helper indices to speed things up a bit
std
::
map
<
std
::
tuple
<
std
::
string
,
int
,
std
::
string
>
,
std
::
string
>
atomMapByAsymSeqAndAtom
;
std
::
map
<
std
::
tuple
<
std
::
string
,
int
,
std
::
string
,
std
::
string
>
,
std
::
string
>
atomMapByAsymSeqAndAtom
;
for
(
auto
&
a
:
p
.
atoms
())
{
auto
key
=
make_tuple
(
a
.
labelAsymID
(),
a
.
labelSeqID
(),
a
.
labelAtomID
());
auto
key
=
make_tuple
(
a
.
labelAsymID
(),
a
.
labelSeqID
(),
a
.
labelAtomID
()
,
a
.
authSeqID
()
);
atomMapByAsymSeqAndAtom
[
key
]
=
a
.
id
();
}
...
...
@@ -280,8 +280,8 @@ BondMap::BondMap(const Structure &p)
continue
;
}
auto
c
=
atomMapByAsymSeqAndAtom
[
make_tuple
(
asymID
,
lastSeqID
,
"C"
)];
auto
n
=
atomMapByAsymSeqAndAtom
[
make_tuple
(
asymID
,
seqID
,
"N"
)];
auto
c
=
atomMapByAsymSeqAndAtom
[
make_tuple
(
asymID
,
lastSeqID
,
"C"
,
""
)];
auto
n
=
atomMapByAsymSeqAndAtom
[
make_tuple
(
asymID
,
seqID
,
"N"
,
""
)];
if
(
not
(
c
.
empty
()
or
n
.
empty
()))
bindAtoms
(
c
,
n
);
...
...
@@ -293,14 +293,16 @@ BondMap::BondMap(const Structure &p)
{
std
::
string
asym1
,
asym2
,
atomId1
,
atomId2
;
int
seqId1
=
0
,
seqId2
=
0
;
cif
::
tie
(
asym1
,
asym2
,
atomId1
,
atomId2
,
seqId1
,
seqId2
)
=
std
::
string
authSeqId1
,
authSeqId2
;
cif
::
tie
(
asym1
,
asym2
,
atomId1
,
atomId2
,
seqId1
,
seqId2
,
authSeqId1
,
authSeqId2
)
=
l
.
get
(
"ptnr1_label_asym_id"
,
"ptnr2_label_asym_id"
,
"ptnr1_label_atom_id"
,
"ptnr2_label_atom_id"
,
"ptnr1_label_seq_id"
,
"ptnr2_label_seq_id"
);
std
::
string
a
=
atomMapByAsymSeqAndAtom
[
make_tuple
(
asym1
,
seqId1
,
atomId1
)];
std
::
string
b
=
atomMapByAsymSeqAndAtom
[
make_tuple
(
asym2
,
seqId2
,
atomId2
)];
"ptnr1_label_seq_id"
,
"ptnr2_label_seq_id"
,
"ptnr1_auth_seq_id"
,
"ptnr2_auth_seq_id"
);
std
::
string
a
=
atomMapByAsymSeqAndAtom
[
make_tuple
(
asym1
,
seqId1
,
atomId1
,
authSeqId1
)];
std
::
string
b
=
atomMapByAsymSeqAndAtom
[
make_tuple
(
asym2
,
seqId2
,
atomId2
,
authSeqId2
)];
if
(
not
(
a
.
empty
()
or
b
.
empty
()))
linkAtoms
(
a
,
b
);
}
...
...
@@ -373,15 +375,12 @@ BondMap::BondMap(const Structure &p)
}
// loop over pdbx_branch_scheme
for
(
auto
r
:
db
[
"pdbx_branch_scheme"
].
find
(
cif
::
Key
(
"mon_id"
)
==
c
))
for
(
const
auto
&
[
asym_id
,
pdb_seq_num
]
:
db
[
"pdbx_branch_scheme"
].
find
<
std
::
string
,
std
::
string
>
(
cif
::
Key
(
"mon_id"
)
==
c
,
"asym_id"
,
"pdb_seq_num"
))
{
std
::
string
asymID
;
cif
::
tie
(
asymID
)
=
r
.
get
(
"asym_id"
);
std
::
vector
<
Atom
>
rAtoms
;
copy_if
(
atoms
.
begin
(),
atoms
.
end
(),
back_inserter
(
rAtoms
),
[
&
](
auto
&
a
)
{
return
a
.
labelAsymID
()
==
asym
ID
;
});
[
&
](
const
Atom
&
a
)
{
return
a
.
labelAsymID
()
==
asym
_id
and
a
.
authSeqID
()
==
pdb_seq_num
;
});
for
(
uint32_t
i
=
0
;
i
+
1
<
rAtoms
.
size
();
++
i
)
{
...
...
src/Structure.cpp
View file @
58f1b626
This diff is collapsed.
Click to expand it.
test/rename-compound-test.cpp
View file @
58f1b626
...
...
@@ -32,7 +32,7 @@ int main(int argc, char* argv[])
mmcif
::
File
f
(
testdir
/
".."
/
"examples"
/
"1cbs.cif.gz"
);
mmcif
::
Structure
structure
(
f
);
auto
&
res
=
structure
.
getResidue
(
"B"
,
"REA"
);
auto
&
res
=
structure
.
getResidue
(
"B"
);
structure
.
changeResidue
(
res
,
"RXA"
,
{});
structure
.
cleanupEmptyCategories
();
...
...
test/structure-test.cpp
View file @
58f1b626
...
...
@@ -123,8 +123,8 @@ _pdbx_nonpoly_scheme.asym_id A
_pdbx_nonpoly_scheme.ndb_seq_num 1
_pdbx_nonpoly_scheme.entity_id 1
_pdbx_nonpoly_scheme.mon_id HEM
_pdbx_nonpoly_scheme.pdb_seq_num
0
_pdbx_nonpoly_scheme.auth_seq_num
0
_pdbx_nonpoly_scheme.pdb_seq_num
1
_pdbx_nonpoly_scheme.auth_seq_num
1
_pdbx_nonpoly_scheme.pdb_mon_id HEM
_pdbx_nonpoly_scheme.auth_mon_id HEM
_pdbx_nonpoly_scheme.pdb_strand_id A
...
...
test/unit-test.cpp
View file @
58f1b626
...
...
@@ -1634,7 +1634,7 @@ PRO OXT HXT SING N N 17
for
(
const
auto
&
[
compound
,
seqnr
]
:
std
::
initializer_list
<
std
::
tuple
<
std
::
string
,
int
>>
{{
"PRO"
,
1
},
{
"ASN"
,
2
},
{
"PHE"
,
3
}})
{
auto
&
res
=
structure
.
getResidue
(
"A"
,
compound
,
seqnr
);
auto
&
res
=
structure
.
getResidue
(
"A"
,
compound
,
seqnr
,
""
);
auto
atoms
=
res
.
atoms
();
auto
dc
=
components
.
get
(
compound
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment