From Rost Lab Open
Jump to: navigation, search

Welcome to FreeContact

FreeContact is a protein residue contact predictor optimized for speed. Its input is a multiple sequence alignment. FreeContact can function as an accelerated drop-in for the published contact predictors EVfold-mfDCA of DS. Marks (2011) and PSICOV of D. Jones (2011).

FreeContact is accelerated by a combination of vector instructions, multiple threads, and faster implementation of key parts. Depending on the alignment, 8-fold or higher speedups are possible.

A sufficiently large alignment is required for meaningful results. As a minimum, an alignment with an effective (after-weighting) sequence count bigger than the length of the query sequence should be used. Alignments with tens of thousands of (effective) sequences are considered good input.

jackhmmer(1) from the hmmer package, or hhblits(1) from hhsuite can be used to generate the alignments, for example.

FreeContact in Debian and Derivatives

FreeContact and the Perl and Python modules are available in Debian, and are or will soon be available in derivative operating systems such as Ubuntu, Bio-Linux and CloudBioLinux.



Open source code for FreeContact and its Perl and Python modules is available at

Building FreeContact

On a Linux cluster with Intel compilers

Contributed by João Rodrigues:

I managed to compile freecontact and the python interface correctly (tests passing). I am on a 64-bits cluster with the intel compilers. I tried compiling OpenBLAS and using GCC but ran into many problems while linking.. (undefined symbols). Since we have ICC available, I gave it a try.

I modified the following bits:

Standard C program

lib/freecontact.cpp (Line 23)
//#include <cblas.h>
#include <mkl_cblas.h>

Python Interface
added 'mkl_rt', 'mkl_avx', 'mkl_def' to the libraries variable.

Thank you João!

Static linking on Ubuntu

Contributed by Stéphane Téletchéa:

> The dynamic compilation works just fine, but with "make -C src
> freecontact.static",
> I have the following error message :
> make -C src freecontact.static
> make: entrant dans le r=C3=A9pertoire =C2=AB
> /home/alesia/teletchea/tmp/freecontact-1.0.21/src =C2=BB
> /bin/sh ../libtool  --tag=3DCXX   --mode=3Dlink g++ -fopenmp -g -O2 -o
> freecontact.static -all-static -L/usr/lib/atlas-base
> freecontact-freecontact.o   -lboost_program_options-mt
> ../lib/
> libtool: link: g++ -fopenmp -g -O2 -o freecontact.static -static
> freecontact-freecontact.o  -L/usr/lib/atlas-base
> -lboost_program_options-mt ../lib/.libs/libfreecontact.a -lrt
> -lgfortran -lquadmath -lcblas -lf77blas -latlas -llapack -pthread
> -fopenmp
> /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/liblapack.a(xerbla.o)=
> In function `xerbla_':

Ok, I have found the problem :-)
According to this thread :

The lapack is not properly indicated in the command line.
Just changing its position resolves the "problem" :

cd src

g++ -fopenmp -g -O2 -o freecontact.static -static
freecontact-freecontact.o  -L/usr/lib/atlas-base
-lboost_program_options-mt ../lib/.libs/libfreecontact.a -lrt -llapack
-lgfortran -lquadmath -lcblas -lf77blas -latlas -pthread -fopenmp

Note that "-llapack " is now before lgfortran...

Thank you Stephane!

This fix will soon be implemented in the next version of the source.


FreeContact: fast and free software for protein contact prediction from residue co-evolution