I think it would be good to have an AnglesRestraint which stores a list of chains and applies an AngleRestraint-like restraint to each triple in each chain. It is easier to set up and maintain than a whole mess of AngleRestraints and more efficient too.
Comments?
//! Restraint the angles between particles /** Currently the particles can be added as chains and the angle of each three successive particles in the chain is restrained. \ingroup restraint */ class IMPDLLEXPORT AnglesRestraint : public Restraint { public: //! Create the angle restraint. /** \param[in] score_func Scoring function for the restraint. */ AnglesRestraint(UnaryFunction* score_func); virtual ~AnglesRestraint(){}
IMP_RESTRAINT("0.5", "Daniel Russel");
//! Add a chain of particles /** Each three successive particles are restrained*/ void add_chain(const Particles &ps);
//! Clear all the store chains void clear_chains(); protected: std::auto_ptr<UnaryFunction> score_func_; std::vector<int> chain_splits_; };