1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
package main
import (
"bufio"
"fmt"
"log"
"os"
"os/signal"
"runtime/pprof"
"syscall"
"github.com/brentp/bix"
"github.com/brentp/irelate"
I "github.com/brentp/irelate/interfaces"
)
func init() {
// so that output stops when piping to head.
done := make(chan os.Signal, 1)
signal.Notify(done, os.Interrupt, syscall.SIGIO, syscall.SIGPIPE)
go func() {
//for range done {
// for travis
for _ = range done {
os.Exit(0)
}
}()
}
func check(e error) {
if e != nil {
log.Fatal(e)
}
}
func main() {
f, err := os.Create("irelate.cpu.pprof")
if err != nil {
panic(err)
}
pprof.StartCPUProfile(f)
defer pprof.StopCPUProfile()
files := os.Args[1:]
buf := bufio.NewWriter(os.Stdout)
b, err := bix.New(files[0], 1)
check(err)
bx, err := b.Query(nil)
check(err)
queryables := make([]I.Queryable, len(files)-1)
for i, f := range files[1:] {
q, err := bix.New(f, 1)
if err != nil {
log.Fatal(err)
}
queryables[i] = q
}
for interval := range irelate.PIRelate(4000, 25000, bx, false, nil, queryables...) {
fmt.Fprintf(buf, "%s\t%d\t%d\t%d\n", interval.Chrom(), interval.Start(), interval.End(), len(interval.Related()))
}
buf.Flush()
}
|