Differences between revisions 2 and 12 (spanning 10 versions)
Revision 2 as of 2010-12-20 22:30:12
Size: 3297
Editor: SteveLudtke
Comment:
Revision 12 as of 2021-06-28 18:33:27
Size: 3496
Editor: ErikAnderson
Comment:
Deletions are marked like this. Additions are marked like this.
Line 20: Line 20:
{{{ {{{#!python
Line 22: Line 22:
# The first line is critical, and must be exactly this
Line 28: Line 29:
# Official copyright notice. EMAN2 is distributed under a joint GPL/BSD license. Please copy
# this statement from one of the other programs. You must agree to use this license if your
# Official copyright notice. EMAN2 is distributed under a joint GPL/BSD license.
#
Please copy the actual notice from the top of one of the other EMAN2 programs.
#
# You
must agree to use this license if your
Line 35: Line 38:
from optparse import OptionParser
Line 44: Line 46:
  usage = """%prog <output> [options]   usage = """prog [options]
Line 46: Line 48:
  This is the main documentation string for the program, which should define what it does an how to use it.   This is the main documentation string for the program, which should define what it does and how to use it.
Line 49: Line 51:
  # You MUST use OptionParser to parse command-line options
  parser = OptionParser(usage=usage,version=EMANVERSION)
  # You MUST use EMArgumentParser to parse command-line options
  parser = EMArgumentParser(usage=usage,version=EMANVERSION)
Line 52: Line 54:
  parser.add_option("--input", type="string", help="The name of the input particle stack", default=None)
  parser.add_option("--oneclass", type="int", help="Create only a single class-average. Specify the number.",default=None)
  parser.add_option("--verbose", "-v", dest="verbose", action="store", metavar="n",type="int", default=0, help="verbose level [0-9], hig
n
er number means higher level of verboseness")
  parser.add_argument("--input", type=str, help="The name of the input particle stack", default=None)
  parser.add_argument("--output", type=str, help="The name of the output particle stack", default=None)
  parser.add_argument("--oneclass", type=int, help="Create only a single class-average. Specify the number.",default=None)
  parser.add_argument("--
verbose", "-v", dest="verbose", action="store", metavar="n",type=int, default=0, help='verbose level [0-9], higher number means higher level of verboseness')
Line 63: Line 65:
  data=EMData.read_images(args[1])
Line 65: Line 66:
  results=myfunction(data,options.mine1,options.mine2)   E2n=E2init(sys.argv)
Line 67: Line 68:
  for im in results: im.write_image(args[2],-1)   data=EMData.read_images(options.input)
Line 69: Line 70:
def myfunction(data,mine1,mine2):   results=myfunction(data,options.oneclass)

  for im in results: im.write_image(options.output,-1)

  E2end(E2n)

def myfunction(data,oneclass):

EMAN2 Python Programming Style Guide

This document describes the structure of programs distributed with EMAN2. If you plan to write a program for inclusion with EMAN2 in the 'bin' directory, you must follow the following general guidelines.

Program naming and options

All programs must be e2<program>.py This helps distinguish them from non-eman2 programs and from SPARX programs which are sx<program>.py

Where possible, the same options should be used across programs. For example, the '--verbose' option is required for all programs. See StandardParms for details.

Program sample code

This little example shows how all EMAN2 programs are expected to be structured.

Each program should include:

   1 #!/usr/bin/env python
   2 # The first line is critical, and must be exactly this
   3 
   4 # Example Author block:
   5 # Author: Steven Ludtke (sludtke@bcm.edu), 10/27/2010 - rewritten almost from scratch
   6 # Author: David Woolford (woolford@bcm.edu), 9/7/2007 (woolford@bcm.edu)
   7 # Copyright (c) 2000-2010 Baylor College of Medicine
   8 
   9 # Official copyright notice. EMAN2 is distributed under a joint GPL/BSD license. 
  10 # Please copy the actual notice from the top of one of the other EMAN2 programs. 
  11 #
  12 # You must agree to use this license if your
  13 # code is distributed with EMAN2. While you may use your own institution for the copyright notice
  14 # the terms of the GPL/BSD license permit us to redistribute it.
  15 
  16 # import block, any necessary import statements
  17 from EMAN2 import *
  18 import math
  19 
  20 # main() block. Each program will have a single function called main() which is executed when the
  21 # program is used from the command-line. Programs must also be 'import'able themselves, so you
  22 # must have main()
  23 def main():
  24 
  25   progname = os.path.basename(sys.argv[0])
  26   usage = """prog [options]
  27 
  28   This is the main documentation string for the program, which should define what it does and how to use it.
  29   """  
  30 
  31   # You MUST use EMArgumentParser to parse command-line options
  32   parser = EMArgumentParser(usage=usage,version=EMANVERSION)
  33         
  34   parser.add_argument("--input", type=str, help="The name of the input particle stack", default=None)
  35   parser.add_argument("--output", type=str, help="The name of the output particle stack", default=None)
  36   parser.add_argument("--oneclass", type=int, help="Create only a single class-average. Specify the number.",default=None)
  37   parser.add_argument("--verbose", "-v", dest="verbose", action="store", metavar="n",type=int, default=0, help='verbose level [0-9], higher number means higher level of verboseness')
  38 
  39   (options, args) = parser.parse_args()
  40 
  41   # Now we have a call to the function which actually implements the functionality of the program
  42   # main() is really just for parsing command-line arguments, etc.  The actual program algorithms 
  43   # must be implemented in additional functions so this program could be imported as a module and
  44   # the functionality used in another context
  45 
  46   E2n=E2init(sys.argv)
  47 
  48   data=EMData.read_images(options.input)
  49 
  50   results=myfunction(data,options.oneclass)
  51 
  52   for im in results: im.write_image(options.output,-1)
  53 
  54   E2end(E2n)
  55 
  56 def myfunction(data,oneclass):
  57   # do some stuff
  58   ret = [i*5.0 for i in data]
  59 
  60   return ret
  61 
  62 # This block must always be the last thing in the program and calls main()
  63 # if the program is executed, but not if it's imported
  64 if __name__ == "__main__":
  65     main()

EMAN2PythonStyleGuide (last edited 2022-05-06 18:14:36 by SteveLudtke)