Xmipp  v3.23.11-Nereus
Functions
lib_pwk.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

void copy_atoms (PDB *, PDB *, int, int, int)
 
void rot_axis (PDB *, PDB *, unsigned, char, double)
 
void rot_euler (PDB *, PDB *, unsigned, double, double, double)
 
void translate (PDB *, PDB *, unsigned, double, double, double)
 
void calc_center (PDB *, unsigned, double *, double *, double *)
 
double calc_mass (PDB *, unsigned)
 
double calc_center_mass (PDB *, unsigned, double *, double *, double *)
 
double calc_sphere (PDB *, unsigned, double, double, double)
 
void calc_box (PDB *, unsigned, double *, double *, double *, double *, double *, double *)
 
void project_mass (double **, unsigned long, double, double, double, unsigned, unsigned, unsigned, PDB *, unsigned, double *, unsigned *)
 
void project_mass_convolve_kernel_corr (double, double, double, unsigned, unsigned, unsigned, PDB *, unsigned, double *, double *, unsigned, double, unsigned *, double *, double *)
 
int check_if_inside (double, double, double, double, unsigned, unsigned, unsigned, PDB *, unsigned, double *)
 

Function Documentation

◆ calc_box()

void calc_box ( PDB ,
unsigned  ,
double *  ,
double *  ,
double *  ,
double *  ,
double *  ,
double *   
)

Definition at line 237 of file lib_pwk.cpp.

240 {
241  unsigned id;
242  const char *program = "lib_pwk";
243  const char *shape = "box";
244 
245  *minx = 1e20;
246  *miny = 1e20;
247  *minz = 1e20;
248  *maxx = -1e20;
249  *maxy = -1e20;
250  *maxz = -1e20;
251  for (id = 0; id < num_atoms; ++id) {
252  if (*minx > pdb0[id].x) *minx = pdb0[id].x;
253  if (*maxx < pdb0[id].x) *maxx = pdb0[id].x;
254  if (*miny > pdb0[id].y) *miny = pdb0[id].y;
255  if (*maxy < pdb0[id].y) *maxy = pdb0[id].y;
256  if (*minz > pdb0[id].z) *minz = pdb0[id].z;
257  if (*maxz < pdb0[id].z) *maxz = pdb0[id].z;
258  }
259  if (*minx < 1e20 && *miny < 1e20 && *minz < 1e20 && *maxx > -1e20 && *maxy > -1e20 && *maxz > -1e20) return;
260  else {
261  error_no_bounding(16040, program, shape);
262  }
263 }
static double * y
void error_no_bounding(int error_number, const char *program, const char *shape)
Definition: lib_err.cpp:258
doublereal * x
double z

◆ calc_center()

void calc_center ( PDB ,
unsigned  ,
double *  ,
double *  ,
double *   
)

Definition at line 140 of file lib_pwk.cpp.

142 {
143  unsigned id;
144  const char *program = "lib_pwk";
145  *cx = 0.0;
146  *cy = 0.0;
147  *cz = 0.0;
148  for (id = 0; id < num_atoms; ++id) {
149  *cx += pdb0[id].x;
150  *cy += pdb0[id].y;
151  *cz += pdb0[id].z;
152  }
153  if (num_atoms > 0) {
154  *cx /= (num_atoms * 1.0);
155  *cy /= (num_atoms * 1.0);
156  *cz /= (num_atoms * 1.0);
157  } else {
158  error_divide_zero(16010, program);
159  }
160 }
void error_divide_zero(int error_number, const char *program)
Definition: lib_err.cpp:217

◆ calc_center_mass()

double calc_center_mass ( PDB ,
unsigned  ,
double *  ,
double *  ,
double *   
)

Definition at line 179 of file lib_pwk.cpp.

181 {
182  unsigned id;
183  double mtot;
184  const char *program = "lib_pwk";
185 
186  *cx = 0.0;
187  *cy = 0.0;
188  *cz = 0.0;
189  mtot = 0.0;
190  for (id = 0; id < num_atoms; ++id) {
191  mtot += pdb0[id].weight;
192  *cx += pdb0[id].x * pdb0[id].weight;
193  *cy += pdb0[id].y * pdb0[id].weight;
194  *cz += pdb0[id].z * pdb0[id].weight;
195  }
196  if (mtot > 0.0) {
197  *cx /= mtot;
198  *cy /= mtot;
199  *cz /= mtot;
200  } else {
201  error_divide_zero(16020, program);
202  }
203  return mtot;
204 }
void error_divide_zero(int error_number, const char *program)
Definition: lib_err.cpp:217

◆ calc_mass()

double calc_mass ( PDB ,
unsigned   
)

Definition at line 165 of file lib_pwk.cpp.

166 {
167  unsigned id;
168  double mtot;
169 
170  mtot = 0.0;
171  for (id = 0; id < num_atoms; ++id)
172  mtot += pdb0[id].weight;
173  return mtot;
174 }

◆ calc_sphere()

double calc_sphere ( PDB ,
unsigned  ,
double  ,
double  ,
double   
)

Definition at line 209 of file lib_pwk.cpp.

211 {
212  unsigned id;
213  double maxradius, currradius;
214  const char *program = "lib_pwk";
215  const char *shape = "sphere";
216 
217  maxradius = -1e20;
218  for (id = 0; id < num_atoms; ++id) {
219  currradius = ((pdb0[id].x - cx) * (pdb0[id].x - cx) +
220  (pdb0[id].y - cy) * (pdb0[id].y - cy) +
221  (pdb0[id].z - cz) * (pdb0[id].z - cz));
222  if (currradius > maxradius) maxradius = currradius;
223  }
224 
225  if (maxradius >= 0.0) {
226  maxradius = sqrt(maxradius);
227  return maxradius;
228  } else {
229  error_no_bounding(16030, program, shape);
230  return 0;
231  }
232 }
void sqrt(Image< double > &op)
static double * y
void error_no_bounding(int error_number, const char *program, const char *shape)
Definition: lib_err.cpp:258
doublereal * x
double z

◆ check_if_inside()

int check_if_inside ( double  ,
double  ,
double  ,
double  ,
unsigned  ,
unsigned  ,
unsigned  ,
PDB ,
unsigned  ,
double *   
)

◆ copy_atoms()

void copy_atoms ( PDB ,
PDB ,
int  ,
int  ,
int   
)

Definition at line 25 of file lib_pwk.cpp.

27 {
28  int j, k;
29  for (k = 0; k < ktot; ++k) {
30  pdb_duplicate[id + k].weight = pdb_original[io].weight;
31  pdb_duplicate[id + k].x = pdb_original[io].x;
32  pdb_duplicate[id + k].y = pdb_original[io].y;
33  pdb_duplicate[id + k].z = pdb_original[io].z;
34  for (j = 0; j < 4; ++j) pdb_duplicate[id + k].segid[j] = pdb_original[io].segid[j];
35  pdb_duplicate[id + k].serial = id + k + 1;
36  for (j = 0; j < 7; ++j) pdb_duplicate[id + k].recd[j] = pdb_original[io].recd[j];
37  for (j = 0; j < 3; ++j) pdb_duplicate[id + k].type[j] = pdb_original[io].type[j];
38  for (j = 0; j < 3; ++j) pdb_duplicate[id + k].loc[j] = pdb_original[io].loc[j];
39  for (j = 0; j < 2; ++j) pdb_duplicate[id + k].alt[j] = pdb_original[io].alt[j];
40  for (j = 0; j < 5; ++j) pdb_duplicate[id + k].res[j] = pdb_original[io].res[j];
41  for (j = 0; j < 2; ++j) pdb_duplicate[id + k].chain[j] = pdb_original[io].chain[j];
42  pdb_duplicate[id + k].seq = pdb_original[io].seq;
43  for (j = 0; j < 2; ++j) pdb_duplicate[id + k].icode[j] = pdb_original[io].icode[j];
44  pdb_duplicate[id + k].occupancy = pdb_original[io].occupancy;
45  pdb_duplicate[id + k].beta = pdb_original[io].beta;
46  pdb_duplicate[id + k].footnote = pdb_original[io].footnote;
47  for (j = 0; j < 3; ++j) pdb_duplicate[id + k].element[j] = pdb_original[io].element[j];
48  for (j = 0; j < 3; ++j) pdb_duplicate[id + k].charge[j] = pdb_original[io].charge[j];
49  }
50  return;
51 }
ql0001_ & k(htemp+1),(cvec+1),(atemp+1),(bj+1),(bl+1),(bu+1),(x+1),(clamda+1), &iout, infoqp, &zero,(w+1), &lenw,(iw+1), &leniw, &glob_grd.epsmac
viol type
glob_prnt io
#define j

◆ project_mass()

void project_mass ( double **  ,
unsigned  long,
double  ,
double  ,
double  ,
unsigned  ,
unsigned  ,
unsigned  ,
PDB ,
unsigned  ,
double *  ,
unsigned *   
)

◆ project_mass_convolve_kernel_corr()

void project_mass_convolve_kernel_corr ( double  ,
double  ,
double  ,
unsigned  ,
unsigned  ,
unsigned  ,
PDB ,
unsigned  ,
double *  ,
double *  ,
unsigned  ,
double  ,
unsigned *  ,
double *  ,
double *   
)

◆ rot_axis()

void rot_axis ( PDB ,
PDB ,
unsigned  ,
char  ,
double   
)

Definition at line 56 of file lib_pwk.cpp.

58 {
59  unsigned id;
60  double x, y, z;
61  double sint = sin(angle);
62  double cost = cos(angle);
63 
64  switch (axis) {
65  case ('X'):
66  for (id = 0; id < num_atoms; ++id) {
67  y = pdb_original[id].y;
68  z = pdb_original[id].z;
69  pdb_rotate[id].x = pdb_original[id].x;
70  pdb_rotate[id].y = (cost * y + sint * z);
71  pdb_rotate[id].z = (cost * z - sint * y);
72  }
73  break;
74  case ('Y'):
75  for (id = 0; id < num_atoms; ++id) {
76  x = pdb_original[id].x;
77  z = pdb_original[id].z;
78  pdb_rotate[id].y = pdb_original[id].y;
79  pdb_rotate[id].x = (cost * x + sint * z);
80  pdb_rotate[id].z = (cost * z - sint * x);
81  }
82  break;
83  case ('Z'):
84  for (id = 0; id < num_atoms; ++id) {
85  x = pdb_original[id].x;
86  y = pdb_original[id].y;
87  pdb_rotate[id].z = pdb_original[id].z;
88  pdb_rotate[id].x = (cost * x + sint * y);
89  pdb_rotate[id].y = (cost * y - sint * x);
90  }
91  break;
92  }
93 }
static double * y
doublereal * x
char axis
double z

◆ rot_euler()

void rot_euler ( PDB ,
PDB ,
unsigned  ,
double  ,
double  ,
double   
)

Definition at line 98 of file lib_pwk.cpp.

100 {
101  unsigned id;
102  double rot_matrix[3][3], currx, curry, currz;
103 
104  get_rot_matrix(rot_matrix, psi, theta, phi);
105 
106  for (id = 0; id < num_atoms; ++id) {
107  currx = pdb_original[id].x;
108  curry = pdb_original[id].y;
109  currz = pdb_original[id].z;
110  pdb_rotate[id].x = currx * rot_matrix[0][0] +
111  curry * rot_matrix[0][1] +
112  currz * rot_matrix[0][2];
113  pdb_rotate[id].y = currx * rot_matrix[1][0] +
114  curry * rot_matrix[1][1] +
115  currz * rot_matrix[1][2];
116  pdb_rotate[id].z = currx * rot_matrix[2][0] +
117  curry * rot_matrix[2][1] +
118  currz * rot_matrix[2][2];
119  }
120 }
double theta
void get_rot_matrix(double dump[3][3], double psi, double theta, double phi)
Definition: lib_eul.cpp:184
double psi(const double x)

◆ translate()

void translate ( PDB ,
PDB ,
unsigned  ,
double  ,
double  ,
double   
)

Definition at line 125 of file lib_pwk.cpp.

127 {
128  unsigned id;
129 
130  for (id = 0; id < num_atoms; ++id) {
131  pdb_move[id].x = pdb_original[id].x + x0;
132  pdb_move[id].y = pdb_original[id].y + y0;
133  pdb_move[id].z = pdb_original[id].z + z0;
134  }
135 }
#define z0
#define y0
#define x0