mirror of
https://github.com/metabarcoding/obitools4.git
synced 2025-06-29 16:20:46 +00:00
97 lines
2.1 KiB
Go
97 lines
2.1 KiB
Go
package obiformats
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"log"
|
|
"os"
|
|
|
|
"git.metabarcoding.org/lecasofts/go/obitools/pkg/obiseq"
|
|
)
|
|
|
|
func WriteSequences(iterator obiseq.IBioSequence,
|
|
file io.Writer,
|
|
options ...WithOption) error {
|
|
|
|
opts := MakeOptions(options)
|
|
|
|
header_format := opts.FormatFastSeqHeader()
|
|
quality := opts.QualityShift()
|
|
|
|
ok := iterator.Next()
|
|
|
|
if ok {
|
|
seq := iterator.Get()
|
|
if seq.HasQualities() {
|
|
fmt.Fprintln(file, FormatFastq(seq, quality, header_format))
|
|
WriteFastq(iterator, file, options...)
|
|
} else {
|
|
fmt.Fprintln(file, FormatFasta(seq, header_format))
|
|
WriteFasta(iterator, file, options...)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func WriteSequencesToFile(iterator obiseq.IBioSequence,
|
|
filename string,
|
|
options ...WithOption) error {
|
|
|
|
file, err := os.Create(filename)
|
|
|
|
if err != nil {
|
|
log.Fatalf("open file error: %v", err)
|
|
return err
|
|
}
|
|
|
|
return WriteSequences(iterator, file, options...)
|
|
}
|
|
|
|
func WriteSequencesToStdout(iterator obiseq.IBioSequence, options ...WithOption) error {
|
|
return WriteSequences(iterator, os.Stdout, options...)
|
|
}
|
|
|
|
func WriteSequenceBatch(iterator obiseq.IBioSequenceBatch,
|
|
file io.Writer,
|
|
options ...WithOption) (obiseq.IBioSequenceBatch, error) {
|
|
|
|
var newIter obiseq.IBioSequenceBatch
|
|
var err error
|
|
|
|
ok := iterator.Next()
|
|
|
|
if ok {
|
|
iterator.PushBack()
|
|
batch := iterator.Get()
|
|
if batch.Slice()[0].HasQualities() {
|
|
newIter, err = WriteFastqBatch(iterator, file, options...)
|
|
} else {
|
|
newIter, err = WriteFastaBatch(iterator, file, options...)
|
|
}
|
|
|
|
return newIter, err
|
|
}
|
|
|
|
return obiseq.NilIBioSequenceBatch, fmt.Errorf("input iterator not ready")
|
|
}
|
|
|
|
func WriteSequencesBatchToStdout(iterator obiseq.IBioSequenceBatch,
|
|
options ...WithOption) (obiseq.IBioSequenceBatch, error) {
|
|
return WriteSequenceBatch(iterator, os.Stdout, options...)
|
|
}
|
|
|
|
func WriteSequencesBatchToFile(iterator obiseq.IBioSequenceBatch,
|
|
filename string,
|
|
options ...WithOption) (obiseq.IBioSequenceBatch, error) {
|
|
|
|
file, err := os.Create(filename)
|
|
|
|
if err != nil {
|
|
log.Fatalf("open file error: %v", err)
|
|
return obiseq.NilIBioSequenceBatch, err
|
|
}
|
|
|
|
return WriteSequenceBatch(iterator, file, options...)
|
|
}
|