def __init__(self, command='PALES', verbose=False, debug=False, **free):
#euler, noeuler, qDa, qRms, qStd, w, excl, incl, verb, noverb, yzInv, noyzInv, rem, fixedDI, nofixedDI): pass
        self.args, self.options = self.__parse_free__(free)
        self.command = str(command)
        self.verbose = bool(verbose)
        self.debug = bool(debug)
        if debug:  loki.setLevel(logging.DEBUG)
        elif verbose: loki.setLevel(logging.INFO)
 def __init__(self, input, output=None, fixed_angles=None, rg_limits=None, 
         use_limits=True, seed=None, state=None, jump=None, tally=0, 
         tally_digits=3, name=None, verbose=False, debug=False):
     # store and/or process inputs
     self.input = str(input)
     self.rg_limits = rg_limits
     self.use_limits = bool(use_limits)
     self.tally = int(tally)
     self.tally_digits = int(tally_digits)
     if output != None:
         self.output = str(output)
     else:
         self.output = self.input + '-'
     self.fixed_angles = fixed_angles
     if fixed_angles != None:
         if type(fixed_angles) != list:
             if type(fixed_angles) == tuple:
                 self.fixed_angles = list(fixed_angles)
             else:
                 self.fixed_angles = [fixed_angles]
         for i in range(len(self.fixed_angles)):
             if type(self.fixed_angles[i]) in [list, tuple]:
                 lo, hi = str(self.fixed_angles[i][0]), \
                         str(self.fixed_angles[i][1])
             elif re.search('([0-9]+).+([0-9]+)', str(self.fixed_angles[i])):
                 lo, hi = re.search('([0-9]+).+([0-9]+)', \
                         str(self.fixed_angles[i])).groups()
             else:
                 lo = hi = str(self.fixed_angles[i])
             self.fixed_angles[i] = '%s..%s'%(lo,hi)
     if name is None:
         self.name = 'temp-%d'%os.getpid()
     else:
         self.name = str(name)
     if debug: loki.setLevel(logging.DEBUG)
     elif verbose: loki.setLevel(logging.INFO)
     # check that required input files exist
     if not os.path.isfile(self.input+'.seq'):
         raise ArgumentError, ('No sequence file found.', 'Cyana')
     if self.fixed_angles and not os.path.isfile(self.input + '.pdb'):
         raise ArgumentError, ('No model PDB file found for angle fixes.', 
                 'Cyana')
     # setup temporary files
     os.system('cp -f %s.seq %s.seq'%(self.input, self.name))
     loki.info('Readied the sequence file for further use.')
     if self.use_limits:
         for suffix in ['lol', 'upl', 'aco', 'xplor']:
             if os.path.isfile(self.input + '.' + suffix):
                 os.system('cp -f %s.%s %s.%s'%(self.input, suffix, 
                     self.name, suffix))
                 loki.info("Readied a '%s' file for further use."%suffix)
     if self.fixed_angles:
         os.system('cp -f %s.pdb %s.pdb'%(self.input, self.name))
     # initialise the random generator
     self.randgen = Random(seed)
     if state == None:
         if jump != None:
             if sys.version < '2.2':
                 loki.warn('Python older than 2.2. Problems may arise.')
             elif sys.version > '2.2' and sys.version < '2.3':
                 # this should provide enough room for each run to be in 
                 # unique state space
                 self.randgen.jumpahead(jump*self.amount*1.1)
             else:
                 self.randgen.jumpahead(jump)
     else:
         self.randgen.setstate(state)
     self.__last_macro_size__ = None