1 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 Copyright (c) 2011-2021 The plumed team 3 (see the PEOPLE file at the root of the distribution for a list of names) 4 5 See http://www.plumed.org for more information. 6 7 This file is part of plumed, version 2. 8 9 plumed is free software: you can redistribute it and/or modify 10 it under the terms of the GNU Lesser General Public License as published by 11 the Free Software Foundation, either version 3 of the License, or 12 (at your option) any later version. 13 14 plumed is distributed in the hope that it will be useful, 15 but WITHOUT ANY WARRANTY; without even the implied warranty of 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 GNU Lesser General Public License for more details. 18 19 You should have received a copy of the GNU Lesser General Public License 20 along with plumed. If not, see <http://www.gnu.org/licenses/>. 21 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ 22 #ifndef __PLUMED_tools_Torsion_h 23 #define __PLUMED_tools_Torsion_h 24 25 #include "Vector.h" 26 27 namespace PLMD { 28 29 /// \ingroup TOOLBOX 30 /// Class to compute torsional angles. 31 /// I define it as a class even if it does not contain anything. The reason 32 /// is that in the future I would like to extend it to contain options about 33 /// how the calculation should be done. So, for now use it as 34 /// Torsion t; 35 /// double angle=t.compute(v1,v2,v3); 36 /// I know it is a bit misleading. If we really do not need to store "options" 37 /// inside the Torsion class, we can remove it later and write compute as 38 /// a static function. 39 class Torsion { 40 // still empty, but may accommodate some options in the future 41 public: 42 /// Compute the angle between the projections of v1 and v3 on the plane orthogonal 43 /// to v2. To have a "normal" definition (= plumed1), use it as 44 /// compute(r01,r12,r23); 45 /// See ColvarTorsion for a practical usage... 46 double compute(const Vector& v1,const Vector& v2,const Vector& v3)const; 47 /// This is the version which also computes the derivatives wrt the arguments. 48 double compute(const Vector& v1,const Vector& v2,const Vector& v3,Vector& d1,Vector& d2,Vector& d3)const; 49 }; 50 51 } 52 53 #endif 54