code: def snap(args):
      
      p = OptionParser(snap.__doc__)
      p.set_home("maker")
      opts, args = p.parse_args(args)
  
      if len(args) != 3:
          sys.exit(not p.print_help())
  
      species, gffile, fastafile = args
      mhome = opts.maker_home
      snapdir = "snap"
      mkdir(snapdir)
  
      cwd = os.getcwd()
      os.chdir(snapdir)
  
      newgffile = "training.gff3"
      logging.debug("Construct GFF file combined with sequence ...")
      sh("cat ../{0} > {1}".format(gffile, newgffile))
      sh('echo "##FASTA" >> {0}'.format(newgffile))
      sh("cat ../{0} >> {1}".format(fastafile, newgffile))
  
      logging.debug("Make models ...")
      sh("{0}/src/bin/maker2zff training.gff3".format(mhome))
      sh("{0}/exe/snap/fathom -categorize 1000 genome.ann genome.dna".format(mhome))
      sh("{0}/exe/snap/fathom -export 1000 -plus uni.ann uni.dna".format(mhome))
      sh("{0}/exe/snap/forge export.ann export.dna".format(mhome))
      sh("{0}/exe/snap/hmm-assembler.pl {1} . > {1}.hmm".format(mhome, species))
  
      os.chdir(cwd)
      logging.debug("SNAP matrix written to `{0}/{1}.hmm`".format(snapdir, species))
docs: %prog snap species gffile fastafile
  
      Train SNAP model given gffile and fastafile. Whole procedure taken from:
      <http://gmod.org/wiki/MAKER_Tutorial_2012>