Some of the noteworthy aspects and features of libRosetta are listed below.
Keys
- Named lookup keys for atoms, bonds, residues, chi angles, etc.
- Replaces "magic" type numbers that limit extensibility
- Simple, uniform lookup syntax:
aa[ CA ] Atom
aa[ Chi3 ] Chi angle
- Key containers provide simplicity of map lookup with the speed of vector lookup
- Keys are sort of a souped up enumerators with class hierarchy, identifier strings, and a built-in system for key lookup from strings (for command line and input file processing)
- Keys don't normally expose "magic" index numbers so code can't be written depending on them (which is a major Rosetta limitation)
Atom Types
- Atom types are easy to add
- Energy tables only created for atoms present in structures so adding atom types doesn't increase memory use
Residue Variants
- Variant/NCAA residues are easy to add
- Special residue types can be optionally linked in to a Rosetta build (pluggability)
Termini
- Optional full termini support is intrinsic to residue objects
- No termini tests sprinkled throughout code
Tetrads
- Natural bisector-tied branch atom placement
- No fake atoms needed at termini
- Supports bond angle and branch atom placement as degrees of freedom
Options
- New modern options system supporting nested option groupings
- Smart option group context deduction allow short option names to be used
- Options can be read from options files specified as @file on the command line
- File/path options automatically converted to platform format
- Fast option lookup based on named option keys
- Option name errors detected at compile time
- Generates full documentation in -help or Wiki table form
- Can display all or specified options and their values
Performance (relative to classic Rosetta)
- Refold is 2.5x faster
- fullatom energy is substantially faster (1.8-2.3x faster for 100-600 residues) with improved scalability of O( N log N ) complexity instead of O( N2 )
Build Speed
- Fast builds due to decoupled, interface-based design (< 4 min on a single processor Pentium 4 notebook)
Build Flexibility
- Primary scalar types (Distance, Energy, Weight, etc.) are typedef names that allow libRosetta to be easily built with float or double precision for each or all the floating point types
|