- consensus := exec.Command(args[0], args[1:]...)
- consensus.Stderr = os.Stderr
- consensus.Stdout = gzipw
- err = consensus.Start()
- if err != nil {
- return err
- }
- err = consensus.Wait()
- if err != nil {
- return err
- }
- err = gzipw.Close()
- if err != nil {
- return err
+ var maskfile *os.File // reading side of a pipe if we're running bedtools, otherwise nil
+
+ var wg sync.WaitGroup
+ errs := make(chan error, 3)
+ if cmd.mask {
+ bedr, bedw, err := os.Pipe()
+ if err != nil {
+ return err
+ }
+ bedargs := []string{"python", "-", "--gvcf_type", "gatk", infile}
+ bed := exec.Command(bedargs[0], bedargs[1:]...)
+ bed.Stdin = bytes.NewBuffer(cmd.gvcfRegionsPyData)
+ bed.Stdout = bedw
+ wg.Add(1)
+ go func() {
+ defer wg.Done()
+ log.Printf("running %v", bed.Args)
+ errs <- bed.Run()
+ }()
+
+ bedcompr, bedcompw, err := os.Pipe()
+ if err != nil {
+ return err
+ }
+ bedcompargs := []string{"bedtools", "complement", "-i", "/dev/stdin", "-g", cmd.refFile}
+ bedcompargs = maybeInDocker(bedcompargs, []string{cmd.refFile, infile})
+ bedcomp := exec.Command(bedcompargs[0], bedcompargs[1:]...)
+ bedcomp.Stdin = bedr
+ bedcomp.Stdout = bedcompw
+ wg.Add(1)
+ go func() {
+ defer wg.Done()
+ log.Printf("running %v", bedcomp.Args)
+ errs <- bedcomp.Run()
+ }()
+ maskfile = bedcompr