code: def run_study(self, study, **kws):
          
          if not study:
              return []
          # Key-word arguments:
          methods = Methods(kws['methods']) if 'methods' in kws else self.methods
          alpha = kws['alpha'] if 'alpha' in kws else self.alpha
          log = kws['log'] if 'log' in kws else self.log
          # Calculate uncorrected pvalues
          results = self.get_pval_uncorr(study, log)
          if not results:
              return []
  
          if log is not None:
              log.write("  {MSG}\n".format(MSG="\n  ".join(self.get_results_msg(results, study))))
  
          # Do multipletest corrections on uncorrected pvalues and update results
          self._run_multitest_corr(results, methods, alpha, study, log)
  
          for rec in results:
              # get go term for name and level
              rec.set_goterm(self.obo_dag)
  
          # 'keep_if' can be used to keep only significant GO terms. Example:
          #     >>> keep_if = lambda nt: nt.p_fdr_bh < 0.05 # if results are significant
          #     >>> goea_results = goeaobj.run_study(geneids_study, keep_if=keep_if)
          if 'keep_if' in kws:
              keep_if = kws['keep_if']
              results = [r for r in results if keep_if(r)]
  
          # Default sort order:
          results.sort(key=lambda r: [r.enrichment, r.NS, r.p_uncorrected])
          return results
docs: Run Gene Ontology Enrichment Study (GOEA) on study ids.