/*! \file proProtonate.h \brief Protonates proteins \author Martin Peters \author Andrew Wollacott $Date: 2010/03/29 20:44:27 $ $Revision: 1.6 $ ---------------------------------------------------------------------------- MTK++ - C++ package of modeling libraries. Copyright (C) 2005-2006 (see AUTHORS file for a list of contributors) This file is part of MTK++. MTK++ is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. MTK++ is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lessser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . ---------------------------------------------------------------------------- */ #ifndef PROPROTONATE_H #define PROPROTONATE_H #include #include #include #include #include namespace MTKpp { class collection; class molecule; class submolecule; class atom; struct Bond; class vector3d; class stdLibrary; class stdGroup; class stdFrag; struct stdAtom; struct stdBond; struct stdImproper; struct stdLoop; struct stdAlias; class parameters; struct bondParam; struct angleParam; struct torsionParam; // ============================================================ // Class : proProtonate() // ------------------------------------------------------------ /*! \class proProtonate \brief Class to add hydrogens to proteins \author Martin Peters \version 0.1 \date 2006 */ // ============================================================ class proProtonate { friend class protonate; public: /*! \brief protonate Constructor */ proProtonate(); //! proProtonate Destructor virtual ~proProtonate(); /*! \brief add hydrogens by library \param s1 submolecule 1 pointer \param f1 standard residue 1 */ void addHydrogens(submolecule* s1, stdFrag* f1); protected: /*! \brief Builds the missing atoms in the first residue \param pSubMolecule submolecule pointer \param missingChainAtoms The missing standard atoms which need to be built \param first3Atoms The first 3 main chain atoms in the molecule */ void buildMissingAtoms(submolecule* pSubMolecule, std::vector missingChainAtoms, std::vector first3Atoms); /*! \brief Builds the 3 dummy atom for protonating the first standard residue \param first3Atoms The first 3 main chain atoms in the molecule */ void buildDummyAtoms(std::vector first3Atoms); /*! \brief Determine the best torsion \param pStdFrag stdFrag pointer \param stdAt1 stdAtom pointer \param at2 atom pointer \param at3 atom pointer \param at4 atom pointer \return The best available torsions */ std::vector getBestTorsions(stdFrag* pStdFrag, stdAtom* stdAt1, atom* at2, atom* at3, atom* at4); /*! \brief Optimize polar hydrogens */ void optimizePolarHs(); protected: // DATA //! collection pointer collection* pCol; //! collection boolean bool bCol; //! molecule pointer molecule* pMol; //! molecule boolean bool bMol; //! submolecule list std::vector subMoleculeList; //! atom list std::vector atomList; //! submolecule pointer submolecule* pSubMolecule; //! submolecule pointer submolecule* pSubMoleculeMinus1; //! atom pointer atom* pAtom1; //! atom pointer atom* pAtom2; //! atom pointer atom* pAtom3; //! atom pointer atom* pAtom4; //! Bond pointer Bond* pBond; //! vector3d pointer vector3d* coord1; //! vector3d pointer vector3d* coord2; //! stdLibrary pointer stdLibrary* pStdLibrary; //! stdGroup pointer stdGroup* pStdGroup; //! stdFrag pointer stdFrag* pStdFrag; //! stdFrag pointer stdFrag* pStdFragMinus1; //! stdAtom pointer stdAtom* pStdAtom; //! stdAtom pointer stdAtom* pStdAtom1; //! stdAtom pointer stdAtom* pStdAtom2; //! stdAtom pointer stdAtom* pStdAtom3; //! stdAtom pointer stdAtom* pStdAtom4; //! dummy atom 1 atom* dummyAtom1; //! dummy atom 2 atom* dummyAtom2; //! dummy atom 3 atom* dummyAtom3; //! parameters parameters* pParam; //! std::vector prev3Atoms; }; } // MTKpp namespace #endif // PROPROTONATE_H