00001
00002
00003
00004
00005 #ifndef BALL_STRUCTURE_HYBRIDISATIONPROCESSOR_H
00006 #define BALL_STRUCTURE_HYBRIDISATIONPROCESSOR_H
00007
00008 #ifndef BALL_CONCEPT_PROCESSOR_H
00009 #include <BALL/CONCEPT/processor.h>
00010 #endif
00011
00012 #ifndef BALL_KERNEL_ATOMCONTAINER_H
00013 #include <BALL/KERNEL/atomContainer.h>
00014 #endif
00015
00016 #ifndef BALL_DATATYPE_HASHMAP_H
00017 #include <BALL/DATATYPE/hashMap.h>
00018 #endif
00019
00020 #ifndef BALL_KERNEL_BOND_H
00021 #include <BALL/KERNEL/bond.h>
00022 #endif
00023
00024 #ifndef BALL_DATATYPE_OPTIONS_H
00025 #include <BALL/DATATYPE/options.h>
00026 #endif
00027
00028 #ifndef BALL_DATATYPE_STRINGHASHMAP_H
00029 #include <BALL/DATATYPE/stringHashMap.h>
00030 #endif
00031
00032
00033 #include <map>
00034
00035
00036 namespace BALL
00037 {
00038
00042 class BALL_EXPORT HybridisationProcessor
00043 : public UnaryProcessor<AtomContainer>
00044 {
00045
00046 public:
00047
00051
00052 struct BALL_EXPORT Option
00053 {
00057 static const char* ATOM_TYPE_SMARTS_FILENAME;
00058
00062 static const char* ATOM_TYPE_FF_FILENAME;
00063
00073 static const String METHOD;
00074
00075 };
00076
00078 struct BALL_EXPORT Default
00079 {
00081 static const char* ATOM_TYPE_SMARTS_FILENAME;
00082
00086 static const char* ATOM_TYPE_FF_FILENAME;
00087
00091 static const String METHOD;
00092 };
00093
00094 struct BALL_EXPORT Method
00095 {
00096 static const String SMART_MATCHING;
00097 static const String STRUCTURE_BASED;
00098 static const String FF_BASED;
00099 };
00100
00101
00103
00104
00108
00109 BALL_CREATE(HybridisationProcessor);
00110
00112 HybridisationProcessor();
00113
00115 HybridisationProcessor(const HybridisationProcessor& hp);
00116
00119 HybridisationProcessor(const String& smarts_file_name, const String& ff_file_name) throw(Exception::FileNotFound);
00120
00122 virtual ~HybridisationProcessor();
00124
00128
00130 virtual bool start();
00131
00133 virtual Processor::Result operator () (AtomContainer& ac);
00135
00139
00140 Size getNumberOfHybridisationStatesSet();
00141
00143 void setAtomTypeSmarts(const String& file_name) throw(Exception::FileNotFound);
00144
00146 vector< std::pair<String, Size> > getHybridisationMap() { return atom_type_smarts_;};
00148
00152
00153 HybridisationProcessor& operator = (const HybridisationProcessor& hp);
00155
00159
00160 Options options;
00161
00164 void setDefaultOptions();
00166
00167 protected:
00168
00171 struct Elements_
00172 {
00174 String type;
00176 unsigned char hyb;
00177 };
00178
00181 struct AtomNames_
00182 {
00184 String a1;
00186 String a2;
00188 String a3;
00189 };
00190
00192 bool readAtomTypeSmartsFromFile_(const String& file_name = "") throw(Exception::FileNotFound);
00193
00195 Size num_hybridisation_states_;
00196
00198 vector< std::pair<String, Size> > atom_type_smarts_;
00199
00203 StringHashMap<StringHashMap<StringHashMap<std::multimap<float, AtomNames_> > > > bond_angles_;
00204
00205 bool readAndInitBondAnglesFromFile_(const String& file_name = "") throw(Exception::FileNotFound);
00206
00209 StringHashMap<Elements_> elements_;
00210
00211
00213 bool valid_;
00214
00215
00217 double AverageBondAngle_(Atom* a);
00218
00219 };
00220
00221 }
00222
00223
00224 #endif // BALL_STRUCTURE_HYBRIDISATIONPROCESSOR_H