code: def hmm(args):
      
      p = OptionParser(hmm.__doc__)
      p.add_option("--mu", default=.003, type="float",
                   help="Transition probability")
      p.add_option("--sigma", default=.1, type="float",
                   help="Standard deviation of Gaussian emission distribution")
      p.add_option("--threshold", default=1, type="float",
                   help="Standard deviation must be < this "
                        "in the baseline population")
      opts, args = p.parse_args(args)
  
      if len(args) != 2:
          sys.exit(not p.print_help())
  
      workdir, sample_key = args
      model = CopyNumberHMM(workdir=workdir, mu=opts.mu, sigma=opts.sigma,
                            threshold=opts.threshold)
      events = model.run(sample_key)
      params = ".mu-{}.sigma-{}.threshold-{}"\
               .format(opts.mu, opts.sigma, opts.threshold)
      hmmfile = op.join(workdir, sample_key + params + ".seg")
      fw = open(hmmfile, "w")
      nevents = 0
      for mean_cn, rr, event in events:
          if event is None:
              continue
          print(" ".join((event.bedline, sample_key)), file=fw)
          nevents += 1
      fw.close()
      logging.debug("A total of {} aberrant events written to `{}`"
                    .format(nevents, hmmfile))
      return hmmfile
docs: %prog hmm workdir sample_key
  
      Run CNV segmentation caller. The workdir must contain a subfolder called
      `sample_key-cn` that contains CN for each chromosome. A `beta` directory
      that contains scaler for each bin must also be present in the current
      directory.