def clone_mets(subsystem): link_edges = [] CLONE_LEVEL = subsystem.get_param('CLONE_LEVEL') LINK_CLONES = subsystem.get_param('LINK_CLONES') CLONE_LINK_ATTRS = subsystem.get_param('CLONE_LINK_ATTRS') def clone_out(sid): current = [0] def clone_aux(s): if s.major and s.id == sid: current[0] += 1 s.id += '#' + str(current[0]) if LINK_CLONES: link_edges.append(Edge(s.id,s.label_id, dir="none",**CLONE_LINK_ATTRS)) for rxn in subsystem.reactions: for r in rxn.reactants: clone_aux(r) for p in rxn.products: clone_aux(p) if current[0] > 0: link_edges.append(Node(sid,label=sid)) counts = minors.count_species(subsystem) for count in counts: if count.count >= CLONE_LEVEL: clone_out(count.sid) return link_edges
def metdraw(filename,count_mets=None,met_file=None,show=False, engine='fdp',output='svg',quiet=False,q='1',Ln='1000', json=False,norun=False,status=False,dotcmd='dot',no_gpr=False, defaults=defaults): sbml_filename = filename if filename.endswith('.xml'): filename = filename[:-4] dot_filename = filename + '.dot' mets_filename = filename + '.mets' gpr_filename = filename + '.gpr' output_filename = filename + '.' + output if not quiet: print 'Loading model file', sbml_filename if filename.endswith('.json'): model = Model.build_model(*model_json.parse_json_file(file=sbml_filename)) else: pieces = sbml.parse_sbml_file(file=sbml_filename) model = Model.build_model(**pieces) if not no_gpr: gpr.write_gpr_file(gpr.Gpr(pieces['reactions']),gpr_filename) if not quiet: print 'GPR written to file', gpr_filename model.name = filename model.set_param(**defaults) if count_mets: if not quiet: print 'Writing metabolite counts to file', filename+'.mets' Minors.write_met_file(Minors.count_species(model), filename=mets_filename, json=json) return if met_file: minors = Minors.read_met_file(filename=met_file) if not quiet: print len(minors), "minors loaded from file '{0}'".format(met_file) else: # find the minors in the model; for now, we create a temporary mets # file that is deleted after loading the minors temp_filename = mets_filename + '.TEMP' Minors.write_met_file(Minors.count_species(model),filename=temp_filename) minors = Minors.read_met_file(temp_filename) os.remove(temp_filename) if not quiet: print len(minors), "minors found in model" model.set_param(name="minors",value=minors) if show: model.display() display_parameters(defaults) if not quiet: print 'Creating reaction layout' g = layout.model_to_dot(model) if not quiet: print 'Creating DOT file', dot_filename g.to_file(dot_filename) # run graphviz if not quiet: print 'Preparing Graphviz call:' cmdstr = '{dot} -q{q} -Ln{Ln} -K{engine} -T{fmt} -o {outfile} {file}' cmd = cmdstr.format(dot=dotcmd, q=q,Ln=Ln, engine=engine, fmt=output, outfile=output_filename, file=dot_filename) if not quiet: print ' ' + cmd if not norun: print 'Running Graphviz' error = os.system(cmd) if error: print "Error running dot:", error else: print 'ok' # clean up intermediate DOT file os.remove(dot_filename)