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
34c7fd3f
Commit
34c7fd3f
authored
Jun 24, 2020
by
Maarten L. Hekkelman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Changes for DSSP
parent
fac1eb91
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
154 additions
and
6 deletions
+154
-6
include/cif++/Secondary.h
+112
-1
include/cif++/Structure.h
+4
-2
src/Secondary.cpp
+0
-0
src/Structure.cpp
+38
-3
No files found.
include/cif++/Secondary.h
View file @
34c7fd3f
...
@@ -13,7 +13,9 @@ namespace mmcif
...
@@ -13,7 +13,9 @@ namespace mmcif
class
Structure
;
class
Structure
;
class
Monomer
;
class
Monomer
;
extern
const
double
struct
Res
;
extern
const
float
kCouplingConstant
,
kMinHBondEnergy
,
kMaxHBondEnergy
;
kCouplingConstant
,
kMinHBondEnergy
,
kMaxHBondEnergy
;
enum
SecondaryStructureType
:
char
enum
SecondaryStructureType
:
char
...
@@ -28,6 +30,11 @@ enum SecondaryStructureType : char
...
@@ -28,6 +30,11 @@ enum SecondaryStructureType : char
ssBend
=
'S'
ssBend
=
'S'
};
};
enum
class
Helix
{
None
,
Start
,
End
,
StartAndEnd
,
Middle
};
//struct HBond
//struct HBond
//{
//{
// std::string labelAsymID;
// std::string labelAsymID;
...
@@ -54,6 +61,27 @@ struct SecondaryStructure
...
@@ -54,6 +61,27 @@ struct SecondaryStructure
//void CalculateSecondaryStructure(Structure& s);
//void CalculateSecondaryStructure(Structure& s);
const
size_t
kHistogramSize
=
30
;
struct
DSSP_Statistics
{
uint32_t
nrOfResidues
,
nrOfChains
,
nrOfSSBridges
,
nrOfIntraChainSSBridges
,
nrOfHBonds
;
uint32_t
nrOfHBondsInAntiparallelBridges
,
nrOfHBondsInParallelBridges
;
uint32_t
nrOfHBondsPerDistance
[
11
]
=
{};
double
accessibleSurface
=
0
;
uint32_t
residuesPerAlphaHelixHistogram
[
kHistogramSize
]
=
{};
uint32_t
parallelBridgesPerLadderHistogram
[
kHistogramSize
]
=
{};
uint32_t
antiparallelBridgesPerLadderHistogram
[
kHistogramSize
]
=
{};
uint32_t
laddersPerSheetHistogram
[
kHistogramSize
]
=
{};
};
enum
class
ChainBreak
{
None
,
NewChain
,
Gap
};
class
DSSP
class
DSSP
{
{
public
:
public
:
...
@@ -66,9 +94,92 @@ class DSSP
...
@@ -66,9 +94,92 @@ class DSSP
SecondaryStructureType
operator
()(
const
std
::
string
&
inAsymID
,
int
inSeqID
)
const
;
SecondaryStructureType
operator
()(
const
std
::
string
&
inAsymID
,
int
inSeqID
)
const
;
SecondaryStructureType
operator
()(
const
Monomer
&
m
)
const
;
SecondaryStructureType
operator
()(
const
Monomer
&
m
)
const
;
double
accessibility
(
const
std
::
string
&
inAsymID
,
int
inSeqID
)
const
;
double
accessibility
(
const
Monomer
&
m
)
const
;
bool
isAlphaHelixEndBeforeStart
(
const
Monomer
&
m
)
const
;
bool
isAlphaHelixEndBeforeStart
(
const
Monomer
&
m
)
const
;
bool
isAlphaHelixEndBeforeStart
(
const
std
::
string
&
inAsymID
,
int
inSeqID
)
const
;
bool
isAlphaHelixEndBeforeStart
(
const
std
::
string
&
inAsymID
,
int
inSeqID
)
const
;
DSSP_Statistics
GetStatistics
()
const
;
class
iterator
;
using
res_iter
=
typename
std
::
vector
<
Res
>::
iterator
;
class
ResidueInfo
{
public
:
friend
class
iterator
;
explicit
operator
bool
()
const
{
return
not
empty
();
}
bool
empty
()
const
{
return
mImpl
==
nullptr
;
}
const
Monomer
&
residue
()
const
;
/// \brief return 0 if not a break, ' ' in case of a new chain and '*' in case of a broken chain
ChainBreak
chainBreak
()
const
;
/// \brief the internal number in DSSP
int
nr
()
const
;
SecondaryStructureType
ss
()
const
;
int
ssBridgeNr
()
const
;
Helix
helix
(
int
stride
)
const
;
bool
bend
()
const
;
double
accessibility
()
const
;
/// \brief returns resinfo, ladder and parallel
std
::
tuple
<
ResidueInfo
,
int
,
bool
>
bridgePartner
(
int
i
)
const
;
int
sheet
()
const
;
/// \brief return resinfo and the energy of the bond
std
::
tuple
<
ResidueInfo
,
double
>
acceptor
(
int
i
)
const
;
std
::
tuple
<
ResidueInfo
,
double
>
donor
(
int
i
)
const
;
private
:
ResidueInfo
(
Res
*
res
);
Res
*
mImpl
;
};
class
iterator
{
public
:
using
iterator_category
=
std
::
input_iterator_tag
;
using
value_type
=
ResidueInfo
;
using
difference_type
=
std
::
ptrdiff_t
;
using
pointer
=
value_type
*
;
using
reference
=
value_type
&
;
iterator
(
const
iterator
&
i
);
iterator
(
res_iter
cur
);
iterator
&
operator
=
(
const
iterator
&
i
);
reference
operator
*
()
{
return
mCurrent
;
}
pointer
operator
->
()
{
return
&
mCurrent
;
}
iterator
&
operator
++
();
iterator
operator
++
(
int
)
{
auto
tmp
(
*
this
);
this
->
operator
++
();
return
tmp
;
}
bool
operator
==
(
const
iterator
&
rhs
)
const
{
return
mCurrent
.
mImpl
==
rhs
.
mCurrent
.
mImpl
;
}
bool
operator
!=
(
const
iterator
&
rhs
)
const
{
return
mCurrent
.
mImpl
!=
rhs
.
mCurrent
.
mImpl
;
}
private
:
ResidueInfo
mCurrent
;
};
iterator
begin
()
const
;
iterator
end
()
const
;
private
:
private
:
struct
DSSPImpl
*
mImpl
;
struct
DSSPImpl
*
mImpl
;
};
};
...
...
include/cif++/Structure.h
View file @
34c7fd3f
...
@@ -226,8 +226,6 @@ class Residue
...
@@ -226,8 +226,6 @@ class Residue
friend
class
Polymer
;
friend
class
Polymer
;
void
calculateCenterAndRadius
();
const
Structure
*
mStructure
=
nullptr
;
const
Structure
*
mStructure
=
nullptr
;
std
::
string
mCompoundID
,
mAsymID
;
std
::
string
mCompoundID
,
mAsymID
;
int
mSeqID
=
0
;
int
mSeqID
=
0
;
...
@@ -258,6 +256,7 @@ class Monomer : public Residue
...
@@ -258,6 +256,7 @@ class Monomer : public Residue
float
psi
()
const
;
float
psi
()
const
;
float
alpha
()
const
;
float
alpha
()
const
;
float
kappa
()
const
;
float
kappa
()
const
;
float
tco
()
const
;
// torsion angles
// torsion angles
size_t
nrOfChis
()
const
;
size_t
nrOfChis
()
const
;
...
@@ -265,6 +264,9 @@ class Monomer : public Residue
...
@@ -265,6 +264,9 @@ class Monomer : public Residue
bool
isCis
()
const
;
bool
isCis
()
const
;
/// \brief Returns true if the four atoms C, CA, N and O are present
bool
isComplete
()
const
;
Atom
CAlpha
()
const
{
return
atomByID
(
"CA"
);
}
Atom
CAlpha
()
const
{
return
atomByID
(
"CA"
);
}
Atom
C
()
const
{
return
atomByID
(
"C"
);
}
Atom
C
()
const
{
return
atomByID
(
"C"
);
}
Atom
N
()
const
{
return
atomByID
(
"N"
);
}
Atom
N
()
const
{
return
atomByID
(
"N"
);
}
...
...
src/Secondary.cpp
View file @
34c7fd3f
This diff is collapsed.
Click to expand it.
src/Structure.cpp
View file @
34c7fd3f
...
@@ -920,7 +920,6 @@ float Monomer::phi() const
...
@@ -920,7 +920,6 @@ float Monomer::phi() const
cerr
<<
ex
.
what
()
<<
endl
;
cerr
<<
ex
.
what
()
<<
endl
;
}
}
return
result
;
return
result
;
}
}
...
@@ -952,7 +951,7 @@ float Monomer::alpha() const
...
@@ -952,7 +951,7 @@ float Monomer::alpha() const
try
try
{
{
if
(
mIndex
>
1
and
mIndex
+
2
<
mPolymer
->
size
())
if
(
mIndex
>
=
1
and
mIndex
+
2
<
mPolymer
->
size
())
{
{
auto
&
prev
=
mPolymer
->
operator
[](
mIndex
-
1
);
auto
&
prev
=
mPolymer
->
operator
[](
mIndex
-
1
);
auto
&
next
=
mPolymer
->
operator
[](
mIndex
+
1
);
auto
&
next
=
mPolymer
->
operator
[](
mIndex
+
1
);
...
@@ -976,7 +975,7 @@ float Monomer::kappa() const
...
@@ -976,7 +975,7 @@ float Monomer::kappa() const
try
try
{
{
if
(
mIndex
>
2
and
mIndex
+
2
<
mPolymer
->
size
())
if
(
mIndex
>
=
2
and
mIndex
+
2
<
mPolymer
->
size
())
{
{
auto
&
prevPrev
=
mPolymer
->
operator
[](
mIndex
-
2
);
auto
&
prevPrev
=
mPolymer
->
operator
[](
mIndex
-
2
);
auto
&
nextNext
=
mPolymer
->
operator
[](
mIndex
+
2
);
auto
&
nextNext
=
mPolymer
->
operator
[](
mIndex
+
2
);
...
@@ -999,6 +998,29 @@ float Monomer::kappa() const
...
@@ -999,6 +998,29 @@ float Monomer::kappa() const
return
result
;
return
result
;
}
}
float
Monomer
::
tco
()
const
{
double
result
=
0.0
;
try
{
if
(
mIndex
>
0
)
{
auto
&
prev
=
mPolymer
->
operator
[](
mIndex
-
1
);
if
(
prev
.
mSeqID
+
1
==
mSeqID
)
result
=
CosinusAngle
(
C
().
location
(),
O
().
location
(),
prev
.
C
().
location
(),
prev
.
O
().
location
());
}
}
catch
(
const
exception
&
ex
)
{
if
(
cif
::
VERBOSE
)
cerr
<<
"When trying to calculate kappa for "
<<
asymID
()
<<
':'
<<
seqID
()
<<
": "
<<
ex
.
what
()
<<
endl
;
}
return
result
;
}
const
map
<
string
,
vector
<
string
>>
kChiAtomsMap
=
{
const
map
<
string
,
vector
<
string
>>
kChiAtomsMap
=
{
{
"ASP"
,
{
"CG"
,
"OD1"
}
},
{
"ASP"
,
{
"CG"
,
"OD1"
}
},
{
"ASN"
,
{
"CG"
,
"OD1"
}
},
{
"ASN"
,
{
"CG"
,
"OD1"
}
},
...
@@ -1084,6 +1106,19 @@ bool Monomer::isCis() const
...
@@ -1084,6 +1106,19 @@ bool Monomer::isCis() const
return
result
;
return
result
;
}
}
bool
Monomer
::
isComplete
()
const
{
int
seen
=
0
;
for
(
auto
&
a
:
mAtoms
)
{
if
(
a
.
labelAtomId
()
==
"CA"
)
seen
|=
1
;
else
if
(
a
.
labelAtomId
()
==
"C"
)
seen
|=
2
;
else
if
(
a
.
labelAtomId
()
==
"N"
)
seen
|=
4
;
else
if
(
a
.
labelAtomId
()
==
"O"
)
seen
|=
8
;
}
return
seen
==
15
;
}
float
Monomer
::
chiralVolume
()
const
float
Monomer
::
chiralVolume
()
const
{
{
float
result
=
0
;
float
result
=
0
;
...
...
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