Compare commits

..

No commits in common. "2ff4181dd8a4f5fc173d2b694194cac9fa690d21" and "8a71715cd9fa3826da930f0caa965c109810232f" have entirely different histories.

7 changed files with 16 additions and 21 deletions

View file

@ -16,7 +16,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Code now follows [Blue style](https://github.com/invenia/BlueStyle) ([#28](https://github.com/BioJulia/SequenceVariation.jl/pull/28)) - Code now follows [Blue style](https://github.com/invenia/BlueStyle) ([#28](https://github.com/BioJulia/SequenceVariation.jl/pull/28))
- :bomb: [BREAKING] Public and private API defined based on Blue style guidelines ([#28](https://github.com/BioJulia/SequenceVariation.jl/pull/28)) - :bomb: [BREAKING] Public and private API defined based on Blue style guidelines ([#28](https://github.com/BioJulia/SequenceVariation.jl/pull/28))
- :bomb: [BREAKING] Renamed type `Variant` to `Haplotype` ([#20](https://github.com/BioJulia/SequenceVariation.jl/issues/20)/[#29](https://github.com/BioJulia/SequenceVariation.jl/pull/29)) - :bomb: [BREAKING] Renamed type `Variant` to `Haplotype` ([#20](https://github.com/BioJulia/SequenceVariation.jl/issues/20)/[#29](https://github.com/BioJulia/SequenceVariation.jl/pull/29))
- :bomb: [BREAKING] Refactored `reconstruct` function to use `Haplotype`'s reference sequence ([#30](https://github.com/BioJulia/SequenceVariation.jl/pull/30))
### Removed ### Removed

View file

@ -21,7 +21,7 @@ Insertion
Haplotype Haplotype
reference(::Haplotype) reference(::Haplotype)
variations variations
reconstruct reconstruct!
``` ```
## Variations ## Variations

View file

@ -31,10 +31,11 @@ bos_human_haplotype = Haplotype(bos_human_alignment)
If the alternate sequence of a haplotype is no longer available (as is often the If the alternate sequence of a haplotype is no longer available (as is often the
case when calling variants from alignment files), then the sequence can be case when calling variants from alignment files), then the sequence can be
retrieved using the [`reconstruct`](@ref) function. retrieved using the [`reconstruct!`](@ref) function.
```@repl call_variants ```@repl call_variants
human2 = reconstruct(bos_human_haplotype) human2 = copy(bovine);
reconstruct!(human2, bos_human_haplotype)
human2 == bovine human2 == bovine
human2 == human human2 == human
``` ```

View file

@ -162,22 +162,21 @@ reference(h::Haplotype) = h.ref
Base.:(==)(x::Haplotype, y::Haplotype) = x.ref == y.ref && x.edits == y.edits Base.:(==)(x::Haplotype, y::Haplotype) = x.ref == y.ref && x.edits == y.edits
""" """
reconstruct(h::Haplotype) reconstruct!(seq::S, x::Haplotype{S}) where {S}
Apply the edits in `h` to the reference sequence of `h` and return the mutated sequence Apply the edits in `x` to `seq` and return the mutated sequence
""" """
function reconstruct(h::Haplotype) function reconstruct!(seq::S, x::Haplotype{S}) where {S}
len = length(reference(h)) + sum(edit -> _lendiff(edit), _edits(h)) len = length(x.ref) + sum(edit -> _lendiff(edit), _edits(x))
seq = copy(reference(h))
resize!(seq, len % UInt) resize!(seq, len % UInt)
refpos = seqpos = 1 refpos = seqpos = 1
for edit in _edits(h) for edit in x.edits
while refpos < leftposition(edit) while refpos < edit.pos
seq[seqpos] = reference(h)[refpos] seq[seqpos] = x.ref[refpos]
refpos += 1 refpos += 1
seqpos += 1 seqpos += 1
end end
editx = _mutation(edit) editx = edit.x
if editx isa Substitution if editx isa Substitution
seq[seqpos] = editx.x seq[seqpos] = editx.x
seqpos += 1 seqpos += 1
@ -185,14 +184,14 @@ function reconstruct(h::Haplotype)
elseif editx isa Deletion elseif editx isa Deletion
refpos += editx.len refpos += editx.len
elseif editx isa Insertion elseif editx isa Insertion
for i in editx.seq for i in editx.x
seq[seqpos] = i seq[seqpos] = i
seqpos += 1 seqpos += 1
end end
end end
end end
while seqpos length(seq) while seqpos length(seq)
seq[seqpos] = reference(h)[refpos] seq[seqpos] = x.ref[refpos]
refpos += 1 refpos += 1
seqpos += 1 seqpos += 1
end end

View file

@ -32,7 +32,7 @@ export Substitution
export Variation export Variation
export altbases export altbases
export mutation export mutation
export reconstruct export reconstruct!
export refbases export refbases
export reference export reference
export translate export translate

View file

@ -15,7 +15,7 @@ end
Deletion(x::Integer) = Deletion(convert(UInt, x)) Deletion(x::Integer) = Deletion(convert(UInt, x))
Base.length(x::Deletion) = Int(x.len) Base.length(x::Deletion) = Int(x.len)
Base.:(==)(x::Deletion, y::Deletion) = length(x) == length(y) Base.:(==)(x::Substitution, y::Substitution) = length(x) == length(y)
Base.hash(x::Deletion, h::UInt) = hash(Deletion, hash(x.len, h)) Base.hash(x::Deletion, h::UInt) = hash(Deletion, hash(x.len, h))
function _refbases(d::Deletion, reference::S, pos::UInt) where {S<:BioSequence} function _refbases(d::Deletion, reference::S, pos::UInt) where {S<:BioSequence}

View file

@ -43,10 +43,6 @@ var = Haplotype(align(seq1, seq2))
end end
end end
@testset "HaplotypeReconstruction" begin
@test reconstruct(var) == seq1
end
@testset "VariationPosition" begin @testset "VariationPosition" begin
refseq = dna"ACAACTTTATCT" refseq = dna"ACAACTTTATCT"
mutseq = dna"ACATCTTTATCT" mutseq = dna"ACATCTTTATCT"