00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef OB_GENERIC_H
00021 #define OB_GENERIC_H
00022
00023 #include <openbabel/babelconfig.h>
00024
00025 #include <string>
00026 #include <vector>
00027 #include <map>
00028
00029 #include <openbabel/math/spacegroup.h>
00030 #include <openbabel/obutil.h>
00031 #include <openbabel/base.h>
00032
00033 namespace OpenBabel
00034 {
00035
00036
00037 class OBBase;
00038 class OBAtom;
00039 class OBBond;
00040 class OBMol;
00041 class OBRing;
00042
00045 class OBAPI OBCommentData : public OBGenericData
00046 {
00047 protected:
00048 std::string _data;
00049 public:
00050 OBCommentData();
00051 OBCommentData(const OBCommentData&);
00052 virtual OBGenericData* Clone(OBBase* ) const{return new OBCommentData(*this);}
00053
00054 OBCommentData& operator=(const OBCommentData &src);
00055
00056 void SetData(const std::string &data)
00057 { _data = data; Trim(_data); }
00058 void SetData(const char *d)
00059 {_data = d; Trim(_data); }
00060 const std::string &GetData() const
00061 { return(_data); }
00062 virtual const std::string &GetValue() const
00063 { return(_data); }
00064 };
00065
00069 class OBAPI OBExternalBond
00070 {
00071 int _idx;
00072 OBAtom *_atom;
00073 OBBond *_bond;
00074 public:
00075 OBExternalBond(): _idx(0), _atom(NULL), _bond(NULL) {}
00076 OBExternalBond(OBAtom *,OBBond *,int);
00077 OBExternalBond(const OBExternalBond &);
00078 ~OBExternalBond() {}
00079
00080 int GetIdx() const { return(_idx); }
00081 OBAtom *GetAtom() const { return(_atom); }
00082 OBBond *GetBond() const { return(_bond); }
00083 void SetIdx(int idx) { _idx = idx; }
00084 void SetAtom(OBAtom *atom) { _atom = atom; }
00085 void SetBond(OBBond *bond) { _bond = bond; }
00086 };
00087
00090 class OBAPI OBExternalBondData : public OBGenericData
00091 {
00092 protected:
00093 std::vector<OBExternalBond> _vexbnd;
00094 public:
00095 OBExternalBondData();
00096
00097
00098 virtual OBGenericData* Clone(OBBase* ) const{return NULL;}
00099
00100 void SetData(OBAtom*,OBBond*,int);
00101 std::vector<OBExternalBond> *GetData()
00102 {
00103 return(&_vexbnd);
00104 }
00105 };
00106
00112 class OBAPI OBPairData : public OBGenericData
00113 {
00114 protected:
00115 std::string _value;
00116 public:
00117 OBPairData();
00118 virtual OBGenericData* Clone(OBBase* ) const
00119 {return new OBPairData(*this);}
00120 void SetValue(const char *v) { _value = v; }
00121 void SetValue(const std::string &v) { _value = v; }
00122 virtual const std::string &GetValue() const
00123 { return(_value); }
00124 };
00125
00128
00129 template <class ValueT>
00130 class OBAPI OBPairTemplate : public OBGenericData
00131 {
00132 protected:
00133 ValueT _value;
00134 public:
00135 OBPairTemplate():
00136 OBGenericData("PairData", OBGenericDataType::PairData) {};
00137 void SetValue(const ValueT t) { _value = t; }
00138 virtual const ValueT &GetGenericValue() const { return(_value); }
00139 };
00140
00142 typedef OBPairTemplate<int> OBPairInteger;
00144 typedef OBPairTemplate<double> OBPairFloatingPoint;
00145
00149 class OBAPI OBSetData : public OBGenericData
00150 {
00151 protected:
00152 std::vector<OBGenericData *> _vdata;
00153 public:
00154 OBSetData() : OBGenericData("SetData", OBGenericDataType::SetData) {}
00155 virtual OBGenericData* Clone(OBBase* ) const{return new OBSetData(*this);}
00156
00158 void AddData(OBGenericData *d)
00159 {
00160 if(d)
00161 {
00162 _vdata.push_back(d);
00163 }
00164 }
00165
00167 void SetData(std::vector<OBGenericData *> &vdata)
00168 {
00169 _vdata = vdata;
00170 }
00171
00173 OBGenericData *GetData(const char *s)
00174 {
00175 std::vector<OBGenericData*>::iterator i;
00176
00177 for (i = _vdata.begin();i != _vdata.end();++i)
00178 if ((*i)->GetAttribute() == s)
00179 return(*i);
00180
00181 return(NULL);
00182 }
00183
00185 OBGenericData *GetData(const std::string &s)
00186 {
00187 std::vector<OBGenericData*>::iterator i;
00188
00189 for (i = _vdata.begin();i != _vdata.end();++i)
00190 if ((*i)->GetAttribute() == s)
00191 return(*i);
00192
00193 return(NULL);
00194 }
00195
00197 virtual const std::vector<OBGenericData *> &GetData() const
00198 {
00199 return(_vdata);
00200 }
00201
00203 std::vector<OBGenericData*>::iterator GetBegin()
00204 {
00205 return _vdata.begin();
00206 }
00207
00209 std::vector<OBGenericData*>::iterator GetEnd()
00210 {
00211 return _vdata.end();
00212 }
00213
00215 void DeleteData(OBGenericData *gd)
00216 {
00217 std::vector<OBGenericData*>::iterator i;
00218 for (i = _vdata.begin();i != _vdata.end();++i)
00219 if (*i == gd)
00220 {
00221 delete *i;
00222 _vdata.erase(i);
00223 break;
00224 }
00225 }
00226
00227 };
00228
00232 class OBAPI OBVirtualBond : public OBGenericData
00233 {
00234 protected:
00235 int _bgn;
00236 int _end;
00237 int _ord;
00238 int _stereo;
00239 public:
00240 OBVirtualBond();
00241 virtual OBGenericData* Clone(OBBase* ) const{return new OBVirtualBond(*this);}
00242 OBVirtualBond(int,int,int,int stereo=0);
00243 int GetBgn() { return(_bgn); }
00244 int GetEnd() { return(_end); }
00245 int GetOrder() { return(_ord); }
00246 int GetStereo() { return(_stereo); }
00247 };
00248
00251 class OBAPI OBRingData : public OBGenericData
00252 {
00253 protected:
00254 std::vector<OBRing*> _vr;
00255 public:
00256 OBRingData();
00257 OBRingData(const OBRingData &);
00258
00259
00260
00261
00262
00263 virtual OBGenericData* Clone(OBBase* ) const{return NULL;}
00264 ~OBRingData();
00265
00266 OBRingData &operator=(const OBRingData &);
00267
00268 void SetData(std::vector<OBRing*> &vr)
00269 {
00270 _vr = vr;
00271 }
00272 void PushBack(OBRing *r)
00273 {
00274 _vr.push_back(r);
00275 }
00276 std::vector<OBRing*> &GetData()
00277 {
00278 return(_vr);
00279 }
00280
00281 std::vector<OBRing*>::iterator BeginRings()
00282 { return(_vr.begin()); }
00283 std::vector<OBRing*>::iterator EndRings()
00284 { return(_vr.end()); }
00285 OBRing *BeginRing(std::vector<OBRing*>::iterator &i);
00286 OBRing *NextRing(std::vector<OBRing*>::iterator &i);
00287 };
00288
00293 class OBAPI OBUnitCell: public OBGenericData
00294 {
00295 public:
00296 enum LatticeType { Undefined,
00297 Triclinic,
00298 Monoclinic,
00299 Orthorhombic,
00300 Tetragonal,
00301 Rhombohedral ,
00302 Hexagonal,
00303 Cubic};
00304
00305
00306 protected:
00307 matrix3x3 _mOrtho;
00308 matrix3x3 _mOrient;
00309 vector3 _offset;
00310 std::string _spaceGroupName;
00311 const SpaceGroup* _spaceGroup;
00312 LatticeType _lattice;
00313 public:
00315 OBUnitCell();
00316 OBUnitCell(const OBUnitCell &);
00317 virtual OBGenericData* Clone(OBBase* ) const
00318 {return new OBUnitCell(*this);}
00319 ~OBUnitCell() {}
00320
00321 OBUnitCell &operator=(const OBUnitCell &);
00322
00332 void SetData(const double a, const double b, const double c,
00333 const double alpha, const double beta, const double gamma);
00341 void SetData(const vector3 v1, const vector3 v2, const vector3 v3);
00342
00348 void SetData(const matrix3x3 m);
00349
00351 void SetOffset(const vector3 v1);
00352
00355 void SetSpaceGroup(const SpaceGroup* sg) { _spaceGroup = sg; }
00356
00360 void SetSpaceGroup(const std::string sg) { _spaceGroup = SpaceGroup::GetSpaceGroup (sg);
00361 _spaceGroupName = sg; }
00362
00368 void SetSpaceGroup(const int sg) { _spaceGroup = SpaceGroup::GetSpaceGroup (sg); }
00369
00371 void SetLatticeType(const LatticeType lt) { _lattice = lt; }
00372
00375 void FillUnitCell(OBMol *);
00376
00378 double GetA();
00380 double GetB();
00382 double GetC();
00384 double GetAlpha();
00386 double GetBeta();
00388 double GetGamma();
00390 vector3 GetOffset();
00391
00393 const SpaceGroup* GetSpaceGroup() { return(_spaceGroup); }
00394
00396 const std::string GetSpaceGroupName() { return(_spaceGroupName); }
00397
00399 LatticeType GetLatticeType( int spacegroup );
00400
00402 LatticeType GetLatticeType();
00403
00405 std::vector<vector3> GetCellVectors();
00414 matrix3x3 GetCellMatrix();
00421 matrix3x3 GetOrthoMatrix();
00431 matrix3x3 GetOrientationMatrix();
00438 matrix3x3 GetFractionalMatrix();
00439
00446 vector3 FractionalToCartesian(vector3 frac);
00453 vector3 CartesianToFractional(vector3 cart);
00454
00458 vector3 WrapCartesianCoordinate(vector3 cart);
00462 vector3 WrapFractionalCoordinate(vector3 frac);
00463
00465 int GetSpaceGroupNumber( std::string name = "" );
00467 double GetCellVolume();
00468 };
00469
00475 class OBAPI OBConformerData: public OBGenericData
00476 {
00477 protected:
00479 std::vector<unsigned short> _vDimension;
00481 std::vector<double> _vEnergies;
00483 std::vector< std::vector< vector3 > > _vForces;
00485 std::vector< std::vector< vector3 > > _vVelocity;
00487 std::vector< std::vector< vector3 > > _vDisplace;
00489 std::vector<std::string> _vData;
00490
00491 public:
00492 OBConformerData();
00493 OBConformerData(const OBConformerData &);
00494 virtual OBGenericData* Clone(OBBase* ) const{return new OBConformerData(*this);}
00495 ~OBConformerData() {}
00496
00497 OBConformerData &operator=(const OBConformerData &);
00498
00499 void SetDimension(std::vector<unsigned short> vd) { _vDimension = vd; }
00500 void SetEnergies(std::vector<double> ve) { _vEnergies = ve; }
00501 void SetForces(std::vector< std::vector< vector3 > > vf) {_vForces = vf;}
00502 void SetVelocities(std::vector< std::vector< vector3 > > vv)
00503 { _vVelocity = vv; }
00504 void SetDisplacements(std::vector< std::vector< vector3 > > vd)
00505 { _vDisplace = vd; }
00506 void SetData(std::vector<std::string> vdat) { _vData = vdat; }
00507
00508 std::vector<unsigned short> GetDimension() { return _vDimension; }
00509 std::vector<double> GetEnergies() { return _vEnergies; }
00510 std::vector< std::vector< vector3 > > GetForces() {return _vForces; }
00511 std::vector< std::vector< vector3 > > GetVelocities()
00512 {return _vVelocity;}
00513 std::vector< std::vector< vector3 > > GetDisplacements()
00514 {return _vDisplace;}
00515 std::vector<std::string> GetData() { return _vData; }
00516
00517 };
00518
00523 class OBAPI OBSymmetryData: public OBGenericData
00524 {
00525 protected:
00526 std::string _spaceGroup;
00527 std::string _pointGroup;
00528 public:
00529 OBSymmetryData();
00530 OBSymmetryData(const OBSymmetryData &);
00531 virtual OBGenericData* Clone(OBBase* ) const{return new OBSymmetryData(*this);}
00532 ~OBSymmetryData() {}
00533
00534 OBSymmetryData &operator=(const OBSymmetryData &);
00535
00536 void SetData(std::string pg, std::string sg = "")
00537 { _pointGroup = pg; _spaceGroup = sg; }
00538 void SetPointGroup(std::string pg) { _pointGroup = pg; }
00539 void SetSpaceGroup(std::string sg) { _spaceGroup = sg; }
00540
00541 std::string GetPointGroup() { return _pointGroup; }
00542 std::string GetSpaceGroup() { return _spaceGroup; }
00543 };
00544
00548 class OBAPI OBTorsion
00549 {
00550 friend class OBMol;
00551 friend class OBTorsionData;
00552
00553 protected:
00554 std::pair<OBAtom*,OBAtom*> _bc;
00556 std::vector<triple<OBAtom*,OBAtom*,double> > _ads;
00557
00558 OBTorsion(): _bc((OBAtom *)NULL, (OBAtom *)NULL) { }
00559
00560 OBTorsion(OBAtom *, OBAtom *, OBAtom *, OBAtom *);
00561
00562 std::vector<quad<OBAtom*,OBAtom*,OBAtom*,OBAtom*> > GetTorsions();
00563
00564 public:
00565 OBTorsion(const OBTorsion &);
00566 ~OBTorsion() {}
00567
00568 OBTorsion& operator=(const OBTorsion &);
00569
00570 void Clear();
00571 bool Empty() { return(_bc.first == 0 && _bc.second == 0); }
00572
00573 bool AddTorsion(OBAtom *a,OBAtom *b, OBAtom *c,OBAtom *d);
00574 bool AddTorsion(quad<OBAtom*,OBAtom*,OBAtom*,OBAtom*> &atoms);
00575
00576 bool SetAngle(double radians, unsigned int index = 0);
00577 bool SetData(OBBond * ) { return false; }
00578
00579 bool GetAngle(double &radians, unsigned int index =0);
00582 unsigned int GetBondIdx();
00583 size_t GetSize() const { return _ads.size(); }
00584
00587 std::pair<OBAtom*,OBAtom*> GetBC()
00588 {
00589 return(_bc);
00590 }
00593 std::vector<triple<OBAtom*,OBAtom*,double> > GetADs()
00594 {
00595 return(_ads) ;
00596 }
00597
00598 bool IsProtonRotor();
00599 };
00600
00605 class OBAPI OBTorsionData : public OBGenericData
00606 {
00607 friend class OBMol;
00608
00609 protected:
00610 std::vector<OBTorsion> _torsions;
00611
00612 OBTorsionData();
00613 OBTorsionData(const OBTorsionData &);
00614
00615 public:
00616 OBTorsionData &operator=(const OBTorsionData &);
00617
00619 virtual OBGenericData* Clone(OBBase* ) const
00620 {return new OBTorsionData(*this);}
00621
00622 void Clear();
00623
00626 std::vector<OBTorsion> GetData() const
00627 {
00628 return _torsions;
00629 }
00630
00633 size_t GetSize() const
00634 {
00635 return _torsions.size();
00636 }
00637
00638 void SetData(OBTorsion &torsion);
00639
00640 bool FillTorsionArray(std::vector<std::vector<unsigned int> > &torsions);
00641 };
00642
00645 class OBAPI OBAngle
00646 {
00647 friend class OBMol;
00648 friend class OBAngleData;
00649
00650 protected:
00651
00652
00653
00654 OBAtom *_vertex;
00655 std::pair<OBAtom*,OBAtom*> _termini;
00656 double _radians;
00657
00658
00659
00660 OBAngle();
00661 OBAngle(OBAtom *vertex,OBAtom *a,OBAtom *b);
00662
00663 triple<OBAtom*,OBAtom*,OBAtom*> GetAtoms();
00664 void SortByIndex();
00665
00666 public:
00667
00668 OBAngle(const OBAngle &);
00669 ~OBAngle()
00670 {
00671 _vertex = NULL;
00672 }
00673
00674 OBAngle &operator = (const OBAngle &);
00675 bool operator ==(const OBAngle &);
00676
00677 void Clear();
00678
00681 double GetAngle() const
00682 {
00683 return(_radians);
00684 }
00687 void SetAngle(double angle)
00688 {
00689 _radians = angle;
00690 }
00691 void SetAtoms(OBAtom *vertex,OBAtom *a,OBAtom *b);
00692 void SetAtoms(triple<OBAtom*,OBAtom*,OBAtom*> &atoms);
00693
00694 };
00695
00698 class OBAPI OBAngleData : public OBGenericData
00699 {
00700 friend class OBMol;
00701
00702 protected:
00703 std::vector<OBAngle> _angles;
00704
00705 OBAngleData();
00706 OBAngleData(const OBAngleData &);
00708
00709 std::vector<OBAngle> GetData() const
00710 {
00711 return(_angles);
00712 }
00713
00714 public:
00715 OBAngleData &operator =(const OBAngleData &);
00716 virtual OBGenericData* Clone(OBBase* ) const
00717 {return new OBAngleData(*this);}
00718
00719 void Clear();
00720 unsigned int FillAngleArray(int **angles, unsigned int &size);
00721 bool FillAngleArray(std::vector<std::vector<unsigned int> > &angles);
00722
00723 void SetData(OBAngle &);
00726 size_t GetSize() const
00727 {
00728 return _angles.size();
00729 }
00730 };
00731
00732 enum atomreftype{
00733 output,
00734 input,
00735 calcvolume
00736 };
00737
00741 class OBAPI OBChiralData : public OBGenericData
00742 {
00743 friend class OBMol;
00744 friend class OBAtom;
00745
00746 protected:
00747 std::vector<unsigned int> _atom4refs;
00748 std::vector<unsigned int> _atom4refo;
00749 std::vector<unsigned int> _atom4refc;
00750
00753 int parity;
00754
00755 public:
00756
00757 OBChiralData();
00758 OBChiralData(const OBChiralData &src);
00759 virtual OBGenericData* Clone(OBBase* ) const
00760 { return new OBChiralData(*this); }
00761 OBChiralData &operator =(const OBChiralData &);
00762 ~OBChiralData(){}
00763
00764 void Clear();
00765
00767 std::vector<unsigned int> GetAtom4Refs(atomreftype t) const;
00769 unsigned int GetAtomRef(int a,atomreftype t);
00770
00771 bool SetAtom4Refs(std::vector<unsigned int> atom4refs, atomreftype t);
00772 int AddAtomRef(unsigned int atomref, atomreftype t);
00773
00775 unsigned int GetSize(atomreftype t) const;
00776 };
00777
00780 class OBSerialNums : public OBGenericData
00781 {
00782 protected:
00783 std::map<int, OBAtom*> _serialMap;
00784
00785 public:
00786
00787 OBSerialNums() :
00788 OBGenericData("obSerialNums", OBGenericDataType::SerialNums)
00789 {}
00790
00791 OBSerialNums(const OBSerialNums &cp) : OBGenericData(cp)
00792 {
00793 _serialMap = cp._serialMap;
00794 }
00797 virtual OBGenericData* Clone(OBBase* ) const
00798 {return new OBSerialNums(*this);}
00799
00800 std::map<int,OBAtom*> &GetData() { return _serialMap; }
00801 void SetData(std::map<int,OBAtom*> &sm) { _serialMap = sm; }
00802
00803 };
00804
00807 class OBAPI OBVibrationData: public OBGenericData
00808 {
00809 protected:
00811 std::vector< std::vector< vector3 > > _vLx;
00812
00814 std::vector<double> _vFrequencies;
00815
00817 std::vector<double> _vIntensities;
00818
00820 std::vector<double> _vRamanActivities;
00821
00822 public:
00823 OBVibrationData(): OBGenericData("VibrationData", OBGenericDataType::VibrationData){};
00824 virtual ~OBVibrationData() {}
00825 virtual OBGenericData* Clone(OBBase*) const
00826 {return new OBVibrationData(*this);}
00827
00828 OBVibrationData & operator=(const OBVibrationData &);
00829
00830 void SetData(const std::vector< std::vector< vector3 > > & lx,
00831 const std::vector<double> & frequencies,
00832 const std::vector<double> & intensities);
00833 void SetData(const std::vector< std::vector< vector3 > > &,
00834 const std::vector<double> &,
00835 const std::vector<double> &,
00836 const std::vector<double> &);
00837
00838 std::vector< std::vector< vector3 > > GetLx() const
00839 { return this->_vLx; }
00840 std::vector<double> GetFrequencies() const
00841 { return this->_vFrequencies; }
00842 std::vector<double> GetIntensities() const
00843 { return this->_vIntensities; }
00844 std::vector<double> GetRamanActivities() const
00845 { return this->_vRamanActivities; }
00846
00847 unsigned int GetNumberOfFrequencies() const;
00848 };
00849
00852 class OBAPI OBDOSData: public OBGenericData
00853 {
00854 protected:
00856 double _fermi;
00857
00859 std::vector<double> _vEnergies;
00860
00862 std::vector<double> _vDensities;
00863
00865 std::vector<double> _vIntegration;
00866
00867 public:
00868 OBDOSData(): OBGenericData("DOSData", OBGenericDataType::DOSData){};
00869 virtual ~OBDOSData() {}
00870 virtual OBGenericData* Clone(OBBase*) const
00871 {return new OBDOSData(*this);}
00872
00873 OBDOSData & operator=(const OBDOSData &);
00874
00875 void SetData(double,
00876 const std::vector<double> &,
00877 const std::vector<double> &,
00878 const std::vector<double> &);
00879
00880 double GetFermiEnergy() const
00881 { return this->_fermi; }
00882 std::vector<double> GetEnergies() const
00883 { return this->_vEnergies; }
00884 std::vector<double> GetDensities() const
00885 { return this->_vDensities; }
00886 std::vector<double> GetIntegration() const
00887 { return this->_vIntegration; }
00888 };
00889
00893 class OBAPI OBOrbital
00894 {
00895 friend class OBOrbitalData;
00896 protected:
00897 double _energy;
00898 double _occupation;
00899 std::string _mullikenSymbol;
00900 public:
00901 void SetData(double energy, double occupation = 2.0, std::string symbol = "A")
00902 { _energy = energy; _occupation = occupation; _mullikenSymbol = symbol; }
00903
00904 double GetEnergy() const { return _energy; }
00905 double GetOccupation() const { return _occupation; }
00906 std::string GetSymbol() const { return _mullikenSymbol; }
00907 };
00908
00911 class OBAPI OBOrbitalData: public OBGenericData
00912 {
00913 public:
00914 OBOrbitalData(): OBGenericData("OrbitalData", OBGenericDataType::ElectronicData),
00915 _alphaHOMO(0), _betaHOMO(0), _openShell(false) {};
00916 virtual ~OBOrbitalData() {}
00917 virtual OBGenericData* Clone(OBBase*) const
00918 {return new OBOrbitalData(*this);}
00919
00920 OBOrbitalData & operator=(const OBOrbitalData &);
00921
00922 void SetAlphaOrbitals(std::vector<OBOrbital> orbitalList)
00923 { _alphaOrbitals = orbitalList; }
00924 void SetBetaOrbitals(std::vector<OBOrbital> orbitalList)
00925 { _betaOrbitals = orbitalList; }
00926 void SetHOMO(int alpha, int beta = 0)
00927 { _alphaHOMO = alpha; _betaHOMO = beta; }
00928 void SetOpenShell(bool openShell)
00929 { _openShell = openShell; }
00930
00931 bool IsOpenShell() { return _openShell; }
00932
00933 unsigned int GetAlphaHOMO() { return _alphaHOMO; }
00934 unsigned int GetBetaHOMO() { return _betaHOMO; }
00935 std::vector<OBOrbital> GetAlphaOrbitals() { return _alphaOrbitals; }
00936 std::vector<OBOrbital> GetBetaOrbitals() { return _betaOrbitals; }
00937
00940 void LoadClosedShellOrbitals(std::vector<double> energies, std::vector<std::string> symmetries, int alphaHOMO);
00942 void LoadAlphaOrbitals(std::vector<double> energies, std::vector<std::string> symmetries, int alphaHOMO);
00944 void LoadBetaOrbitals(std::vector<double> energies, std::vector<std::string> symmetries, int betaHOMO);
00945
00946 protected:
00947 std::vector<OBOrbital> _alphaOrbitals;
00948 std::vector<OBOrbital> _betaOrbitals;
00949 unsigned int _alphaHOMO;
00950 unsigned int _betaHOMO;
00951 bool _openShell;
00952 };
00953
00956 class OBAPI OBElectronicTransitionData: public OBGenericData
00957 {
00958 protected:
00960 std::vector<double> _vWavelengths;
00961
00963 std::vector<double> _vForces;
00964
00966 std::vector<double> _vEDipole;
00967
00969 std::vector<double> _vRotatoryStrengthsVelocity;
00970
00972 std::vector<double> _vRotatoryStrengthsLength;
00973
00974 public:
00975 OBElectronicTransitionData(): OBGenericData("ElectronicTransitionData", OBGenericDataType::ElectronicTransitionData) {}
00976 virtual ~OBElectronicTransitionData() {}
00977 virtual OBGenericData* Clone(OBBase*) const
00978 {return new OBElectronicTransitionData(*this);}
00979
00980 OBElectronicTransitionData & operator=(const OBElectronicTransitionData &);
00981
00982 void SetData(const std::vector<double> & wavelengths,
00983 const std::vector<double> & forces);
00984
00985 void SetEDipole(const std::vector<double> &);
00986 void SetRotatoryStrengthsVelocity(const std::vector<double> &);
00987 void SetRotatoryStrengthsLength(const std::vector<double> &);
00988
00989 std::vector<double> GetWavelengths() const
00990 { return this->_vWavelengths; }
00991 std::vector<double> GetForces() const
00992 { return this->_vForces; }
00993 std::vector<double> GetEDipole() const
00994 { return this->_vEDipole; }
00995 std::vector<double> GetRotatoryStrengthsVelocity() const
00996 { return this->_vRotatoryStrengthsVelocity; }
00997 std::vector<double> GetRotatoryStrengthsLength() const
00998 { return this->_vRotatoryStrengthsLength; }
00999 };
01000
01003 class OBAPI OBRotationData: public OBGenericData
01004 {
01005 public:
01006 enum RType{UNKNOWN, ASYMMETRIC, SYMMETRIC, LINEAR};
01007 OBRotationData(): OBGenericData("RotationData", OBGenericDataType::RotationData){}
01008 virtual ~OBRotationData(){};
01009 virtual OBGenericData* Clone(OBBase*) const
01010 {return new OBRotationData(*this);}
01011 void SetData(RType RotorType, std::vector<double> RotationalConstants, int SymmetryNumber)
01012 {
01013 RotConsts = RotationalConstants;
01014 type = RotorType;
01015 SymNum = SymmetryNumber;
01016 }
01017
01019 std::vector<double> GetRotConsts()const{ return RotConsts; }
01020
01021 int GetSymmetryNumber()const{ return SymNum; }
01022 RType GetRotorType()const { return type; }
01023
01024 protected:
01025 std::vector<double> RotConsts;
01026 int SymNum;
01027 RType type;
01028 };
01029
01033 class OBAPI OBVectorData: public OBGenericData
01034 {
01035 public:
01036 OBVectorData(): OBGenericData("VectorData", OBGenericDataType::VectorData){}
01037 virtual ~OBVectorData(){};
01038 virtual OBGenericData* Clone(OBBase*) const
01039 {return new OBVectorData(*this);}
01040 void SetData(double x, double y, double z)
01041 { _vec = vector3(x, y, z); }
01042 void SetData(vector3 data)
01043 { _vec = data; }
01044 vector3 GetData() const
01045 { return _vec; }
01046
01047 protected:
01048 vector3 _vec;
01049 };
01050
01054 class OBAPI OBMatrixData: public OBGenericData
01055 {
01056 public:
01057 OBMatrixData(): OBGenericData("MatrixData", OBGenericDataType::MatrixData){}
01058 virtual ~OBMatrixData(){};
01059 virtual OBGenericData* Clone(OBBase*) const
01060 {return new OBMatrixData(*this);}
01061 void SetData(matrix3x3 data)
01062 { _matrix = data; }
01063 matrix3x3 GetData() const
01064 { return _matrix; }
01065
01066 protected:
01067 matrix3x3 _matrix;
01068 };
01069
01071 typedef std::vector<OBGenericData*>::iterator OBDataIterator;
01072
01073 }
01074
01075 #endif // OB_GENERIC_H
01076