Skip to content

Commit f8f92aa

Browse files
committed
Switch to inner constructors and explicit for subtypes
1 parent 56e2c0b commit f8f92aa

File tree

2 files changed

+69
-46
lines changed

2 files changed

+69
-46
lines changed

src/models/discrete_models/codon_models.jl

+4
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,10 @@ mutable struct CodonPartition <: DiscretePartition
325325
zeros(sites),
326326
)
327327
end
328+
function CodonPartition(state, states, sites, scaling; code = universal_code)
329+
@assert size(state) == (states, sites) && states == length(code.sense_codons)
330+
new(state, states, sites, scaling)
331+
end
328332
end
329333

330334
#Make this handle IUPAC ambigs sensible. Any codon compatible with the ambig should get a 1.0

src/models/discrete_models/discrete_partitions.jl

+65-46
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ end
1212

1313
#Overloading the copy_partition to avoid deepcopy.
1414
function copy_partition(src::T) where {T<:DiscretePartition}
15-
return T(ntuple(i -> copy(getfield(src, i)), fieldcount(T))...)
15+
return T(copy(src.state), src.states, src.sites, copy(src.scaling))
1616
end
1717

1818
#I should add a constructor that constructs a DiscretePartition from an existing array.
@@ -21,79 +21,98 @@ mutable struct CustomDiscretePartition <: DiscretePartition
2121
states::Int
2222
sites::Int
2323
scaling::Array{Float64,1}
24-
end
25-
26-
CustomDiscretePartition(states, sites) =
27-
CustomDiscretePartition(zeros(states, sites), states, sites, zeros(sites))
28-
29-
function CustomDiscretePartition(freq_vec::Vector{Float64}, sites::Int64) #Add this constructor to all partition types
30-
state_arr = zeros(length(freq_vec), sites)
31-
state_arr .= freq_vec
32-
return CustomDiscretePartition(state_arr, length(freq_vec), sites, zeros(sites))
24+
function CustomDiscretePartition(states, sites)
25+
new(zeros(states, sites), states, sites, zeros(sites))
26+
end
27+
function CustomDiscretePartition(freq_vec::Vector{Float64}, sites::Int64) #Add this constructor to all partition types
28+
state_arr = zeros(length(freq_vec), sites)
29+
state_arr .= freq_vec
30+
new(state_arr, length(freq_vec), sites, zeros(sites))
31+
end
32+
function CustomDiscretePartition(state, states, sites, scaling)
33+
@assert size(state) == (states, sites)
34+
new(state, states, sites, scaling)
35+
end
3336
end
3437

3538
mutable struct NucleotidePartition <: DiscretePartition
3639
state::Array{Float64,2}
3740
states::Int
3841
sites::Int
3942
scaling::Array{Float64,1}
40-
end
41-
42-
NucleotidePartition(sites) = NucleotidePartition(zeros(4, sites), 4, sites, zeros(sites))
43-
44-
function NucleotidePartition(freq_vec::Vector{Float64}, sites::Int64)
45-
@assert length(freq_vec) == 4
46-
state_arr = zeros(4, sites)
47-
state_arr .= freq_vec
48-
return NucleotidePartition(state_arr, 4, sites, zeros(sites))
43+
function NucleotidePartition(sites)
44+
new(zeros(4, sites), 4, sites, zeros(sites))
45+
end
46+
function NucleotidePartition(freq_vec::Vector{Float64}, sites::Int64)
47+
@assert length(freq_vec) == 4
48+
state_arr = zeros(4, sites)
49+
state_arr .= freq_vec
50+
new(state_arr, 4, sites, zeros(sites))
51+
end
52+
function NucleotidePartition(state, states, sites, scaling)
53+
@assert size(state) == (states, sites) && states == 4
54+
new(state, states, sites, scaling)
55+
end
4956
end
5057

5158
mutable struct GappyNucleotidePartition <: DiscretePartition
5259
state::Array{Float64,2}
5360
states::Int
5461
sites::Int
5562
scaling::Array{Float64,1}
56-
end
57-
58-
GappyNucleotidePartition(sites) = GappyNucleotidePartition(zeros(5, sites), 5, sites, zeros(sites))
59-
60-
function GappyNucleotidePartition(freq_vec::Vector{Float64}, sites::Int64)
61-
@assert length(freq_vec) == 5
62-
state_arr = zeros(5, sites)
63-
state_arr .= freq_vec
64-
return GappyNucleotidePartition(state_arr, 5, sites, zeros(sites))
63+
function GappyNucleotidePartition(sites)
64+
new(zeros(5, sites), 5, sites, zeros(sites))
65+
end
66+
function GappyNucleotidePartition(freq_vec::Vector{Float64}, sites::Int64)
67+
@assert length(freq_vec) == 5
68+
state_arr = zeros(5, sites)
69+
state_arr .= freq_vec
70+
new(state_arr, 5, sites, zeros(sites))
71+
end
72+
function GappyNucleotidePartitionPartition(state, states, sites, scaling)
73+
@assert size(state) == (states, sites) && states == 5
74+
new(state, states, sites, scaling)
75+
end
6576
end
6677

6778
mutable struct AminoAcidPartition <: DiscretePartition
6879
state::Array{Float64,2}
6980
states::Int
7081
sites::Int
7182
scaling::Array{Float64,1}
72-
end
73-
74-
AminoAcidPartition(sites) = AminoAcidPartition(zeros(20, sites), 20, sites, zeros(sites))
75-
76-
function AminoAcidPartition(freq_vec::Vector{Float64}, sites::Int64)
77-
@assert length(freq_vec) == 20
78-
state_arr = zeros(20, sites)
79-
state_arr .= freq_vec
80-
return AminoAcidPartition(state_arr, 20, sites, zeros(sites))
83+
function AminoAcidPartition(sites)
84+
new(zeros(20, sites), 20, sites, zeros(sites))
85+
end
86+
function AminoAcidPartition(freq_vec::Vector{Float64}, sites::Int64)
87+
@assert length(freq_vec) == 20
88+
state_arr = zeros(20, sites)
89+
state_arr .= freq_vec
90+
new(state_arr, 20, sites, zeros(sites))
91+
end
92+
function AminoAcidPartition(state, states, sites, scaling)
93+
@assert size(state) == (states, sites) && states == 20
94+
new(state, states, sites, scaling)
95+
end
8196
end
8297

8398
mutable struct GappyAminoAcidPartition <: DiscretePartition
8499
state::Array{Float64,2}
85100
states::Int
86101
sites::Int
87102
scaling::Array{Float64,1}
88-
end
89-
90-
GappyAminoAcidPartition(sites) = GappyAminoAcidPartition(zeros(21, sites), 21, sites, zeros(sites))
91-
92-
function GappyAminoAcidPartition(freq_vec::Vector{Float64}, sites::Int64)
93-
@assert length(freq_vec) == 21
94-
state_arr = zeros(21, sites)
95-
state_arr .= freq_vec
96-
return GappyAminoAcidPartition(state_arr, 21, sites, zeros(sites))
103+
function GappyAminoAcidPartition(sites)
104+
new(zeros(21, sites), 21, sites, zeros(sites))
105+
end
106+
function GappyAminoAcidPartition(freq_vec::Vector{Float64}, sites::Int64)
107+
@assert length(freq_vec) == 21
108+
state_arr = zeros(21, sites)
109+
state_arr .= freq_vec
110+
new(state_arr, 21, sites, zeros(sites))
111+
end
112+
function GappyAminoAcidPartition(state, states, sites, scaling)
113+
@assert size(state) == (states, sites) && states == 21
114+
new(state, states, sites, scaling)
115+
end
97116
end
98117

99118
"""

0 commit comments

Comments
 (0)