Skip to content
  • Studer Gabriel's avatar
    refactor graph optimization in sidechain modelling · d09775fd
    Studer Gabriel authored
    The main idea is to pull out the actual optimization procedure from the
    sidechain module in order to use it for other applications as well.
    The result is a GraphOptimizer object in the core module, that has a heavily
    reduced usage of pointer magic. Eigen matrices are used instead. Two bugs have
    been identified and solved in this procedure.
    
    - Pairwise energy calculation in RRMRotamerGroups. There is a check to skip the
      according edge if all of the absolute energy values are below a certain threshold.
      There was no absolute value calculation => some of the edges have been skipped
      if only negative pairwise energies have been present. This is relatively rare
      and had no too big impact on performance (by default we're using the flexible
      rotamer model anyway)
    - Edge decomposition bug. The edge decomposition removes edges if the removal
      can be compensated by adding single values to the solutions of the two connected
      nodes. The logic to decide whether an edge should be removed or not was correct,
      but the added values were partially wrong. This has a measurable impact on
      performance and we should consider a bugfix relase at some point.
    d09775fd