#!/usr/bin/python '''Currently implements tree searching via a file-based wrapper around paup. paup must be available as a commmand recognized by "system" in order for this to work.''' from PIPRes.util.server_import import * from PIPRes.cipres_types import * from PIPRes.wrap.output_parser import * import os, random class RandomRefineImpl (CipresIDL_api1__POA.TreeRefine, SimpleServer): def __init__(self, registry = None): SimpleServer.__init__(self, registry) self.convertTreeFunc = self.orb is None and toTreeBridge or toIDLTree self.tree = None random.seed(5752) # temp setting seed for debugging def setMatrix(self, mat): _LOG.debug('setMatrix called\n') def setTree(self, tree): _LOG.debug('setTree called. Converting arg to CipresTree\n') self.tree = CipresTree(tree) _LOG.debug('setTree called with arg:\n') _LOG.debug(self.tree.m_newick) def getUIXml(self): return '' def execute(self, command): _LOG.debug('execute called with "%s"' % command) return (True, '') def refineTree(self): if not self.tree: _LOG.error('raising (illegal) runtime error') raise RuntimeError, 'Failed to call setTree before refineTree' toRefine = CipresTree(str(self.tree)) _LOG.debug('performing random refinement on tree \n%s ' % toRefine.m_newick) toRefine.standardizeOrientation() toRefine.randomRefine() toReturn = self.convertTreeFunc(toRefine) _LOG.debug('refineTree returning: %s' % toReturn.m_newick) return toReturn _LOG = cipresGetLogger('pipres.service_impl.server.tree_refine') if __name__=='__main__': _LOG.warning('Random refine is setting the seed to fixed number for debugging purposes') try: registryWrapper = cipresServe(sys.argv, {'TreeRefine': RandomRefineImpl}) except: logException(_LOG)