00001
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef eman_pdbreader_h_
00037 #define eman_pdbreader_h_
00038
00039 #include "emdata.h"
00040 #include "transform.h"
00041 #include "pointarray.h"
00042
00043 #if defined NFFT || NFFT2
00044 extern "C"
00045 {
00046 #include "nfft.h"
00047 #include "utils.h"
00048 }
00049 #endif
00050
00051 #include <sys/stat.h>
00052 #include <vector>
00053
00054
00055 namespace EMAN
00056 {
00058 class PDBReader
00059 {
00060 public:
00061 enum Density2PointsArrayAlgorithm
00062 {
00063 PEAKS_SUB, PEAKS_DIV, KMEANS
00064 };
00065
00066 public:
00067 PDBReader();
00068 explicit PDBReader(int nn);
00069 ~PDBReader();
00070 void zero();
00071 PDBReader *copy();
00072 PDBReader & operator=(PDBReader & pa);
00073 size_t get_number_points() const;
00074 void set_number_points(size_t nn);
00075
00080 bool read_from_pdb(const char *file);
00081
00086 void save_to_pdb(const char *file) const;
00087
00092 double *get_points_array();
00093
00098 void set_points_array(double *p);
00099
00104 vector<float> get_points();
00105
00109 void right_transform(const Transform& transform);
00110 PointArray* makePointArray (const PDBReader& p);
00111
00112 vector<float> get_x();
00113 vector<float> get_y();
00114 vector<float> get_z();
00115 vector<string> get_atomName();
00116 vector<string> get_resName();
00117 vector<int> get_resNum();
00118
00119
00120 private:
00121 double *points;
00122 vector<int> pointInfo;
00123 vector<string> pWords;
00124 vector<string> atomName;
00125 vector<string> residueName;
00126 vector<string> chainId;
00127 vector<string> elementSym;
00128 vector<string> tail;
00129 vector<string> head;
00130 vector<string> lines;
00131 size_t n;
00132 int ter_stop;
00133 int count_stop;
00134
00135 vector<float> x;
00136 vector<float> y;
00137 vector<float> z;
00138 vector<int> resNum;
00139 };
00140 }
00141
00142 #endif