Esempio n. 1
0
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
Esempio n. 2
0
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)