Ejemplo n.º 1
0
    def __init__(self,
                 model,
                 leap_template=F_leap_in,
                 leaprc=None,
                 leap_out=None,
                 leap_in=None,
                 leap_pdb=None,
                 log=None,
                 debug=0,
                 verbose=0,
                 **kw):
        """
        @param model: model
        @type  model: PDBModel or str
        @param leap_template: path to template file for leap input
        @type  leap_template: str
        @param leaprc: forcefield parameter file or code (e.g. ff99)
        @type  leaprc: str
        @param leap_out: target file for leap.log (default: discard)
        @type  leap_out: str
        @param leap_in: target file for leap.in script (default: discard)
        @type  leap_in: str
        @param kw: kw=value pairs for additional options in the leap_template
        @type  kw: key=value
        """
        self.m = PDBModel(model)

        self.leap_template = leap_template
        self.leaprc = leaprc

        self.leap_pdb = leap_pdb or tempfile.mktemp('_leap_pdb')
        self.keep_leap_pdb = leap_pdb is not None

        self.leap_in = leap_in
        self.leap_out = leap_out

        self.log = log or StdLog()

        self.output = None  # last output of leap

        self.debug = debug
        self.verbose = verbose

        self.__dict__.update(kw)
Ejemplo n.º 2
0
    def __init__(self,
                 name,
                 args='',
                 template=None,
                 f_in=None,
                 f_out=None,
                 f_err=None,
                 strict=1,
                 catch_out=1,
                 push_inp=1,
                 catch_err=0,
                 node=None,
                 nice=0,
                 cwd=None,
                 tempdir=None,
                 log=None,
                 debug=0,
                 verbose=None,
                 validate=1,
                 **kw):
        """
        Create Executor. *name* must point to an existing program configuration
        unless *strict*=0. Executor will create a program input from
        the template and its own fields and put it into f_in. If f_in but
        no template is given, the unchanged f_in is used as input. If neither
        is given, the program is called without input. If a node is given,
        the process is wrapped in a ssh call. If *nice* != 0, the process
        is preceeded by nice. *cwd* specifies the working directory. By
        default, this setting is taken from the configuration file which
        defaults to the current working directory.

        @param name: program name (configured in .biskit/exe_name.dat)
        @type  name: str
        @param args: command line arguments
        @type  args: str
        @param template: template for input file -- this can be the template
                         itself or the path to a file containing it
                         (default: None)
        @type  template: str
        @param f_in: target for completed input file (default: None, discard)
        @type  f_in: str
        @param f_out: target file for program output (default: None, discard)
        @type  f_out: str
        @param f_err: target file for error messages (default: None, discard)
        @type  f_err: str
        @param strict: strict check of environment and configuration file
                       (default: 1)
        @type  strict: 1|0
        @param catch_out: catch output in file (f_out or temporary)
                          (default: 1)
        @type  catch_out: 1|0
        @param catch_err: catch errors in file (f_out or temporary)
                          (default: 1)
        @type  catch_err: 1|0
        @param push_inp: push input file to process via stdin ('< f_in') [1]
        @type  push_inp: 1|0
        @param node: host for calculation (None->no ssh) (default: None)
        @type  node: str
        @param nice: nice level (default: 0)
        @type  nice: int
        @param cwd: working directory, overwrites ExeConfig.cwd (default: None)
        @type  cwd: str
        @param tempdir: folder for temporary files, will be created if not
                        existing (default: None ... use system default)
                        if set to True: create a new tempdir within default 
        @type  tempdir: str | True
        @param log: execution log (None->STOUT) (default: None)
        @type  log: Biskit.LogFile
        @param debug: keep all temporary files (default: 0)
        @type  debug: 0|1
        @param verbose: print progress messages to log (default: log != STDOUT)
        @type  verbose: 0|1
        @param validate: validate binary and environment immedeatly (1=default)
                         or only before execution (0)
        @type validate: 1|0 
        @param kw: key=value pairs with values for template file or string
        @type  kw: key=value
        
        @raise ExeConfigError: if environment is not fit for running
                               the program
        """
        self.exe = ExeConfigCache.get(name, strict=strict)
        if validate:
            self.exe.validate()

        ## see prepare()
        self.keep_tempdir = True  ## set to False if tempdir created new
        self.tempdir = self.newtempfolder(tempdir)  ## repeat in child classes

        self.f_out = t.absfile(f_out)
        if not f_out and catch_out:
            self.f_out = tempfile.mktemp('.out', name + '_', self.tempdir)

        self.f_err = t.absfile(f_err)
        if not f_err and catch_err:
            self.f_err = tempfile.mktemp('.err', name + '_', self.tempdir)

        self.keep_out = f_out is not None
        self.keep_inp = f_in is not None  #: do not clean up the input file
        self.catch_out = catch_out  #: capture STDOUT into file
        self.catch_err = catch_err  #: capture STDERR into file

        self.f_in = t.absfile(f_in)
        ## pre-define name of input file that will be generated later
        if template and not f_in:
            self.f_in = tempfile.mktemp('.inp', name + '_', self.tempdir)

        self.push_inp = push_inp

        self.args = args
        self.template = template

        self.node = node  ## or os.uname()[1]
        self.nice = nice
        self.debug = debug

        self.cwd = cwd or self.exe.cwd

        #: Log object for own messages; undocumented: capture string as well
        self.log = log or StdLog()
        if type(self.log) is str:
            self.log = B.LogFile(self.log)

        self.verbose = verbose
        if self.verbose is None:
            self.verbose = (log is not None)

        ## these are set by self.run():
        self.runTime = 0  #: time needed for last run
        self.output = None  #: STDOUT returned by process
        self.error = None  #: STDERR returned by process
        self.returncode = None  #: int status returned by process
        self.pid = None  #: process ID

        self.result = None  #: set by self.finish()

        self.initVersion = self.version()

        self.__dict__.update(kw)