mirror of
https://github.com/metabarcoding/obitools4.git
synced 2026-04-30 03:50:39 +00:00
Merge pull request #113 from metabarcoding/push-oxowomxlnlnx
Push oxowomxlnlnx
This commit is contained in:
@@ -3,7 +3,7 @@ package obioptions
|
|||||||
// Version is automatically updated by the Makefile from version.txt
|
// Version is automatically updated by the Makefile from version.txt
|
||||||
// The patch number (third digit) is incremented on each push to the repository
|
// The patch number (third digit) is incremented on each push to the repository
|
||||||
|
|
||||||
var _Version = "Release 4.4.40"
|
var _Version = "Release 4.4.41"
|
||||||
|
|
||||||
// Version returns the version of the obitools package.
|
// Version returns the version of the obitools package.
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -499,6 +499,9 @@ func (s *BioSequence) SetQualities(qualities Quality) {
|
|||||||
if s.qualities != nil {
|
if s.qualities != nil {
|
||||||
RecycleSlice(&s.qualities)
|
RecycleSlice(&s.qualities)
|
||||||
}
|
}
|
||||||
|
if len(qualities) > 0 && len(qualities) != len(s.sequence) {
|
||||||
|
log.Panicf("[BioSequence.SetQualities] Sequence %s has a length of %d and qualities a length of %d", s.id, len(s.sequence), len(qualities))
|
||||||
|
}
|
||||||
s.qualities = CopySlice(qualities)
|
s.qualities = CopySlice(qualities)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -508,6 +511,9 @@ func (s *BioSequence) TakeQualities(qualities Quality) {
|
|||||||
if s.qualities != nil {
|
if s.qualities != nil {
|
||||||
RecycleSlice(&s.qualities)
|
RecycleSlice(&s.qualities)
|
||||||
}
|
}
|
||||||
|
if len(qualities) > 0 && len(qualities) != len(s.sequence) {
|
||||||
|
log.Panicf("[BioSequence.TakeQualities] Sequence %s has a length of %d and qualities a length of %d", s.id, len(s.sequence), len(qualities))
|
||||||
|
}
|
||||||
s.qualities = qualities
|
s.qualities = qualities
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -118,6 +118,9 @@ func (sequence *BioSequence) _revcmpMutation() *BioSequence {
|
|||||||
*/
|
*/
|
||||||
func ReverseComplementWorker(inplace bool) SeqWorker {
|
func ReverseComplementWorker(inplace bool) SeqWorker {
|
||||||
f := func(input *BioSequence) (BioSequenceSlice, error) {
|
f := func(input *BioSequence) (BioSequenceSlice, error) {
|
||||||
|
if input.IsPaired() {
|
||||||
|
input.PairedWith().ReverseComplement(inplace)
|
||||||
|
}
|
||||||
return BioSequenceSlice{input.ReverseComplement(inplace)}, nil
|
return BioSequenceSlice{input.ReverseComplement(inplace)}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+20
-2
@@ -48,7 +48,16 @@ func (sequence *BioSequence) Subsequence(from, to int, circular bool) (*BioSeque
|
|||||||
newSeq.sequence = CopySlice(sequence.Sequence()[from:to])
|
newSeq.sequence = CopySlice(sequence.Sequence()[from:to])
|
||||||
|
|
||||||
if sequence.HasQualities() {
|
if sequence.HasQualities() {
|
||||||
newSeq.qualities = CopySlice(sequence.Qualities()[from:to])
|
qual := sequence.Qualities()
|
||||||
|
if len(qual) != sequence.Len() {
|
||||||
|
log.Panicf(
|
||||||
|
"[BioSequence.Subsequence] Sequence %s has a length of %d and qualities a length of %d",
|
||||||
|
sequence.Id(),
|
||||||
|
sequence.Len(),
|
||||||
|
len(qual),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
newSeq.qualities = CopySlice(qual[from:to])
|
||||||
}
|
}
|
||||||
|
|
||||||
newSeq.id = fmt.Sprintf("%s_sub[%d..%d]", sequence.Id(), from+1, to)
|
newSeq.id = fmt.Sprintf("%s_sub[%d..%d]", sequence.Id(), from+1, to)
|
||||||
@@ -58,7 +67,16 @@ func (sequence *BioSequence) Subsequence(from, to int, circular bool) (*BioSeque
|
|||||||
newSeq.Write(sequence.Sequence()[0:to])
|
newSeq.Write(sequence.Sequence()[0:to])
|
||||||
|
|
||||||
if sequence.HasQualities() {
|
if sequence.HasQualities() {
|
||||||
newSeq.WriteQualities(sequence.Qualities()[0:to])
|
qual := sequence.Qualities()
|
||||||
|
if len(qual) != sequence.Len() {
|
||||||
|
log.Panicf(
|
||||||
|
"[BioSequence.Subsequence] Sequence %s has a length of %d and qualities a length of %d",
|
||||||
|
sequence.Id(),
|
||||||
|
sequence.Len(),
|
||||||
|
len(qual),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
newSeq.WriteQualities(qual[0:to])
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ func CLIWriteSequenceCSV(iterator obiiter.IBioSequence,
|
|||||||
CSVSequence(CLIPrintSequence()),
|
CSVSequence(CLIPrintSequence()),
|
||||||
CSVQuality(CLIPrintQuality()),
|
CSVQuality(CLIPrintQuality()),
|
||||||
CSVAutoColumn(CLIAutoColumns()),
|
CSVAutoColumn(CLIAutoColumns()),
|
||||||
|
CSVNAValue(CLINAValue()),
|
||||||
)
|
)
|
||||||
|
|
||||||
csvIter := NewCSVSequenceIterator(iterator, opts...)
|
csvIter := NewCSVSequenceIterator(iterator, opts...)
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package obicsv
|
package obicsv
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"slices"
|
"slices"
|
||||||
|
|
||||||
@@ -67,8 +68,19 @@ func CSVBatchFromSequences(batch obiiter.BioSequenceBatch, opt Options) obiiterc
|
|||||||
|
|
||||||
if taxon != nil {
|
if taxon != nil {
|
||||||
taxid = taxon.String()
|
taxid = taxon.String()
|
||||||
|
} else if ta, ok := sequence.GetAttribute("taxid"); ok {
|
||||||
|
switch tv := ta.(type) {
|
||||||
|
case string:
|
||||||
|
taxid = tv
|
||||||
|
case int:
|
||||||
|
taxid = fmt.Sprintf("%d", tv)
|
||||||
|
case float64:
|
||||||
|
taxid = fmt.Sprintf("%d", int(tv))
|
||||||
|
default:
|
||||||
|
taxid = opt.CSVNAValue()
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
taxid = sequence.Taxid()
|
taxid = opt.CSVNAValue()
|
||||||
}
|
}
|
||||||
|
|
||||||
record["taxid"] = taxid
|
record["taxid"] = taxid
|
||||||
|
|||||||
@@ -99,6 +99,17 @@ func (data1 *DataSummary) Add(data2 *DataSummary) *DataSummary {
|
|||||||
rep.sample_singletons = sumUpdateIntMap(data1.sample_singletons, data2.sample_singletons)
|
rep.sample_singletons = sumUpdateIntMap(data1.sample_singletons, data2.sample_singletons)
|
||||||
rep.sample_obiclean_bad = sumUpdateIntMap(data1.sample_obiclean_bad, data2.sample_obiclean_bad)
|
rep.sample_obiclean_bad = sumUpdateIntMap(data1.sample_obiclean_bad, data2.sample_obiclean_bad)
|
||||||
|
|
||||||
|
for k, m1 := range data1.map_summaries {
|
||||||
|
rep.map_summaries[k] = m1
|
||||||
|
}
|
||||||
|
for k, m2 := range data2.map_summaries {
|
||||||
|
if m1, ok := rep.map_summaries[k]; ok {
|
||||||
|
rep.map_summaries[k] = sumUpdateIntMap(m1, m2)
|
||||||
|
} else {
|
||||||
|
rep.map_summaries[k] = m2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return rep
|
return rep
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -163,8 +174,9 @@ func ISummary(iterator obiiter.IBioSequence, summarise []string) map[string]inte
|
|||||||
summaries := make([]*DataSummary, nproc)
|
summaries := make([]*DataSummary, nproc)
|
||||||
|
|
||||||
for n := 0; n < nproc; n++ {
|
for n := 0; n < nproc; n++ {
|
||||||
|
summaries[n] = NewDataSummary()
|
||||||
for _, v := range summarise {
|
for _, v := range summarise {
|
||||||
summaries[n].map_summaries[v] = make(map[string]int, 0)
|
summaries[n].map_summaries[v] = make(map[string]int)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -174,6 +186,11 @@ func ISummary(iterator obiiter.IBioSequence, summarise []string) map[string]inte
|
|||||||
batch := iseq.Get()
|
batch := iseq.Get()
|
||||||
for _, seq := range batch.Slice() {
|
for _, seq := range batch.Slice() {
|
||||||
summary.Update(seq)
|
summary.Update(seq)
|
||||||
|
for _, attr := range summarise {
|
||||||
|
if m, ok := seq.GetIntMap(attr); ok {
|
||||||
|
summary.map_summaries[attr] = sumUpdateIntMap(summary.map_summaries[attr], m)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
waiter.Done()
|
waiter.Done()
|
||||||
@@ -181,11 +198,9 @@ func ISummary(iterator obiiter.IBioSequence, summarise []string) map[string]inte
|
|||||||
|
|
||||||
waiter.Add(nproc)
|
waiter.Add(nproc)
|
||||||
|
|
||||||
summaries[0] = NewDataSummary()
|
|
||||||
go ff(iterator, summaries[0])
|
go ff(iterator, summaries[0])
|
||||||
|
|
||||||
for i := 1; i < nproc; i++ {
|
for i := 1; i < nproc; i++ {
|
||||||
summaries[i] = NewDataSummary()
|
|
||||||
go ff(iterator.Split(), summaries[i])
|
go ff(iterator.Split(), summaries[i])
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -246,5 +261,14 @@ func ISummary(iterator obiiter.IBioSequence, summarise []string) map[string]inte
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(rep.map_summaries) > 0 {
|
||||||
|
mapDict := make(map[string]interface{}, len(rep.map_summaries))
|
||||||
|
for attr, counts := range rep.map_summaries {
|
||||||
|
mapDict[attr] = counts
|
||||||
|
}
|
||||||
|
dict["map_summaries"] = mapDict
|
||||||
|
}
|
||||||
|
|
||||||
return dict
|
return dict
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1 +1 @@
|
|||||||
4.4.40
|
4.4.41
|
||||||
|
|||||||
Reference in New Issue
Block a user