Daily Archives: 2026年7月29日

How to fill the sequence summary table and The complete list of tools and services available on BV-BRC (Data_Foong_D[R]NAseq_2021_ATCC19606_Cm)

Table 1. Summary of sequence data and genome features.

Metrics* Wildtype ΔadeAB ΔadeIJ ΔcraA
Genome size (bp)
Contig count
Total number of reads sequenced
Coverage depth (sequencing depth)
Coarse consistency (%)
Fine consistency (%)
Completeness (%)
Contamination (%)
Contigs N50 (bp)
Contigs L50
Guanine-cytosine content (%)
Number of genes
Number of coding sequences (CDSs)
Number of tRNAs
Number of rRNAs

Legend / Footnote:
* Genome completeness represents the fraction of universal single-copy functional roles expected for a given taxonomic lineage that are detected in the genome; missing roles indicate incomplete genome assembly or annotation. Contamination is inferred from the detection of multiple copies of these roles, which are expected to be single-copy, suggesting potential contamination or strain heterogeneity. Coarse consistency measures whether the expected functional roles are present or absent as predicted, reflecting broad agreement in the genome annotation. Fine consistency measures whether the number of copies of each functional role matches what is expected based on the genome’s overall pattern, identifying small differences in gene counts. These metrics were calculated using subtools of the BV-BRC platform v3.51.7 (20): EvalG, which estimates genome completeness and contamination based on lineage-specific single-copy marker roles; and EvalCon, which assesses coarse and fine consistency using a machine-learning-derived catalog of approximately 1,300 functional roles with predictable relationships. Coverage depth (sequencing depth) refers to the average number of reads covering each base across the assembled genome, calculated as the total number of clean bases divided by the genome size.


💡 Note for your post: You can use this as the “Goal” section of your tutorial or reminder post, followed by the step-by-step command-line instructions (e.g., seqkit, checkm2, mosdepth, and Python parsing) that we developed to automatically fill in these exact blank fields.



The complete list of tools and services available on the platform (e.g., BV-BRC), organized into a clean, hierarchical, and highly readable format for easy reference:

🧬 Genomics

  • Core Analysis: Genome Assembly, Genome Annotation, Comprehensive Genome Analysis (B)
  • Search & Alignment: BLAST, Primer Design, Similar Genome Finder, Genome Alignment
  • Variant & Transposon Analysis: Variation Analysis, Tn-Seq Analysis
  • Phylogenomics:
    • Bacterial Genome Tree
    • Viral Genome Tree
    • Core Genome MLST
    • Whole Genome SNP Analysis

🔬 Gene & Protein Tools

  • Sequence Analysis: MSA (Multiple Sequence Alignment) and SNP Analysis, Meta-CATS, Gene/Protein Tree
  • Comparative Analysis: Proteome Comparison, Protein Family Sorter
  • Comparative Systems: Docking, Protein Structure Prediction

🦠 Metagenomics

  • Taxonomic Classification
  • Metagenomic Binning
  • Metagenomic Read Mapping
  • Mobile Element Detection

🧫 Transcriptomics

  • RNA-Seq Analysis
  • Expression Import

🛠️ Utilities

  • Fastq Utilities
  • ID Mapper

🧬 Viral Tools

  • SARS-CoV-2 Specific: SARS-CoV-2 Genome Analysis, SARS-CoV-2 Wastewater Analysis
  • Influenza Specific: Influenza Sequence Submission, Influenza HA Subtype Conversion, Influenza Reassortment Analysis
  • General Viral: Subspecies Classification, Viral Assembly

🚨 Outbreak Tracker

  • Measles 2025
  • Mpox 2024
  • Influenza H5N1 2024
  • SARS-CoV-2

💡 Tip for your workflow: If you need to extract the Coarse Consistency and Fine Consistency metrics for your manuscript table (as discussed earlier), you will primarily use the Genome Annotation or Comprehensive Genome Analysis (B) services under the Genomics category, as these trigger the EvalG and EvalCon subtools.



This is excellent news! Since you already have NCBI PGAP-annotated GenBank (.gb) files, we can completely skip Prokka. The GenBank COMMENT block contains the exact, high-quality annotation metrics (Genes, CDS, tRNA, rRNA, and Coverage) you need for your table.

Here is the updated, streamlined pipeline for Ubuntu. It uses your existing .fna files for assembly/QC metrics and the new .gb files for annotation metrics.


Step 1: Install Required Tools (if not already installed)

# Activate your conda environment (or install via mamba/conda if needed)
conda activate genome_stats
# Ensure you have seqkit and checkm2
mamba install -c bioconda seqkit checkm2 -y

Step 2: Define File Mapping

Based on your previous grep output and the new GenBank snippets, map your files. Navigate to your working directory:

cd ~/DATA/Data_Foong_DNAseq_2021_ATCC19606_Cm/bacass_out/checkm_input

(Note: Ensure both the .fna and .gb files are in this directory, or adjust the paths in the Python script below).


Step 3: Calculate Assembly Metrics (Size, Count, N50, L50, GC%)

Use seqkit on the .fna files to get the physical assembly statistics.

seqkit stats *.fna > assembly_stats.tsv
cat assembly_stats.tsv

Step 4: Calculate Completeness and Contamination

Use checkm2 on the .fna files (this remains the gold standard for these specific metrics).

# Run checkm2 prediction (adjust --threads based on your CPU cores)
checkm2 predict --input *.fna --output-directory checkm2_out --threads 8

# View the results
cat checkm2_out/quality_report.tsv

Step 5: Aggregate Everything into the Final Table (Python Script)

This updated Python script will:

  1. Parse seqkit and checkm2 outputs.
  2. Directly parse the PGAP COMMENT block from your .gb files to extract Coverage, Genes, CDS, tRNAs, and rRNAs.
  3. Estimate the “Total number of reads sequenced” based on the formula: Reads = (Coverage × Genome Size) / (2 × Read_Length). (Assumes 150bp paired-end reads. Adjust READ_LENGTH in the script if your sequencing was 250bp).

Save the following code as generate_table_from_gb.py and run it:

import os
import re
import pandas as pd

# 1. Map your specific filenames (adjust extensions if they differ in your folder)
files = {
    "Wildtype": {
        "fna": "A6WT_chr_plasmids.fna",
        "gb": "A6WT_chr_plasmids.bgpipe.output_2799988.gb" # Adjust suffix if needed
    },
    "ΔadeAB": {
        "fna": "adeAB_chr_plasmids.fna",
        "gb": "adeAB_chr_plasmids.bgpipe.output_1954487.gb"
    },
    "ΔadeIJ": {
        "fna": "adeIJ_chr_plasmids.fna",
        "gb": "adeIJ_chr_plasmids.bgpipe.output_2028963.gb"
    },
    "ΔcraA": {
        "fna": "A10CraA_chr_plasmids.fna",
        "gb": "A10CraA_chr_plasmids.bgpipe.output_1118303.gb"
    }
}

# Initialize table structure
metrics_list = [
    "Genome size (bp)", "Contig count", "Total number of reads sequenced", 
    "Coverage depth (sequencing depth)", "Coarse consistency (%)", "Fine consistency (%)",
    "Completeness (%)", "Contamination (%)", "Contigs N50 (bp)", "Contigs L50", 
    "Guanine-cytosine content (%)", "Number of genes", "Number of coding sequences (CDSs)", 
    "Number of tRNAs", "Number of rRNAs"
]
data = {metric: ["N/A"] * 4 for metric in metrics_list}
data["Metrics"] = metrics_list

def parse_gb_file(gb_path):
    """Extract annotation metrics directly from PGAP GenBank COMMENT block."""
    if not os.path.exists(gb_path):
        # Fallback: try to find any .gb file matching the base name
        base = os.path.basename(gb_path).split('.bgpipe')[0]
        matches = [f for f in os.listdir('.') if f.startswith(base) and f.endswith('.gb')]
        gb_path = matches[0] if matches else gb_path

    if not os.path.exists(gb_path):
        return None

    with open(gb_path, 'r', encoding='utf-8') as f:
        content = f.read()

    # Extract Coverage (e.g., "Genome Coverage        :: 360x")
    cov_match = re.search(r'Genome Coverage\s+::\s+([\d.]+)x', content)
    coverage = cov_match.group(1) if cov_match else 'N/A'

    # Extract Genes (total)
    genes_match = re.search(r'Genes \(total\)\s+::\s+([\d,]+)', content)
    genes = genes_match.group(1).replace(',', '') if genes_match else 'N/A'

    # Extract CDSs (total)
    cds_match = re.search(r'CDSs \(total\)\s+::\s+([\d,]+)', content)
    cds = cds_match.group(1).replace(',', '') if cds_match else 'N/A'

    # Extract tRNAs
    trna_match = re.search(r'tRNAs\s+::\s+([\d,]+)', content)
    trna = trna_match.group(1).replace(',', '') if trna_match else 'N/A'

    # Extract rRNAs (e.g., "1, 1, 1 (5S, 16S, 23S)" -> count the numbers)
    rrna_match = re.search(r'rRNAs\s+::\s+([\d,\s]+)', content)
    if rrna_match:
        rrna_str = rrna_match.group(1).strip()
        rrna_count = sum(1 for x in rrna_str.split(',') if x.strip().isdigit())
        rrna = str(rrna_count)
    else:
        rrna = 'N/A'

    return coverage, genes, cds, trna, rrna

# 2. Parse seqkit stats
if os.path.exists("assembly_stats.tsv"):
    with open("assembly_stats.tsv", "r") as f:
        lines = f.readlines()
        for line in lines[1:]:
            parts = line.strip().split("\t")
            fname = parts[0]

            # Find which strain this file belongs to
            target_strain = None
            for strain, paths in files.items():
                if paths["fna"] in fname or fname.endswith(paths["fna"]):
                    target_strain = strain
                    break

            if target_strain:
                idx = list(files.keys()).index(target_strain)
                data["Genome size (bp)"][idx] = parts[4]       # sum_len
                data["Contig count"][idx] = parts[3]           # num_seqs
                data["Contigs N50 (bp)"][idx] = parts[12]      # N50
                data["Contigs L50"][idx] = parts[13]           # L50
                data["Guanine-cytosine content (%)"][idx] = parts[14].replace("%", "")

# 3. Parse CheckM2
if os.path.exists("checkm2_out/quality_report.tsv"):
    with open("checkm2_out/quality_report.tsv", "r") as f:
        lines = f.readlines()
        header = lines[0].strip().split("\t")
        comp_idx = header.index("Completeness")
        cont_idx = header.index("Contamination")

        for line in lines[1:]:
            parts = line.strip().split("\t")
            fname = parts[0]

            target_strain = None
            for strain, paths in files.items():
                if paths["fna"] in fname or fname.endswith(paths["fna"]):
                    target_strain = strain
                    break

            if target_strain:
                idx = list(files.keys()).index(target_strain)
                data["Completeness (%)"][idx] = parts[comp_idx]
                data["Contamination (%)"][idx] = parts[cont_idx]

# 4. Parse GenBank files & Estimate Reads
READ_LENGTH = 150  # Change to 250 if you used Illumina 2x250bp sequencing

for strain, paths in files.items():
    idx = list(files.keys()).index(strain)
    gb_data = parse_gb_file(paths["gb"])

    if gb_data:
        coverage, genes, cds, trna, rrna = gb_data
        data["Coverage depth (sequencing depth)"][idx] = f"{coverage}x"
        data["Number of genes"][idx] = genes
        data["Number of coding sequences (CDSs)"][idx] = cds
        data["Number of tRNAs"][idx] = trna
        data["Number of rRNAs"][idx] = rrna

        # Estimate Total Reads: (Coverage * Genome Size) / (2 * Read Length)
        try:
            cov_val = float(coverage)
            genome_size = int(data["Genome size (bp)"][idx].replace(',', ''))
            estimated_reads = int((cov_val * genome_size) / (2 * READ_LENGTH))
            data["Total number of reads sequenced"][idx] = f"~{estimated_reads:,}"
        except (ValueError, TypeError):
            data["Total number of reads sequenced"][idx] = "N/A (Check FASTQ)"

# 5. Output the table
df = pd.DataFrame(data)
print(df.to_markdown(index=False))

# Save to TSV for easy copy-pasting into Word/Excel
df.to_csv("final_genome_table.tsv", sep="\t", index=False)
print("\n✅ Table successfully saved to final_genome_table.tsv")

Run the script:

python3 generate_table_from_gb.py

How to handle the remaining blanks:

  1. Coarse consistency (%) & Fine consistency (%): Leave these as N/A or add a footnote to your manuscript table stating: “Calculated via BV-BRC EvalCon tool; not available via local CLI.” (As noted previously, these are proprietary BV-BRC machine-learning metrics).
  2. Total number of reads sequenced: The script provides a highly accurate estimate (~X,XXX,XXX) based on the PGAP coverage and genome size. If your journal requires the exact raw read count, you can get it by running: zcat your_raw_R1.fastq.gz | echo $(( $(wc -l) / 4 )) and adding R1 + R2 together. However, the estimated value is usually perfectly acceptable for “Summary of sequence data” tables when derived from the assembler’s reported coverage.

Why this is much better:

  • No redundant annotation: Skipping Prokka saves hours of compute time and avoids discrepancies between Prokka and NCBI PGAP counts.
  • Direct extraction: Pulling straight from the PGAP COMMENT block guarantees the numbers in your table perfectly match the metadata of the files you are submitting to NCBI.


You are absolutely right to be cautious. The “Genome Coverage” reported in the PGAP GenBank comment is often an estimate provided by the submitter or the assembler, and it may not reflect the exact, post-mapping average depth.

Here is how you can calculate the exact coverage from your mapping files, followed by the crucial truth about calculating Coarse and Fine Consistency.


Part 1: How to Calculate Exact Coverage

The most accurate way to calculate coverage is from the mapping file (BAM), not the raw FASTQ. If you aligned your raw reads to your assembled .fna files, you already have (or can easily generate) a BAM file.

Option A: From a BAM file (Highly Recommended, Most Accurate)

We will use mosdepth, which is the modern, ultra-fast standard for calculating sequencing depth.

# 1. Install mosdepth (if not already installed)
conda install -c bioconda mosdepth -y

# 2. Calculate coverage for each genome
# Assuming you have a BAM file for each assembly (e.g., A6WT_mapped.bam)
# Replace 'genome.fna' and 'mapped.bam' with your actual filenames

for bam in *.bam; do
    prefix=$(basename "$bam" .bam)
    echo "Calculating coverage for $prefix..."

    # -n means no per-base depth (much faster), -t is threads
    mosdepth -n -t 4 "${prefix}_cov" genome.fna "$bam"

    # Extract the mean coverage from the global distribution file
    # The file looks like: length  bases   mean    min     max
    mean_cov=$(awk 'NR==2 {print $3}' "${prefix}_cov.global.dist.txt")
    echo "Mean Coverage for $prefix: ${mean_cov}x"
done

(Note: If you don’t have BAM files yet, you can generate them quickly using minimap2 and samtools: minimap2 -ax sr genome.fna reads_R1.fq.gz reads_R2.fq.gz | samtools sort -o mapped.bam)

Option B: From Raw FASTQ files (Estimation Only)

If you do not have BAM files and only have the raw FASTQ files, you can calculate a highly accurate estimate based on total sequenced bases divided by genome size.

# Run this in the directory containing your .fna and .fastq.gz files
# Adjust READ_LENGTH if your sequencing was 2x250bp instead of 2x150bp
READ_LENGTH=150 

for fna in *.fna; do
    prefix=$(basename "$fna" .fna)

    # Get genome size from seqkit
    genome_size=$(seqkit stats "$fna" | awk 'NR==2 {print $5}')

    # Find corresponding FASTQ files (ADJUST THESE PATTERNS to match your actual file names!)
    # Example: A6WT_R1.fastq.gz and A6WT_R2.fastq.gz
    R1="${prefix}_R1.fastq.gz"
    R2="${prefix}_R2.fastq.gz"

    if [[ -f "$R1" && -f "$R2" ]]; then
        # Count total lines in both files, divide by 4 to get total read pairs, multiply by 2 for total reads
        total_reads=$(zcat "$R1" "$R2" | wc -l)
        total_reads=$(( total_reads / 4 )) 

        # Calculate coverage: (Total Reads * Read Length) / Genome Size
        coverage=$(echo "scale=2; ($total_reads * $READ_LENGTH) / $genome_size" | bc)
        echo "$prefix: Estimated Coverage = ${coverage}x (Genome size: $genome_size bp, Total reads: $total_reads)"
    else
        echo "Warning: Could not find FASTQ files for $prefix. Please adjust the R1/R2 naming pattern in the script."
    fi
done

Part 2: The Truth About “Coarse Consistency” and “Fine Consistency”

You cannot calculate “Coarse Consistency” and “Fine Consistency” using standard local Ubuntu command-line tools.

As stated in your manuscript footnote, these are proprietary metrics generated exclusively by the BV-BRC (Bacterial and Viral Bioinformatics Resource Center) platform using their EvalCon tool. This tool relies on a proprietary, machine-learning-derived catalog of ~1,300 functional roles with predictable relationships that is hosted on their servers. There is no open-source, standalone CLI equivalent (like CheckM or BUSCO) that outputs these exact two named metrics.

How to get these metrics (Your 2 Options):

Option 1: The BV-BRC Web Interface (Easiest & Recommended)

  1. Go to https://www.bv-brc.org/ and log in.
  2. Go to Services -> Genome Annotation -> Annotate Genome (or “Genome Evaluation”).
  3. Upload your 4 .fna files.
  4. Select the appropriate taxonomy (e.g., Acinetobacter baumannii ATCC 19606).
  5. Run the job. Once complete, open the results table. It will explicitly list columns for “Coarse Consistency” and “Fine Consistency”.
  6. Copy these 4 values directly into your manuscript table.

Option 2: BV-BRC Command Line Interface (If you absolutely must automate it) BV-BRC does have a CLI, but it requires setting up an API key.

# 1. Install the BV-BRC CLI (requires Node.js)
npm install -g @bvr/cli

# 2. Login to get your token (you will be prompted for your BV-BRC credentials)
bvr login

# 3. Submit a genome evaluation job (example for one file)
# This submits the job to their cloud servers
bvr submit genome-evaluation --input A6WT_chr_plasmids.fna --output eval_A6WT

# 4. Check job status and download results
bvr job-status 
<JOB_ID>
bvr download 
<JOB_ID> --output eval_A6WT_results.tsv

# 5. Extract the specific columns from the downloaded TSV
awk -F'\t' 'NR==1 {for(i=1;i<=NF;i++) if($i=="Coarse Consistency" || $i=="Fine Consistency") print i}' eval_A6WT_results.tsv

(Note: Option 1 is vastly simpler for just 4 genomes).


Part 3: The Local Alternative (If the journal allows it)

If your co-authors or the journal decide that relying on a web platform for two metrics is inconvenient, the universally accepted local command-line alternative for assessing genome annotation consistency and completeness is BUSCO (Benchmarking Universal Single-Copy Orthologs).

While it doesn’t use the terms “coarse/fine consistency”, it provides “Complete (Single/Copy)”, “Fragmented”, and “Missing” percentages, which reviewers universally accept as the gold standard for genome quality.

# 1. Install BUSCO
conda install -c bioconda busco -y

# 2. Run BUSCO on your assemblies (using the bacteria_odb10 lineage)
# -m geno means genome mode, -c is threads
for fna in *.fna; do
    prefix=$(basename "$fna" .fna)
    busco -i "$fna" -o busco_${prefix} -l bacteria_odb10 -m genome -c 4 --auto-lineage-euk
done

# 3. View the short summary which contains the consistency/completeness metrics
cat busco_A6WT_chr_plasmids/short_summary.specific.bacteria_odb10.A6WT_chr_plasmids.txt

Summary Recommendation for Your Table:

  1. Use mosdepth (Part 1, Option A) to get the exact, defensible Coverage depth.
  2. For Coarse/Fine Consistency, either quickly run the 4 files through the BV-BRC web portal (takes 5 minutes) to get the exact numbers requested by your footnote, OR replace those two rows with BUSCO Complete (%) and BUSCO Missing (%) and update the footnote to cite BUSCO instead of BV-BRC EvalCon.

Guide: Submitting 16S rRNA Amplicon Sequencing Data to NCBI (SRA & GEO)

For 16S rRNA amplicon sequencing data, you should submit your raw data to the Sequence Read Archive (SRA), organized under a BioProject and linked to individual BioSamples.

You should not submit raw 16S sequencing data primarily to GEO (Gene Expression Omnibus).

Here is a breakdown of why, how the NCBI submission hierarchy works, and how to correctly link your data if processed files are also required by the journal.


1. Why SRA and not GEO for Raw Data?

  • SRA (Sequence Read Archive) is the official NCBI repository for raw high-throughput sequencing reads, including 16S rRNA amplicon data (FASTQ files). NCBI guidelines and most scientific journals explicitly require raw microbiome sequencing data to be deposited here.
  • GEO is designed primarily for functional genomics data (e.g., RNA-Seq, microarrays, ChIP-Seq, ATAC-Seq) where the focus is on gene expression or epigenetic profiles. While researchers occasionally upload processed microbiome data (like an OTU/ASV count table) to GEO as a supplementary dataset, the raw sequencing files belong in SRA.

2. The Correct NCBI Submission Hierarchy

When you submit, you will build the submission in this exact order:

  1. BioProject (The Umbrella)

    • What it is: The overarching description of your entire study.
    • What you provide: Project title (e.g., “Sex-specific gut microbiota and IL-17A response in aged mice after experimental stroke”), study type (Metagenomics or Amplicon), and a brief abstract. This generates a PRJNAxxxxxx accession number.
  2. BioSample (The Biological Source)

    • What it is: A record for each individual biological sample you are submitting (e.g., Sample A1, Sample C3, Sample J10).
    • What you provide: Metadata describing the mouse (e.g., organism: Mus musculus, age: 14-16 months, sex: male/female, tissue: feces, treatment group: post-stroke, pre-FMT, etc.). This generates a SAMNxxxxxx accession number for each sample.
  3. SRA (The Sequencing Data)

    • What it is: The actual raw data files and sequencing metadata.
    • What you provide: You will upload your demultiplexed FASTQ files (or a tarball of them) and link each file to its corresponding BioSample. You will also specify the sequencing platform (e.g., Illumina MiSeq), library strategy (AMPLICON), and target gene (16S rRNA). This generates an SRRxxxxxx (or ERR/DRR) accession number for each run.

3. The Two-Step Strategy: Linking SRA Raw Data to GEO Processed Data

If the target journal require you to also submit processed data (e.g., the final OTU/ASV abundance table used to generate Figures 4 and 5) to GEO, NCBI provides a streamlined workflow to avoid duplicate uploads.

GEO submissions require a metadata spreadsheet. Metadata refers to descriptive information about the overall study, individual samples, all protocols, and references to processed and raw data file names. Information is supplied by completing all fields of a metadata template spreadsheet (guidelines are provided within the file).

💡 Important: Provide enough details so that users can get a general understanding of the study and samples from the GEO records. Please spell out all acronyms and abbreviations. Submit a separate metadata spreadsheet for each data type.

Have you already submitted raw data to SRA and now want to submit to GEO?

If you already have your raw data in SRA, you do not need to submit it again to GEO. NCBI only needs the processed data and a specialized metadata file in order to create GEO records and link them to your raw data records previously submitted to SRA.

To do this, you must choose the second option in the GEO submission portal: 👉 “Download metadata spreadsheet with SRA accessions”

  • What you need to do: You will need to enter the PRJNA, SAMN, and SRX or SRR accession numbers for all samples with raw data already submitted to SRA.
  • Where to find this: You can get this information for your SUB ID on the NCBI Submission Portal page after your SRA submission is initiated.

4. Actionable Next Steps & Summary Workflow

  1. Finalize the sample list with your co-authors (confirming Groups 1–11 and excluding Groups 12–14 and the 2022 legacy data).
  2. Prepare a Metadata Spreadsheet: Use the NCBI template. You will need one row per sample (e.g., A1, A2… B1, B2…) with columns for: sample_name, bioSample_model (mouse), sex, age, tissue (feces), collection_date, and treatment (e.g., “post-stroke day 3”, “pre-FMT baseline”).
  3. Step 1: Submit to SRA First: Go to the NCBI SRA Submission Wizard (https://submit.ncbi.nlm.nih.gov/). Create the BioProject, batch-upload the BioSample metadata, and upload the raw FASTQ files. Save your generated PRJNA, SAMN, and SRR numbers.
  4. Step 2: Submit Processed Data to GEO: Go to the GEO submission portal. Choose the option to “Download metadata spreadsheet with SRA accessions”. Fill it out with your processed data file names and the SRA accession numbers you just generated. Upload this to link everything together.

Pro Tip: If the journal is flexible, processed data can often just be included as a Supplementary File (e.g., a .csv or .xlsx file) with the manuscript, or deposited in a repository like Figshare or Zenodo. However, if GEO is explicitly requested, the two-step SRA-first workflow above is the correct and most efficient method.

TODOs: drafting the BioProject abstract and formatting the BioSample metadata spreadsheet!



I am organizing the 16S rRNA sequencing data for deposition in the NCBI Sequence Read Archive (SRA).

Because only a subset of the sequenced samples was ultimately used in the final manuscript figures, I have compiled an exact list of the specific samples to be submitted. I want to ensure our public dataset perfectly aligns with the content of the manuscript.

Here is the exact list of samples I will upload to NCBI, mapped to the manuscript figures. Could you please confirm that they are correct?

1. Stroke Model Groups (Used in Fig. 4D–F for blood/brain SCFA)

  • Group 1 (Aged ♂, Post-stroke): Submitting A1–A11
  • Group 2 (Aged ♀, Post-stroke): Submitting B1–B16

2. Baseline Donor Groups (Used in Fig. 4A–C, Supp. Fig. 4, Fig. 5C)

  • Group 3 (Aged ♀ FMT Donor): Submitting C1–C6 (n=6).
    • Excluded: C7–C10 (C8–C9 excluded due to age; C10 excluded as an outlier/low sequencing depth).
  • Group 4 (Aged ♂ FMT Donor): Submitting E1–E8 (n=8).
    • Excluded: E9–E10 (low sequencing depth/outliers).
  • Group 5 (Young ♂ Control Donor): Submitting F1–F5 (Control, not shown in main figures).

3. Pre-FMT Baseline Groups (Used in Fig. 5B as purple dots, n=18 total)

  • Group 6 (Aged ♂, Pre-FMT): Submitting G1–G6
  • Group 7 (Aged ♀, Pre-FMT): Submitting H1–H6
  • Group 8 (Young ♂, Pre-FMT): Submitting I1–I6

4. FMT Recipient Groups (Used in Fig. 5B, 5C, 5D, 5E)

  • Group 9 (Young ♂ recipient, Aged ♂ donor): Submitting J1–J4, J10, J11 (n=6).
    • Excluded: J5–J9 (insufficient sequencing depth/QC exclusion).
  • Group 10 (Young ♂ recipient, Aged ♀ donor): Submitting K1–K6 (n=6).
    • Excluded: K7–K15 (insufficient sequencing depth/QC exclusion).
  • Group 11 (Young ♂ recipient, Young ♂ donor): Submitting L2–L6 (n=5).
    • Excluded: L1, L7–L15 (insufficient sequencing depth/QC exclusion).

Points for Your Final Confirmation:

  1. Exclusion of Groups 12, 13, and 14 (Samples M, N, O), as well as Group 5, since they are not shown in the final manuscript.
  2. Exclusion of the 2022 Legacy Dataset: I also identified an older sequencing run from 2022 (containing samples labeled Group 1 to Group 8, covering f.aged, f.young, m.aged, and m.young in pre/post-stroke conditions). Since this dataset is from an earlier pilot phase and is not referenced or utilized in the current manuscript, I assume we should NOT submit this 2022 data as part of this paper’s NCBI submission. Could you please confirm if this is correct?

聪明生活经济学:财务自由的人都有一个共同点

这个陷阱在纪录片中得到了解决方法。

  1. 情绪消费的代价

很多人以为贫穷是因为赚得少,但这四个人里,泰兹赚得并不少,金夫妇的收入也过了中位数。

他们贫穷的根源在于情绪消费。

安娜用购物填补童年的空洞,琳赛用美食犒劳辛苦的自己,金夫妇用昂贵的玩具表达对孩子的爱,弥补陪伴的不足。

在消费主义盛行的时代,商家最擅长的就是把「商品」和「幸福」划等号。我们买的不是东西,而是那一瞬间的多巴胺。

然而,多巴胺消退后,留下的只有账单和空虚。

  1. 隐形通胀杀手

另一个看不见的敌人是通胀。专家告诉泰兹,把钱单纯存在银行里是不安全的,专家建议他将一部分积蓄定期投入标普500指数基金。

泰兹听从了建议,他的资产不仅保全了,还实现了大幅增值。反之,如果他仅仅持有现金,购买力已经被通胀侵蚀了大半。

  1. 家庭财务观的代际传递

金夫妇为了表达爱意,花了很多钱给孩子买玩具,但孩子在这样的环境中长大,会自然而然地认为「钱是用来花的」「想要就必须马上得到」。财务观念的缺失,比一时贫穷更可怕。

即便「提前退休」似乎很难实现,但他们采用了「迷你退休」。一年中某一段时间,推掉所有工作,一家人在一起度假,孩子们也不再需要更多玩具。

在理财专家介入后,这四组人的生活发生了变化。

琳赛辞去了那份消耗她精力的服务工作,她开始一边摆地摊卖宠物主题的画作,一边帮人遛狗。虽然收入不稳定,但她有了更多时间创作。「做梦钱」账户数字的增加,给了琳赛更多安全感,她甚至有余力去做心理咨询,处理内心的焦虑。

泰兹开始正视自己的财务状况。他严格控制开支,系统性地学习理财知识。虽然因为伤病无法重返巅峰,但他利用运动员时期的积蓄进行了稳健投资。

亚莉安娜把债务进行排序了:先还利率最高的卡,再往下滚,不让利息吃掉还款进度。一年后,她的卡债逐渐被有序还清,开始有里应急金和一点存款。

金夫妇开始记录自己的每一笔开销。他们惊讶地发现,仅仅是减少外出就餐和停止购买不必要的玩具,每个月就能省下2000美元。

他们不再是金钱的奴隶,而是成为了自己生活的主人。

结语

前段时间我去越南旅行。

因为电子支付不普及,我换了大量的越南盾现金。当地最大面额是50万盾,约合人民币128元。

我体验到了久违的「花钱如流水」的感觉。手里厚厚的钞票变薄,「肉疼」的感觉非常直观。即便越南物价低廉,我依然觉得钱花得太快了。

一回到国内,打开手机里的支付宝和微信,那种痛感消失了。短短一周,我在网上的消费已经远超在越南的开支。

我意识到,电子支付剥离了「钱」的物理属性,让消费变成数字,极大地降低了我们的痛感阈值。

基于此,我想给大家几点具体的建议:

先看水流,再看水源

如果你的池子到处是漏洞,注入再多水也会流干。先花一个月时间记账,看清钱的流向,你会发现至少30%的开销是不必要的。

建立物理隔离

发工资的第一时间,先划出“储蓄”和“投资”的部分,剩下的才是生活费。千万不要把所有钱放在一个活期账户里任由支配。

警惕小额高频消费

每天一杯35元的咖啡,一年就是一万多;路过便利店买个零食,一年又是几千。养成记账的习惯,只有看见,才能改变。

财务自由并不只是关于钱,它是关于选择,关于自由,关于能否掌控自己的生活。那些被我们忽视的——开源、节流、投资——就是生活的本身。

AirPods Pro 2 具備完整的聽力健康功能

三款 AirPods 比較表

特色功能 AirPods 4 (一般款) AirPods 4 (主動降噪款) AirPods Pro 2
推出時間 2024年9月 2024年9月 2022年9月
佩戴設計 半開放式,無耳塞 半開放式,無耳塞 入耳式,附矽膠耳塞
晶片 H2 晶片 H2 晶片 H2 晶片
主動降噪 (ANC) 有(效果約為Pro 2的一半) 有(頂級降噪效果)
通透模式
適應式音訊
對話感知
聽力健康功能 (聽力測試、助聽器功能、降低高音量)
單次續航 (ANC開啟) 最長5小時 最長4小時 最長6小時
搭配充電盒總續航 最長30小時 最長30小時 超過24小時
充電盒功能 USB-C充電,無無線充電 USB-C充電,支援無線充電,內建揚聲器支援尋找功能 MagSafe充電盒(USB-C),支援無線充電,內建揚聲器與U1晶片支援精確尋找,有掛繩孔
抗汗抗水 IP54 (防塵抗水) IP54 (防塵抗水) IP54 (防塵抗水)

✅ 關於 AirPods Pro 與聽力健康功能的解答

在目前三款產品中,只有 AirPods Pro 2 具備完整的聽力健康功能**。

具體包含以下三個面向:

  1. 聽力測試 (Hearing Test):使用者可以在家中透過 iPhone 或 iPad 進行經過臨床驗證的聽力測試,約5分鐘即可完成,結果會儲存在「健康」App 中。
  2. 助聽器功能 (Hearing Aid):若測試結果顯示有輕度至中度聽力損失,AirPods Pro 2 可以作為臨床級的非處方助聽器使用,即時放大環境聲音,並針對使用者個人聽力圖進行動態調整。
  3. 降低高音量 (Hearing Protection):在通透模式或適應性音訊模式下,能主動降低環境中的高音量噪音,保護使用者的聽力。

🔍 注意事項

  • 這個「聽力健康功能」是透過 2024年秋季的免費軟體更新 (iOS 18.1 搭配特定韌體版本) 提供給 AirPods Pro 2 使用的,並非一開始就內建的功能。
  • 此功能為 AirPods Pro 2 和更新型號 (如未來推出的 AirPods Pro 3) 的專屬功能,不支援任何一代 AirPods 4

🆕 哪一款是「最新」的?

答案是:AirPods 4 是最新款。

  • AirPods 4(一般款與降噪款):於 2024年9月 發布,是蘋果目前最新推出的 AirPods 機型。
  • AirPods Pro 2:雖然於 2022年9月 發布,但透過持續的軟體更新(如聽力健康功能),它依然是功能最強大的旗艦款。

🎯 結論

簡單來說:

  1. AirPods 4 是「最新」的產品,主打舒適與功能的平衡,尤其是降噪款在不塞入耳道的設計下提供了令人驚豔的降噪效果。
  2. AirPods Pro 2 雖然推出較早,但它是唯一擁有完整「聽力健康功能」的型號,在聽力保護與輔助這塊獨佔鰲頭。如果你對這項功能有需求,AirPods Pro 2 是目前唯一的選擇。

Used and submitted samples (Manuscript_Marius_Karoline_2026)

分析脚本与论文图表的映射

🔹 Group3 vs Group4 分析

脚本MicrobiotaProcess_PCA_Group3-4.R
对应图表:论文 图 4A–C

图号 内容 分析方法
4A 实验设计示意图
4B PCoA 图(Bray-Curtis 距离) mp_cal_pcoa() + mp_plot_ord()
4C 差异丰度 OTU 气泡图 DESeq2 + 气泡图可视化

该分析比较的是老年雄性 vs 老年雌性小鼠的稳态肠道微生物组成


🔹 Group9_10_11 vs pre-FMT 分析

脚本MicrobiotaProcess_Group9_10_11_PreFMT.R + Phyloseq_Group9_10_11_pre-FMT.Rmd
对应图表:论文 图 5B、5C、5D、5E

图号 内容 分析方法
5B FMT 后受体小鼠的 PCoA 图 mp_cal_pcoa() + mp_plot_ord()
5C 科水平相对丰度堆叠图 mp_plot_abundance(taxa.class = Class)
5D 差异丰度 OTU 气泡图(FMT 组间比较) DESeq2/LEfSe + 气泡图
5E 脑内 IL-17A⁺ γδ T 细胞流式定量 流式细胞术 + 统计检验

该分析验证粪便微生物移植(FMT)对年轻受体小鼠卒中后免疫反应的影响


✅ 关键分析要点确认

  1. 距离矩阵:均使用 Bray-Curtis + Hellinger 转换
  2. 统计检验:PERMANOVA (mp_adonis) + 事后两两比较
  3. 可视化mp_plot_ord 用于序贯图,mp_plot_abundance 用于组成图
  4. 输出格式:PNG/PDF/SVG 多格式保存,便于论文投稿

  • 🔍 检查某段代码的逻辑或参数设置?
  • 📊 解释某个统计结果(如 PERMANOVA 的 R²、p 值)?
  • 🎨 优化图表的美学参数(颜色、字体、图例)?
  • 📝 撰写方法部分或图注的英文描述?


🐭 实验小鼠组别详解(中文版)

以下是本研究中使用的全部 14 个实验组别的详细说明,按功能分类整理:


🔹 第一类:中风模型组(用于图 4 和补充图 3)

组号 样本前缀 完整样本 性别/年龄 状态 用途
1 sample-A* A1–A11 ♂ 老年 中风后 3 天 图 4D–F(血液/脑组织 SCFA 检测)
2 sample-B* B1–B16 ♀ 老年 中风后 3 天 图 4D–F(血液/脑组织 SCFA 检测)

📌 说明:这两组用于比较中风后老年雄性和雌性小鼠的微生物代谢物(短链脂肪酸)水平差异。


🔹 第二类:基线供体组(用于图 4、补充图 4、图 5C)

组号 样本前缀 完整样本 性别/年龄 状态 用途
3 sample-C* C1–C10 ♀ 老年 基线,FMT 供体 图 4A–C(16S 测序)、补充图 4、图 5C(Boxplot 3)
4 sample-E* E1–E10 ♂ 老年 基线,FMT 供体 图 4A–C(16S 测序)、补充图 4、图 5C(Boxplot 2)
5 sample-F* F1–F5 ♂ 年轻 基线,FMT 供体 对照供体,未在主图中展示

📌 关键说明

  • 组 3 和组 4 是粪菌移植(FMT)的供体小鼠,用于提供老年雌/雄肠道菌群
  • 图 4 和补充图 4 中实际使用的样本为:♀供体 C1–C6(n=6),♂供体 E1–E8(n=8),其余样本因年龄偏小或测序深度不足被排除

🔹 第三类:FMT 预处理组(用于图 5B 紫色点)

组号 样本前缀 完整样本 性别/年龄 状态 用途
6 sample-G* G1–G6 ♂ 老年 FMT 前,抗生素处理前,批次 I 图 5B(紫色,pre-FMT 基线)
7 sample-H* H1–H6 ♀ 老年 FMT 前,抗生素处理前,批次 I 图 5B(紫色,pre-FMT 基线)
8 sample-I* I1–I6 ♂ 年轻 FMT 前,抗生素处理前,批次 II 图 5B(紫色,pre-FMT 基线)

📌 说明:这三组合并为”pre-FMT”基线组(n=18),代表年轻雄性受体小鼠在接受粪菌移植之前的肠道菌群状态。


🔹 第四类:FMT 受体组(用于图 5)

组号 样本前缀 完整样本 性别/年龄 接受供体 状态 用途
9 sample-J* J1–J4, J10, J11 ♂ 年轻 老年♂供体 FMT 后,中风前 图 5B🔵、5C(Boxplot 4)、5D、5E
10 sample-K* K1–K6 ♂ 年轻 老年♀供体 FMT 后,中风前 图 5B🔴、5C(Boxplot 5)、5D、5E
11 sample-L* L2–L6 ♂ 年轻 年轻♂供体 FMT 后,中风前 图 5B🟢、5E(对照)

📌 关键说明

  • 所有受体均为年轻雄性小鼠,仅供体来源不同
  • “aged♂ FMT” = 接受老年雄性供体粪便的年轻受体(不是受体本身是老年!)
  • 图 5C 的 5 个箱线图 = pre-FMT 基线 + 2 个供体组 + 2 个受体组(不含年轻♂供体受体组

🔹 第五类:FMT + 中风后组(未在主图展示)

组号 样本前缀 完整样本 性别/年龄 接受供体 状态 用途
12 sample-M* M1–M8 ♂ 老年 老年♂供体 FMT 后,中风后 补充分析
13 sample-N* N1–N10 ♀ 老年 老年♀供体 FMT 后,中风后 补充分析
14 sample-O* O1–O8 ♂ 年轻 年轻♂供体 FMT 后,中风后 补充分析

📌 说明:这三组用于探索性分析,未出现在主论文图表中。


🧭 快速记忆口诀

✅ "FMT 标签 = 供体特征,不是受体特征"
   • aged♂ FMT = 供体是老年雄性
   • 受体永远是年轻雄性(本实验设计)

✅ 图 4 = 老年供体(组 3/4)+ 老年中风小鼠(组 1/2)
✅ 图 5 = FMT 实验:受体(组 6–11)+ 供体(组 3/4)
✅ 补充图 4 = 仅老年供体(组 3/4,筛选后 C1–C6, E1–E8)

⚠️ 样本排除说明

组别 排除样本 排除原因
组 3(♀供体) C7, C8, C9, C10 C8–C9 年龄偏小;C10 为离群值/测序深度低
组 4(♂供体) E9, E10 测序深度低/离群值
组 9(受体) J5, J6, J7, J8, J9 测序深度不足或质量控制排除
组 10(受体) K7–K15 测序深度不足或质量控制排除
组 11(受体) L1, L7–L15 测序深度不足或质量控制排除

📌 最终用于分析的样本数以各图图例标注为准(如:图 5 中 aged♂ FMT n=6, aged♀ FMT n=6)


TODO: 导出完整的样本–组别映射 CSV 文件,or 提供某张图的精确样本列表🎯



关于 “aged♂ FMT” 的明确解释

aged♂ FMT = 接受了老年雄性供体粪便的年轻雄性受体小鼠


🔹 实验设计核心逻辑

角色 年龄/性别 说明
受体(接受粪便) 🐭 年轻雄性(4周龄起始) 所有 FMT 组的受体都是相同的年轻雄性小鼠
供体(提供粪便) 🐭 老年雄性 / 老年雌性 / 年轻雄性 供体的年龄/性别是实验变量

🔹 样本分组详解

🟣 Purple (pre-FMT, n=18): G1–G6, H1–H6, I1–I6
   → FMT前的基线年轻雄性小鼠(未接受移植)

🔵 Blue (aged♂ FMT, n=6): J1, J2, J3, J4, J10, J11
   → 年轻雄性受体 + 接受【老年雄性】供体粪便

🔴 Red (aged♀ FMT, n=6): K1–K6
   → 年轻雄性受体 + 接受【老年雌性】供体粪便

🟢 Green (young♂ FMT, n=5): L2–L6
   → 年轻雄性受体 + 接受【年轻雄性】供体粪便(对照组)

🔹 文献依据

来自 260311_LTPaper.pdf Figure 5 图例:

“Principal coordinates analysis (PCoA) of young male mice before (purple) (n=18), and after FMT of aged male (n=6) (blue) or female (n=6) (red) or young male (n=5) (green) stool donors.”

→ 明确说明分析对象是 young male mice,括号内描述的是 stool donors(粪便供体)的特征。

来自 Supplemental Methods “Microbiota eradication and FMT”:

“4 weeks old male mice were treated for 2 weeks with an antibiotic cocktail… recipient mice were gavaged with donor stool four times over two weeks.”

→ 受体小鼠起始年龄为 4周龄(年轻)

Figure 5 小标题:

“FMT of aged male microbiota increases IL-17A-producing γδ T cells in the post-ischemic brain of young recipient mice

→ 再次确认受体是 young recipient mice


🔹 为什么这样设计?

这个实验的核心科学问题是:

“供体微生物的年龄/性别特征,能否通过移植’传递’给受体,并影响受体的免疫反应?”

通过保持受体一致(年轻雄性),仅改变供体来源,可以:

  1. 排除受体自身年龄/性别的混杂效应
  2. 直接评估供体微生物对受体免疫表型(如 IL-17A⁺ γδ T 细胞)的因果影响
  3. 验证”微生物介导的年龄/性别差异”假说

✅ 快速记忆口诀

“FMT 标签 = 供体特征,不是受体特征”

  • aged♂ FMT = 供体是老年雄性
  • 受体永远是年轻雄性(本实验中)


🔹 Figure 5B: PCoA of FMT Experiment

“Principal coordinates analysis (PCoA) of young male mice before (purple) (n=18), and after FMT of aged male (n=6) (blue) or female (n=6) (red) or young male (n=5) (green) stool donors.”

  • 🟣 Purple (pre-FMT, n=18): Groups 6+7+8 → G1–G6, H1–H6, I1–I6
  • 🔵 Blue (aged♂ FMT, n=6): Group9 → J1, J2, J3, J4, J10, J11
  • 🔴 Red (aged♀ FMT, n=6): Group10 → K1–K6
  • 🟢 Green (young♂ FMT, n=5): Group11 → L2–L6 (L1, L7–L15 excluded for low depth/QC)

🔹 Figure 5C=Figure 5B+C1-7+E1-10 (Need to be confirmed?): Family-Level Relative Abundance Boxplots (5 panels)

Based on your co-author’s note: “Figure 5C uses the Figure 5B recipient samples PLUS the aged donor samples (Groups 3 & 4).”

  • Boxplot 1 (pre-FMT baseline, n=18): Groups 6+7+8 → G1–G6, H1–H6, I1–I6
  • Boxplot 2 (aged♂ stool donors, n=8): Group4 → E1–E10
  • Boxplot 3 (aged♀ stool donors, n=6): Group3 → C1–C7
  • Boxplot 4 (aged♂ FMT recipients, n=6): Group9 → J1, J2, J3, J4, J10, J11
  • Boxplot 5 (aged♀ FMT recipients, n=6): Group10 → K1–K6
  • !!No Group11 (L2-L6)!!

⚠️ Key difference: Group11 (young♂ FMT recipients, L2–L6) is shown in Figure 5B but is NOT included in Figure 5C, since Figure 5C focuses on comparing the effect of aged donor microbiota.

🔹 Figure 5D: Bubble Plot of Differentially Abundant Taxa (DESeq2)

“Bubble plot showing differentially abundant Operational Taxonomic Units (OTUs) between young male recipients of aged female vs. aged male FMT. x-axis = log₂ fold change, y-axis = bacterial family, bubble size = adjusted p-value, color = bacterial order.”

  • 🔵 Aged♂ FMT recipients (Group9, n=6): J1, J2, J3, J4, J10, J11 → Reference group (log₂FC < 0 = enriched in this group)
  • 🔴 Aged♀ FMT recipients (Group10, n=6): K1–K6 → Comparison group (log₂FC > 0 = enriched in this group)
Key families highlighted in the plot: Direction Family (Order) Enriched in Biological note
🔴 Positive log₂FC Lachnospiraceae (Clostridiales) Aged♀ FMT SCFA producer
🔴 Positive log₂FC Ruminococcaceae (Clostridiales) Aged♀ FMT SCFA producer
🔴 Positive log₂FC Muribaculaceae (Bacteroidales) Aged♀ FMT SCFA producer
🔴 Positive log₂FC Desulfovibrionaceae (Desulfovibrionales) Aged♀ FMT Sulfate-reducing
🔵 Negative log₂FC Erysipelotrichaceae (Erysipelotrichales) Aged♂ FMT Pro-inflammatory association
🔵 Negative log₂FC Rikenellaceae (Bacteroidales) Aged♂ FMT Context-dependent
🔵 Negative log₂FC Clostridiales vadinBB60 group Aged♂ FMT Function unclear

⚠️ Note: This analysis uses DESeq2 on non-rarefied integer counts from ps_filt, with taxa prefiltered (total counts ≥10). Only taxa with Benjamini–Hochberg adjusted p < 0.05 are shown. The same ASVs/OTUs appear in Figure 4C and Supplementary Figure 4B, but Figure 5D specifically compares FMT recipient outcomes (Groups 9 vs. 10), not baseline donor differences.


🔹 Supplementary_Figure4=Figure4B-C: Aged Donors (Homeostatic)

“(A) Bray-Curtis distances between aged male-male, female-female and female-male stool samples under homeostatic conditions (nmale=8 and nfemale=6). (B) Cladogram showing differentially abundant OTUs…”

  • 👨 Aged male donors (n=8): Group4 → E1–E8 (E9, E10 excluded for low sequencing depth/outliers)
  • 👩 Aged female donors (n=6): Group3 → C1–C6 (C7–C10 excluded; C8–C9 younger mice, C10 outlier)

🔹 Figure 4B-C: Sex Differences in Aged Mice (16S rRNA-seq panels B–C)

“We profiled the gut bacterial composition of aged male and female mice by 16S rRNA-seq…”

  • Baseline aged female donors: Group3 → C1–C6
  • Baseline aged male donors: Group4 → E1–E8

(Note: Figure 4D–F show SCFA concentrations measured by targeted UHPLC-MS/MS, not 16S data.)


✅ PICRUSt2 NOT used in Figure 4D–F

Your observation is CORRECT: PICRUSt2 results are NOT used in Figure 4D–F.

Question Answer Evidence
Are PICRUSt2 results used in Figure 4? No Figure 4D–F legend explicitly states: “measured by targeted mass spectrometry”
Are PICRUSt2 results used anywhere in the manuscript? No evidence README_PICRUSt2.txt files contain exploratory pipeline notes, but no PICRUSt2 figures, tables, or text appear in 260311_LTPaper.pdf or 260310_Supplements.pdf
Is the SCFA data in Figure 4D–F experimentally measured? Yes Supplemental Methods (pages 12–13) describe UHPLC-MS/MS quantification with internal standards, derivatization, and MRM parameters

Key distinction:

  • PICRUSt2Predicts functional potential (gene/pathway abundances) from 16S sequences; outputs are relative, unitless values.
  • Figure 4D–FMeasures actual SCFA concentrations (acetate, butyrate, etc.) in µmol/l via targeted mass spectrometry; outputs are absolute, quantitative values.

Here is the merged quick reference table combining Figure 5B, 5C, and 5D with related figures, formatted for easy copy-paste:


🔹 Quick Reference: All Figure 5 Panels vs. Related Figures

Figure Comparison Sample IDs (exact) n Purpose
Figure 4B-C Aged♀ vs. aged♂ donors (homeostatic) C1–C6 vs. E1–E8 6 vs. 8 Baseline sex differences in microbiota (DESeq2 bubble plot)
Suppl Fig 4B Same as Fig 4C C1–C6 vs. E1–E8 6 vs. 8 Phylogenetic context of differential taxa (cladogram)
Figure 5B Pre-FMT vs. post-FMT recipients (4-group PCoA) G1–G6, H1–H6, I1–I6 (pre-FMT); J1, J2, J3, J4, J10, J11 (aged♂ FMT); K1–K6 (aged♀ FMT); L2–L6 (young♂ FMT) 18, 6, 6, 5 PCoA: microbiome shift after FMT (Bray–Curtis)
Figure 5C Donors vs. recipients (5 boxplots, family-level) G1–G6, H1–H6, I1–I6 (pre-FMT); E1–E8 (aged♂ donors); C1–C6 (aged♀ donors); J1, J2, J3, J4, J10, J11 (aged♂ FMT); K1–K6 (aged♀ FMT) 18, 8, 6, 6, 6 Taxonomic composition: donors vs. recipients (relative abundance)
Figure 5D Aged♀ vs. aged♂ FMT recipients (DESeq2) K1–K6 vs. J1, J2, J3, J4, J10, J11 6 vs. 6 Effect of donor microbiota on recipient immune response (differential abundance)
Figure 5E Same recipients as Fig 5D (+ young♂ control) K1–K6 vs. J1, J2, J3, J4, J10, J11 (+ L2–L6) 6 vs. 6 (+5) IL-17A+ γδ T cells in brain post-FMT (flow cytometry)

🔹 Sample-ID Master List for Figure 5

Group # Description Sample Prefix Full IDs Used In
3 Aged female, baseline FMT donor sample-C* C1–C10 (C1–C6 used in Fig 4B-C, Suppl Fig 4, Fig 5C) Fig 4C, Suppl Fig 4, Fig 5C
4 Aged male, baseline FMT donor sample-E* E1–E10 (E1–E8 used in Fig 4B-C, Suppl Fig 4, Fig 5C) Fig 4B-C, Suppl Fig 4, Fig 5C
6 Aged male, pre-antibiotics FMT batch I sample-G* G1–G6 Fig 5B (purple), Fig 5C (Boxplot 1)
7 Aged female, pre-antibiotics FMT batch I sample-H* H1–H6 Fig 5B (purple), Fig 5C (Boxplot 1)
8 Young male, pre-antibiotics FMT batch II sample-I* I1–I6 Fig 5B (purple), Fig 5C (Boxplot 1)
9 Young male, post-FMT aged male stool sample-J* J1–J4, J10, J11 (J5–J9 excluded) Fig 5B (blue), Fig 5C (Boxplot 4), Fig 5D, Fig 5E
10 Young male, post-FMT aged female stool sample-K* K1–K6 Fig 5B (red), Fig 5C (Boxplot 5), Fig 5D, Fig 5E
11 Young male, post-FMT young male stool sample-L* L2–L6 (L1, L7–L15 excluded) Fig 5B (green), Fig 5E (not in Fig 5C/D)

🔹 Key Notes for Interpretation

  1. Figure 5B vs. 5C: Figure 5B shows beta-diversity (PCoA) of all FMT groups; Figure 5C shows taxonomic composition (boxplots) of donors + recipients. Group11 (young♂ FMT) is in 5B but not in 5C.
  2. Figure 5D: Uses DESeq2 on non-rarefied counts from ps_filt (taxa prefiltered: total counts ≥10). Only taxa with BH-adjusted p < 0.05 are shown.
  3. Figure 5E: Includes the same recipients as Fig 5D plus the young♂ FMT control group (Group11, L2–L6) for comparison of IL-17A+ γδ T cells.
  4. Sample exclusions: C7–C10, E9–E10, J5–J9, K7–K15, L1, L7–L15 were excluded for low depth, outliers, or QC reasons (see README files).

Let me know if you’d like me to:

  1. Export the exact DESeq2 results table for Figure 5D as CSV/Excel,
  2. Provide the R code snippet that generates the bubble plot for Figure 5D, or
  3. Draft the full email reply to your colleague with these merged tables integrated. 🎯


Draft Reply to M.


Subject: Re: Manuscript Review (Lines 276-348) & NCBI SRA Citation

Thank you for sending the manuscript and for the opportunity to review the specified sections. I have carefully reviewed lines 276–348 covering the microbiota composition analysis and FMT experiments.

✅ Text Review: Minor Corrections Suggested

I noticed a few minor typographical inconsistencies in the taxonomic nomenclature that may warrant correction before submission:

Line Current Text Suggested Correction
295 Muribaculae (order Bacteroidalis) Muribaculaceae (order Bacteroidales)
298 Ruminococcae Ruminococcaceae
334 Muribaculae Muribaculaceae

These appear to be minor spelling variations; please confirm if these align with your intended taxonomic references.

The scientific content, logic flow, and figure references (Fig. 4A–D, Fig. 5A–E) are clear and well-integrated with our analysis scripts (MicrobiotaProcess_Group3-4.R and MicrobiotaProcess_Group9_10_11_PreFMT.R).

🗂️ NCBI SRA Data Submission

Regarding the NCBI SRA citation:

  1. Data readiness: The 16S rRNA sequencing data (Group 3/4 and Group 9/10/11/pre-FMT) are processed and ready for upload.
  2. Next steps:
    • I can prepare the metadata table (sample IDs, Group, Sex_age, pre_post_stroke) in the format required by NCBI BioProject.
    • Once uploaded, we will receive a BioProject/BioSample accession number (e.g., PRJNAxxxxxx) to cite in the manuscript.
  3. Suggested placement for citation:
    Dataset: 16S rRNA-seq data are deposited in the NCBI Sequence Read Archive (SRA) 
    under BioProject accession number [TO BE ADDED].

If you confirm, I can proceed with preparing the submission files this week so we meet your timeline.

📅 Timeline

I am flexible and ready to assist with final revisions or SRA submission as needed. Please let me know the exact submission date once confirmed, and I will prioritize accordingly.

Thank you again, and I wish you a pleasant weekend as well!


Note for me: Before sending,:

  1. Double-check the taxonomic spellings against your reference database (SILVA/GTDB)
  2. Confirm whether Marius prefers to handle the SRA upload himself or delegate it
  3. Attach the prepared metadata template if you want to expedite the process

Would you like me to help draft the NCBI BioProject metadata table or refine any part of this reply?