Version 2.0.3

@mittinatten mittinatten released this Mar 20, 2018 · 4 commits to master since this release

This version separates the Python bindings into a separate module. To be able to release Windows binaries of the Python module, the code has been changed to be C89 compatible where necessary, with a few macros to allow using restrict and inline when compiled with a C99 compiler. There are no changes to the behavior of the CLI or C API in this release.

FreeSASA 2.0.2

@mittinatten mittinatten released this Oct 22, 2017 · 17 commits to master since this release

  • Relative SASA values are now calculated using the same reference
    configurations as NACCESS. This means relative SASA values will
    differ slightly from those of previous versions.
  • Python bindings compatible with Python 3.
  • Man page added
  • Bugs fixed:
    • CLI option --separate-models now outputs all models in PDB output.
    • On some platforms compilation failed when libxml and/or json-c was
      not present. Now fixed.
    • Some memory allocations were not checked for failure in S&R
      calculations. These are now properly checked, and done more
      seldomly, which should improve performance slightly.
  • Residue numbers now include the iCode field for insterted residues
  • Compatibility with Microsoft C Compiler:
    • No variable length arrays
    • Some macros and keywords are redefined when necessary
    • Lexer does not depend on header unistd.h
    • GNU getline not used, replaced by fgets()

FreeSASA 2.0.1

@mittinatten mittinatten released this Jun 3, 2017 · 61 commits to master since this release


  • Add function calcCoord() to Python interface, wraps C function
  • Expand selection syntax:
    • Allow negative residue numbers resi \-10 (escaped with
      backslash), and expression such as resi \-10-\-5+\-3-5
    • Allow open-ended residue ranges resi -10, resi 10- and
      combined as resi -10+15-20+30-
    • Allow primes in atom names (i.e. O5')
    • Allow selection names to be numbers or start with a number

FreeSASA 2.0

@mittinatten mittinatten released this Dec 17, 2016 · 75 commits to master since this release

Version 2.0 involves a large number of minor changes, mainly to the C API. The two most siginificant new featueres is a new tree interface for navigating the results, and the ability to export results to XML and JSON.



  • Classifier configuration files now have new name field


  • Classifier interface changed.
    • Pointer is now opaque and classification done via
      freesasa_classifier_class() instead of
    • Classifiers only classify polar/apolar/unknown. Arbitrary classes
      no longer allowed.
    • The static classifiers in freesasa.h have reference values for
      all residue types, allowing calculation of relative SASA for for
      example RSA output. At the moment no support for defining these
      values in classifier configuration file (TODO?).
    • Interface for classifying using string-value pairs has been
      removed (type freesasa_strvp and functions
      freesasa_result_classifiy() and freesasa_strvp_free()). The
      new tree-interface should be used instead.
  • Structure interface changed: A structure is initialized with a
    classifier and the relevant classifier values are stored directly in
    the structure. This assures that the structure and results are
    always analyzed with consistent parameters. One effect is that the
    function freesasa_calc_structure() no longer takes the atomic
    radii as an explicit parameters.
  • The logging functions freesasa_log(), freesasa_write_result(),
    freesasa_write_parameters(), freesasa_write_rsa(),
    freesasa_write_pdb(), freesasa_per_residue(),
    freesasa_per_residue_type() and freesasa_per_chain() have been
    removed from the interface. The same functionality can be achieved
    using freesasa_tree_export().


  • CLI output format is controlled by the option -f or
    --format. Options specifying files for specific outpt types have
    been removed, and the separate options controlling output format
    have been deprecated (see below). An option --deprecated can be
    used to list these. This has also made the option -l or --no-log



  • New output formats
    • XML using libmxl2 (optional)
    • JSON using JSON-C (optional)
    • RSA (was present already in 1.1, but interface now consolidated)
  • To build FreeSASA 2.0 the libraries libxml2 and JSON-C need to be
    installed. These can be disabled by ./configure --disable-json --disable-xml to build a dependency-free version of the library.


  • New node interface. Results in tree form can be generated using
    freesasa_calc_tree() or freesasa_tree_init(). The feature was
    added to facilitate generation of XML and JSON output, but can be
    used directly to analyze results as well. The results of a
    calculation are to now best exported using freesasa_tree_export().


  • structure.c was refactored, hopefully code is slightly more
    transparent now
  • general bug cleaning, some minor memory leaks removed.
  • Memory error mocking is now more sophisticated: uses dlsym instead
    of macros, allowing more uniform test structure.



  • options -B, -r, -R, --rsa and -l are deprecated (use
    -f or --format instead)


  • Logging using structure and results now deprecated in favor of
    using tree interface
  • Function freesasa_select_area() is deprecated

Add RSA output

@mittinatten mittinatten released this Apr 14, 2016 · 312 commits to master since this release


  • CLI options --rsa and --rsa-file can be used to output RSA files similar to those of NACCESS. RSA is mainly intended to be useful as a CLI setting, the RSA API is still to be considered experimental. Since there might be need for more functionality before it stabilizes. A file format for RSA reference values might be added in the future, for example.
  • The library ships with AXA tripeptides that can be used to calculate new RSA reference SASA values, and a simple Perl script that performs this calculation and outputs C code for the combined reference values for all 20 residues.
  • Options -O and --radius-from-occupancy were added to allow using the occupancy values in the input file as atomic radii. This can be useful for on the fly changes, or if individual atoms need special treatment.
  • An NACCESS configuration is now also stored statically in the library, this allows the CLI to produce RSA output with verified consistency between atomic radii and SASA reference values. This is access through the option --radii=naccess (or --radii=protor).
  • Travis and Coveralls testing have been added to the configuration

Moving to MIT license

@mittinatten mittinatten released this Mar 7, 2016 · 365 commits to master since this release

  • Changed to MIT license (as per request in #11).
  • Added experimental Bio.PDB interface in Python bindings.
  • Some internal rewriting to make code more readable.

Reference to accepted paper. Bug-fixes in multithreading.

@mittinatten mittinatten released this Feb 29, 2016 · 380 commits to master since this release

This release involves some cleanup, refactoring and added documentation. A reference to the final accepted paper has been added to the readme-file.

The only changes to the code that affect users are thread-related:

  • If thread-creation or joining fails, the program stops the calculation gracefully instead of aborting
  • If a user requests more threads than there are atoms, the number of threads is reduced to the number of atoms (instead of the program stalling) and a warning is printed.

State at the time of submission

@mittinatten mittinatten released this Jan 27, 2016 · 392 commits to master since this release

This release only includes minor changes from 1.0, which don't affect the library functionality. It is released separately to show the state of the code at the moment the paper describing the project was submitted for publication. A preprint can be found at

Changes from 1.0:

  • README mentions preprint
  • example.c is slightly more elaborate
  • Cleanup of some code comments
  • Changed filename COPYING to LICENSE to help GitHub automatically detect the license.

Official release

@mittinatten mittinatten released this Jan 20, 2016 · 401 commits to master since this release

This marks the official release of FreeSASA.

Changes from 0.6.2:

  • Output format has been updated, a few of the parameters have gotten shorter labels and the INPUT section now has a chains section to show which chains the results pertain to.
  • The function freesasa_log() is deprecated.

Improved output format and bug fixes

@mittinatten mittinatten released this Jan 14, 2016 · 415 commits to master since this release

  • Output now doesn't repeat the parameters section if several calculations are made. Therefore the input section has been separated from parameters.
    • To make this possible the function freesasa_log() has been deprecated and replaced by freesasa_write_parameters() and freesasa_write_result().
  • A bug where unrecognized long-options caused seg-faults has been fixed.
  • Errors from fprintf() are now caught more consistently throughout the library.
  • CLI documentation has been expanded with a more elaborate example.