File: main.go

package info (click to toggle)
golang-github-brentp-irelate 0.0.1%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, trixie
  • size: 12,624 kB
  • sloc: makefile: 10; python: 5; sh: 4
file content (64 lines) | stat: -rw-r--r-- 1,185 bytes parent folder | download | duplicates (2)
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()
}