Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef OB_SPECTROPHORE_H
00027 #define OB_SPECTROPHORE_H
00028
00029
00040 #include <set>
00041 #include <openbabel/mol.h>
00042
00043
00044 #define MIN(x, y) (((x) < (y)) ? (x) : (y))
00045 #define MAX(x, y) (((x) > (y)) ? (x) : (y))
00046 #define N_PROPERTIES 4
00047
00048
00049
00050 namespace OpenBabel
00051 {
00052
00302 class OBAPI OBSpectrophore
00303 {
00304 public:
00305
00308 enum AccuracyOption {AngStepSize1,
00309 AngStepSize2,
00310 AngStepSize5,
00311 AngStepSize10,
00312 AngStepSize15,
00313 AngStepSize20,
00314 AngStepSize30,
00315 AngStepSize36,
00316 AngStepSize45,
00317 AngStepSize60};
00318
00321 enum NormalizationOption {NoNormalization,
00322 NormalizationTowardsZeroMean,
00323 NormalizationTowardsUnitStd,
00324 NormalizationTowardsZeroMeanAndUnitStd};
00325
00328 enum StereoOption {NoStereoSpecificProbes,
00329 UniqueStereoSpecificProbes,
00330 MirrorStereoSpecificProbes,
00331 AllStereoSpecificProbes};
00332
00334
00339 OBSpectrophore(void);
00340
00346 OBSpectrophore(const OBSpectrophore& sphore);
00347
00350 virtual ~OBSpectrophore(void);
00352
00361 OBSpectrophore& operator=(const OBSpectrophore& sphore);
00363
00382 void SetResolution(const double r = 3.0);
00383
00412 void SetAccuracy(const AccuracyOption a = AngStepSize20);
00413
00436 void SetStereo(const StereoOption s = NoStereoSpecificProbes);
00437
00455 void SetNormalization(const NormalizationOption n = NoNormalization);
00457
00468 AccuracyOption GetAccuracy(void) const;
00469
00474 double GetResolution(void) const;
00475
00486 StereoOption GetStereo(void) const;
00487
00498 NormalizationOption GetNormalization(void) const;
00499
00547 std::vector<double> GetSpectrophore(OpenBabel::OBMol* mol);
00549
00550
00551 protected:
00552
00554 double _resolution;
00555 AccuracyOption _accuracy;
00556 StereoOption _stereoFlag;
00557 NormalizationOption _normalization;
00558 std::vector<int> _rotationStepList;
00559 unsigned int _nAtoms;
00560 double** _property;
00561 double* _radii;
00562 double** _oricoor;
00563 double** _coor;
00564 unsigned int _beginProbe;
00565 unsigned int _endProbe;
00566 unsigned int _numberOfProbes;
00567 std::vector<double> _spectro;
00568 struct
00569 {
00570 int value[12];
00571 } _probe[48];
00572 struct
00573 {
00574 double x;
00575 double y;
00576 double z;
00577 double v[N_PROPERTIES];
00578 } _boxPoint[12];
00580
00582 void _getMoleculeData(OpenBabel::OBMol*);
00583 void _orient(void);
00584 void _getBox(double**);
00585 void _setBox(void);
00586 void _getEnergies(double**, double*);
00587 void _initiateSpectrophore(double*, double*);
00588 void _rotateX(double**, double**, const double, const double);
00589 void _rotateY(double**, double**, const double, const double);
00590 void _rotateZ(double**, double**, const double, const double);
00591 void _updateSpectrophore(double*, double*);
00592 void _calculateProperties(OpenBabel::OBMol*);
00593 void _solveMatrix(double**, double*, unsigned int);
00594 void _luDecompose(double**, std::vector<int>&, unsigned int);
00595 void _luSolve(double**, std::vector<int>&, double*, unsigned int);
00596 void _swapRows(double*, unsigned int, unsigned int);
00597 void _swapRows(double**, unsigned int, unsigned int, unsigned int);
00599
00600 };
00601
00602 }
00603
00604
00605 #endif //OB_SPECTROPHORE_H