Goalign: toolkit and api for alignment manipulation

March 29, 2020 ยท View on GitHub

API

splits

Printing statistics about an input alignment:

package main

import (
	"bufio"
	"fmt"
	"io"

	"github.com/evolbioinfo/goalign/align"
	"github.com/evolbioinfo/goalign/io/fasta"
	"github.com/evolbioinfo/goalign/io/partition"
	"github.com/evolbioinfo/goalign/io/utils"
)

func main() {
	var fi io.Closer
	var partitionReader *bufio.Reader
	var alignmentReader *bufio.Reader
	var partitionParser *partition.Parser
	var splitAligns []align.Alignment
	var ps *align.PartitionSet
	var err error
	var al align.Alignment

	/* Parse Fasta */
	if fi, alignmentReader, err = utils.GetReader("align.fa"); err != nil {
		panic(err)
	}
	defer fi.Close()

	if al, err = fasta.NewParser(alignmentReader).Parse(); err != nil {
		panic(err)
	}
	defer fi.Close()

	/* Parse Partitions */
	if fi, partitionReader, err = utils.GetReader("partitions.txt"); err != nil {
		panic(err)
	}
	defer fi.Close()
	partitionParser = partition.NewParser(partitionReader)
	if ps, err = partitionParser.Parse(al.Length()); err != nil {
		panic(err)
	}
	if err = ps.CheckSites(); err != nil {
		panic(err)
	}

	/*  Split alignment per partition and write them on std out */
	if splitAligns, err = al.Split(ps); err != nil {
		panic(err)
	}

	for i, a := range splitAligns {
		fmt.Printf("Alignment %d\n", i)
		fmt.Println(fasta.WriteAlignment(a))
	}
}