Daily Archives: 2026年10月15日

Pipeline for Data_Holger_neonate

  1. Run nextflow bacass

     conda deactivate
    
     # Downlod k2_standard_08_GB_20251015.tar.gz from https://benlangmead.github.io/aws-indexes/k2#kraken2--bracken
     # Download 20190108_kmerfinder_stable_dirs.tar.gz from https://zenodo.org/records/13447056; 'tar xzf 20190108_kmerfinder_stable_dirs.tar.gz'  #The database does not work!
     # Download the kmerfinder database: https://www.genomicepidemiology.org/services/ --> https://cge.food.dtu.dk/services/KmerFinder/ --> https://cge.food.dtu.dk/services/KmerFinder/etc/kmerfinder_db.tar.gz  #The database works!
    
     # DEBUG: --kmerfinderdb /mnt/nvme1n1p1/REFs/kmerfinder/bacteria/ not working!
    
     nextflow run nf-core/bacass -r 2.6.0 -profile docker --help
    
     # -- Short assembly --
     #Maybe BUG is from '--skip_kmerfinder for -r 2.6.0, using db in 2.5.0'
     nextflow run nf-core/bacass -r 2.5.0 -profile docker \
       --input samplesheet.tsv \
       --outdir bacass_out \
       --assembly_type short \
       --kraken2db /mnt/nvme1n1p1/REFs/k2_standard_08_GB_20251015.tar.gz \
       --kmerfinderdb /mnt/nvme1n1p1/REFs/kmerfinder/bacteria/ \
       -resume \
       -work-dir bacass_out/work
  2. Verify if the genome is pure

     # 1. Go up one level to the main 'bacass_out' directory
     cd ..
    
     # 2. Create directories for CheckM inputs and outputs
     mkdir -p checkm_input checkm_output
    
     # 3. Copy all .fna files into the 'checkm_input' folder
     # (CheckM cannot search subdirectories, so they must be in one folder)
     find ./Prokka -name "*.fna" -exec cp {} checkm_input/ \;
    
     # 4. Run CheckM on all 4 assemblies
     (checkm_env2) checkm lineage_wf -x fna checkm_input checkm_output
    
     -------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     Bin Id            Marker lineage            # genomes   # markers   # marker sets   0     1     2    3   4   5+   Completeness   Contamination   Strain heterogeneity
     -------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     RKP53              root (UID1)                 5656         56            24        0     0     55   1   0   0       100.00          104.17             82.76
     RKP5     c__Gammaproteobacteria (UID4445)      228         583           244        0    582    1    0   0   0       100.00           0.14               0.00
     RKP43              root (UID1)                 5656         56            24        0     0     55   1   0   0       100.00          104.17              0.00
     RKP42          k__Bacteria (UID203)            5449        104            58        0     2    101   1   0   0       100.00          99.84               0.00
     RKP37          k__Bacteria (UID203)            5449        104            58        0     2    101   1   0   0       100.00          99.84               0.00
     RKP33          k__Bacteria (UID203)            5449        104            58        0     2    100   2   0   0       100.00          101.57              0.00
     RKP31              root (UID1)                 5656         56            24        0     0     53   3   0   0       100.00          104.92             79.03
     RKP1               root (UID1)                 5656         56            24        0     0     56   0   0   0       100.00          100.00              0.00
     RKP47       g__Burkholderia (UID4006)           64         769           248        1    768    0    0   0   0       99.87            0.00               0.00
     RKP38       g__Staphylococcus (UID294)          60         773           178        1    772    0    0   0   0       99.81            0.00               0.00
     RKP30       g__Staphylococcus (UID294)          60         773           178        1    758    14   0   0   0       99.81            2.61               7.14
     RKP54       g__Staphylococcus (UID294)          60         773           178        2    771    0    0   0   0       99.67            0.00               0.00
     RKP25       g__Staphylococcus (UID294)          60         773           178        2    770    1    0   0   0       99.67            0.28               0.00
     RKP24       g__Staphylococcus (UID294)          60         773           178        2    770    1    0   0   0       99.67            0.28               0.00
     RKP19       g__Staphylococcus (UID294)          60         773           178        2    771    0    0   0   0       99.67            0.00               0.00
     RKP18       g__Staphylococcus (UID294)          60         773           178        2    771    0    0   0   0       99.67            0.00               0.00
     RKP17       g__Staphylococcus (UID294)          60         773           178        2    771    0    0   0   0       99.67            0.00               0.00
     RKP26      o__Lactobacillales (UID544)         293         475           267        1    474    0    0   0   0       99.63            0.00               0.00
     RKP15      o__Lactobacillales (UID544)         293         475           267        1    472    2    0   0   0       99.63            0.56               0.00
     RKP7        g__Staphylococcus (UID298)          56         805           176        2    803    0    0   0   0       99.62            0.00               0.00
     RKP56       g__Staphylococcus (UID298)          56         805           176        2    803    0    0   0   0       99.62            0.00               0.00
     RKP50       g__Staphylococcus (UID298)          56         805           176        2    592   211   0   0   0       99.62           25.90              24.64
     RKP49       g__Staphylococcus (UID298)          56         805           176        2    803    0    0   0   0       99.62            0.00               0.00
     RKP45       g__Staphylococcus (UID298)          56         805           176        2    803    0    0   0   0       99.62            0.00               0.00
     RKP40       g__Staphylococcus (UID298)          56         805           176        2    803    0    0   0   0       99.62            0.00               0.00
     RKP39       g__Staphylococcus (UID298)          56         805           176        2    803    0    0   0   0       99.62            0.00               0.00
     RKP3        g__Staphylococcus (UID298)          56         805           176        2    803    0    0   0   0       99.62            0.00               0.00
     RKP29       g__Staphylococcus (UID298)          56         805           176        2    803    0    0   0   0       99.62            0.00               0.00
     RKP22       g__Staphylococcus (UID298)          56         805           176        2    803    0    0   0   0       99.62            0.00               0.00
     RKP21       g__Staphylococcus (UID298)          56         805           176        2    803    0    0   0   0       99.62            0.00               0.00
     RKP13       g__Staphylococcus (UID298)          56         805           176        2    803    0    0   0   0       99.62            0.00               0.00
     RKP12       g__Staphylococcus (UID298)          56         805           176        2    803    0    0   0   0       99.62            0.00               0.00
     RKP11       g__Staphylococcus (UID298)          56         805           176        2    803    0    0   0   0       99.62            0.00               0.00
     RKP10       g__Staphylococcus (UID298)          56         805           176        2    803    0    0   0   0       99.62            0.00               0.00
     RKP36       g__Staphylococcus (UID298)          56         805           176        3    766    36   0   0   0       99.61            3.41              30.56
     RKP35       g__Staphylococcus (UID301)          45         940           178        4    935    1    0   0   0       99.51            0.08               0.00
     RKP34       g__Staphylococcus (UID301)          45         940           178        4    935    1    0   0   0       99.51            0.08               0.00
     RKP6        g__Staphylococcus (UID298)          56         805           176        3    797    4    1   0   0       99.51            1.79              57.14
     RKP4        g__Staphylococcus (UID298)          56         805           176        3    800    2    0   0   0       99.51            0.17              100.00
     RKP9        g__Staphylococcus (UID298)          56         805           176        3    802    0    0   0   0       99.48            0.00               0.00
     RKP8        g__Staphylococcus (UID298)          56         805           176        3    802    0    0   0   0       99.48            0.00               0.00
     RKP41          c__Bacilli (UID285)             586         325           181        1    323    1    0   0   0       99.45            0.55               0.00
     RKP2        g__Staphylococcus (UID301)          45         940           178        5    933    2    0   0   0       99.40            0.10               0.00
     RKP48       g__Staphylococcus (UID298)          56         805           176        5    798    2    0   0   0       99.38            1.14              50.00
     RKP46       g__Staphylococcus (UID298)          56         805           176        5    798    2    0   0   0       99.38            1.14              50.00
     RKP16       g__Staphylococcus (UID298)          56         805           176        5    798    2    0   0   0       99.38            0.59               0.00
     RKP14       g__Staphylococcus (UID298)          56         805           176        5    799    1    0   0   0       99.38            0.57               0.00
     RKP55       g__Staphylococcus (UID298)          56         805           176        6    798    1    0   0   0       99.33            0.57               0.00
     RKP52       g__Staphylococcus (UID298)          56         805           176        6    798    1    0   0   0       99.33            0.57               0.00
     RKP51       g__Staphylococcus (UID298)          56         805           176        6    798    1    0   0   0       99.33            0.57               0.00
     RKP32       g__Staphylococcus (UID294)          60         773           178        2    771    0    0   0   0       99.25            0.00               0.00
     RKP28      f__Micrococcaceae (UID1623)          39         457           218        6    450    1    0   0   0       98.70            0.23               0.00
     RKP23          k__Bacteria (UID203)            5449        104            58        1     41    62   0   0   0       98.28           37.93              85.48
     RKP44       g__Staphylococcus (UID298)          56         805           176        15   759    29   2   0   0       97.34            5.16              37.14
     -------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  3. mlst

     (bacto) mlst *.fna > mlst
  4. Species Identification: 快速筛查用 Mash → 精确分类用 GTDB-Tk → 种级验证用 FastANI,三者结合可最大限度提高物种鉴定的准确性和可解释性。

     # 1. 创建环境(推荐 mamba)
     mamba create -n gtdbtk -c conda-forge -c bioconda gtdbtk
     mamba activate gtdbtk
    
     # 2. 下载数据库(仅需首次,约 60GB)
     gtdbtk download --data_dir ./gtdb_data --release 220
    
     wget https://data.gtdb.aau.ecogenomic.org/releases/release232/232.0/auxillary_files/gtdbtk_package/full_package/gtdbtk_r232_data.tar.g
     mamba env config vars set GTDBTK_DATA_PATH="/mnt/nvme4n1p1/gtdb_data/release232"
     # 先退出当前环境,再重新激活
     mamba deactivate
     mamba activate gtdbtk
    
     # 验证环境变量是否加载成功
     echo $GTDBTK_DATA_PATH
     # 应输出:/mnt/nvme4n1p1/gtdb_data/release232
    
     # 3. 运行分类(你提供的命令 + 实用参数)
     gtdbtk classify_wf \
       --genome_dir ./checkm_input \
       --out_dir gtdb_out \
       --cpus 64 \
       --extension .fna \
       --prefix mygenome
    
     # 4. 查看结果
     cat gtdb_out/classify/mygenome.bac120.summary.tsv   # 细菌结果
  5. 根据 Excel 中的 Contamination (%)、Strain Heterogeneity (%) 和 Interpretation 列,请将 .fna 文件分为两类:

     ✅ 保留(高质量,污染率 < 1%,单一菌株):
    
     S. haemolyticus (16个): RKP3, RKP7, RKP8, RKP9, RKP10, RKP11, RKP12, RKP13, RKP21, RKP22, RKP29, RKP39, RKP40, RKP45, RKP49, RKP56
     S. epidermidis (8个): RKP17, RKP18, RKP19, RKP24, RKP25, RKP32, RKP38, RKP54
     S. hominis (5个): RKP14, RKP16, RKP51, RKP52, RKP55
     (其他高质量非目标菌可单独归档备用,如 RKP2, RKP15, RKP26, RKP47)
    
     ❌ 剔除(嵌合体/多菌株混合,会破坏分析):
    
     Chimera (嵌合体): RKP1, RKP23, RKP31, RKP33, RKP37, RKP42, RKP43, RKP50, RKP53
     Polystrain / Closely related CoNS (高异质性或近缘种混合): RKP4, RKP6, RKP30, RKP36, RKP44, RKP46, RKP48
  6. 完整分析主脚本 (Master Script) run 所有步骤(数据分类、Snippy 核心基因组提取、IQ-TREE 建树、Abricate 耐药分析、矩阵合并)完美整合。它特别优化了多核并行处理(使用 GNU parallel),能将原本需要数小时的计算缩短到几分钟。 请确保您当前处于正确的 conda 环境中(例如 conda activate bengal3_ac3),并且已安装 snippy, iqtree, abricate, parallel。

     bash run_complete_analysis.sh    # 获得性基因用 CARD/ResFinder/Abricate,而 SNP/点突变介导的耐药必须用 PointFinder、AMRFinderPlus 或基于 VCF 的精准变异分析。
    
     #Note that CARD 和 ResFinder 是“字典”(数据库),而 Abricate 是“查字典的工具”(软件)
     标准工作流程如下:
            * 输入:你组装好的细菌基因组文件(例如 RKP8.fna)。
            * 工具:你运行 abricate 命令。
            * 数据源:你告诉 Abricate 使用哪个数据库(例如 --db card 或 --db resfinder)。
            * 底层引擎:Abricate 会在后台自动调用 BLAST、Diamond 或 Minimap2,将你的序列与数据库中的序列进行局部比对。
            * 输出:Abricate 生成一个 .tsv 表格,告诉你:“在 RKP8 中,我找到了 CARD 数据库里的 mecA 基因,覆盖度 100%,相似度 99.5%”。
  7. Abricate 耐药分析 has limitation since it only detects “Acquired Resistance Genes”, rather not “SNP-Mediated Resistance”.

     For the detection of antimicrobial resistance, we employed a dual-strategy to ensure maximum accuracy, acknowledging that resistance can be mediated by both acquired genes and point mutations (SNPs), the latter of which can occur on both chromosomes and plasmids.
     1. Acquired Resistance Genes: Screened using Abricate against the CARD database, which is robust for detecting complete gene acquisitions (e.g., mecA, aminoglycoside modifying enzymes).
     2. SNP-Mediated Resistance: Since alignment-based tools like Abricate are prone to false negatives/positives when detecting single-nucleotide variants, we relied on NCBI AMRFinderPlus (with the point mutation database enabled) / our high-resolution core-genome SNP calling (Snippy). This allowed us to specifically identify non-synonymous mutations in key target genes (e.g., gyrA, grlA, rpoB), accurately distinguishing between neutral synonymous mutations and true resistance-conferring SNPs, regardless of their chromosomal or plasmid location.
    
     --> Solution: NCBI AMRFinderPlus (目前最推荐的综合金标准) for both
    
     定位:NCBI 官方开发的耐药性分析工具,正在迅速成为行业标准。
     原理:它不仅包含一个庞大的获得性基因数据库,还内置了一个极其严谨的 Point Mutation (点突变) 数据库。它通过将您的基因组翻译成蛋白质序列,然后与参考蛋白进行比对,专门寻找特定的“非同义突变 (Non-synonymous mutations)”(即真正改变氨基酸的突变)。
     优势:准确率极高,能有效区分“同义突变(不改变耐药性)”和“非同义突变(改变耐药性)”,并且明确标注该突变是位于染色体还是质粒/可移动遗传元件上。
    
     # 确保您在正确的 conda 环境中
     mamba activate bengal3_ac3
    
     # 安装 ncbi-amrfinderplus
     mamba install -c bioconda ncbi-amrfinderplus -y
    
     # 创建一个专门存放 AMRFinder 数据库的目录
     mkdir -p /mnt/nvme3n1p1/amrfinder_db
    
     # 下载并更新数据库 (这可能需要几分钟,取决于网络)
     amrfinder_update --database /mnt/nvme3n1p1/amrfinder_db
    
     amrfinder --plus --nucleotide ./amr_analysis/RKP8.fna --organism Staphylococcus --database /mnt/nvme3n1p1/amrfinder_db --output RKP8_amrfinder.txt
    
     参数解释:
     --plus: 启用点突变 (point mutation) 数据库,专门检测 SNP 介导的耐药。
     --organism Staphylococcus: 告诉软件这是葡萄球菌,它会针对性地输出葡萄球菌特有的耐药突变(如 gyrA, grlA)。
    
     步骤 1:从 AMRFinderPlus 结果中提取点突变 (Point Mutations)
             python extract_amrfinder_snps.py
    
     步骤 2:如果 AMRFinder 未检出,直接从 Snippy VCF 中提取 (终极金标准)
    
             python extract_snippy_target_snps.py
    
             * (bengal3_ac3) jhuang@WS-2290C:/mnt/md1/DATA/Data_Holger_neonate/bacass_out/amr_analysis$ python extract_amrfinder_snps.py
             --> ⚠️ AMRFinder 未检测到任何标记为 protein_variant 的突变。我们将转向 Snippy VCF 分析。
             * (bengal3_ac3) jhuang@WS-2290C:/mnt/md1/DATA/Data_Holger_neonate/bacass_out/amr_analysis$ python extract_snippy_target_snps.py
             --> ⚠️ 未在 Snippy VCF 结果中检测到目标耐药基因 (gyrA, grlA, rpoB 等) 的突变。这表明您的 CoNS 分离株在这些经典靶点上没有发生已知的耐药突变。
    
             #-->
    
             🔍 结果解读:这意味着什么?
    
             * 排除了经典靶点突变:您的 CoNS 分离株在 gyrA、grlA (parC)、rpoB、fusA 等经典耐药靶基因上没有发生非同义突变。
             * 耐药机制的明确指向:这意味着,如果您的分离株表现出对氟喹诺酮类(如环丙沙星)或利福平的耐药性,那不是由这些经典的染色体 SNP 突变引起的。
             * 获得性基因是主导:结合您之前运行的 CARD/Abricate 结果,这批 NICU 分离株的耐药表型几乎可以肯定是由获得性耐药基因(如 mecA 介导的甲氧西林耐药,以及氨基糖苷类/大环内酯类修饰酶)驱动的。
    
     📊 总结与下一步
    
     * 运行上述两个 Python 脚本。它们会直接利用您已经生成的高质量数据,绕过 Abricate 数据库缺失的障碍。
     * 如果 Snippy_Target_Gene_Mutations.csv 生成了数据,您就找到了“吸烟枪”(Smoking Gun):您可以明确告诉 Holger,哪些样本在 gyrA 或 grlA 上发生了具体的氨基酸替换。
     * 将这些 SNP 突变信息与您的 MLST 结果 和 获得性基因 (CARD) 矩阵 一起上传到 Microreact,您将得到一张完美解答 Holger 两个问题的终极可视化图表。
  8. Summarize the results

     * 高分辨率种内进化树 (回答“克隆结构”):
    
     phylogeny_analysis/S_haemolyticus/core_haemolyticus.aln.treefile
     phylogeny_analysis/S_epidermidis/core_epidermidis.aln.treefile
     phylogeny_analysis/S_hominis/core_hominis.aln.treefile
    
     * MLST 序列分型结果:您之前运行的 mlst 结果(包含每个样本的 ST 型别)。
     mlst RKP*.fna > mlst.txt
    
     * 获得性耐药基因矩阵 (回答“耐药遗传决定因素”):
    
     amr_analysis/AMR_presence_absence_matrix.csv (包含 mecA, erm 等基因的 1/0 分布)。
    
     * SNP 靶点阴性证明:已通过 AMRFinderPlus 和 Snippy VCF 双重验证,无经典靶点突变。
    
     上传到 Microreact 的步骤:
    
     1. 打开 Microreact,点击 "Start" -> "Upload data"。
     2. Tree: 上传您对应的 .treefile (例如 core_haemolyticus.aln.treefile)。
     3. Data: 上传您刚刚准备好的 metadata_for_microreact.csv。
     4. 调整视图:在右侧面板中,将 ST 设置为饼图或颜色标签,将 mecA 等耐药基因设置为树旁边的彩色方块矩阵。
    
     您将看到的“ Smoking Gun ”(铁证):
     如果在树上,几个样本(如 RKP3, RKP8, RKP9)紧密聚集成一个分支(分支长度极短,Bootstrap > 90),并且它们在 Metadata 中显示完全相同的 ST 和完全相同的耐药基因组合(如都有 mecA),您就可以确凿地得出结论:这是一个在 NICU 内克隆传播的耐药菌株。
    
     🎯 下一步:上传到 Microreact
     现在您手中已经有了回答 Holger 两个问题的所有核心拼图:
    
     进化树文件 (.treefile):展示克隆结构 (Clonal structure)。
     Metadata 文件 (metadata_for_microreact.csv):展示物种、ST 和核心耐药基因。
    
     操作指南:
    
     打开 Microreact.org
     ,点击 "Start" -> "Upload data"。
     Tree: 上传您的 .treefile (例如 core_haemolyticus.aln.treefile)。
     Data: 上传刚刚生成的 metadata_for_microreact.csv。
     可视化设置 (关键):
             * 将 Species 设置为节点颜色或形状。
             * 将 ST 设置为节点旁边的文本标签。
             * 将 mecA, aac_aph, ermC 等设置为 Heatmap (热图) 或彩色矩阵,附着在树的右侧。
    
     ----> TODO_AFTERNOON: draw a plotTreeHeatmap for the three species, report Holger results using the following text!
    
     🔍 寻找 "Smoking Gun" (铁证):
     当您在 Microreact 中观察时,如果您看到几个分支长度极短(紧密聚类)的节点,它们不仅具有完全相同的 ST(例如都是 ST 3),而且右侧的耐药基因矩阵也完全一致(例如都带有 mecA=1 和 aac_aph=1),您就可以在报告中自信地向 Holger 宣布:“基因组系统发育、MLST 分型和耐药基因谱的高度一致性,提供了该耐药克隆株在 NICU 内发生克隆传播的分子流行病学铁证。”
  9. Generate the bestTree

     S. haemolyticus (16个): RKP3, RKP7, RKP8, RKP9, RKP10, RKP11, RKP12, RKP13, RKP21, RKP22, RKP29, RKP39, RKP40, RKP45, RKP49, RKP56
     S. epidermidis (8个): RKP17, RKP18, RKP19, RKP24, RKP25, RKP32, RKP38, RKP54
     S. hominis (5个): RKP14, RKP16, RKP51, RKP52, RKP55
    
     (bengal3_ac3) roary -f roary_out_haemolyticus -e --mafft -p 100 Prokka/RKP3/RKP3.gff Prokka/RKP7/RKP7.gff Prokka/RKP8/RKP8.gff Prokka/RKP9/RKP9.gff Prokka/RKP10/RKP10.gff Prokka/RKP11/RKP11.gff Prokka/RKP12/RKP12.gff Prokka/RKP13/RKP13.gff Prokka/RKP21/RKP21.gff Prokka/RKP22/RKP22.gff Prokka/RKP29/RKP29.gff Prokka/RKP39/RKP39.gff Prokka/RKP40/RKP40.gff Prokka/RKP45/RKP45.gff Prokka/RKP49/RKP49.gff Prokka/RKP56/RKP56.gff
     #-i 95 -cd 99
     mv
    
     (bengal3_ac3) roary -f roary_out_epidermidis -e --mafft -p 100 Prokka/RKP17/RKP17.gff Prokka/RKP18/RKP18.gff Prokka/RKP19/RKP19.gff Prokka/RKP24/RKP24.gff Prokka/RKP25/RKP25.gff Prokka/RKP32/RKP32.gff Prokka/RKP38/RKP38.gff Prokka/RKP54/RKP54.gff
    
     (bengal3_ac3) roary -f roary_out_hominis -e --mafft -p 100 Prokka/RKP14/RKP14.gff Prokka/RKP16/RKP16.gff Prokka/RKP51/RKP51.gff Prokka/RKP52/RKP52.gff Prokka/RKP55/RKP55.gff
    
     # S. haemolyticus
     raxml-ng --all \
     --msa roary_out_haemolyticus/core_gene_alignment.aln \
     --model GTR+G \
     --bs-trees 1000 \
     --threads 60 \
     --prefix haemolyticus_core_gene_tree_1000
    
     # S. epidermidis
     raxml-ng --all \
     --msa roary_out_epidermidis/core_gene_alignment.aln \
     --model GTR+G \
     --bs-trees 1000 \
     --threads 40 \
     --prefix epidermidis_core_gene_tree_1000
    
     # S. hominis
     raxml-ng --all \
     --msa roary_out_hominis/core_gene_alignment.aln \
     --model GTR+G \
     --bs-trees 1000 \
     --threads 40 \
     --prefix hominis_core_gene_tree_1000
  10. Report

     print(">>> [2/4] 正在构建基因名称缩写映射字典...")
     # 将所有 62 个冗长的基因名称映射为专业缩写
     gene_mapping = {
             # Aminoglycosides
             "AAC(6')-Ie-APH(2'')-Ia_bifunctional_protein": "aac_aph",
             "ANT(4')-Ia": "ant_4",
             "APH(3')-IIIa": "aph_3",
             # Beta-lactams
             "mecA": "mecA", "mecI": "mecI", "mecR1": "mecR1",
             "PC1_beta-lactamase_(blaZ)": "blaZ", "PC1": "PC1",
             "OXA-1043": "OXA", "PEN-B4": "PEN_B4",
             # Macrolides/Lincosamides/Streptogramins (MLS)
             "ErmB": "ermB", "ErmC": "ermC", "Erm(44)v": "erm_44v",
             "msrA": "msrA", "mphC": "mphC", "lsaA": "lsaA", "vgaALC": "vgaA",
             # Tetracyclines
             "tet(K)": "tetK", "tet(L)": "tetL", "tet(M)": "tetM",
             "tet(38)": "tet_38", "tet(64)": "tet_64",
             # Fluoroquinolones / Efflux pumps / MDR
             "norA": "norA", "norC": "norC", "Staphylococcus_aureus_norA": "norA_sau",
             "mepA": "mepA", "mepR": "mepR", "amrA": "amrA", "amrB": "amrB",
             "Staphylococcus_aureus_LmrS": "lmrS",
             # Fusidic acid
             "fusB": "fusB", "fusC": "fusC", "Staphylococcus_aureus_FosB": "fosB",
             # Trimethoprim
             "dfrC": "dfrC", "dfrE": "dfrE", "dfrG": "dfrG",
             # Chloramphenicol / Lincosamide
             "catA8": "catA8", "lnuG": "lnuG",
             # Disinfectants / Biocides / Heavy metal
             "qacA": "qacA", "qacJ": "qacJ", "ceoA": "ceoA", "ceoB": "ceoB",
             "sepA": "sepA", "opcM": "opcM",
             # Mupirocin
             "Staphylococcus_aureus_mupA_conferring_resistance_to_mupirocin": "mupA",
             # Other / Regulatory / Efflux
             "ARL-2": "arl_2", "arlR": "arlR", "arlS": "arlS", "mgrA": "mgrA",
             "rsmA": "rsmA", "sdrM": "sdrM", "kdpD": "kdpD", "YajC": "yajC",
             "Burkholderia_pseudomallei_Omp38": "omp38", "IreK": "ireK",
             "MexF": "mexF", "MexK": "mexK", "MexW": "mexW", "SAT-4": "sat_4",
             "efrA": "efrA", "efrB": "efrB", "emeA": "emeA"
     }
    
     # 定义综合精选版的核心基因列表 (26个最具临床意义的基因)
     selected_genes = [
             "mecA", "blaZ", "OXA",             # Beta-lactams
             "aac_aph", "aph_3", "ant_4",       # Aminoglycosides
             "ermB", "ermC", "msrA", "lsaA", "mphC", # Macrolides/Lincosamides
             "tetK", "tetL", "tetM",            # Tetracyclines
             "fusB", "fusC",                    # Fusidic acid
             "dfrG", "dfrC",                    # Trimethoprim
             "catA8",                           # Chloramphenicol
             "mupA",                            # Mupirocin
             "norA", "mepA",                    # Efflux/Fluoroquinolones
             "qacA", "qacJ"                     # Disinfectants
     ]
    
     # 这些是葡萄球菌/CoNS 中最具临床意义的耐药决定因素
     key_amr_genes = {
             'mecA': 'mecA',  # 甲氧西林/β-内酰胺类耐药
             "AAC(6')-Ie-APH(2'')-Ia_bifunctional_protein": 'aac_aph', # 氨基糖苷类高水平耐药
             'ErmC': 'ermC',  # 大环内酯类耐药
             'tet(K)': 'tetK', # 四环素耐药
             'dfrG': 'dfrG',   # 甲氧苄啶耐药
             'fusB': 'fusB',   # 夫西地酸耐药
             'qacA': 'qacA'    # 消毒剂/抗菌剂耐药 (常与 mecA 共位于 SCCmec)
     }