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]
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')
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')
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')
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')
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')
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')
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')
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')
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')