Auxiliary methods

The following methods include auxiliary functions for various tasks.

ProtoSyn.rand_vector_in_sphereFunction
rand_vector_in_sphere([::Type{T}]) where {T <: AbstractFloat}

Return a random vector in a sphere, with norm = 1. The X, Y and Z cartesian coordinates are of type T. If not provided, the ProtoSyn.Units.defaultFloat type will be used.

Examples

julia> ProtoSyn.rand_vector_in_sphere()
3-element Array{Float64,1}:
 0.4182585394795512
 0.4965570141814753
 0.7605859095589471
source
ProtoSyn.rotation_matrix_from_axis_angleFunction
rotation_matrix_from_axis_angle(axis::Vector{T}, angle::T) where {T <: AbstractFloat}

Return a rotation matrix based on the provided axis and angle (in radians).

Examples

julia> ProtoSyn.rotation_matrix_from_axis_angle([1.1, 2.2, 3.3], π/2)
3×3 Matrix{Float64}:
  0.0714286  -0.658927  0.748808
  0.944641    0.285714  0.16131
 -0.320237    0.695833  0.642857
source
ProtoSyn.unit_circleFunction
unit_circle(value::T) where {T <: AbstractFloat}

Maps an angle value (in radians) from ]-∞, +∞[ to [0, 2π[ range. Returns value in radians.

Examples

julia> ProtoSyn.unit_circle(-2pi)
0.0

julia> ProtoSyn.unit_circle(-(3/2)pi)
1.5707963267948966
source
ProtoSyn.half_unit_circleFunction
half_unit_circle(value::T) where {T <: AbstractFloat}

Maps an angle value (in radians) from ]-∞, +∞[ to [-π, π[ range. Returns value in radians.

Examples

julia> ProtoSyn.half_unit_circle(-2pi)
0.0

julia> ProtoSyn.half_unit_circle(-(3/2)pi)
-1.5707963267948966
source
ProtoSyn.fibonacci_sphereFunction
fibonacci_sphere([::Type{T}], n_points::Int = 1000) where {T <: AbstractFloat}

Generate a set n_points cartesian coordinates following the fibonnacci lattice (see http://extremelearning.com.au/how-to-evenly-distribute-points-on-a-sphere-more-effectively-than-the-canonical-fibonacci-lattice/). If provided, use the AbstractFloat type T (otherwise, will use ProtoSyn.Units.defaultFloat).

Examples

julia> ProtoSyn.fibonacci_sphere(10)
10-element Vector{Vector{Float64}}:
 [0.0, 1.0, 0.0]
 [-0.4634653634889746, 0.7777777777777778, 0.42457223795379545]
 [0.07269269081806179, 0.5555555555555556, -0.8282957185649263]
 (...)
source
ProtoSyn.hist_by_distance_by_elemFunction
hist_by_distance_by_elem(pose::Pose, [selection::Opt{AbstractSelection} = nothing]; [cutoff::T = 16.0], [bin::T = 0.2], [elems::Vector{String} = ["H", "O", "N", "C", "S"]], [dm::Opt{Matrix{T}} = nothing]) where {T <: AbstractFloat}

Calculates the given Pose pose distance histogram by Atom element. The output format matches the requirements for predict_igbr_nn_born_radii (for more information, see https://academic.oup.com/bioinformatics/article/36/6/1757/5613804). If an AbstractSelection selection is provided, only the selected subset of Atom instances is considered for the histogram calculation (promoted to Atom level using the promote method). The distance histogram is generated for all Atom instances within cutoff Å of the focused Atom, sub-divided in bins of bin Å. If a full_distance_matrix dm is provided, use it for distance calculation, otherwise a new distance matrix is generated. Each Atom histogram is divided by elements: one histogram is generated for each atomic element in elems containing all neighbouring Atom instances of that type.

Examples

julia> ProtoSyn.hist_by_distance_by_elem(pose)
1140×400 Matrix{Int64}:
 (...)
source