mirror of
https://github.com/MillironX/SequenceVariation.jl.git
synced 2024-11-24 06:19:54 +00:00
Compare commits
No commits in common. "2ff4181dd8a4f5fc173d2b694194cac9fa690d21" and "8a71715cd9fa3826da930f0caa965c109810232f" have entirely different histories.
2ff4181dd8
...
8a71715cd9
7 changed files with 16 additions and 21 deletions
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ Insertion
|
||||||
Haplotype
|
Haplotype
|
||||||
reference(::Haplotype)
|
reference(::Haplotype)
|
||||||
variations
|
variations
|
||||||
reconstruct
|
reconstruct!
|
||||||
```
|
```
|
||||||
|
|
||||||
## Variations
|
## Variations
|
||||||
|
|
|
@ -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
|
||||||
```
|
```
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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}
|
||||||
|
|
|
@ -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"
|
||||||
|
|
Loading…
Reference in a new issue