Skip to content

History

Revisions

  • methods: assembly damage artifact — suppression scaling table, encoder feature explanation, deconvolve fix

    @genomewalker genomewalker committed Feb 26, 2026
    1c268d8
  • bin2: document mm_5p_tc as baked-in damage proxy, clarify ct_rate suppression

    @genomewalker genomewalker committed Feb 26, 2026
    ff88ff7
  • benchmarks: simplify comparison table to winning AMBER config only

    @genomewalker genomewalker committed Feb 26, 2026
    84501be
  • benchmarks: update COMEBin to 9/8/8 (top 3 of 5 single-BAM reruns, mean 8.3)

    @genomewalker genomewalker committed Feb 26, 2026
    a82e663
  • polish: register amber polish as CLI subcommand

    @genomewalker genomewalker committed Feb 26, 2026
    c296a61
  • assembly damage artifact: explain baked-in damage + document amber polish

    @genomewalker genomewalker committed Feb 26, 2026
    e90926a
  • output-formats: inline damage columns + full abin binary format spec

    @genomewalker genomewalker committed Feb 26, 2026
    1cae287
  • docs: remove sslib/dslib claim from mismatch spectrum description

    @genomewalker genomewalker committed Feb 26, 2026
    3645e32
  • docs: fix three feature dimension errors caught by code audit (mismatch spectrum, CGR layout, damage coverage)

    @genomewalker genomewalker committed Feb 26, 2026
    06f4f35
  • docs: humanize Methods prose, fix em dash overuse and inline bold headers

    @genomewalker genomewalker committed Feb 26, 2026
    fd70d99
  • docs: humanize README prose, remove redundant damage-weight explanation

    @genomewalker genomewalker committed Feb 26, 2026
    f6ead53
  • docs: add COMEBin benchmark results, remove chimera subcommand

    @genomewalker genomewalker committed Feb 26, 2026
    2c004ee
  • docs: credit COMEBin baseline, frame AMBER as extension not replacement

    @genomewalker genomewalker committed Feb 26, 2026
    41fda1e
  • docs: add loss formula, fix encoder row, expand resolve math - README: show full SCG-SupCon loss with damage weights inline; fix encoder feature table row; add p_cobin formula for resolve section - Methods wiki: add LaTeX p_cobin formula + explain per-pair denominator rationale; add resolve reproducibility note (3 runs → 10 HQ core, ≥5 runs → borderline bins accumulate evidence)

    @genomewalker genomewalker committed Feb 26, 2026
    3176f8d
  • docs: add SCG-SupCon and internal C++ quality estimation - README: rename section to SCG-supervised damage-aware contrastive learning; explain P(i) = aug_views ∪ SCG co-members; 6 augmented views - Methods wiki: full SCG-SupCon loss derivation with positive set definition, exclusion mask, 6-view augmentation, damage weighting - Methods wiki: new internal quality estimation section — 107-marker C++ SCG engine, completeness/contamination formulae, dup_excess definition; clarify CheckM2 is post-hoc only, not called during binning

    @genomewalker genomewalker committed Feb 26, 2026
    6b653bb
  • production-ready repo: README, wiki, cmake refactor, CPU build path - CMakeLists.txt: rename target amber_gpu→amber, AMBER_USE_TORCH default OFF, split CORE vs TORCH sources, git version detection, install target, CTest - cmake/version.h.in: git-based version header - include/amber/config.hpp: VERSION from generated version.h - src/bin2/encoder/damage_aware_infonce.h: move DamageProfile/DamageAccumulator outside #ifdef USE_LIBTORCH (pure C++ structs, no LibTorch dependency) - src/cli/cmd_bin_stub.cpp: amber bin error with CPU/GPU build instructions - src/algorithms/damage_extraction_stub.cpp: amber damage stub when TORCH=OFF - README.md: comprehensive with math overview, install paths, benchmarks, citation - wiki/: Home, Methods-and-Model, aDNA-Features, Command-Reference, Output-Formats, Quick-Start-Tutorial, Benchmarks, _Sidebar - .github/workflows/ci.yml + release.yml: CI and tag-triggered releases - conda_recipe/meta.yaml: Bioconda recipe skeleton - environment.yml: dev environment - .gitignore: fix 'amber' → '/amber' (was excluding include/amber/ directory) - polish.cpp, strain_deconvolution.h: --write-modern-bam + deconv stats - Snakefile: assemble_s17_modern rule, deconvolve modern_bam output

    @genomewalker genomewalker committed Feb 26, 2026
    7198679
  • dead code removal: -821 lines, zero dead config fields - Delete orphaned files: ensemble_leiden, label_diffusion_backend, swav_pcl_encoder, dacl_encoder, teacher_student_encoder, info_nce_loss - Remove from build: ensemble_leiden.cpp - Bin2Config: drop use_multiscale_cgr, encoder_qc_threshold/max_extra, restart_stage1_res; CLI: drop --multiscale-cgr, --encoder-qc-*, --stage1-res handlers - QualityLeidenConfig: drop use_constrained_mode, epsilon_budget, marker_edge_penalty, use_map_equation, calibrate_resolution, res_search_min/max, restart_stage1_res, n_res_trials - quality_leiden_backend.cpp: remove hlog, delta_map_equation, init_comm_internal, calibrate_resolution, move_nodes_fast_quality, refine_partition_quality, calibrate_lambda (unordered_map), init_comm_markers, aggregate_markers, update_comm_markers, use_map_equation branches, N_RES>1 resolution sweep, marker_edge_penalty branch; drop comm_internal/q_total from mt-kernel signatures - bin2.cpp: remove dead 197-dim features vector, damage_beta assignments - edge_weighter: remove damage_beta_ field; weight() is pure exp(-dist/bw)

    @genomewalker genomewalker committed Feb 23, 2026
    12a09c6
  • snp_tree: coverage-aware N-filling + --redo for all iqtree rules - extract_snps: add show-coords -r -T to produce per-sample .coords files - build_snp_matrix: parse alignment coverage intervals; use N for uncovered positions instead of ref_base (important for partial ancient/modern contigs) - All iqtree3 rules (codon, snp_tvonly, snp_all): add --redo to avoid stale checkpoint failures when input alignments are rebuilt

    @genomewalker genomewalker committed Feb 23, 2026
    81b44a3
  • workflow: --local flag for non-GPU targets (--executor local --cores 16)

    @genomewalker genomewalker committed Feb 23, 2026
    3f43fa6
  • deconvolve: per-position uncertainty output + 4 bug fixes - Add --write-position-stats flag: emits position_stats.tsv (posteriors, effective depths, p_diff, flags bitmask) and high_confidence_mask.bed (low-confidence SNP positions for downstream exclusion) - Fix depth thresholds: min_ancient_depth/min_modern_depth CLI values now actually used; previously hardcoded kMinEffDepth=3.0 silently overrode them - Fix flags column: write integer bitmask (e.g. 5), not concatenated bits (101) - Fix --n-views validation: error if <2 (would produce NaN InfoNCE loss) - Fix CUBLAS_WORKSPACE_CONFIG: set via setenv() in AmberTrainer ctor before deterministic mode is enabled, not only via external test script - Fix validate_bins_checkm2.sh: mixed .fa+.fa.gz dirs now decompress all gz into tmp dir alongside existing .fa files - Workflow: deconvolve rule emits mask, build_snp_matrix filters masked SNPs, run_paper.sh uses snakemake9 env (v9.16.3)

    @genomewalker genomewalker committed Feb 23, 2026
    44425f4
  • resolve: comprehensive per-bin stats + fix ordering bug - Replace resolve_stats.tsv with bin_stats.tsv adding genome_size, n50, max_contig, gc_content, mean_cobin_weight - Fix unordered_map iteration ordering bug: damage and FASTA loops previously used different iteration orders, mismatching bin names; now use single stable sorted-by-label pass - Add O(1) reverse lookup table (ci_to_local) replacing O(n) scan - Add frag_std column to damage_per_bin.tsv - Write all outputs (FASTA, bin_stats, damage, smiley) in one loop

    @genomewalker genomewalker committed Feb 22, 2026
    77b95a6
  • Add amber resolve with parallel Leiden and damage export - New `amber resolve` subcommand for cross-run consensus binning - Loads N run.abin files, builds co-binning affinity graph - Parallel Leiden sweep (25 runs with OpenMP, ~5x speedup) - SCG-guided resolution selection (best of 5 res × 5 seeds) - Exports damage_per_bin.tsv and smiley_plot_rates.tsv for visualization - Binary .abin format for efficient embedding/damage storage

    @genomewalker genomewalker committed Feb 22, 2026
    02fa4c7
  • Length-weight CGR features by contig size Sigmoid reliability weight w = sigmoid(4 * (log10(len) - log10(4000))) attenuates 9 CGR dims for short contigs, falling back to encoder+aDNA. Grounded in Bog-38 analysis: contaminating contigs avg 2.2kb (w≈0.22) vs core archaeal contigs avg 4.8kb (w≈0.58). Applied at both CGR concatenation sites (initial embeddings and consensus kNN loop).

    @genomewalker genomewalker committed Feb 21, 2026
    f245745
  • Revert "Length-weight CGR features by contig size" This reverts commit a6d73373dcdf655b2b6aedd47d23f5f0b7807930.

    @genomewalker genomewalker committed Feb 21, 2026
    0b1a709
  • Revert "Move CGR+aDNA into encoder input (167-dim), remove post-hoc concatenation" This reverts commit 5d5bc73add77841bb42a6b2fdcce3aec46bd42a4.

    @genomewalker genomewalker committed Feb 21, 2026
    e6f376b
  • Revert "Fix: lambda auto& -> auto&& for tensor accessor rvalue binding" This reverts commit f05b5655a99a5dcd5995f79742de4b73a2e659cd.

    @genomewalker genomewalker committed Feb 21, 2026
    27edd6a
  • Revert "Fix: remove aDNA from encoder input, keep CGR only (147-dim)" This reverts commit cfb96b4fada5305f86abd3ed2fbfd726e7c98205.

    @genomewalker genomewalker committed Feb 21, 2026
    c38657e
  • Fix: remove aDNA from encoder input, keep CGR only (147-dim) aDNA per-contig fingerprints are unique identifiers that cause the encoder to memorize damage profiles → over-fragmentation (0 HQ, 100+ bins). aDNA signal handled exclusively via damage-aware InfoNCE loss weighting. CGR retained in encoder input (147-dim) as compositional signal.

    @genomewalker genomewalker committed Feb 20, 2026
    cfb96b4
  • Fix: lambda auto& -> auto&& for tensor accessor rvalue binding

    @genomewalker genomewalker committed Feb 20, 2026
    f05b565
  • Move CGR+aDNA into encoder input (167-dim), remove post-hoc concatenation Previously: encoder saw 138-dim (cov+TNF), then CGR+aDNA appended to 157-dim output before L2 normalization — causing scale mismatch (~80% encoder, ~18% aDNA, ~2% CGR after normalization). Now: encoder input is 167-dim [cov+TNF+CGR×9+aDNA×20]. All signals learned jointly via InfoNCE. L2 normalization applied once to 128-dim encoder output. CGR and aDNA are contig-level (constant across views) — valid encoder input, provides separation signal between different genomes without breaking contrastive learning.

    @genomewalker genomewalker committed Feb 20, 2026
    5d5bc73