blob: 1e787f14d5d38a0c2f51793c8ea6e43be142a6f5 [file] [log] [blame]
// Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// igor is a tool that takes pairwise alignment data as produced by PALS or krishna
// and reports repeat feature family groupings in JSON format.
package main
import (
"bytes"
"flag"
"fmt"
"io/ioutil"
"log"
"runtime"
"golang.org/x/benchmarks/sweet/benchmarks/internal/driver"
"golang.org/x/benchmarks/third_party/biogo-examples/igor/igor"
"github.com/biogo/biogo/align/pals"
"github.com/biogo/biogo/io/featio/gff"
)
const (
band = 0.05
mergeOverlap = 0
removeOverlap = 0.95
requiredCover = 0.95
strictness = 0
pileDiff = 0.05
imageDiff = 0.05
)
func main() {
driver.SetFlags(flag.CommandLine)
flag.Parse()
log.SetFlags(0)
if flag.NArg() != 1 {
log.Fatal("error: input GFF file required")
}
data, err := ioutil.ReadFile(flag.Arg(0))
if err != nil {
log.Fatalf("error: %v", err)
}
err = driver.RunBenchmark("BiogoIgor", func(_ *driver.B) error {
r := bytes.NewReader(data)
in := gff.NewReader(r)
out := bytes.Buffer{}
out.Grow(1024 * 1024)
var pf pals.PairFilter
piles, err := igor.Piles(in, mergeOverlap, pf)
if err != nil {
return fmt.Errorf("piling: %v", err)
}
_, clusters := igor.Cluster(piles, igor.ClusterConfig{
BandWidth: band,
RequiredCover: requiredCover,
OverlapStrictness: strictness,
OverlapThresh: removeOverlap,
Procs: runtime.GOMAXPROCS(0),
})
cc := igor.Group(clusters, igor.GroupConfig{
pileDiff,
imageDiff,
false,
})
err = igor.WriteJSON(cc, &out)
if err != nil {
return err
}
return nil
}, driver.InProcessMeasurementOptions...)
if err != nil {
log.Fatalf("error: %v", err)
}
}