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 #ifndef OB_TETRAPLANAR_H
00025 #define OB_TETRAPLANAR_H
00026
00027 #include "stereo.h"
00028 #include <algorithm>
00029
00030 namespace OpenBabel {
00031
00083 class OBAPI OBTetraPlanarStereo : public OBStereoBase
00084 {
00085 public:
00086 OBTetraPlanarStereo(OBMol *mol);
00087 virtual ~OBTetraPlanarStereo();
00088
00089 template <typename ConfigType>
00090 static ConfigType ToConfig(const ConfigType &cfg, unsigned long start,
00091 OBStereo::Shape shape = OBStereo::ShapeU)
00092 {
00093 ConfigType result = cfg;
00094 result.shape = shape;
00095
00096
00097 switch (cfg.shape) {
00098 case OBStereo::ShapeU:
00099 break;
00100 case OBStereo::ShapeZ:
00101 OBStereo::Permutate(result.refs, 2, 3);
00102 break;
00103 case OBStereo::Shape4:
00104 OBStereo::Permutate(result.refs, 1, 2);
00105 break;
00106 }
00107
00108
00109
00110 for (int i = 0; i < 4; ++i) {
00111 std::rotate(result.refs.begin(), result.refs.begin() + 1, result.refs.end());
00112
00113 if (result.refs.at(0) == start)
00114 break;
00115 }
00116
00117
00118
00119 switch (shape) {
00120 case OBStereo::ShapeU:
00121 break;
00122 case OBStereo::ShapeZ:
00123 OBStereo::Permutate(result.refs, 2, 3);
00124 break;
00125 case OBStereo::Shape4:
00126 OBStereo::Permutate(result.refs, 1, 2);
00127 break;
00128 }
00129
00130 return result;
00131 }
00132
00133 };
00134
00135 }
00136
00137 #endif
00138