Skip to content

PhyML aborts during TBE bootstrap in alrt.c:904 after small likelihood decrease #214

@Menichelli

Description

@Menichelli

Summary

PhyML aborts during a non-parametric bootstrap analysis with TBE enabled. The failure occurs in alrt.c at line 904 from Make_Target_Swap, after a small likelihood decrease relative to lk_init.

PhyML version

The run log reports:

PhyML 3.3.20250429
AVX enabled: yes
SSE enabled: yes

Input characteristics

The alignment is PHYLIP DNA data:

836 taxa
918 sites
663 compressed patterns
390 constant sites (42.48%)

The original alignment is private, so I cannot attach it publicly here. I can provide it privately if needed.

Command

phyml \
  -i input.phy \
  -d nt \
  --no_memory_check \
  --run_id BseqOG \
  --rand_start \
  -s SPR \
  --tbe \
  -b 100 \
  --leave_duplicates \
  --print_site_lnl \
  --ancestral \
  -m GTR \
  -f e \
  --freerates \
  -c 4

What happened

The ML search completed and ancestral sequences were estimated. PhyML then started the bootstrap analysis:

. Log likelihood of the current tree: -50614.866041510336799547076.

. Estimating ancestral sequences...

. Launch bootstrap analysis on the most likely tree...

. Non parametric bootstrap analysis
  [.............
== [1113] v1=1311 v2=303 v3=1330 v4=373
== tree->c_lnL = -48837.934570 lk_init = -48837.930794

== Err. in file alrt.c at line 904

. Type enter to exit.
PhyML failed with exit code 1.

The difference is about 0.003776 log-likelihood units:

lk_init      = -48837.930794
tree->c_lnL = -48837.934570
delta        = -0.003776

This trips the guard in Make_Target_Swap:

if(tree->c_lnL < lk_init - tree->mod->s_opt->min_diff_lk_global)
{
  PhyML_Fprintf(stderr,"\n== [%3d] v1=%d v2=%d v3=%d v4=%d",b_fcus->num,v1->num,v2->num,v3->num,v4->num);
  PhyML_Fprintf(stderr,"\n== tree->c_lnL = %f lk_init = %f\n",tree->c_lnL,lk_init);
  PhyML_Fprintf(stderr,"\n== Err. in file %s at line %d\n\n",__FILE__,__LINE__);
  Warn_And_Exit("");
}

Expected behavior

A small numerical decrease during bootstrap tree optimization should probably not abort the whole PhyML run, especially after many hours of computation.

Possible alternatives:

  • tolerate small decreases at this step,
  • restore the previous likelihood/topology and continue,
  • skip the problematic bootstrap replicate with a warning.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions