From 463bc844580ffdf5fd7749c4857664d8365cbd3d Mon Sep 17 00:00:00 2001 From: Tom Clegg Date: Fri, 13 Jan 2023 15:05:27 -0500 Subject: [PATCH] Fix GLM p-value calculation when -case-control-only=true. refs #19566 Arvados-DCO-1.1-Signed-off-by: Tom Clegg --- slicenumpy.go | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/slicenumpy.go b/slicenumpy.go index a22d662b74..390649259a 100644 --- a/slicenumpy.go +++ b/slicenumpy.go @@ -192,21 +192,6 @@ func (cmd *sliceNumpy) run(prog string, args []string, stdin io.Reader, stdout, if err != nil { return err } - if len(cmd.samples[0].pcaComponents) > 0 { - cmd.pvalue = glmPvalueFunc(cmd.samples, cmd.pcaComponents) - // Unfortunately, statsmodel/glm lib logs - // stuff to os.Stdout when it panics on an - // unsolvable problem. We recover() from the - // panic in glm.go, but we also need to - // commandeer os.Stdout to avoid producing - // large quantities of logs. - stdoutWas := os.Stdout - defer func() { os.Stdout = stdoutWas }() - os.Stdout, err = os.Open(os.DevNull) - if err != nil { - return err - } - } } else if *caseControlOnly { return fmt.Errorf("-case-control-only does not make sense without -samples") } @@ -316,6 +301,21 @@ func (cmd *sliceNumpy) run(prog string, args []string, stdin io.Reader, stdout, cmd.minCoverage = int(math.Ceil(cmd.filter.MinCoverage * float64(len(cmd.cgnames)))) } + if len(cmd.samples[0].pcaComponents) > 0 { + cmd.pvalue = glmPvalueFunc(cmd.samples, cmd.pcaComponents) + // Unfortunately, statsmodel/glm lib logs stuff to + // os.Stdout when it panics on an unsolvable + // problem. We recover() from the panic in glm.go, but + // we also need to commandeer os.Stdout to avoid + // producing large quantities of logs. + stdoutWas := os.Stdout + defer func() { os.Stdout = stdoutWas }() + os.Stdout, err = os.Open(os.DevNull) + if err != nil { + return err + } + } + // cgnamemap[name]==true for samples that we are including in // output cgnamemap := map[string]bool{} -- 2.30.2