https://github.com/murrellgroup/assigningsecondarystructure.jl
Simplified DSSP algorithm implemented in Julia
https://github.com/murrellgroup/assigningsecondarystructure.jl
dssp julia protein secondary-structure
Last synced: about 1 year ago
JSON representation
Simplified DSSP algorithm implemented in Julia
- Host: GitHub
- URL: https://github.com/murrellgroup/assigningsecondarystructure.jl
- Owner: MurrellGroup
- License: mit
- Created: 2023-10-25T19:51:09.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-07-19T17:29:52.000Z (almost 2 years ago)
- Last Synced: 2024-08-19T17:36:54.643Z (almost 2 years ago)
- Topics: dssp, julia, protein, secondary-structure
- Language: Julia
- Homepage:
- Size: 268 KB
- Stars: 4
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# AssigningSecondaryStructure
[](https://github.com/MurrellGroup/AssigningSecondaryStructure.jl/releases/latest)
[](https://opensource.org/license/MIT)
[](https://github.com/MurrellGroup/AssigningSecondaryStructure.jl/actions/workflows/CI.yml?query=branch%3Amain)
[](https://codecov.io/gh/MurrellGroup/AssigningSecondaryStructure.jl)
AssigningSecondaryStructure provides a way to assign loops, helices, and strands to protein backbones using a simplified version of the [DSSP](https://swift.cmbi.umcn.nl/gv/dssp/) algorithm.
Both the [BioStructures.jl](https://github.com/BioJulia/BioStructures.jl) and [ProteinSecondaryStructures.jl](https://github.com/m3g/ProteinSecondaryStructures.jl) packages provide interfaces for more sophisticated secondary structure assignment, but they both call the [DSSP_jll.jl](https://docs.juliahub.com/General/DSSP_jll/stable/) binary under the hood, which requires writing structures to a file with significant overhead.
## Installation
The package is registered in the General registry, and can be installed from the REPL with `]add AssigningSecondaryStructure`.
## Usage
The `assign_secondary_structure` function takes a vector of atom coordinate arrays of size `(3, 3, L)`. The first axis is for the x, y, and z coordinates, the second axis is for the atom types (N, CA, C), and the third axis is for the residues.
```julia
julia> using BioStructures
julia> coords_vector = map(collectchains(read("test/data/1ZAK.pdb", PDBFormat))) do chain
reshape(coordarray(chain, backboneselector), 3, 4, :)[:, 1:3, :] # get N, CA, C atoms only
end
julia> using AssigningSecondaryStructure
julia> assign_secondary_structure(coords_vector) # 2 chains
2-element Vector{Vector{Int64}}:
[1, 1, 1, 1, 3, 3, 3, 3, 3, 3 … 2, 2, 2, 2, 2, 2, 2, 1, 1, 1]
[1, 1, 1, 1, 3, 3, 3, 3, 3, 3 … 2, 2, 2, 2, 2, 2, 2, 1, 1, 1]
```
The output is vectors of integers:
- `1`: loop
- `2`: helix
- `3`: strand
## Acknowledgements
This package was originally ported from the [PyDSSP](https://github.com/ShintaroMinami/PyDSSP) package, created by Shintaro Minami. The code has since been rewritten to look more like the 1983 paper (Kabsch W and Sander C), and to be more Julian, understandable, and efficient, at the cost of it no longer being differentiable like the PyDSSP version. The time complexity of assigning the secondary structure of a chain with $n$ residues is $O(n \log n)$.