diff --git a/Project.toml b/Project.toml index dde55af..6407961 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "ProtPlot" uuid = "77b3afcc-388a-4e14-926d-b99c82d1a01f" authors = ["Anton Oresten "] -version = "0.4.4" +version = "0.4.5" [deps] AssigningSecondaryStructure = "8ed43e74-60fb-4e11-99b9-91deed37aef7" diff --git a/src/ProtPlot.jl b/src/ProtPlot.jl index 717f2ae..fde3ed7 100644 --- a/src/ProtPlot.jl +++ b/src/ProtPlot.jl @@ -1,5 +1,12 @@ module ProtPlot +export Ribbon, ribbon, ribbon! +export ribbon_scene + +export Ramachandran, ramachandran, ramachandran! + +export PDBEntry + using Makie using ColorTypes @@ -9,17 +16,12 @@ export Backboner, readpdb import BioStructures -function PDBEntry(pdbid::AbstractString; format=BioStructures.PDBFormat, kwargs...) - chains = mktempdir() do temp_dir - path = BioStructures.downloadpdb(pdbid; dir=temp_dir, kwargs...) - Backboner.Protein.readchains(path, format) - end - return chains -end - -export PDBEntry - include("Ribbon/Ribbon.jl") include("ramachandran.jl") +PDBEntry(pdbid::AbstractString; format=BioStructures.PDBFormat, kwargs...) = mktempdir() do dir + path = BioStructures.downloadpdb(pdbid; dir, format, kwargs...) + Backboner.Protein.readchains(path, format) +end + end diff --git a/src/Ribbon/Ribbon.jl b/src/Ribbon/Ribbon.jl index d60ed42..1e78351 100644 --- a/src/Ribbon/Ribbon.jl +++ b/src/Ribbon/Ribbon.jl @@ -1,7 +1,3 @@ -export Ribbon, ribbon, ribbon!, ribbon_scene - -using Makie - @recipe(Ribbon, chains) do scene Attributes( secondary_structures = nothing, @@ -32,6 +28,7 @@ include("render.jl") # TODO: observe chains and re-render when they change function Makie.plot!(ribbon::Ribbon{<:Tuple{<:AbstractVector{<:AbstractArray{T,3}}}}) where T<:Real chain_backbones = convert.(Array{T,3}, collect(ribbon[1][])) + filter!(c -> size(c, 3) > 1, chain_backbones) isnothing(ribbon.secondary_structures[]) && (ribbon.secondary_structures[] = _assign_secondary_structure(chain_backbones)) isnothing(ribbon.colors[]) && (ribbon.colors[] = [range(0, 1, size(chain_backbone, 3)) for chain_backbone in chain_backbones]) render!(ribbon, chain_backbones) diff --git a/src/Ribbon/render.jl b/src/Ribbon/render.jl index 3d0732c..66423be 100644 --- a/src/Ribbon/render.jl +++ b/src/Ribbon/render.jl @@ -20,7 +20,7 @@ end function render_lines_between_subchains!(ribbon::Ribbon, chain_backbone_partitions::Vector{Array{T,3}}, color=:lightgray, linewidth=2) where T<:Real for i in 1:length(chain_backbone_partitions)-1 - startpoint, endpoint = @views chain_backbone_partitions[i][:, 2, end], chain_backbones_partitions[i+1][:, 2, 1] + startpoint, endpoint = @views chain_backbone_partitions[i][:, 2, end], chain_backbone_partitions[i+1][:, 2, 1] n_segments = trunc(Int, norm(endpoint - startpoint) / 0.8) xs, ys, zs = [range(startpoint[i], endpoint[i], 2*n_segments) for i in 1:3] linesegments!(ribbon, xs, ys, zs; linewidth=linewidth, color=color, transparency=true) @@ -48,4 +48,4 @@ function render!(ribbon::Ribbon, chain_backbones::Vector{Array{T,3}}) where T<:R render_lines_between_subchains!(ribbon, chain_backbone_partitions) end return nothing -end \ No newline at end of file +end diff --git a/src/Ribbon/utils.jl b/src/Ribbon/utils.jl index 04893ca..8928c4e 100644 --- a/src/Ribbon/utils.jl +++ b/src/Ribbon/utils.jl @@ -37,4 +37,4 @@ function get_subchain_ranges(chain_backbone::Array{T,3}, cn_distance_tolerance=2 end push!(ranges, start_i+1:chain_length) return ranges -end \ No newline at end of file +end diff --git a/src/ramachandran.jl b/src/ramachandran.jl index 103a380..8b2c30c 100644 --- a/src/ramachandran.jl +++ b/src/ramachandran.jl @@ -1,5 +1,3 @@ -export Ramachandran, ramachandran, ramachandran! - @recipe(Ramachandran, phi_angles, psi_angles) do scene Attributes( color = :black, @@ -33,4 +31,4 @@ function Makie.convert_arguments(::Type{<:Ramachandran}, chains::Vector{Backbone return (phi_angles, psi_angles) end -Makie.convert_arguments(T::Type{<:Ramachandran}, pdbfile::AbstractString) = Makie.convert_arguments(T, Backboner.Protein.readchains(pdbfile)) \ No newline at end of file +Makie.convert_arguments(T::Type{<:Ramachandran}, pdbfile::AbstractString) = Makie.convert_arguments(T, Backboner.Protein.readchains(pdbfile))