Processing Data_Benjamin_DNAseq_2026_GE11174

core_tree_like_fig3B

  1. 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

    # Download 20190108_kmerfinder_stable_dirs.tar.gz from https://zenodo.org/records/13447056
  2. Run nextflow bacass

    #–kmerfinderdb /path/to/kmerfinder/bacteria.tar.gz #–kmerfinderdb /mnt/nvme1n1p1/REFs/kmerfinder_db.tar.gz #–kmerfinderdb /mnt/nvme1n1p1/REFs/20190108_kmerfinder_stable_dirs.tar.gz nextflow run nf-core/bacass -r 2.5.0 -profile docker \ –input samplesheet.tsv \ –outdir bacass_out \ –assembly_type long \ –kraken2db /mnt/nvme1n1p1/REFs/k2_standard_08_GB_20251015.tar.gz \ –kmerfinderdb /mnt/nvme1n1p1/REFs/kmerfinder/bacteria/ \ -resume

  3. KmerFinder summary

    From the KmerFinder summary, the top hit is Gibbsiella quercinecans (strain FRB97; NZ_CP014136.1) with much higher score and coverage than the second hit (which is low coverage). So it’s fair to write:

    “KmerFinder indicates the isolate is most consistent with Gibbsiella quercinecans.”

    …but for a species call (especially for publication), you should confirm with ANI (or a genome taxonomy tool), because k-mer hits alone aren’t always definitive.

  4. Using https://www.bv-brc.org/app/ComprehensiveGenomeAnalysis to annotate the genome using scaffolded results from bacass. ComprehensiveGenomeAnalysis provides comprehensive overview of the data.

  5. Generate the Table 1 Summary of sequence data and genome features under the env gunc_env

    activate the env that has openpyxl

    mamba activate gunc_env mamba install -n gunc_env -c conda-forge openpyxl -y mamba deactivate

    STEP_1

    ENV_NAME=gunc_env AUTO_INSTALL=1 THREADS=32 ~/Scripts/make_table1_GE11174.sh

    STEP_2

    python export_table1_stats_to_excel_py36_compat.py \ –workdir table1_GE11174_work \ –out Comprehensive_GE11174.xlsx \ –max-rows 200000 \ –sample GE11174

    STEP_1+2

    ENV_NAME=gunc_env AUTO_INSTALL=1 THREADS=32 ~/Scripts/make_table1_with_excel.sh

    #For the items “Total number of reads sequenced” and “Mean read length (bp)” pigz -dc GE11174.rawreads.fastq.gz | awk ‘END{print NR/4}’ seqkit stats GE11174.rawreads.fastq.gz

  6. Antimicrobial resistance gene profiling and Resistome and Virulence Profiling with Abricate and RGI (Reisistance Gene Identifier)

    Table 4. Specialty Genes

    Source Genes

    NDARO 1

    Antibiotic Resistance CARD 15

    Antibiotic Resistance PATRIC 55

    Drug Target TTD 38

    Metal Resistance BacMet 29

    Transporter TCDB 250

    Virulance factor VFDB 33

    https://www.genomicepidemiology.org/services/

    https://genepi.dk/

    conda activate /home/jhuang/miniconda3/envs/bengal3_ac3 abricate –list #DATABASE SEQUENCES DBTYPE DATE #vfdb 2597 nucl 2025-Oct-22 #resfinder 3077 nucl 2025-Oct-22 #argannot 2223 nucl 2025-Oct-22 #ecoh 597 nucl 2025-Oct-22 #megares 6635 nucl 2025-Oct-22 #card 2631 nucl 2025-Oct-22 #ecoli_vf 2701 nucl 2025-Oct-22 #plasmidfinder 460 nucl 2025-Oct-22 #ncbi 5386 nucl 2025-Oct-22 abricate-get_db –list #Choices: argannot bacmet2 card ecoh ecoli_vf megares ncbi plasmidfinder resfinder vfdb victors (default ”).

    CARD

    abricate-get_db –db card

    MEGARes (automatically install, if error try MANUAL install as below)

    abricate-get_db –db megares

    MANUAL install

    wget -O megares_database_v3.00.fasta \ “https://www.meglab.org/downloads/megares_v3.00/megares_database_v3.00.fasta” #wget -O megares_drugs_database_v3.00.fasta \ “https://www.meglab.org/downloads/megares_v3.00/megares_drugs_database_v3.00.fasta

    1) Define dbdir (adjust to your env; from your logs it’s inside the conda env)

    DBDIR=/home/jhuang/miniconda3/envs/bengal3_ac3/db

    2) Create a custom db folder for MEGARes v3.0

    mkdir -p ${DBDIR}/megares_v3.0

    3) Copy the downloaded MEGARes v3.0 nucleotide FASTA to ‘sequences’

    cp megares_database_v3.00.fasta ${DBDIR}/megares_v3.0/sequences

    4) Build ABRicate indices

    abricate –setupdb

    #abricate-get_db –setupdb abricate –list | egrep ‘card|megares’ abricate –list | grep -i megares

    chmod +x run_resistome_virulome.sh ASM=GE11174.fasta SAMPLE=GE11174 THREADS=32 ./run_resistome_virulome.sh

    chmod +x run_resistome_virulome_dedup.sh ENV_NAME=/home/jhuang/miniconda3/envs/bengal3_ac3 ASM=GE11174.fasta SAMPLE=GE11174 THREADS=32 ./run_resistome_virulome_dedup.sh ENV_NAME=/home/jhuang/miniconda3/envs/bengal3_ac3 ASM=./vrap_HF/spades/scaffolds.fasta SAMPLE=HF THREADS=32 ~/Scripts/run_resistome_virulome_dedup.sh ENV_NAME=/home/jhuang/miniconda3/envs/bengal3_ac3 ASM=GE11174.fasta SAMPLE=GE11174 MINID=80 MINCOV=60 ./run_resistome_virulome_dedup.sh

    grep -vc ‘^#’ resistome_virulence_GE11174/raw/GE11174.megares.tab grep -vc ‘^#’ resistome_virulence_GE11174/raw/GE11174.card.tab grep -vc ‘^#’ resistome_virulence_GE11174/raw/GE11174.resfinder.tab grep -vc ‘^#’ resistome_virulence_GE11174/raw/GE11174.vfdb.tab

    grep -v ‘^#’ resistome_virulence_GE11174/raw/GE11174.megares.tab | grep -v ‘^[[:space:]]$’ | head -n 3 grep -v ‘^#’ resistome_virulence_GE11174/raw/GE11174.card.tab | grep -v ‘^[[:space:]]$’ | head -n 3 grep -v ‘^#’ resistome_virulence_GE11174/raw/GE11174.resfinder.tab | grep -v ‘^[[:space:]]$’ | head -n 3 grep -v ‘^#’ resistome_virulence_GE11174/raw/GE11174.vfdb.tab | grep -v ‘^[[:space:]]$’ | head -n 3

    chmod +x make_dedup_tables_from_abricate.sh OUTDIR=resistome_virulence_GE11174 SAMPLE=GE11174 ./make_dedup_tables_from_abricate.sh

    chmod +x run_abricate_resistome_virulome_one_per_gene.sh ENV_NAME=/home/jhuang/miniconda3/envs/bengal3_ac3 \ ASM=GE11174.fasta \ SAMPLE=GE11174 \ OUTDIR=resistome_virulence_GE11174 \ MINID=80 MINCOV=60 \ THREADS=32 \ ./run_abricate_resistome_virulome_one_per_gene.sh

    #ABRicate thresholds: MINID=70 MINCOV=50 Database Hit_lines File MEGARes 35 resistome_virulence_GE11174/raw/GE11174.megares.tab CARD 28 resistome_virulence_GE11174/raw/GE11174.card.tab ResFinder 2 resistome_virulence_GE11174/raw/GE11174.resfinder.tab VFDB 18 resistome_virulence_GE11174/raw/GE11174.vfdb.tab

    #ABRicate thresholds: MINID=80 MINCOV=60 Database Hit_lines File MEGARes 3 resistome_virulence_GE11174/raw/GE11174.megares.tab CARD 1 resistome_virulence_GE11174/raw/GE11174.card.tab ResFinder 0 resistome_virulence_GE11174/raw/GE11174.resfinder.tab VFDB 0 resistome_virulence_GE11174/raw/GE11174.vfdb.tab

    python merge_amr_sources_by_gene.py python export_resistome_virulence_to_excel_py36.py \ –workdir resistome_virulence_GE11174 \ –sample GE11174 \ –out Resistome_Virulence_GE11174.xlsx

    Methods sentence (AMR + virulence)

    AMR genes were identified by screening the genome assembly with ABRicate against the MEGARes and ResFinder databases, using minimum identity and coverage thresholds of X% and Y%, respectively. CARD-based AMR determinants were additionally predicted using RGI (Resistance Gene Identifier) to leverage curated resistance models. Virulence factors were screened using ABRicate against VFDB under the same thresholds.

    Replace X/Y with your actual values (e.g., 90/60) or state “default parameters” if you truly used defaults.

    Table 2 caption (AMR)

    Table 2. AMR gene profiling of the genome assembly. Hits were detected using ABRicate (MEGARes and ResFinder) and RGI (CARD). The presence of AMR-associated genes does not necessarily imply phenotypic resistance, which may depend on allele type, genomic context/expression, and/or SNP-mediated mechanisms; accordingly, phenotype predictions (e.g., ResFinder) should be interpreted cautiously.

    Table 3 caption (virulence)

    Table 3. Virulence factor profiling of the genome assembly based on ABRicate screening against VFDB, reporting loci with sequence identity and coverage above the specified thresholds.

  7. Generate phylogenetic tree

    export NCBI_EMAIL=”j.huang@uke.de” ./resolve_best_assemblies_entrez.py targets.tsv resolved_accessions.tsv

    Note the env bengal3_ac3 don’t have the following r-package, using r_env for the plot-step!

    #mamba install -y -c conda-forge -c bioconda r-aplot bioconductor-ggtree r-ape r-ggplot2 r-dplyr r-readr

    chmod +x build_wgs_tree_fig3B.sh export ENV_NAME=/home/jhuang/miniconda3/envs/bengal3_ac3 export NCBI_EMAIL=”j.huang@uke.de” ./build_wgs_tree_fig3B.sh

  8. DEBUG (recommended): remove one genome and rerun Roary → RAxML; Example: drop GCF_047901425.1 (change to the other one if you prefer).

    1.1) remove from inputs so Roary cannot include it

    rm -f work_wgs_tree/gffs/GCF_047901425.1.gff rm -f work_wgs_tree/fastas/GCF_047901425.1.fna rm -rf work_wgs_tree/prokka/GCF_047901425.1 rm -rf work_wgs_tree/genomes_ncbi/GCF_047901425.1 #optional

    1.2) remove from accession list so it won’t come back

    awk -F’\t’ ‘NR==1 || $2!=”GCF_047901425.1″‘ work_wgs_tree/meta/accessions.tsv > work_wgs_tree/meta/accessions.tsv.tmp \ && mv work_wgs_tree/meta/accessions.tsv.tmp work_wgs_tree/meta/accessions.tsv

    2.1) remove from inputs so Roary cannot include it

    rm -f work_wgs_tree/gffs/GCA_032062225.1.gff rm -f work_wgs_tree/fastas/GCA_032062225.1.fna rm -rf work_wgs_tree/prokka/GCA_032062225.1 rm -rf work_wgs_tree/genomes_ncbi/GCA_032062225.1 #optional

    2.2) remove from accession list so it won’t come back

    awk -F’\t’ ‘NR==1 || $2!=”GCA_032062225.1″‘ work_wgs_tree/meta/accessions.tsv > work_wgs_tree/meta/accessions.tsv.tmp \ && mv work_wgs_tree/meta/accessions.tsv.tmp work_wgs_tree/meta/accessions.tsv

    3) delete old roary runs (so you don’t accidentally reuse old alignment)

    rm -rf work_wgstree/roary*

    4) rerun Roary (fresh output dir)

    mkdir -p work_wgs_tree/logs ROARY_OUT=”work_wgstree/roary$(date +%s)” roary -e –mafft -p 8 -cd 95 -i 95 \ -f “$ROARY_OUT” \ work_wgs_tree/gffs/*.gff \

    work_wgs_tree/logs/roary_rerun.stdout.txt \ 2> work_wgs_tree/logs/roary_rerun.stderr.txt

    5) point meta file to new core alignment (absolute path)

    echo “$(readlink -f “$ROARY_OUT/core_gene_alignment.aln”)” > work_wgs_tree/meta/core_alignment_path.txt

    6) rerun RAxML-NG

    rm -rf work_wgs_tree/raxmlng mkdir work_wgs_tree/raxmlng/ raxml-ng –all \ –msa “$(cat work_wgs_tree/meta/core_alignment_path.txt)” \ –model GTR+G \ –bs-trees 1000 \ –threads 8 \ –prefix work_wgs_tree/raxmlng/core

    7) Run this to regenerate labels.tsv

    bash regenerate_labels.sh

    8) Manual correct the display name in vim work_wgs_tree/plot/labels.tsv

    #Gibbsiella greigii USA56 #Gibbsiella papilionis PWX6 #Gibbsiella quercinecans strain FRB97 #Brenneria nigrifluens LMG 5956

    9) Rerun only the plot step:

    Rscript work_wgs_tree/plot/plot_tree.R \ work_wgs_tree/raxmlng/core.raxml.support \ work_wgs_tree/plot/labels.tsv \ 6 \ work_wgs_tree/plot/core_tree_like_fig3B.pdf \ work_wgs_tree/plot/core_tree_like_fig3B.png

  9. fastaANI and busco explanations

    find . -name “*.fna” #./work_wgs_tree/fastas/GCF_004342245.1.fna GCF_004342245.1 Gibbsiella quercinecans DSM 25889 (GCF_004342245.1) #./work_wgs_tree/fastas/GCF_039539505.1.fna GCF_039539505.1 Gibbsiella papilionis PWX6 (GCF_039539505.1) #./work_wgs_tree/fastas/GCF_005484965.1.fna GCF_005484965.1 Brenneria nigrifluens LMG5956 (GCF_005484965.1) #./work_wgs_tree/fastas/GCA_039540155.1.fna GCA_039540155.1 Gibbsiella greigii USA56 (GCA_039540155.1) #./work_wgs_tree/fastas/GE11174.fna #./work_wgs_tree/fastas/GCF_002291425.1.fna GCF_002291425.1 Gibbsiella quercinecans FRB97 (GCF_002291425.1)

    mamba activate /home/jhuang/miniconda3/envs/bengal3_ac3 fastANI \ -q GE11174.fasta \ -r ./work_wgs_tree/fastas/GCF_004342245.1.fna \ -o fastANI_out_Gibbsiella_quercinecans_DSM_25889.txt fastANI \ -q GE11174.fasta \ -r ./work_wgs_tree/fastas/GCF_039539505.1.fna \ -o fastANI_out_Gibbsiella_papilionis_PWX6.txt fastANI \ -q GE11174.fasta \ -r ./work_wgs_tree/fastas/GCF_005484965.1.fna \ -o fastANI_out_Brenneria_nigrifluens_LMG5956.txt fastANI \ -q GE11174.fasta \ -r ./work_wgs_tree/fastas/GCA_039540155.1.fna \ -o fastANI_out_Gibbsiella_greigii_USA56.txt fastANI \ -q GE11174.fasta \ -r ./work_wgs_tree/fastas/GCF_002291425.1.fna \ -o fastANI_out_Gibbsiella_quercinecans_FRB97.txt cat fastANIout*.txt > fastANI_out.txt

    GE11174.fasta ./work_wgs_tree/fastas/GCF_005484965.1.fna 79.1194 597 1890 GE11174.fasta ./work_wgs_tree/fastas/GCA_039540155.1.fna 95.9589 1547 1890 GE11174.fasta ./work_wgs_tree/fastas/GCF_039539505.1.fna 97.2172 1588 1890 GE11174.fasta work_wgs_tree/fastas/GCF_004342245.1.fna 98.0889 1599 1890 GE11174.fasta ./work_wgs_tree/fastas/GCF_002291425.1.fna 98.1285 1622 1890 #在细菌基因组比较里,一个常用经验阈值是:

    • ANI ≥ 95–96%:通常认为属于同一物种(species)的范围
    • 你这里 97.09% → 很大概率表示 An6 与 HITLi7 属于同一物种,但可能不是同一株(strain),因为还存在一定差异。 是否“同一菌株”通常还要结合:
    • 核心基因 SNP 距离、cgMLST
    • 组装质量/污染
    • 覆盖率是否足够高

    #BUSCO 结果的快速解读(顺便一句). The results have been already packaged in the Table 1.

    • Complete 99.2%,Missing 0.0%:说明你的组装非常完整(对细菌来说很优秀)
    • Duplicated 0.0%:重复拷贝不高,污染/混样风险更低
    • Scaffolds 80、N50 ~169 kb:碎片化还可以,但总体质量足以做 ANI/物种鉴定
  10. fastANI explanation

From your tree and the fastANI table, GE11174 is clearly inside the Gibbsiella quercinecans clade, and far from the outgroup (Brenneria nigrifluens). The ANI values quantify that same pattern.

1) Outgroup check (sanity)

  • GE11174 vs Brenneria nigrifluens (GCF_005484965.1): ANI 79.12% (597/1890 fragments)

    • 79% ANI is way below any species boundary → not the same genus/species.
    • On the tree, Brenneria sits on a long branch as the outgroup, consistent with this deep divergence.
    • The relatively low matched fragments (597/1890) also fits “distant genomes” (fewer orthologous regions pass the ANI mapping filters).

2) Species-level placement of GE11174

A common rule of thumb you quoted is correct: ANI ≥ 95–96% ⇒ same species.

Compare GE11174 to the Gibbsiella references:

  • vs GCA_039540155.1 (Gibbsiella greigii USA56): 95.96% (1547/1890)

    • Right at the boundary. This suggests “close but could be different species” or “taxonomy/labels may not reflect true species boundaries” depending on how those genomes are annotated.
    • On the tree, G. greigii is outside the quercinecans group but not hugely far, which matches “borderline ANI”.
  • vs GCF_039539505.1 (Gibbsiella papilionis PWX6): 97.22% (1588/1890)

  • vs GCF_004342245.1 (G. quercinecans DSM 25889): 98.09% (1599/1890)

  • vs GCF_002291425.1 (G. quercinecans FRB97): 98.13% (1622/1890)

These are all comfortably above 96%, especially the two quercinecans genomes (~98.1%). That strongly supports:

GE11174 belongs to the same species as Gibbsiella quercinecans (and is closer to quercinecans references than to greigii).

This is exactly what your tree shows: GE11174 clusters in the quercinecans group, not with the outgroup.

3) Closest reference and “same strain?” question

GE11174’s closest by ANI in your list is:

  • FRB97 (GCF_002291425.1): 98.1285%
  • DSM 25889 (GCF_004342245.1): 98.0889%
  • Next: PWX6 97.2172%

These differences are small, but 98.1% ANI is not “same strain” evidence by itself. Within a species, different strains commonly sit anywhere from ~96–99.9% ANI depending on diversity. To claim “same strain / very recent transmission,” people usually look for much tighter genome-wide similarity:

  • core-genome SNP distance (often single digits to tens, depending on organism and context)
  • cgMLST allele differences
  • recombination filtering (if relevant)
  • assembly QC/contamination checks
  • and confirming that alignment/ANI coverage is high and not biased by missing regions

Your fragment matches (e.g., 1622/1890 for FRB97) are reasonably high, supporting that the ANI is meaningful, but it still doesn’t equate to “same strain.”

4) How to phrase the combined interpretation (tree + ANI)

A clear summary you can use:

  • The phylogenetic tree places GE11174 within the Gibbsiella quercinecans lineage, with Brenneria nigrifluens as a distant outgroup.
  • fastANI supports this:

    • ~98.1% ANI to G. quercinecans FRB97 and DSM 25889 → strong same-species support.
    • 97.2% to G. papilionis → still same-species range, but more distant than the quercinecans references.
    • 95.96% to G. greigii → borderline; consistent with being a close neighboring lineage but not the best species match for GE11174.
    • 79.1% to Brenneria → confirms it is an appropriate outgroup and far outside the species/genus boundary.
  • Therefore, GE11174 is very likely Gibbsiella quercinecans (species-level), and appears most similar to FRB97/DSM 25889, but additional high-resolution analyses are required to assess “same strain.”

If you want, paste the fastANI line for GE11174 vs GE11174? (or run fastANI against a broader set), and/or your core SNP distances from the Roary alignment, and I can help you write a tighter “strain-level” conclusion.

#TODO_NEXT_MONDAY: * phylogenetic tree + fastaANI + nf-core/pairgenomealign (compare to the closest isoalte https://nf-co.re/pairgenomealign/2.2.1/)

            * #summarize all results with a mail to send them back, mentioned that we can submit the genome to NCBI to obtain a high-quality annotation. What strain name would you like to assign to this isolate?

            * If they agree, I can submit the two new isolates to the NCBI-database!
  1. submit both sequences in a batch to NCBI-server!

  2. Find the more “closest isolate” from GenBank (robust approach) for STEP_7

    4. Find the more “closest isolate” from GenBank (robust approach)

    # download all available genomes for the genus Gibbsiella (includes assemblies + metadata)
    #--assembly-level" flag: must be 'chromosome', 'complete', 'contig', 'scaffold'
    datasets download genome taxon Gibbsiella --include genome,gff3,gbff --assembly-level complete,chromosome,scaffold --filename gibbsiella.zip
    unzip -q gibbsiella.zip -d gibbsiella_ncbi
    
    mamba activate /home/jhuang/miniconda3/envs/bengal3_ac3
    
    # make a Mash sketch of your isolate
    mash sketch -o isolate bacass_out/Unicycler/GE11174.scaffolds.fa
    
    # sketch all reference genomes (example path—adjust)
    find gibbsiella_ncbi -name "*.fna" -o -name "*.fasta" > refs.txt
    mash sketch -o refs -l refs.txt
    
    # get closest genomes
    mash dist isolate.msh refs.msh | sort -gk3 | head -n 20 > top20_mash.txt
    
    ## What your Mash results mean
    
    * The **best hits** to your assembly (`GE11174.scaffolds.fa`) are:
    
      * **GCA/GCF_002291425.1** (shows up twice: GenBank **GCA** and RefSeq **GCF** copies of the *same assembly*)
      * **GCA/GCF_004342245.1** (same duplication pattern)
      * **GCA/GCF_047901425.1** (FRB97; also duplicated)
    * Mash distances around **0.018–0.020** are **very close** (typically same species; often same genus and usually within-species).
    * The `0` in your output is just Mash’s p-value being printed as 0 due to underflow (i.e., extremely significant).
    
    So yes: your isolate looks **very close to those Gibbsiella genomes**, and FRB97 being in that set is consistent with your earlier KmerFinder result.

    5. — Remove duplicates (GCA vs GCF)

    Right now you’re seeing the same genome twice (GenBank + RefSeq). For downstream work, keep one.
    
    Example: keep only **GCF** if available, else GCA:
    
    ```bash
    # Take your top hits, prefer GCF over GCA
    cat top20_mash.txt \
      | awk '{print $2}' \
      | sed 's|/GCA_.*||; s|/GCF_.*||' \
      | sort -u
    ```
    
    But easiest: just manually keep one of each pair:
    
    * keep `GCF_002291425.1` (drop `GCA_002291425.1`)
    * keep `GCF_004342245.1`
    * keep `GCF_047901425.1`
      (and maybe keep `GCA_032062225.1` if it’s truly different and you want a more distant ingroup point)

单车杀王

单车杀王”通常指国际象棋残局里的“一车(Rook)+一王 对 单王”的基本将死法(英文常叫 rook checkmate / rook and king vs king)。(Chess.com)

下面给你一个最稳的“口诀式”走法框架(学会这套,基本不会迷路):

单车杀王的核心思路:关进盒子 → 国王赶上来 → 收网将死

  1. 车先“画盒子” 用你的车把对方王限制在棋盘的一块区域里(比如先把它关在上半场/左半场)。车通常放在离对方王隔一格以上的位置,避免被王直接吃掉。

  2. 己王靠近来“护车” 单靠车不能把盒子越缩越小,因为你一缩,车可能会被对方王追着攻击;所以必须让己王走近,形成“车在前、王在后保护”的队形。

  3. 缩盒子:车走到更近的一条线 当你的王已经足够近、能保护车时,用车把对方王的活动范围再缩小一圈(例如从“关在3行”缩到“关在2行”)。

  4. 重复 2) + 3) “王跟上 → 车再缩”,循环几次,就能把对方王逼到边线/角落。

  5. 最后将死的典型形状

  • 对方王在边线(例如 a 线),你的车给将并封住整条边线;
  • 你的王站在车旁边(或能保护车的位置),让对方王既吃不了车、又无格可逃,完成将死。(Chess.com)

两个常见坑(新手最容易翻车)

  • 车贴太近被吃:车别和对方王“肩并肩”,至少隔一格。
  • 被逼得不断“横着给将”但不推进:只用车不停将军,可能拖到和棋(50步规则等),关键是让己王参与收网

HYLO CARE 与 HYLO COMOD 滴眼液的成分比较及长期使用评估

一、官网信息的核心解读(先给结论)

👉 HYLO CARE 是可以长期使用的,而且是“偏护理型”的人工泪液。 👉 没有防腐剂,这一点非常重要。


二、HYLO CARE 的成分到底是什么?安全吗?

✅ 1️⃣ 透明质酸(Hyaluronsäure 0.1%)

  • 作用:强效保湿、润滑
  • 特点:

    • 天然存在于人体(眼睛、关节、皮肤)
    • 非药物、非激素
  • ✔️ 适合长期使用
  • ✔️ 干眼治疗的“金标准成分”

📌 0.1% 是中等浓度 → 比基础款更滋润,但不会太黏


✅ 2️⃣ Dexpanthenol(右泛醇,维生素 B5 前体)

这是你注意到的“另外的成分”,也是很多人关心的点。

它是干什么的?

  • 促进角膜和结膜修复
  • 减轻刺激、灼热、异物感
  • 有轻度抗炎、修复作用

📌 常用于:

  • 眼表受损
  • 长时间用眼
  • 隐形眼镜引起的不适

👉 Dexpanthenol 不是药物,也不是激素 👉 在眼科中非常常见且安全

✔️ 可以长期用


三、“不含防腐剂”意味着什么?(非常重要)

官网明确写了:

Frei von Konservierungsmitteln und Phosphaten 不含防腐剂和磷酸盐

这意味着:

  • ❌ 不刺激角膜
  • ❌ 不会“越用越干”
  • ❌ 不会破坏泪膜
  • ✔️ 适合每天多次、长期使用
  • ✔️ 适合敏感眼、儿童、长期电脑用眼人群

👉 这也是 COMOD® 系统 的最大优势: 不用加防腐剂也能保持无菌


四、HYLO CARE vs HYLO COMOD(现在可以精确区分了)

对比点 HYLO CARE HYLO COMOD
透明质酸 0.1% 0.1%
额外成分 ✅ Dexpanthenol(修复) ❌ 无
防腐剂 ❌ 无 ❌ 无
滋润度 ⭐⭐⭐⭐ ⭐⭐⭐
护理/修复 ✅ 更强 基础
长期使用 ✅ 可以 ✅ 可以

👉 简单说:

  • HYLO COMOD:基础保湿型
  • HYLO CARE:保湿 + 修复型(更“护理”)

五、你最关心的问题:HYLO CARE 可以长期用吗?

✅ 答案是:可以,而且很适合长期用

原因总结:

  • ✔️ 无防腐剂
  • ✔️ 成分安全、接近人体生理
  • ✔️ 专门用于“日常护理”
  • ✔️ 官网明确写了 “ideal für die tägliche Pflege”(适合每日护理)

📌 6 个月使用期 指的是:

  • 开封后 6 个月内用完
  • 不是“只能用 6 个月”,而是卫生有效期

六、适合哪些人长期用 HYLO CARE?

特别适合你如果有以下情况之一:

  • 长时间看电脑 / 手机
  • 暖气房、空调房
  • 戴隐形眼镜
  • 眼睛容易红、干、痒、有异物感
  • 想用比基础人工泪液更“修复型”的产品

七、一句话总结(给你吃个定心丸)

👉 你贴的这个 HYLO CARE 官网版本:

  • ✔️ 无防腐剂
  • ✔️ 成分安全
  • ✔️ 含修复成分 Dexpanthenol
  • ✔️ 完全可以长期使用

Turnierplan 2026 für X. (Updated)

Grundlage: letzte 4 Kids-Cup-Zeitpunkte (offiziell)

Nr. Datum Zeit Ort
42 20.12.2024 9:30–17:00 HSK Schachzentrum (Schellingstr. 41) (hsk1830.de)
43 29.03.2025 (nicht angegeben in Beitrag) HSK (Kids-Cup Bericht) (hsk1830.de)
44 19.07.2025 9:00–17:00 HSK Schachzentrum (hsk1830.de)
45 11.10.2025 9:30–17:00 HSK Schachzentrum (hsk1830.de)

Man sieht ein wiederkehrendes Muster: Frühjahr (Ende März)Sommer (Mitte Juli)Herbst (Mitte Oktober)kurz vor Weihnachten (Dezember).


Prognose: HSK Kids-Cup 2026 (4 separate Einträge)

Prinzip der Prognose: gleiche Jahreszeiten/Fenster wie oben, möglichst Wochenendtag (wie in der Kids-Cup-Beschreibung). (hsk1830.de)

Bitte als “Platzhalter” behandeln, bis HSK die konkreten Ausschreibungen veröffentlicht.

2026 (prognostiziert) Wochentag Eintrag
28.03.2026 Samstag HSK Kids-Cup #46 (vorauss.)
18.07.2026 Samstag HSK Kids-Cup #47 (vorauss.)
10.10.2026 Samstag HSK Kids-Cup #48 (vorauss.)
18.12.2026 Freitag HSK Kids-Cup #49 (vorauss.) (“kurz vor Weihnachten” – 2024 war auch ein Werktag nahe Ferienstart) (hsk1830.de)

Kids-Cup feste Infos (von HSK-Infoseite, damit du sie nicht jedes Mal neu suchen musst)

  • Mehrmals pro Jahr, für Einsteiger & zusätzliche Schulwertung (hsk1830.de)
  • 7 Runden Schweizer System, zwei Turniere: A) offen bis Klasse 4, DWZ-gewertetB) KiGa bis Klasse 2 (hsk1830.de)
  • 20 Minuten/Partie; in den ersten 15 Minuten wird notiert, damit Trainer zwischen den Runden analysieren können. (hsk1830.de)
  • Startgeld: 10 € (HSK-Mitglieder), 15 € (Gäste) (hsk1830.de)

Update: “X. soll alle Kids-Cups 2026 spielen + nächste HJET

Aktualisierte Master-Tabelle (2026 + “nächste HJET”)

Datum Event Ort Q? Status / Notizen (mit Platz zum Nachtragen)
14.02.2026 Blankeneser Jugend Pokal (BJP) Hamburg ✅ Ja Jugendturnier, gutes U10-Format
15.02.2026 DWZ Challenge Hamburg ✅ Ja (fix) Angemeldet
22.03.2026 DWZ/ELO-Cup (4er-Gruppen) Itzehoe ✅ Ja DWZ-Praxis ohne Overload
28.03.2026 (Vorhersage) HSK Kids-Cup #46 HSK Schachzentrum ✅ Ja Ausschreibung-Link: Zeit: Anmeldeschluss: ____
06.06.2026 (optional) DWZ/ELO-Cup (4er-Gruppen) Itzehoe 🟡 Optional nur wenn ihr im Juni nicht “zu voll” seid
20.–21.06.2026 Hamburger Talente-Cup (U12) Hamburg ✅ Ja Highlight-Wochenende
28.06.2026 Elmshorn Jugendstadtmeisterschaft Elmshorn ✅ Ja 1-Tag, kinderfreundlich
18.07.2026 (Vorhersage) HSK Kids-Cup #47 HSK Schachzentrum ✅ Ja Ausschreibung-Link: Zeit: Anmeldeschluss: ____
05.09.2026 DWZ/ELO-Cup (4er-Gruppen) Itzehoe ✅ Ja guter Wiedereinstieg nach Ferien
10.10.2026 (Vorhersage) HSK Kids-Cup #48 HSK Schachzentrum ✅ Ja Ausschreibung-Link: Zeit: Anmeldeschluss: ____
07.11.2026 (optional) DWZ/ELO-Cup (4er-Gruppen) Itzehoe 🟡 Optional nur bei Lust/Kapazität
05.12.2026 DWZ/ELO-Cup (4er-Gruppen) Itzehoe ✅ Ja Jahresabschluss
18.12.2026 (Vorhersage) HSK Kids-Cup #49 HSK Schachzentrum ✅ Ja Ausschreibung-Link: Zeit: Anmeldeschluss: ____
Dezember 2026 HJET – Anmeldung nächste Runde Hamburg ✅ Ja Deadline: Link/Formular: Gruppe (U10-1/U10-2): ____
Jan–Anfang Feb 2027 (samstags) HJET – Spieltage Hamburg ✅ Ja Termine: (eintragen sobald veröffentlicht)

PDF-Version (aktualisiert)

Hier ist die aktualisierte PDF (mit Kids-Cup-Prognose als separate Einträge + HJET “nächste Runde”): Download: Turnierplan_2026_aktualisiert.pdf

Wenn später die echten Kids-Cup-Ausschreibungslinks 2026 und den HJET-Anmeldelink (Dez 2026) verfügbar ist, koennen wir die Freifelder sauber eintragen und “Vorhersage” durch “offiziell” ersetzten.

Bacterial WGS workflow overview (nf-core/bacass → taxonomic ID → phylogeny)

Bacterial WGS workflow overview (nf-core/bacass → taxonomic ID → phylogeny)

1) Primary WGS analysis with nf-core/bacass

We processed short-read bacterial WGS with nf-core/bacass v2.5.0 using Docker. The pipeline performs QC, assembly, and common taxonomic/typing steps (e.g., Kraken2). We ran it successfully with a local Kraken2 database.

A practical issue is the KmerFinder database download: the previously documented FTP “latest” path may be unavailable or slow, so it’s best to pre-download the database and pass a local path, or skip KmerFinder and run it manually via the CGE service if needed.

2) KmerFinder database: reliable download options

Two practical database sources:

  • Option A (recommended, easiest & fast): download the bundled DB from the CGE KmerFinder service site and extract locally. (In your case it finished in ~40 min.)
  • Option B (fallback, stable but older): use the Zenodo stable archive (20190108).

Once the database is available locally, it can be provided to bacass with --kmerfinderdb (pointing to the extracted bacteria/ directory, or the tarball depending on the pipeline expectation).

3) Species placement & phylogeny

For broad placement, an ANI-based approach (fastANI distance tree) is quick and robust, but for publishable phylogeny within a close clade, a standard route is:

Prokka → Roary (pangenome; core-gene alignment) → (trim) → RAxML-NG.

Key point: Roary core-gene trees are best for closely related genomes (same species/close genus). Distant outgroups can collapse the core (few/no shared genes). If outgroups are too far, use close outgroups (e.g., Moraxella, Psychrobacter) or switch to conserved marker gene pipelines (GTDB-Tk/PhyloPhlAn/UBCG) for deep phylogeny.

4) Comparative genome visualization

For pairwise genome comparison/plots, nf-core/pairgenomealign can generate whole-genome alignments and visual representations against a target genome.


Reproducible code snippets (complete commands)

A) nf-core/bacass runs

Run 1 (works):

nextflow run nf-core/bacass -r 2.5.0 -profile docker \
  --input samplesheet.tsv \
  --outdir bacass_out \
  --assembly_type short \
  --kraken2db /home/jhuang/REFs/minikraken_20171019_8GB.tgz

Run 2 (skip KmerFinder, resume):

nextflow run nf-core/bacass -r 2.5.0 -profile docker \
  --input samplesheet.tsv \
  --outdir bacass_out \
  --assembly_type short \
  --kraken2db /home/jhuang/REFs/k2_standard_08_GB_20251015.tar.gz \
  --skip_kmerfinder \
  -resume

Then manually run KmerFinder via web service: https://cge.food.dtu.dk/services/KmerFinder/

Run 3 (use local KmerFinder DB, resume):

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

B) KmerFinder DB download

Option A (CGE bundle; fast):

mkdir -p kmerfinder_db && cd kmerfinder_db
wget -c 'https://cge.food.dtu.dk/services/KmerFinder/etc/kmerfinder_db.tar.gz'
tar -xvf kmerfinder_db.tar.gz
# resulting path typically contains: bacteria/

Option B (Zenodo stable archive):

mkdir -p kmerfinder_db && cd kmerfinder_db
wget -c 'https://zenodo.org/records/13447056/files/20190108_kmerfinder_stable_dirs.tar.gz'
tar -xzf 20190108_kmerfinder_stable_dirs.tar.gz

C) Download close references (Acinetobacter + close outgroups) + fastANI matrix (your script config)

(You already implemented this; keep here as “reproducible config”)

# Example config snippet used in the downloader:
MAX_ACINETOBACTER=20
MAX_PER_OUTGROUP=4
ASSEMBLY_LEVELS="complete,chromosome"
OUTGROUP_TAXA=("Moraxella" "Psychrobacter")
MINFRACTION="0.05"

D) Prokka → Roary core MSA → RAxML-NG (phylogenomic tree)

0) Collect genomes (isolate + downloaded refs):

mkdir -p genomes
cp bacass_out/Prokka/An6/An6.fna genomes/An6.fna
bash 1_ani_tree_prep.sh
cp ani_tree_run/ref_fasta/*.genomic.fna genomes/

1) Prokka annotations (produces GFFs for Roary):

mkdir -p prokka gffs

for f in genomes/*.fna genomes/*.genomic.fna; do
  [ -f "$f" ] || continue
  bn=$(basename "$f")
  sample="${bn%.*}"
  sample="${sample%.genomic}"
  sample="${sample//./_}"

  prokka --outdir "prokka/$sample" \
         --prefix "$sample" \
         --cpus 8 --force \
         "$f"
done

cp prokka/*/*.gff gffs/

2) Roary core-genome alignment (MAFFT):

mkdir -p roary_out

roary -f roary_out \
      -p 16 \
      -e -n \
      -i 95 \
      -cd 95 \
      gffs/*.gff

# output:
ls -lh roary_out/core_gene_alignment.aln

3) Trim the core alignment (optional but recommended):

trimal -in roary_out/core_gene_alignment.aln \
       -out roary_out/core_gene_alignment.trim.aln \
       -automated1

4) RAxML-NG ML tree + bootstrap supports:

mkdir -p tree

raxml-ng --all \
  --msa roary_out/core_gene_alignment.trim.aln \
  --model GTR+G \
  --bs-trees autoMRE{500} \
  --threads 16 \
  --seed 12345 \
  --prefix tree/roary_core

# main result:
ls -lh tree/roary_core.raxml.support

E) Optional visualization in R (ape)

library(ape)

tr <- read.tree("tree/roary_core.raxml.support")

pdf("tree/roary_core_raxmlng.pdf", width=12, height=10)
plot(tr, cex=0.5, no.margin=TRUE)
title("Roary core genome + RAxML-NG (GTR+G)")
dev.off()

F) Pairwise genome alignment figure (nf-core/pairgenomealign)

Example pattern (edit to your inputs/refs):

nextflow run nf-core/pairgenomealign -r 2.2.1 -profile docker \
  --input samplesheet_pairgenomealign.tsv \
  --outdir pairgenomealign_out

Practical notes

  • If KmerFinder FTP “latest” is unavailable, use the CGE bundle or Zenodo stable DB and point bacass to the local extracted bacteria/ directory.
  • For phylogeny:

    • Roary/RAxML-NG is best for close genomes; use close outgroups or none and root later.
    • For distant outgroups, use marker-gene pipelines (GTDB-Tk/PhyloPhlAn/UBCG) instead of pangenome core.

Used scripts (complete code)

A) 1_ani_tree_prep.sh

#!/usr/bin/env bash
set -euo pipefail

# ===================== USER CONFIG =====================
QUERY_FASTA="bacass_out/Prokka/An6/An6.fna"
SEED_ACCESSIONS_FILE="accessions.txt"

OUTDIR="ani_tree_run"
THREADS=8
MINFRACTION="0.05"
FRAGLEN="3000"

MAX_ACINETOBACTER=20
SUMMARY_LIMIT_ACI=400

MAX_PER_OUTGROUP=4
SUMMARY_LIMIT_OUT=120

#,scaffold
ASSEMBLY_LEVELS="complete,chromosome"
#Drop from Roary: "Pseudomonas" "Escherichia")
OUTGROUP_TAXA=("Moraxella" "Psychrobacter")

DO_MATRIX="yes"
SUMMARY_TIMEOUT=600
# =======================================================

ts() { date +"%F %T"; }
log() { echo "[$(ts)] $*"; }
warn() { echo "[$(ts)] WARN: $*" >&2; }
die() { echo "[$(ts)] ERROR: $*" >&2; exit 1; }
need() { command -v "$1" >/dev/null 2>&1 || die "Missing command: $1"; }
sanitize() { echo "$1" | tr ' /;:,()[]{}' '_' | tr -cd 'A-Za-z0-9._-'; }

need datasets
need fastANI
need awk
need sort
need unzip
need find
need grep
need wc
need head
need readlink
need sed
need timeout
need python3

[[ -f "$QUERY_FASTA" ]] || die "QUERY_FASTA not found: $QUERY_FASTA"

mkdir -p "$OUTDIR"/{ref_fasta,zips,tmp,logs,accessions}
DL_LOG="$OUTDIR/logs/download.log"
SUM_LOG="$OUTDIR/logs/summary.log"
ANI_LOG="$OUTDIR/logs/fastani.log"
: > "$DL_LOG"; : > "$SUM_LOG"; : > "$ANI_LOG"

QUERY_LIST="$OUTDIR/query_list.txt"
echo "$(readlink -f "$QUERY_FASTA")" > "$QUERY_LIST"
log "QUERY: $(cat "$QUERY_LIST")"

ACC_DIR="$OUTDIR/accessions"
ACC_SEED="$ACC_DIR/seed.acc.txt"
ACC_ACI="$ACC_DIR/acinetobacter.acc.txt"
ACC_OUT="$ACC_DIR/outgroups.acc.txt"
ACC_ALL="$ACC_DIR/all_refs.acc.txt"

REF_DIR="$OUTDIR/ref_fasta"
REF_LIST="$OUTDIR/ref_list.txt"

# ---- seed accessions ----
if [[ -f "$SEED_ACCESSIONS_FILE" ]]; then
  grep -v '^\s*$' "$SEED_ACCESSIONS_FILE" | grep -v '^\s*#' | sort -u > "$ACC_SEED" || true
else
  : > "$ACC_SEED"
fi
log "Seed accessions: $(wc -l < "$ACC_SEED")"

# ---- extract accessions from a jsonl FILE (FIXED) ----
extract_accessions_from_jsonl_file() {
  local jsonl="$1"
  python3 - "$jsonl" <<'PY'
import sys, json
path = sys.argv[1]
out = []
with open(path, "r", encoding="utf-8", errors="ignore") as f:
    for line in f:
        line = line.strip()
        if not line:
            continue
        try:
            obj = json.loads(line)
        except Exception:
            continue
        # NCBI datasets summary often returns one report per line with top-level "accession"
        acc = obj.get("accession")
        if acc:
            out.append(acc)
        # some outputs can also contain "reports" lists
        reps = obj.get("reports") or []
        for r in reps:
            acc = r.get("accession")
            if acc:
                out.append(acc)
for a in out:
    print(a)
PY
}

fetch_accessions_by_taxon() {
  local taxon="$1"
  local want_n="$2"
  local limit_n="$3"
  local outfile="$4"

  local tag
  tag="$(sanitize "$taxon")"
  local jsonl="$OUTDIR/tmp/${tag}.jsonl"

  : > "$outfile"
  log "STEP: Fetch accessions | taxon='$taxon' want=$want_n limit=$limit_n assembly=$ASSEMBLY_LEVELS timeout=${SUMMARY_TIMEOUT}s"

  if ! timeout "$SUMMARY_TIMEOUT" datasets summary genome taxon "$taxon" \
      --assembly-level "$ASSEMBLY_LEVELS" \
      --annotated \
      --exclude-atypical \
      --exclude-multi-isolate \
      --limit "$limit_n" \
      --as-json-lines > "$jsonl" 2>>"$SUM_LOG"; then
    warn "datasets summary failed for taxon=$taxon"
    tail -n 80 "$SUM_LOG" >&2 || true
    return 1
  fi

  [[ -s "$jsonl" ]] || { warn "Empty jsonl for taxon=$taxon"; return 0; }
  log "  OK: summary jsonl lines: $(wc -l < "$jsonl")"

  # FIXED extraction
  extract_accessions_from_jsonl_file "$jsonl" | sort -u | head -n "$want_n" > "$outfile"

  log "  OK: got $(wc -l < "$outfile") accessions for $taxon"
  head -n 5 "$outfile" | sed 's/^/     sample: /' || true
  return 0
}

# ---- fetch Acinetobacter + outgroups ----
fetch_accessions_by_taxon "Acinetobacter" "$MAX_ACINETOBACTER" "$SUMMARY_LIMIT_ACI" "$ACC_ACI" \
  || die "Failed to fetch Acinetobacter accessions (see $SUM_LOG)"

: > "$ACC_OUT"
for tax in "${OUTGROUP_TAXA[@]}"; do
  tmp="$OUTDIR/tmp/$(sanitize "$tax").acc.txt"
  fetch_accessions_by_taxon "$tax" "$MAX_PER_OUTGROUP" "$SUMMARY_LIMIT_OUT" "$tmp" \
    || die "Failed to fetch outgroup taxon=$tax (see $SUM_LOG)"
  cat "$tmp" >> "$ACC_OUT"
done
sort -u "$ACC_OUT" -o "$ACC_OUT"
log "Outgroup accessions total: $(wc -l < "$ACC_OUT")"

# ---- merge ----
cat "$ACC_SEED" "$ACC_ACI" "$ACC_OUT" 2>/dev/null \
  | grep -v '^\s*$' | grep -v '^\s*#' | sort -u > "$ACC_ALL"
log "Total unique reference accessions: $(wc -l < "$ACC_ALL")"
[[ -s "$ACC_ALL" ]] || die "No reference accessions collected."

# ---- download genomes (batch) ----
ZIP="$OUTDIR/zips/ncbi_refs.zip"
UNZ="$OUTDIR/tmp/ncbi_refs_unzipped"
rm -f "$ZIP"; rm -rf "$UNZ"; mkdir -p "$UNZ"

log "STEP: Download genomes via NCBI datasets (batch) -> $ZIP"
datasets download genome accession --inputfile "$ACC_ALL" --include genome --filename "$ZIP" >>"$DL_LOG" 2>&1 \
  || { tail -n 120 "$DL_LOG" >&2; die "datasets download failed (see $DL_LOG)"; }

log "STEP: Unzip genomes"
unzip -q "$ZIP" -d "$UNZ" >>"$DL_LOG" 2>&1 || { tail -n 120 "$DL_LOG" >&2; die "unzip failed (see $DL_LOG)"; }

# ---- collect FASTA ----
log "STEP: Collect *_genomic.fna -> $REF_DIR"
: > "$REF_LIST"
n=0
while IFS= read -r f; do
  [[ -f "$f" ]] || continue
  acc="$(echo "$f" | grep -oE 'G[CF]A_[0-9]+\.[0-9]+' | head -n 1 || true)"
  [[ -z "${acc:-}" ]] && acc="REF$(printf '%04d' $((n+1)))"
  out="$REF_DIR/${acc}.genomic.fna"
  cp -f "$f" "$out"
  [[ -s "$out" ]] || continue
  echo "$(readlink -f "$out")" >> "$REF_LIST"
  n=$((n+1))
done < <(find "$UNZ" -type f -name "*_genomic.fna")

log "  OK: Reference FASTA collected: $n"
[[ "$n" -gt 0 ]] || die "No genomic.fna found after download."

# ---- fastANI query vs refs ----
RAW_QVSR="$OUTDIR/fastani_query_vs_refs.raw.tsv"
TSV_QVSR="$OUTDIR/fastani_query_vs_refs.tsv"

log "STEP: fastANI query vs refs"
log "  fastANI --ql $QUERY_LIST --rl $REF_LIST -t $THREADS --minFraction $MINFRACTION --fragLen $FRAGLEN -o $RAW_QVSR"
fastANI \
  --ql "$QUERY_LIST" \
  --rl "$REF_LIST" \
  -t "$THREADS" \
  --minFraction "$MINFRACTION" \
  --fragLen "$FRAGLEN" \
  -o "$RAW_QVSR" >>"$ANI_LOG" 2>&1 \
  || { tail -n 160 "$ANI_LOG" >&2; die "fastANI failed (see $ANI_LOG)"; }

[[ -s "$RAW_QVSR" ]] || die "fastANI output empty: $RAW_QVSR"

echo -e "Query\tReference\tANI\tMatchedFrag\tTotalFrag" > "$TSV_QVSR"
awk 'BEGIN{OFS="\t"} {print $1,$2,$3,$4,$5}' "$RAW_QVSR" >> "$TSV_QVSR"

log "Top hits (ANI desc):"
tail -n +2 "$TSV_QVSR" | sort -k3,3nr | head -n 15 | sed 's/^/  /'

# ---- fastANI matrix for all genomes ----
if [[ "$DO_MATRIX" == "yes" ]]; then
  ALL_LIST="$OUTDIR/all_genomes_list.txt"
  cat "$QUERY_LIST" "$REF_LIST" > "$ALL_LIST"

  RAW_ALL="$OUTDIR/fastani_all.raw.tsv"
  log "STEP: fastANI all-vs-all matrix (for tree)"
  log "  fastANI --ql $ALL_LIST --rl $ALL_LIST --matrix -t $THREADS --minFraction $MINFRACTION --fragLen $FRAGLEN -o $RAW_ALL"
  fastANI \
    --ql "$ALL_LIST" \
    --rl "$ALL_LIST" \
    --matrix \
    -t "$THREADS" \
    --minFraction "$MINFRACTION" \
    --fragLen "$FRAGLEN" \
    -o "$RAW_ALL" >>"$ANI_LOG" 2>&1 \
    || { tail -n 160 "$ANI_LOG" >&2; die "fastANI matrix failed (see $ANI_LOG)"; }

  [[ -f "${RAW_ALL}.matrix" ]] || die "Matrix not produced: ${RAW_ALL}.matrix"
  log "  OK: Matrix file: ${RAW_ALL}.matrix"
fi

log "DONE."
log "Accessions counts:"
log "  - seed:         $(wc -l < "$ACC_SEED")"
log "  - acinetobacter:$(wc -l < "$ACC_ACI")"
log "  - outgroups:    $(wc -l < "$ACC_OUT")"
log "  - all refs:     $(wc -l < "$ACC_ALL")"

Kindgerechte Erklärung der Schachnotation

♟️ Kindgerechte Erklärung der Schachnotation

(geeignet für U8 / U10 / U12 – Turnierstandard)

1️⃣ Grundidee der Notation

In einem Turnier muss jede gespielte Zugfolge aufgeschrieben werden, damit:

  • die Partie später analysiert werden kann
  • Schiedsrichter Streitfälle klären können
  • die Partie für DWZ / Elo gewertet werden kann

👉 Notation bedeutet nur:

Welche Figur zieht auf welches Feld.


2️⃣ Buchstaben für die Figuren

Figur Buchstabe Erklärung
König K King
Dame Q Queen
Turm R Rook
Läufer B Bishop
Springer N Knight (K ist schon der König)
Bauer kein Buchstabe ganz wichtig

⚠️ Bauern haben keinen Buchstaben!


3️⃣ Die Felder des Schachbretts

Jedes Feld hat einen Namen:

  • a–h (Spalten, von links nach rechts)
  • 1–8 (Reihen, von unten nach oben aus Weiß-Sicht)

Beispiele:

  • e4
  • f3
  • d5

4️⃣ Normale Züge schreiben

Bauernzüge

  • Bauer zieht nach e4 → e4
  • Bauer zieht nach d5 → d5

👉 Nur das Zielfeld schreiben.


Figuren ziehen

Figur + Zielfeld

Beispiele:

  • Springer nach f3 → Nf3
  • Läufer nach c4 → Bc4
  • Dame nach d1 → Qd1

5️⃣ Schlagen (sehr wichtig)

Figuren schlagen

Figur + x + Zielfeld

Beispiele:

  • Springer schlägt auf e5 → Nxe5
  • Läufer schlägt auf f7 → Bxf7

Niemals aufschreiben, welche Figur geschlagen wurde!


Bauern schlagen (Sonderregel)

Beim Bauern muss man angeben, von welcher Linie er kommt:

  • Bauer von d4 schlägt auf e5 → dxe5
  • Bauer von f3 schlägt auf e4 → fxe4

6️⃣ Schach, Matt, Rochade

  • + = Schach
  • # = Schachmatt
  • O-O = kurze Rochade
  • O-O-O = lange Rochade

Beispiele:

  • Qh5+
  • Qh7#

7️⃣ Zwei gleiche Figuren können auf dasselbe Feld ziehen

(Das ist für Turniere sehr wichtig!)

Regel:

Wenn zwei gleiche Figuren auf dasselbe Feld ziehen könnten, muss man angeben, welche gemeint ist.


Beispiel mit Springern

Beide Springer können nach d2:

  • Springer von b1Nbd2
  • Springer von f1Nfd2

Beispiel mit Türmen

Beide Türme können nach e1:

  • Turm von Reihe 2 → R2e1
  • Turm von Reihe 8 → R8e1

👉 Man ergänzt Buchstabe oder Zahl, bis klar ist, welche Figur zieht.


8️⃣ Beispielpartie (ca. 10 Züge)

1. e4     e5
2. Nf3    Nc6
3. Bc4    Bc5
4. d4     exd4
5. O-O    Nf6
6. e5     Ne4
7. Re1    d5
8. Bxd5   Qxd5
9. Nc3    Nxc3
10. bxc3

Diese Partie enthält:

  • Bauernzüge
  • Schlagen
  • Bauern schlagen
  • Rochade
  • Mehrere Figuren

9️⃣ Richtige Reihenfolge im Turnier

Immer so:

  1. Zug ausführen
  2. Uhr drücken
  3. Zug notieren

❌ Nicht vorher schreiben ❌ Nicht vergessen zu schreiben


🔟 Die 5 häufigsten Fehler bei Kindern

  1. ❌ Bauer bekommt einen Buchstaben (Pe4) ✅ e4

  2. ❌ Aufschreiben, welche Figur geschlagen wurde ✅ nur das Zielfeld

  3. ❌ Das „x“ beim Schlagen vergessen ✅ Nxe5

  4. ❌ Erst schreiben, dann ziehen ✅ erst ziehen

  5. ❌ Panik bei Zeitnot ✅ lieber langsam und sauber schreiben


✅ Merksatz für Kinder

**Welche Figur (Bauer ohne Buchstabe), wohin sie zieht, x beim Schlagen,

  • bei Schach.**

Punkte als Nächstes:

  • 📄 eine noch ausführlichere A4-Turnierfassung auf Deutsch
  • 🧒 eine U8-vereinfachte Version
  • 🧑‍⚖️ erklären, was Schiedsrichter wirklich kontrollieren