File: atomTyper.h

package info (click to toggle)
ball 1.5.0%2Bgit20180813.37fc53c-6
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 239,888 kB
  • sloc: cpp: 326,149; ansic: 4,208; python: 2,303; yacc: 1,778; lex: 1,099; xml: 958; sh: 322; makefile: 95
file content (100 lines) | stat: -rw-r--r-- 2,301 bytes parent folder | download | duplicates (8)
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