00001
00002
00003
00004 #ifndef BALL_XRAY_CRYSTALGENERATOR_H
00005 #define BALL_XRAY_CRYSTALGENERATOR_H
00006
00007 #ifndef BALL_KERNEL_ATOMCONTAINER_H
00008 #include <BALL/KERNEL/atomContainer.h>
00009 #endif
00010
00011 #ifndef BALL_KERNEL_SYSTEM_H
00012 #include <BALL/KERNEL/system.h>
00013 #endif
00014
00015 #ifndef BALL_DATATYPE_REGULARDATA3D_H
00016 #include <BALL/DATATYPE/regularData3D.h>
00017 #endif
00018
00019 #ifndef BALL_XRAY_CRYSTALINFO_H
00020 #include <BALL/XRAY/crystalInfo.h>
00021 #endif
00022
00023 #ifndef BALL_STRUCTURE_GEOMETRICTRANSFORMATIONS_H
00024 #include <BALL/STRUCTURE/geometricTransformations.h>
00025 #endif
00026
00027 #ifndef BALL_STRUCTURE_GEOMETRICPROPERTIES_H
00028 # include <BALL/STRUCTURE/geometricProperties.h>
00029 #endif
00030
00031 #ifndef BALL_MATHS_BOX3_H
00032 # include <BALL/MATHS/box3.h>
00033 #endif
00034
00035 #ifndef BALL_DATATYPE_LIST_H
00036 # include <BALL/DATATYPE/list.h>
00037 #endif
00038
00039 namespace BALL
00040 {
00044 class BALL_EXPORT CrystalGenerator
00045 {
00046 public:
00047
00048
00052
00055 enum CellType
00056 {
00057 NCS_ASU = 0,
00058 ASU = 1,
00059 UNITCELL = 2
00060 };
00061
00062
00070 CrystalGenerator();
00071
00077 CrystalGenerator(const CrystalGenerator& cg);
00078
00083 CrystalGenerator(System* system);
00084
00087 ~CrystalGenerator();
00089
00090
00091 void setCrystalInfo(boost::shared_ptr<CrystalInfo> ci_ptr);
00092 void setSystem(System* system_ptr);
00093
00094 List<System*> generatePacking(Index a_loweridx, Index a_upperidx, Index b_loweridx, Index b_upperid, Index c_loweridx, Index c_upperid);
00095
00096 System* generateUnitCell(Index a, Index b, Index c);
00097 System* generateUnitCell();
00098 System* generateAsymmetricUnit();
00099 List<System*> generateSymMoleculesWithinDistance(float angstrom);
00100
00101 Box3 getUnitCellBox(Index a, Index b, Index c);
00102
00103 protected:
00104
00105 bool buildUnitCell_();
00106 bool buildASU_();
00107 bool correctASUPositions_(System* raw_cell);
00108
00109 GeometricCenterProcessor center_processor_;
00110 TransformationProcessor transformer_;
00111
00112 System* system_;
00113
00114 System* asu_;
00115 System* unitcell_;
00116 boost::shared_ptr<CrystalInfo> ci_ptr_;
00117 };
00118 }
00119
00120 #endif // BALL_XRAY_CRYSTALINFO_H