-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #18 from BioJulia/constructors
Expansion of constructors methods for Nucleic Acid Substitution Models
- Loading branch information
Showing
27 changed files
with
622 additions
and
440 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,38 +1,38 @@ | ||
@inline function checkbounds(a::AbstractArray, i::T, j::T) where T <: NucleicAcid | ||
@inline function Base.checkbounds(a::AbstractArray, i::T, j::T) where T <: NucleicAcid | ||
if iscertain(i) & iscertain(j) | ||
return true | ||
end | ||
checkbounds(a, trailing_zeros(i) + 1, trailing_zeros(j) + 1) | ||
end | ||
|
||
|
||
@inline function checkbounds(a::AbstractArray, i::NucleicAcid) | ||
@inline function Base.checkbounds(a::AbstractArray, i::NucleicAcid) | ||
if iscertain(i) | ||
return true | ||
end | ||
checkbounds(a, trailing_zeros(i) + 1) | ||
end | ||
|
||
|
||
@inline function getindex(a::AbstractArray, i::T, j::T) where T <: NucleicAcid | ||
@inline function Base.getindex(a::AbstractArray, i::T, j::T) where T <: NucleicAcid | ||
@boundscheck checkbounds(a, i, j) | ||
@inbounds return a[trailing_zeros(i) + 1, trailing_zeros(j) + 1] | ||
end | ||
|
||
|
||
@inline function getindex(a::AbstractArray, i::NucleicAcid) | ||
@inline function Base.getindex(a::AbstractArray, i::NucleicAcid) | ||
@boundscheck checkbounds(a, i) | ||
@inbounds return a[trailing_zeros(i) + 1] | ||
end | ||
|
||
|
||
@inline function setindex!(a::AbstractArray, x, i::T, j::T) where T <: NucleicAcid | ||
@inline function Base.setindex!(a::AbstractArray, x, i::T, j::T) where T <: NucleicAcid | ||
@boundscheck checkbounds(a, i, j) | ||
@inbounds return setindex!(a, x, trailing_zeros(i) + 1, trailing_zeros(j) + 1) | ||
end | ||
|
||
|
||
@inline function setindex!(a::AbstractArray, x, i::NucleicAcid) | ||
@inline function Base.setindex!(a::AbstractArray, x, i::NucleicAcid) | ||
@boundscheck checkbounds(a, i) | ||
@inbounds return setindex!(a, x, trailing_zeros(i) + 1) | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
F81(πA::F, πC::F, πG::F, πT::F, | ||
safe::Bool=true) where F <: Float64 = | ||
F81rel(πA, πC, πG, πT) | ||
|
||
|
||
F81(β::F, | ||
πA::F, πC::F, πG::F, πT::F, | ||
safe::Bool=true) where F <: Float64 = | ||
F81abs(β, πA, πC, πG, πT, safe) | ||
|
||
|
||
function F81(θ_vec::A, | ||
π_vec::A, | ||
safe::Bool=true) where A <: AbstractArray | ||
if safe && length(π_vec) != 4 | ||
error("Incorrect base frequency vector length") | ||
end | ||
if length(θ_vec) == 0 | ||
return F81rel(π_vec[DNA_A], π_vec[DNA_C], π_vec[DNA_G], π_vec[DNA_T], | ||
safe) | ||
elseif length(θ_vec) == 1 | ||
return F81abs(θ_vec[1], | ||
π_vec[DNA_A], π_vec[DNA_C], π_vec[DNA_G], π_vec[DNA_T], | ||
safe) | ||
else | ||
error("Parameter vector length incompatiable with absolute or relative rate form of substitution model") | ||
end | ||
end | ||
|
||
|
||
function F81rel(θ_vec::A, | ||
π_vec::A, | ||
safe::Bool=true) where A <: AbstractArray | ||
if safe | ||
if length(θ_vec) != 0 | ||
error("Incorrect parameter vector length") | ||
elseif length(π_vec) != 4 | ||
error("Incorrect base frequency vector length") | ||
end | ||
end | ||
return F81rel(π_vec[DNA_A], π_vec[DNA_C], π_vec[DNA_G], π_vec[DNA_T], safe) | ||
end | ||
|
||
|
||
|
||
function F81abs(θ_vec::A, | ||
π_vec::A, | ||
safe::Bool=true) where A <: AbstractArray | ||
if safe | ||
if length(θ_vec) != 1 | ||
error("Incorrect parameter vector length") | ||
elseif length(π_vec) != 4 | ||
error("Incorrect base frequency vector length") | ||
end | ||
end | ||
return F81abs(θ_vec[1], π_vec[DNA_A], π_vec[DNA_C], π_vec[DNA_G], π_vec[DNA_T], safe) | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
F84(κ::F, | ||
πA::F, πC::F, πG::F, πT::F, | ||
safe::Bool=true) where F <: Float64 = | ||
F84rel(κ, πA, πC, πG, πT, safe) | ||
|
||
|
||
F84(κ::F, β::F, | ||
πA::F, πC::F, πG::F, πT::F, | ||
safe::Bool=true) where F <: Float64 = | ||
F84abs(κ, β, πA, πC, πG, πT, safe) | ||
|
||
|
||
function F84(θ_vec::A, | ||
π_vec::A, | ||
safe::Bool=true) where A <: AbstractArray | ||
if safe && length(π_vec) != 4 | ||
error("Incorrect base frequency vector length") | ||
end | ||
if length(θ_vec) == 1 | ||
return F84rel(θ_vec[1], | ||
π_vec[DNA_A], π_vec[DNA_C], π_vec[DNA_G], π_vec[DNA_T], | ||
safe) | ||
elseif length(θ_vec) == 2 | ||
return F84abs(θ_vec[1], θ_vec[2], | ||
π_vec[DNA_A], π_vec[DNA_C], π_vec[DNA_G], π_vec[DNA_T], | ||
safe) | ||
else | ||
error("Parameter vector length incompatiable with absolute or relative rate form of substitution model") | ||
end | ||
end | ||
|
||
|
||
function F84rel(θ_vec::A, | ||
π_vec::A, | ||
safe::Bool=true) where A <: AbstractArray | ||
if safe | ||
if length(θ_vec) != 1 | ||
error("Incorrect parameter vector length") | ||
elseif length(π_vec) != 4 | ||
error("Incorrect base frequency vector length") | ||
end | ||
end | ||
return F84rel(θ_vec[1], π_vec[DNA_A], π_vec[DNA_C], π_vec[DNA_G], π_vec[DNA_T], safe) | ||
end | ||
|
||
|
||
function F84abs(θ_vec::A, | ||
π_vec::A, | ||
safe::Bool=true) where A <: AbstractArray | ||
if safe | ||
if length(θ_vec) != 2 | ||
error("Incorrect parameter vector length") | ||
elseif length(π_vec) != 4 | ||
error("Incorrect base frequency vector length") | ||
end | ||
end | ||
return F84abs(θ_vec[1], θ_vec[2], π_vec[DNA_A], π_vec[DNA_C], π_vec[DNA_G], π_vec[DNA_T], safe) | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.