Modelling protein side-chain conformations using constraint logic programming