28 #ifndef _chemistry_molecule_molecule_h
29 #define _chemistry_molecule_molecule_h
37 #include <util/class/class.h>
38 #include <util/state/state.h>
39 #include <util/keyval/keyval.h>
40 #include <util/misc/units.h>
41 #include <math/symmetry/pointgrp.h>
42 #include <math/scmat/vector3.h>
43 #include <math/scmat/matrix.h>
44 #include <chemistry/molecule/atominfo.h>
143 void init_symmetry_info(
double tol=0.5);
144 void clear_symmetry_info();
162 std::vector<int> q_atoms_;
163 std::vector<int> non_q_atoms_;
169 void throw_if_atom_duplicated(
int begin=0,
double tol = 1e-3);
276 void add_atom(
int Z,
double x,
double y,
double z,
277 const char * = 0,
double mass = 0.0,
278 int have_charge = 0,
double charge = 0.0);
282 virtual void print_parsedkeyval(std::ostream& =
ExEnv::out0(),
285 int number_atoms = 1)
const;
288 int natom()
const {
return natoms_; }
290 int Z(
int atom)
const {
return Z_[atom]; }
291 double &r(
int atom,
int xyz) {
return r_[atom][xyz]; }
292 const double &r(
int atom,
int xyz)
const {
return r_[atom][xyz]; }
293 double *r(
int atom) {
return r_[atom]; }
294 const double *r(
int atom)
const {
return r_[atom]; }
295 double mass(
int atom)
const;
298 const char *
label(
int atom)
const;
314 double charge(
int iatom)
const;
332 SCVector3 &udirection,
int order,
double tol=1.0e-8)
const;
336 int is_plane(SCVector3 &origin, SCVector3 &uperp,
double tol=1.0e-8)
const;
339 int has_inversion(SCVector3 &origin,
double tol = 1.0e-8)
const;
342 int is_linear(
double tolerance = 1.0e-5)
const;
344 int is_planar(
double tolerance = 1.0e-5)
const;
370 const double *position,
double* efield);
380 void symmetrize(
const Ref<PointGroup> &pg,
double tol = 0.5);
387 void translate(
const double *r);
389 void transform_to_principal_axes(
int trans_frame=1);
390 void transform_to_symmetry_frame();
391 void print_pdb(std::ostream& =
ExEnv::out0(),
char *title =0)
const;
393 void read_pdb(
const char *filename);
402 int unique(
int iuniq)
const {
return equiv_[iuniq][0]; }
406 int equivalent(
int iuniq,
int j)
const {
return equiv_[iuniq][j]; }
444 int q_atom(
int i)
const {
return q_atoms_[i]; }