/*!
\file protonate.h
\brief Protonates a molecule
\author Martin Peters
$Date: 2010/03/29 20:44:27 $
$Revision: 1.16 $
----------------------------------------------------------------------------
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 PROTONATE_H
#define PROTONATE_H
#include
#include
#include
#include
#include
#include "Utils/constants.h"
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 ligProtonate;
class watProtonate;
// ============================================================
// Class : protonate()
// ------------------------------------------------------------
/*!
\class protonate
\brief Class to add hydrogens
*/
// ============================================================
class protonate
{
public:
/*!
\brief protonate Constructor
\param col collection pointer
*/
protonate(collection *col = 0);
/*!
\brief protonate Constructor
\param mol molecule pointer
*/
protonate(molecule *mol = 0);
//! protonate Destructor
virtual ~protonate();
/*!
\brief Adds hydrogens
*/
void run();
/*!
\brief Optimize polar hydrogen in a collection
*/
void optimizePolarHs();
protected: // FUNCTIONS
/*!
\brief Initialize
*/
void initialize();
/*!
\brief Adds hydrogens
*/
void runCol();
/*!
\brief Adds hydrogens
*/
void runMol(molecule* pMolecule);
/*
\brief Attempt to build the missing heavy atoms of a fragment
\param pSubMolecule submolcule pointer
*/
int buildMissingHeavyAtoms(submolecule* pSubMolecule);
protected: // DATA
//! proProtonate
proProtonate* pPro;
//! ligProtonate
ligProtonate* pLig;
//! watProtonate
watProtonate* pWat;
//! 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;
//! stdLibrary pointer
stdLibrary* pStdLibrary;
//! stdGroup pointer
stdGroup* pStdGroup;
//! stdFrag pointer
stdFrag* pStdFrag;
//! stdFrag pointer
stdFrag* pStdFragMinus1;
//! parameters
parameters* pParam;
//!
std::vector prev3Atoms;
};
} // MTKpp namespace
#endif // PROTONATE_H