diff --git a/microbetag/QS/HMMres_to_QS.py b/microbetag/QS/HMMres_to_QS.py new file mode 100644 index 00000000..3d923e75 --- /dev/null +++ b/microbetag/QS/HMMres_to_QS.py @@ -0,0 +1,95 @@ +#!/usr/bin python3 + +import os +import json +import argparse +import csv + +def parse_args(): + parser = argparse.ArgumentParser( + description="Annotate genomes with QS sending and receiving pathways based on HMMsearch results." + ) + parser.add_argument("input_dir", type=str, + help="Directory containing HMMsearch .tbl result files") + parser.add_argument("qs_json", type=str, + help="Path to QS pathway definition JSON file (map02024_parse_dict.json)") + parser.add_argument("--evalue", type=float, default=1e-5, + help="E-value threshold for KO filtering (default: 1e-5)") + parser.add_argument("--output", type=str, default="qs_summary.csv", + help="Output CSV file path (default: qs_summary.csv)") + return parser.parse_args() + +def load_qs_pathways(json_file): + with open(json_file, "r") as f: + raw_data = json.load(f) + + formatted = {} + for pid, entries in raw_data.items(): + entry_dict = {list(d.keys())[0]: list(d.values())[0] for d in entries} + formatted[int(pid)] = { + "Mode species": entry_dict["Mode species"], + "Signal Compound": entry_dict["Signal Compound"], + "Signal Type": entry_dict["Signal Type"], + "Biosynthesis": set(entry_dict["Biosysthesis"]), + "Transporter": set(entry_dict["Transporter"]), + "Sensing": set(entry_dict["Sensing"]) + } + return formatted + +def parse_tbl_file(file_path, evalue_threshold): + ko_set = set() + with open(file_path, "r") as f: + for line in f: + if line.startswith("#") or line.strip() == "": + continue + parts = line.strip().split() + if len(parts) < 5: + continue + ko = parts[2] + evalue = float(parts[4]) if "e" not in parts[4] else float(parts[4].replace("e", "E")) + if evalue < evalue_threshold: + ko_set.add(ko) + return ko_set + +def analyze_genome(ko_set, qs_pathways): + sending = [] + receiving = [] + for pid, info in qs_pathways.items(): + bios = info["Biosynthesis"] + trans = info["Transporter"] + sens = info["Sensing"] + + is_sender = not bios or bios.issubset(ko_set) + is_receiver = trans.issubset(ko_set) and sens.issubset(ko_set) + + if is_sender: + sending.append(str(pid)) + if is_receiver: + receiving.append(str(pid)) + + return "/".join(sending), "/".join(receiving) + +def main(): + args = parse_args() + qs_pathways = load_qs_pathways(args.qs_json) + + result_rows = [] + + for filename in os.listdir(args.input_dir): + if filename.endswith("_results.tbl"): + file_path = os.path.join(args.input_dir, filename) + genome = filename.split("_results.tbl")[0] + kos = parse_tbl_file(file_path, args.evalue) + send, receive = analyze_genome(kos, qs_pathways) + result_rows.append((genome, send, receive)) + + with open(args.output, "w", newline="") as f: + writer = csv.writer(f) + writer.writerow(["Genome", "Sending Pathway", "Receiving Pathway"]) + for row in result_rows: + writer.writerow(row) + + print(f"Summary file saved to: {args.output}") + +if __name__ == "__main__": + main() diff --git a/microbetag/QS/QS_annotation.sh b/microbetag/QS/QS_annotation.sh new file mode 100644 index 00000000..4d7abc91 --- /dev/null +++ b/microbetag/QS/QS_annotation.sh @@ -0,0 +1,6 @@ +# Command for using QS database to annotate quorum sensing functions in users' genome + +for genome in ../genome_dir/*.faa;do + genome_name=$(basename "$genome" .faa) + hmmsearch --tblout "kegg_hmm_results/${genome_name}_results.tbl" m02024_genes.hmm "$genome" > "kegg_hmm_results/${genome_name}_log.txt" +done diff --git a/microbetag/QS/Readme.md b/microbetag/QS/Readme.md new file mode 100644 index 00000000..f9d504a0 --- /dev/null +++ b/microbetag/QS/Readme.md @@ -0,0 +1,105 @@ +# QS Function Annotation + +## Step 0: Build Quorum Sensing Database + +Script: build_QSdb.sh + +Required file(s): **m02024_genes.txt** in the same directory. + +Purpose: This script downloads the KEGG Orthology HMM database, extracts HMMs related to KEGG pathway m02024 (quorum sensing), builds an HMMsearch database, and keeps only the final outputs in the current directory. + +Command: `bash /path/to/build_QSdb.sh` + +Output(s): +`m02024_genes.hmm` +`m02024_genes.hmm.h3f` +`m02024_genes.hmm.h3i` +`m02024_genes.hmm.h3m` +`m02024_genes.hmm.h3p` + +## Step 1: Annotate QS functions against QSdb in users' genomes + +Script: QS_annotation.sh + +Required file(s): 5 related HMM database files generated in Step 0, Users' genomes in protein sequences (.faa). + +Purpose: Command for using QS database to annotate quorum sensing functions in users' genome. + +Command: `bash /path/to/QS_annotation.sh` + +Output(s): HMM result tabular files. + +## Step 2: Annotate genomes with QS sending and receiving pathways based on HMMsearch results + +Script: HMMres_to_QS.py + +Required file(s): **map02024_parse_dict.json** and HMM result tabular files generated in Step 1. + +Command and help: + +``` +python annotate_qs_pathways.py -h +usage: annotate_qs_pathways.py [-h] [--evalue EVALUE] [--output OUTPUT] + input_dir qs_json + +Annotate genomes with QS sending and receiving pathways based on HMMsearch +results. + +positional arguments: + input_dir Directory containing HMMsearch .tbl result files + qs_json Path to QS pathway definition JSON file + (map02024_parse_dict.json) + +optional arguments: + -h, --help show this help message and exit + --evalue EVALUE E-value threshold for KO filtering (default: 1e-5) + --output OUTPUT Output CSV file path (default: qs_summary.csv) +``` + +Result preview: + +``` +Genome,Sending Pathway,Receiving Pathway +GCF_900111605.1,3/6/7/8/9/10/11/12/13/14/15/17/18/19/20/22/25/27/28/29/30/34,2/3/4/5/6/7/8/9/10/11/12/13/14/15/17/18/20/21/22/23/24/25/26/27/28/29/30/31/32/34/36/37/38/39/40/41 +GCA_001883705.1,3/4/5/7/8/9/10/11/12/13/14/15/17/18/19/20/21/22/23/24/25/26/27/28/29/30/31/34,1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28/29/30/31/32/34/36/37/39/40/41 +GCF_014643695.1,1/9/10/11/12/13/14/15/16/27/28/34,4/5/7/8/9/10/11/12/13/14/15/17/18/19/20/21/22/23/24/25/26/27/28/29/30/31/34/37/39/40/41 +``` + +## Step 3: Generate sender–receiver–pathway table from QS summary file + +Script: Sender_Receiver_tab.py + +Required file(s): **qs_summary.csv** generated in Step 2. + +Command and help: + +``` +python decide_pair.py -h +usage: decide_pair.py [-h] -i INPUT -o OUTPUT [--force-parallel] + [--no-parallel] [--threshold THRESHOLD] + +Generate sender–receiver–pathway table from QS summary file. + +optional arguments: + -h, --help show this help message and exit + -i INPUT, --input INPUT + Input CSV: qs_sending_receiving_summary.csv + -o OUTPUT, --output OUTPUT + Output CSV: sender_receiver_pathway_table.csv + --force-parallel Force use of parallel processing + --no-parallel Disable parallel processing + --threshold THRESHOLD + Genome count threshold to enable parallel mode +``` + +Result preview: + +``` +Sender,Receiver,Pathways +GCF_900111605.1,GCF_900111605.1,3/6/7/8/9/10/11/12/13/14/15/17/18/20/22/25/27/28/29/30/34 +GCF_900111605.1,GCA_001883705.1,3/6/7/8/9/10/11/12/13/14/15/17/18/19/20/22/25/27/28/29/30/34 +GCF_900111605.1,GCF_014643695.1,7/8/9/10/11/12/13/14/15/17/18/19/20/22/25/27/28/29/30/34 +GCF_900111605.1,GCA_017542125.1,3/7/8/9/10/11/12/13/14/15/17/18/20/22/25/27/28/29/30/34 +GCF_900111605.1,GCF_018881715.1,6/7/8/9/10/11/12/13/15/17/18/20/22/25/27/28/29/30/34 +GCF_900111605.1,GCA_006226495.1,3/6/7/8/9/10/11/12/13/14/15/17/18/19/20/22/25/27/28/29/30/34 +``` \ No newline at end of file diff --git a/microbetag/QS/Sender_Receiver_tab.py b/microbetag/QS/Sender_Receiver_tab.py new file mode 100644 index 00000000..678406bd --- /dev/null +++ b/microbetag/QS/Sender_Receiver_tab.py @@ -0,0 +1,86 @@ +import csv +import argparse +from multiprocessing import Pool, cpu_count +from collections import defaultdict + +def parse_pathway_string(pw_str): + return set(pw_str.split("/")) if pw_str else set() + +def load_genome_data(input_csv): + genome_data = {} + with open(input_csv, newline='') as f: + reader = csv.DictReader(f) + for row in reader: + genome = row["Genome"] + genome_data[genome] = { + "send": parse_pathway_string(row["Sending Pathway"]), + "recv": parse_pathway_string(row["Receiving Pathway"]) + } + return genome_data + +def compare_sender_with_all(args): + sender, send_set, genome_data = args + rows = [] + for receiver, recv_dict in genome_data.items(): + recv_set = recv_dict["recv"] + common = send_set & recv_set + if common: + rows.append((sender, receiver, "/".join(sorted(common, key=int)))) + return rows + +def generate_pathway_pairs_parallel(genome_data, output_csv, n_processes=None): + senders = [(s, d["send"], genome_data) for s, d in genome_data.items() if d["send"]] + with Pool(processes=n_processes or cpu_count()) as pool: + all_rows_nested = pool.map(compare_sender_with_all, senders) + + all_rows = [row for sublist in all_rows_nested for row in sublist] + + with open(output_csv, "w", newline='') as f: + writer = csv.writer(f) + writer.writerow(["Sender", "Receiver", "Pathways"]) + writer.writerows(all_rows) + +def generate_pathway_pairs_serial(genome_data, output_csv): + genomes = list(genome_data) + rows = [] + for sender in genomes: + send_set = genome_data[sender]["send"] + if not send_set: + continue + for receiver in genomes: + recv_set = genome_data[receiver]["recv"] + common = send_set & recv_set + if common: + rows.append((sender, receiver, "/".join(sorted(common, key=int)))) + with open(output_csv, "w", newline='') as f: + writer = csv.writer(f) + writer.writerow(["Sender", "Receiver", "Pathways"]) + writer.writerows(rows) + +def main(): + parser = argparse.ArgumentParser( + description="Generate sender–receiver–pathway table from QS summary file." + ) + parser.add_argument("-i", "--input", required=True, help="Input CSV: qs_sending_receiving_summary.csv") + parser.add_argument("-o", "--output", required=True, help="Output CSV: sender_receiver_pathway_table.csv") + parser.add_argument("--force-parallel", action="store_true", help="Force use of parallel processing") + parser.add_argument("--no-parallel", action="store_true", help="Disable parallel processing") + parser.add_argument("--threshold", type=int, default=1000, help="Genome count threshold to enable parallel mode") + + args = parser.parse_args() + + genome_data = load_genome_data(args.input) + genome_count = len(genome_data) + + if args.no_parallel: + print("Running in serial mode (manual override).") + generate_pathway_pairs_serial(genome_data, args.output) + elif args.force_parallel or genome_count > args.threshold: + print(f"Running in parallel mode (genome count = {genome_count}).") + generate_pathway_pairs_parallel(genome_data, args.output) + else: + print(f"Running in serial mode (genome count = {genome_count}).") + generate_pathway_pairs_serial(genome_data, args.output) + +if __name__ == "__main__": + main() diff --git a/microbetag/QS/build_QSdb.sh b/microbetag/QS/build_QSdb.sh new file mode 100644 index 00000000..ddab282a --- /dev/null +++ b/microbetag/QS/build_QSdb.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +## This script downloads the KEGG Orthology HMM database, +## extracts HMMs related to KEGG pathway m02024 (quorum sensing), +## builds an HMMsearch database, and keeps only the final outputs in the current directory. + +# Exit on any error +set -e + +# Step 0: Check for m02024_genes.txt in current directory +if [[ ! -f m02024_genes.txt ]]; then + echo "[ERROR] File 'm02024_genes.txt' not found in the current directory." + echo "Please make sure 'm02024_genes.txt' is placed in the same directory as this script." + exit 1 +fi + +# Step 1: Create temporary working directory +workdir=$(mktemp -d) + +# Step 2: Download KEGG HMM database +echo "[INFO] Downloading KEGG HMM profiles (around 1Gb, this may take a while) ..." +#wget https://www.genome.jp/ftp/db/kofam/profiles.tar.gz -O "$workdir/profiles.tar.gz" +curl -o "$workdir/profiles.tar.gz" https://www.genome.jp/ftp/db/kofam/profiles.tar.gz +tar -xzf "$workdir/profiles.tar.gz" -C "$workdir" +rm "$workdir/profiles.tar.gz" + +# Step 3: Copy required HMMs +mkdir "$workdir/required_hmm" +xargs -a m02024_genes.txt -I {} sh -c 'cp "'"$workdir"'/profiles/{}.hmm" "'"$workdir"'/required_hmm/" 2>/dev/null || echo "[WARNING] File not found: {}.hmm"' + +# Step 4: Build HMM database +cat "$workdir"/required_hmm/*.hmm > m02024_genes.hmm +hmmpress m02024_genes.hmm + +# Step 5: Clean up all temporary files and folders +rm -rf "$workdir" + +echo "[INFO] HMM database successfully built:" +ls m02024_genes.hmm* \ No newline at end of file diff --git a/microbetag/QS/m02024_genes.txt b/microbetag/QS/m02024_genes.txt new file mode 100644 index 00000000..cf0f0421 --- /dev/null +++ b/microbetag/QS/m02024_genes.txt @@ -0,0 +1,283 @@ +K00494 +K01114 +K01218 +K01318 +K01364 +K01399 +K01497 +K01580 +K01626 +K01635 +K01657 +K01658 +K01728 +K01897 +K01995 +K01996 +K01997 +K01998 +K01999 +K02031 +K02032 +K02033 +K02034 +K02035 +K02052 +K02053 +K02054 +K02055 +K02250 +K02251 +K02252 +K02253 +K02402 +K02403 +K02490 +K03070 +K03071 +K03073 +K03075 +K03076 +K03106 +K03110 +K03210 +K03217 +K03400 +K03666 +K06046 +K06352 +K06353 +K06354 +K06355 +K06356 +K06358 +K06359 +K06360 +K06361 +K06363 +K06364 +K06365 +K06366 +K06369 +K06375 +K06998 +K07173 +K07344 +K07645 +K07666 +K07667 +K07680 +K07691 +K07692 +K07699 +K07706 +K07707 +K07711 +K07715 +K07781 +K07782 +K07800 +K07813 +K08321 +K08605 +K08642 +K08777 +K09823 +K09936 +K10555 +K10556 +K10557 +K10558 +K10715 +K10823 +K10909 +K10910 +K10911 +K10912 +K10913 +K10914 +K10915 +K10916 +K10917 +K11006 +K11007 +K11031 +K11033 +K11034 +K11035 +K11036 +K11037 +K11039 +K11063 +K11216 +K11530 +K11531 +K11752 +K12257 +K12292 +K12293 +K12294 +K12295 +K12296 +K12415 +K12789 +K12990 +K13060 +K13061 +K13062 +K13063 +K13075 +K13815 +K13816 +K14051 +K14645 +K14982 +K14983 +K15580 +K15581 +K15582 +K15583 +K15654 +K15655 +K15656 +K15657 +K15850 +K15851 +K15852 +K15853 +K15854 +K16619 +K17940 +K18000 +K18001 +K18002 +K18003 +K18096 +K18098 +K18099 +K18100 +K18101 +K18139 +K18304 +K18306 +K18307 +K18315 +K18316 +K18317 +K18318 +K18319 +K19666 +K19731 +K19732 +K19733 +K19734 +K19735 +K20086 +K20087 +K20088 +K20089 +K20090 +K20248 +K20249 +K20250 +K20252 +K20253 +K20256 +K20257 +K20258 +K20259 +K20260 +K20261 +K20262 +K20263 +K20264 +K20265 +K20266 +K20267 +K20268 +K20269 +K20270 +K20271 +K20272 +K20273 +K20274 +K20275 +K20276 +K20277 +K20321 +K20322 +K20323 +K20324 +K20325 +K20326 +K20327 +K20328 +K20329 +K20330 +K20331 +K20332 +K20333 +K20334 +K20335 +K20336 +K20337 +K20338 +K20339 +K20340 +K20341 +K20342 +K20343 +K20344 +K20345 +K20373 +K20374 +K20375 +K20376 +K20377 +K20378 +K20379 +K20380 +K20381 +K20382 +K20383 +K20384 +K20385 +K20386 +K20387 +K20388 +K20389 +K20390 +K20391 +K20480 +K20481 +K20482 +K20483 +K20484 +K20485 +K20486 +K20487 +K20488 +K20489 +K20490 +K20491 +K20492 +K20494 +K20527 +K20528 +K20529 +K20530 +K20531 +K20532 +K20533 +K20539 +K20540 +K20552 +K20554 +K20555 +K22954 +K22955 +K22956 +K22957 +K22968 +K23133 +K25873 diff --git a/microbetag/QS/map02024_parse_dict.json b/microbetag/QS/map02024_parse_dict.json new file mode 100644 index 00000000..056fca00 --- /dev/null +++ b/microbetag/QS/map02024_parse_dict.json @@ -0,0 +1,1096 @@ +{ + "1": [ + { + "Mode species": "Vibrio harveyi, Vibrio fischeri, Vibrio cholerae" + }, + { + "Signal Compound": "C16421" + }, + { + "Signal Type": "AI-2" + }, + { + "Biosysthesis": [ + "K07173" + ] + }, + { + "Transporter": [ + "K10910", + "K10909" + ] + }, + { + "Sensing": [ + "K10911", + "K10912" + ] + } + ], + "2": [ + { + "Mode species": "Vibrio harveyi, Vibrio fischeri, Vibrio cholerae" + }, + { + "Signal Compound": "C21195" + }, + { + "Signal Type": "AI-1" + }, + { + "Biosysthesis": [ + "K13062" + ] + }, + { + "Transporter": [ + "K15850" + ] + }, + { + "Sensing": [ + "K10911", + "K10912" + ] + } + ], + "3": [ + { + "Mode species": "Vibrio harveyi, Vibrio fischeri, Vibrio cholerae" + }, + { + "Signal Compound": "C16640" + }, + { + "Signal Type": "CAI-1" + }, + { + "Biosysthesis": [ + "K10915" + ] + }, + { + "Transporter": [ + "K10916" + ] + }, + { + "Sensing": [ + "K10911", + "K10912" + ] + } + ], + "4": [ + { + "Mode species": "Vibrio harveyi, Vibrio fischeri, Vibrio cholerae" + }, + { + "Signal Compound": "C18049" + }, + { + "Signal Type": "AI-1" + }, + { + "Biosysthesis": [ + "K22954" + ] + }, + { + "Transporter": [] + }, + { + "Sensing": [ + "K15852" + ] + } + ], + "5": [ + { + "Mode species": "Pseudomonas aeruginosa" + }, + { + "Signal Compound": "C21201" + }, + { + "Signal Type": "AI-1" + }, + { + "Biosysthesis": [ + "K13060" + ] + }, + { + "Transporter": [] + }, + { + "Sensing": [ + "K18304" + ] + } + ], + "6": [ + { + "Mode species": "Pseudomonas aeruginosa" + }, + { + "Signal Compound": "C20643,C11848" + }, + { + "Signal Type": "HHQ/PQS" + }, + { + "Biosysthesis": [ + "K01657", + "K01658", + "K18000", + "K18001", + "K18002", + "K18003", + "K20257", + "K17940" + ] + }, + { + "Transporter": [] + }, + { + "Sensing": [ + "K19735" + ] + } + ], + "7": [ + { + "Mode species": "Pseudomonas aeruginosa" + }, + { + "Signal Compound": "C11837" + }, + { + "Signal Type": "AI-1" + }, + { + "Biosysthesis": [ + "K13061" + ] + }, + { + "Transporter": [] + }, + { + "Sensing": [ + "K18099" + ] + } + ], + "8": [ + { + "Mode species": "Pseudomonas" + }, + { + "Signal Compound": "C21197" + }, + { + "Signal Type": "AI-1" + }, + { + "Biosysthesis": [ + "K13061" + ] + }, + { + "Transporter": [] + }, + { + "Sensing": [ + "K18099" + ] + } + ], + "9": [ + { + "Mode species": "Enterohemorrhagic Escherichia coli [EHEC]" + }, + { + "Signal Compound": "C00788,C00547" + }, + { + "Signal Type": "Adrenaline/Noradrenaline" + }, + { + "Biosysthesis": [] + }, + { + "Transporter": [ + "K07645" + ] + }, + { + "Sensing": [ + "K07666" + ] + } + ], + "10": [ + { + "Mode species": "Enterohemorrhagic Escherichia coli [EHEC]" + }, + { + "Signal Compound": "C00788,C00547" + }, + { + "Signal Type": "Adrenaline/Noradrenaline" + }, + { + "Biosysthesis": [] + }, + { + "Transporter": [ + "K07645" + ] + }, + { + "Sensing": [ + "K07667" + ] + } + ], + "11": [ + { + "Mode species": "Enterohemorrhagic Escherichia coli [EHEC]" + }, + { + "Signal Compound": "C00788,C00547" + }, + { + "Signal Type": "Adrenaline/Noradrenaline" + }, + { + "Biosysthesis": [] + }, + { + "Transporter": [ + "K07645" + ] + }, + { + "Sensing": [ + "K07715" + ] + } + ], + "12": [ + { + "Mode species": "Enterohemorrhagic Escherichia coli [EHEC]" + }, + { + "Signal Compound": "C00788,C00547" + }, + { + "Signal Type": "Adrenaline/Noradrenaline" + }, + { + "Biosysthesis": [] + }, + { + "Transporter": [ + "K07711" + ] + }, + { + "Sensing": [ + "K07715" + ] + } + ], + "13": [ + { + "Mode species": "Enterohemorrhagic Escherichia coli [EHEC]" + }, + { + "Signal Compound": "C00059,C00009" + }, + { + "Signal Type": "Sulfate/Phosphate" + }, + { + "Biosysthesis": [] + }, + { + "Transporter": [ + "K07711" + ] + }, + { + "Sensing": [ + "K07715" + ] + } + ], + "14": [ + { + "Mode species": "Enterohemorrhagic Escherichia coli [EHEC]" + }, + { + "Signal Compound": "C01019" + }, + { + "Signal Type": "Fucose" + }, + { + "Biosysthesis": [] + }, + { + "Transporter": [ + "K20263" + ] + }, + { + "Sensing": [ + "K20264" + ] + } + ], + "15": [ + { + "Mode species": "Enterohemorrhagic Escherichia coli [EHEC]" + }, + { + "Signal Compound": "C11841" + }, + { + "Signal Type": "AI-1" + }, + { + "Biosysthesis": [] + }, + { + "Transporter": [] + }, + { + "Sensing": [ + "K07782" + ] + } + ], + "16": [ + { + "Mode species": "Escherichia coli" + }, + { + "Signal Compound": "C21382" + }, + { + "Signal Type": "AI-2" + }, + { + "Biosysthesis": [ + "K07173" + ] + }, + { + "Transporter": [ + "K10555", + "K10556", + "K10557", + "K10558" + ] + }, + { + "Sensing": [ + "K11216", + "K11531" + ] + } + ], + "17": [ + { + "Mode species": "Rhodopseudomonas palustris" + }, + { + "Signal Compound": "C20677" + }, + { + "Signal Type": "AI-1" + }, + { + "Biosysthesis": [ + "K18096" + ] + }, + { + "Transporter": [] + }, + { + "Sensing": [ + "K18098" + ] + } + ], + "18": [ + { + "Mode species": "Rhizobium leguminosarum" + }, + { + "Signal Compound": "C11845" + }, + { + "Signal Type": "AI-1" + }, + { + "Biosysthesis": [ + "K20248" + ] + }, + { + "Transporter": [] + }, + { + "Sensing": [ + "K20252" + ] + } + ], + "19": [ + { + "Mode species": "Rhizobium leguminosarum" + }, + { + "Signal Compound": "C11845" + }, + { + "Signal Type": "AI-1" + }, + { + "Biosysthesis": [ + "K20248" + ] + }, + { + "Transporter": [] + }, + { + "Sensing": [ + "K20253" + ] + } + ], + "20": [ + { + "Mode species": "Rhizobium leguminosarum" + }, + { + "Signal Compound": "C11841" + }, + { + "Signal Type": "AI-1" + }, + { + "Biosysthesis": [ + "K22955" + ] + }, + { + "Transporter": [] + }, + { + "Sensing": [ + "K19732" + ] + } + ], + "21": [ + { + "Mode species": "Rhizobium leguminosarum" + }, + { + "Signal Compound": "C21197,C11844,C21199,C21200" + }, + { + "Signal Type": "AI-1" + }, + { + "Biosysthesis": [ + "K20249" + ] + }, + { + "Transporter": [] + }, + { + "Sensing": [ + "K25873" + ] + } + ], + "22": [ + { + "Mode species": "Rhizobium leguminosarum" + }, + { + "Signal Compound": "C21197" + }, + { + "Signal Type": "AI-1" + }, + { + "Biosysthesis": [ + "K18096" + ] + }, + { + "Transporter": [] + }, + { + "Sensing": [ + "K18098" + ] + } + ], + "23": [ + { + "Mode species": "Erwinia, Serratia" + }, + { + "Signal Compound": "C21198,C11841" + }, + { + "Signal Type": "AI-1" + }, + { + "Biosysthesis": [ + "K22956" + ] + }, + { + "Transporter": [] + }, + { + "Sensing": [ + "K19734" + ] + } + ], + "24": [ + { + "Mode species": "Pantoea stewartii" + }, + { + "Signal Compound": "C21198" + }, + { + "Signal Type": "AI-1" + }, + { + "Biosysthesis": [ + "K22956" + ] + }, + { + "Transporter": [] + }, + { + "Sensing": [ + "K19734" + ] + } + ], + "25": [ + { + "Mode species": "Burkholderia cepacia complex [Bcc]" + }, + { + "Signal Compound": "C21199" + }, + { + "Signal Type": "AI-1" + }, + { + "Biosysthesis": [ + "K13061" + ] + }, + { + "Transporter": [] + }, + { + "Sensing": [ + "K19666" + ] + } + ], + "26": [ + { + "Mode species": "Burkholderia cepacia complex [Bcc]" + }, + { + "Signal Compound": "C21197" + }, + { + "Signal Type": "AI-1" + }, + { + "Biosysthesis": [ + "K20250" + ] + }, + { + "Transporter": [] + }, + { + "Sensing": [ + "K19731" + ] + } + ], + "27": [ + { + "Mode species": "Burkholderia cepacia complex [Bcc]" + }, + { + "Signal Compound": "C21202" + }, + { + "Signal Type": "BDSF" + }, + { + "Biosysthesis": [ + "K13816" + ] + }, + { + "Transporter": [] + }, + { + "Sensing": [ + "K14051" + ] + } + ], + "28": [ + { + "Mode species": "Xanthomonas campestris" + }, + { + "Signal Compound": "C18206" + }, + { + "Signal Type": "DSF" + }, + { + "Biosysthesis": [ + "K01897", + "K13816" + ] + }, + { + "Transporter": [ + "K10715" + ] + }, + { + "Sensing": [ + "K13815" + ] + } + ], + "29": [ + { + "Mode species": "Burkholderia glumae" + }, + { + "Signal Compound": "C21199" + }, + { + "Signal Type": "AI-1" + }, + { + "Biosysthesis": [ + "K13061" + ] + }, + { + "Transporter": [] + }, + { + "Sensing": [ + "K19666" + ] + } + ], + "30": [ + { + "Mode species": "Chromobacterium violaceum" + }, + { + "Signal Compound": "C21197" + }, + { + "Signal Type": "AI-1" + }, + { + "Biosysthesis": [ + "K22957" + ] + }, + { + "Transporter": [] + }, + { + "Sensing": [ + "K20334" + ] + } + ], + "31": [ + { + "Mode species": "Agrobacterium vitiae" + }, + { + "Signal Compound": "C18049" + }, + { + "Signal Type": "AI-1" + }, + { + "Biosysthesis": [ + "K22968" + ] + }, + { + "Transporter": [] + }, + { + "Sensing": [ + "K19733" + ] + } + ], + "32": [ + { + "Mode species": "Staphylococcus aureus" + }, + { + "Signal Compound": "C21200,C21241,C21242,C21243" + }, + { + "Signal Type": "AIP" + }, + { + "Biosysthesis": [ + "K07800", + "K07813" + ] + }, + { + "Transporter": [ + "K07706" + ] + }, + { + "Sensing": [ + "K07707" + ] + } + ], + "33": [ + { + "Mode species": "Clostridium difficile" + }, + { + "Signal Compound": "C21245" + }, + { + "Signal Type": "AIP" + }, + { + "Biosysthesis": [ + "K07800", + "K07813" + ] + }, + { + "Transporter": [ + "K20339" + ] + }, + { + "Sensing": [ + "K20340" + ] + } + ], + "34": [ + { + "Mode species": "Streptococcus" + }, + { + "Signal Compound": "C00007" + }, + { + "Signal Type": "O2" + }, + { + "Biosysthesis": [] + }, + { + "Transporter": [ + "K14982" + ] + }, + { + "Sensing": [ + "K14983" + ] + } + ], + "35": [ + { + "Mode species": "Streptococcus" + }, + { + "Signal Compound": "C21221,C21222" + }, + { + "Signal Type": "CSP" + }, + { + "Biosysthesis": [ + "K12415", + "K23133", + "K12292", + "K12293" + ] + }, + { + "Transporter": [ + "K12294" + ] + }, + { + "Sensing": [ + "K12295" + ] + } + ], + "36": [ + { + "Mode species": "Streptococcus" + }, + { + "Signal Compound": "C21223" + }, + { + "Signal Type": "Blp" + }, + { + "Biosysthesis": [ + "K20343", + "K20344", + "K20345" + ] + }, + { + "Transporter": [ + "K07706" + ] + }, + { + "Sensing": [ + "K07707" + ] + } + ], + "37": [ + { + "Mode species": "Bacillus" + }, + { + "Signal Compound": "C21230" + }, + { + "Signal Type": "ComX" + }, + { + "Biosysthesis": [ + "K02253", + "K02251" + ] + }, + { + "Transporter": [ + "K07680" + ] + }, + { + "Sensing": [ + "K07691" + ] + } + ], + "38": [ + { + "Mode species": "Bacillus" + }, + { + "Signal Compound": "C21232,C21234,C21237,C21235,C21236,C21231,C21233" + }, + { + "Signal Type": "Phr" + }, + { + "Biosysthesis": [ + "K06353", + "K06355", + "K06358", + "K06356", + "K20389", + "K06352", + "K06354", + "K12257", + "K03073", + "K03075", + "K03076", + "K03210", + "K03217", + "K03070", + "K03110", + "K03071", + "K03106" + ] + }, + { + "Transporter": [ + "K15580", + "K15581", + "K15582", + "K15583", + "K10823" + ] + }, + { + "Sensing": [ + "K06361", + "K06364", + "K06369", + "K06365", + "K06366", + "K06359", + "K06363", + "K06360" + ] + } + ], + "39": [ + { + "Mode species": "Bacillus thuringiensis" + }, + { + "Signal Compound": "C21239" + }, + { + "Signal Type": "PapR" + }, + { + "Biosysthesis": [ + "K20390", + "K12257", + "K03073", + "K03075", + "K03076", + "K03210", + "K03217", + "K03070", + "K03110", + "K03071", + "K03106", + "K08777" + ] + }, + { + "Transporter": [ + "K15580", + "K15581", + "K15582", + "K15583", + "K10823" + ] + }, + { + "Sensing": [ + "K20391" + ] + } + ], + "40": [ + { + "Mode species": "Bacillus thuringiensis" + }, + { + "Signal Compound": "C21238" + }, + { + "Signal Type": "NprX" + }, + { + "Biosysthesis": [ + "K20481", + "K12257", + "K03073", + "K03075", + "K03076", + "K03210", + "K03217", + "K03070", + "K03110", + "K03071", + "K03106" + ] + }, + { + "Transporter": [ + "K15580", + "K15581", + "K15582", + "K15583", + "K10823" + ] + }, + { + "Sensing": [ + "K20480" + ] + } + ], + "41": [ + { + "Mode species": "Gram-positive bacteria" + }, + { + "Signal Compound": "" + }, + { + "Signal Type": "Mature antimicrobial peptide" + }, + { + "Biosysthesis": [ + "K20482", + "K20483", + "K20484", + "K20485", + "K20486" + ] + }, + { + "Transporter": [ + "K20487" + ] + }, + { + "Sensing": [ + "K20488" + ] + } + ] +} \ No newline at end of file