1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
// -*- Mode: C++; tab-width: 2; -*-
// vi: set ts=2:
//
#ifndef BALL_STRUCTURE_ATOMTYPER_H
#define BALL_STRUCTURE_ATOMTYPER_H
#ifndef BALL_DATATYPE_HASHSET_H
# include <BALL/DATATYPE/hashSet.h>
#endif
#ifndef BALL_DATATYPE_STRINGHASHMAP_H
# include <BALL/DATATYPE/stringHashMap.h>
#endif
#include <vector>
namespace BALL
{
using std::vector;
class Molecule;
class System;
class Atom;
/** Base class for a programable Atom typer.
The types are assigned by using a line based file with SMARTS expressions.
For usage have a look at the derived class MMFF94AtomTyper.\par
<br><br>
Usage:<br>
\code
AtomTyper typer;
typer.setRings(...);
typer.setAromaticRings(...);
typer.setup(parameter_file_name);
typer.assignTo(system);
\endcode
\ingroup StructureMiscellaneous
*/
class BALL_EXPORT AtomTyper
{
public:
BALL_CREATE(AtomTyper)
///
AtomTyper();
///
AtomTyper(const AtomTyper& t);
///
virtual ~AtomTyper() {};
/// Setup with the given line based file with SMARTS expressions
bool setup(const String& filename);
///
virtual void assignTo(System& s);
///
void setAromaticRings(const vector<HashSet<Atom*> >& rings) { aromatic_rings_ = rings;}
///
void setRings(const vector<HashSet<Atom*> >& rings) { rings_ = rings;}
// just for debugging: computational times for the individual SMARTS expressions
static StringHashMap<float> rule_times;
protected:
///
void assignTo(Molecule& mol);
/** To be overloaded in derived classes
to add support for additional properties e.g. charges
*/
virtual void assignSpecificValues_(Atom&) {};
/** To be overloaded in derived classes
to add support for additional properties e.g. charges
*/
virtual bool specificSetup_() { return true;}
vector<String> names_;
vector<String> rules_;
vector<Index> types_;
// entries in the file for specificSetup_() :
vector<vector<String> > fields_;
// number for fields per line in the config file
Size number_expected_fields_;
vector<HashSet<Atom*> > rings_;
vector<HashSet<Atom*> > aromatic_rings_;
StringHashMap<vector<Position> > element_to_rules_;
HashSet<Atom*> atoms_;
};
} // namespace BALL
#endif // BALL_STRUCTURE_ATOMTYPER_H
|