code: def multireport(args):
      
      p = OptionParser(multireport.__doc__)
      p.set_outfile(outfile="Ks_plot.pdf")
      add_plot_options(p)
      opts, args, iopts = p.set_image_options(args, figsize="5x5")
  
      if len(args) != 1:
          sys.exit(not p.print_help())
  
      layoutfile, = args
      ks_min = opts.vmin
      ks_max = opts.vmax
      bins = opts.bins
      fill = opts.fill
      layout = Layout(layoutfile)
      print(layout, file=sys.stderr)
  
      fig = plt.figure(1, (iopts.w, iopts.h))
      ax = fig.add_axes([.12, .1, .8, .8])
      kp = KsPlot(ax, ks_max, bins, legendp=opts.legendp)
      for lo in layout:
          data = KsFile(lo.ksfile)
          data = [x.ng_ks for x in data]
          data = [x for x in data if ks_min <= x <= ks_max]
          kp.add_data(data, lo.components, label=lo.label, \
                      color=lo.color, marker=lo.marker,
                      fill=fill, fitted=opts.fit)
  
      kp.draw(title=opts.title, filename=opts.outfile)
docs: %prog multireport layoutfile
  
      Generate several Ks value distributions in the same figure. If the layout
      file is missing then a template file listing all ks files will be written.
  
      The layout file contains the Ks file, number of components, colors, and labels:
  
      # Ks file, ncomponents, label, color, marker
      LAP.sorghum.ks, 1, LAP-sorghum, r, o
      SES.sorghum.ks, 1, SES-sorghum, g, +
      MOL.sorghum.ks, 1, MOL-sorghum, m, ^
  
      If color or marker is missing, then a random one will be assigned.