Exemplo n.º 1
0
def create_padmet_stat(species_name, padmet_file):
    """Extract reactions/pathways/compounds/genes from a padmet file.

    Args:
        species_name (str): species names
        padmet_file (str): path to a padmet file

    Returns
        list: [species name, list of genes, list of reactions, list of reactions associated with genes, list of compounds, list of pathways]
    """
    padmetSpec = PadmetSpec(padmet_file)

    total_pwy_id = set()
    total_cpd_id = set()

    all_rxns = [node for node in padmetSpec.dicOfNode.values() if node.type == "reaction"]
    all_genes = [node.id for node in padmetSpec.dicOfNode.values() if node.type == "gene"]
    gene_associated_rxns = []
    genes_with_rxns = []
    rxns = []
    for rxn_node in all_rxns:
        total_cpd_id.update([rlt.id_out for rlt in padmetSpec.dicOfRelationIn[rxn_node.id] if rlt.type in ["consumes","produces"]])
        pathways_ids = set([rlt.id_out for rlt in padmetSpec.dicOfRelationIn[rxn_node.id] if rlt.type == "is_in_pathway"])
        rxns.append(rxn_node.id)
        if any([rlt for rlt in padmetSpec.dicOfRelationIn[rxn_node.id] if rlt.type == "is_linked_to"]):
            genes_with_rxns.extend([rlt.id_out for rlt in padmetSpec.dicOfRelationIn[rxn_node.id] if rlt.type == "is_linked_to"])
            gene_associated_rxns.append(rxn_node.id)
        total_pwy_id.update(pathways_ids)

    all_pwys = [node_id for (node_id, node) in padmetSpec.dicOfNode.items() if node_id in total_pwy_id]
    all_cpds = [node_id for (node_id, node) in padmetSpec.dicOfNode.items() if node_id in total_cpd_id]

    genes_with_rxns = set(genes_with_rxns)

    return [species_name, genes_with_rxns, rxns, gene_associated_rxns, all_cpds, all_pwys]
Exemplo n.º 2
0
def test_sbml_to_padmet_cli():
    subprocess.call([
        'padmet', 'pgdb_to_padmet', '--pgdb', 'test_data/pgdb', '--output',
        'test.padmet', '--extract-gene'
    ])

    subprocess.call([
        'padmet', 'sbmlGenerator', '--padmet', 'test.padmet', '--output',
        'fabo.sbml', '--sbml_lvl', '3'
    ])

    subprocess.call([
        'padmet', 'sbml_to_padmet', '--sbml', 'fabo.sbml', '--padmetSpec',
        'fabo.padmet'
    ])

    fabo_padmet = PadmetSpec('fabo.padmet')
    all_pwys, all_cpds, all_rxns, all_genes = extract_data_padmet(fabo_padmet)

    assert all_pwys == []

    assert set(FABO_RXNS).issubset(set(all_rxns))

    assert set(FABO_CPDS).issubset(set(all_cpds))

    assert set(FABO_GENES).issubset(set(all_genes))

    os.remove('fabo.sbml')
    os.remove('test.padmet')
    os.remove('fabo.padmet')
Exemplo n.º 3
0
def test_padmet_to_padmet_reversibility_cli():
    """
    Test an issue encountered when a reaction is defined in a direction in one padmet.
    And in another the same reaction is defined as reversible.
    In old padmet this leads to the reaction having all of its reactants/products as reactants and also as products.
    """
    # Read padmet file
    subprocess.call([
        'padmet', 'padmet_to_padmet', '--to_add', 'test_data/padmet',
        '--output', 'fabo.padmet'
    ])

    expected_padmet = PadmetSpec('fabo.padmet')

    reactants = [
        rlt.id_out
        for rlt in expected_padmet.dicOfRelationIn['ENOYL-COA-HYDRAT-RXN']
        if rlt.type in ['consumes']
    ]
    products = [
        rlt.id_out
        for rlt in expected_padmet.dicOfRelationIn['ENOYL-COA-HYDRAT-RXN']
        if rlt.type in ['produces']
    ]

    assert sorted(reactants) == [
        'TRANS-D2-ENOYL-COA', 'WATER'
    ] or sorted(products) == ['TRANS-D2-ENOYL-COA', 'WATER']
    assert sorted(products) == [
        'L-3-HYDROXYACYL-COA'
    ] or sorted(reactants) == ['L-3-HYDROXYACYL-COA']

    os.remove('fabo.padmet')
Exemplo n.º 4
0
def test_padmet_to_padmet():
    # Using inpu data, create 2 padmets and delete one reaction in each.
    fabo_1_padmetSpec = from_pgdb_to_padmet('test_data/pgdb',
                                            extract_gene=True)
    fabo_1_padmetSpec.delNode('ACYLCOASYN-RXN')
    fabo_1_padmetSpec.generateFile('fabo_1.padmet')

    _, _, all_rxns, _ = extract_data_padmet(fabo_1_padmetSpec)

    assert not set(FABO_RXNS).issubset(set(all_rxns))

    fabo_2_padmetSpec = from_pgdb_to_padmet('test_data/pgdb',
                                            extract_gene=True)
    fabo_2_padmetSpec.delNode('ACYLCOADEHYDROG-RXN')
    fabo_2_padmetSpec.generateFile('fabo_2.padmet')

    _, _, all_rxns, _ = extract_data_padmet(fabo_2_padmetSpec)

    assert not set(FABO_RXNS).issubset(set(all_rxns))

    # By merging them we should retrieve the two deleted reactions
    padmet_to_padmet('fabo_1.padmet,fabo_2.padmet', 'fabo.padmet')

    expected_padmet = PadmetSpec('fabo.padmet')

    _, _, all_rxns, _ = extract_data_padmet(expected_padmet)

    assert set(FABO_RXNS).issubset(set(all_rxns))

    os.remove('fabo_1.padmet')
    os.remove('fabo_2.padmet')
    os.remove('fabo.padmet')
Exemplo n.º 5
0
def test_sbml_to_padmet():
    fabo_padmetSpec = from_pgdb_to_padmet('test_data/pgdb', extract_gene=True)
    padmet_to_sbml(fabo_padmetSpec, 'fabo.sbml')
    sbml_to_padmetSpec('fabo.sbml', 'fabo.padmet')
    fabo_padmet = PadmetSpec('fabo.padmet')

    all_pwys, all_cpds, all_rxns, all_genes = extract_data_padmet(fabo_padmet)

    assert all_pwys == []

    assert set(FABO_RXNS).issubset(set(all_rxns))

    assert set(FABO_CPDS).issubset(set(all_cpds))

    assert set(FABO_GENES).issubset(set(all_genes))

    os.remove('fabo.sbml')
    os.remove('fabo.padmet')
Exemplo n.º 6
0
def test_pgdb_to_padmet_without_genes_cli():
    subprocess.call([
        'padmet', 'pgdb_to_padmet', '--pgdb', 'test_data/pgdb', '--output',
        'test.padmet'
    ])

    test_padmetSpec = PadmetSpec('test.padmet')

    all_pwys, all_cpds, all_rxns, all_genes = extract_data_padmet(
        test_padmetSpec)
    assert all_pwys == FABO_PWYS

    assert set(FABO_RXNS).issubset(set(all_rxns))

    assert set(FABO_CPDS).issubset(set(all_cpds))

    assert all_genes == []

    os.remove('test.padmet')
Exemplo n.º 7
0
def test_sbmlGenerator_cli():
    subprocess.call([
        'padmet', 'pgdb_to_padmet', '--pgdb', 'test_data/pgdb', '--output',
        'test.padmet', '--extract-gene'
    ])
    fabo_padmetSpec = PadmetSpec('test.padmet')

    subprocess.call([
        'padmet', 'sbmlGenerator', '--padmet', 'test.padmet', '--output',
        'fabo.sbml', '--sbml_lvl', '3'
    ])

    genes, id_compounds, id_reactions = extract_data_sbml('fabo.sbml')

    assert set(FABO_RXNS).issubset(set(id_reactions))

    assert set(FABO_CPDS).issubset(set(id_compounds))

    assert set(FABO_GENES).issubset(set(genes))

    os.remove('test.padmet')
    os.remove('fabo.sbml')
Exemplo n.º 8
0
def test_pgdb_to_padmet_no_orphan_with_genes_cli():
    subprocess.call([
        'padmet', 'pgdb_to_padmet', '--pgdb', 'test_data/pgdb', '--output',
        'test.padmet', '--extract-gene', '--no-orphan'
    ])

    test_padmetSpec = PadmetSpec('test.padmet')

    all_pwys, all_cpds, all_rxns, all_genes = extract_data_padmet(
        test_padmetSpec)

    assert all_pwys == FABO_PWYS

    # 2.3.1.49-RXN is added as it has no association with genes
    assert '2.3.1.49-RXN' not in all_rxns

    assert set(FABO_CPDS).issubset(set(all_cpds))

    # b24589 is a manually added genes without association to a reaction
    assert 'b24589' not in all_genes

    os.remove('test.padmet')
Exemplo n.º 9
0
def test_pgdb_to_padmet_cli():

    subprocess.call([
        'padmet', 'pgdb_to_padmet', '--pgdb', 'test_data/pgdb', '--output',
        'test.padmet', '--extract-gene'
    ])

    test_padmetSpec = PadmetSpec('test.padmet')

    all_pwys, all_cpds, all_rxns, all_genes = extract_data_padmet(
        test_padmetSpec)

    assert all_pwys == FABO_PWYS

    assert test_padmetSpec.dicOfNode['FAO-PWY'].misc['COMMON-NAME'][
        0] == 'fatty acid β-oxidation I - (generic)'

    assert set(FABO_RXNS).issubset(set(all_rxns))

    assert set(FABO_CPDS).issubset(set(all_cpds))

    assert set(FABO_GENES).issubset(set(all_genes))

    os.remove('test.padmet')
Exemplo n.º 10
0
def test_padmet_to_padmet_cli():
    # Using inpu data, create 2 padmets and delete one reaction in each.
    subprocess.call([
        'padmet', 'pgdb_to_padmet', '--pgdb', 'test_data/pgdb', '--output',
        'test.padmet', '--extract-gene'
    ])
    fabo_1_padmetSpec = PadmetSpec('test.padmet')
    fabo_1_padmetSpec.delNode('ACYLCOASYN-RXN')
    fabo_1_padmetSpec.generateFile('fabo_1.padmet')

    _, _, all_rxns, _ = extract_data_padmet(fabo_1_padmetSpec)

    os.remove('test.padmet')

    assert not set(FABO_RXNS).issubset(set(all_rxns))

    subprocess.call([
        'padmet', 'pgdb_to_padmet', '--pgdb', 'test_data/pgdb', '--output',
        'test.padmet', '--extract-gene'
    ])
    fabo_2_padmetSpec = PadmetSpec('test.padmet')
    fabo_2_padmetSpec.delNode('ACYLCOADEHYDROG-RXN')
    fabo_2_padmetSpec.generateFile('fabo_2.padmet')

    _, _, all_rxns, _ = extract_data_padmet(fabo_2_padmetSpec)

    os.remove('test.padmet')

    assert not set(FABO_RXNS).issubset(set(all_rxns))

    # By merging them we should retrieve the two deleted reactions
    padmet_to_padmet('fabo_1.padmet,fabo_2.padmet', 'fabo.padmet')
    subprocess.call([
        'padmet', 'padmet_to_padmet', '--to_add',
        'fabo_1.padmet,fabo_2.padmet', '--output', 'fabo.padmet'
    ])

    expected_padmet = PadmetSpec('fabo.padmet')

    _, _, all_rxns, _ = extract_data_padmet(expected_padmet)

    assert set(FABO_RXNS).issubset(set(all_rxns))

    os.remove('fabo_1.padmet')
    os.remove('fabo_2.padmet')
    os.remove('fabo.padmet')