2#ifndef STORMM_ISOMERIZATION_H
3#define STORMM_ISOMERIZATION_H
6#include "Constants/behavior.h"
7#include "Constants/fixed_precision.h"
8#include "Chemistry/chemical_features.h"
9#include "Chemistry/chemistry_enumerators.h"
10#include "DataTypes/common_types.h"
11#include "Math/matrix_ops.h"
12#include "Math/rounding.h"
13#include "Topology/atomgraph.h"
14#include "Trajectory/coordinateframe.h"
15#include "Trajectory/coordinate_series.h"
16#include "Trajectory/phasespace.h"
17#include "Synthesis/condensate.h"
18#include "Synthesis/phasespace_synthesis.h"
23using chemistry::ChemicalFeatures;
24using chemistry::ChiralInversionProtocol;
25using chemistry::IsomerPlan;
26using constants::PrecisionModel;
27using data_types::isSignedIntegralScalarType;
28using numerics::globalpos_scale_nonoverflow_bits;
29using stmath::rotationMatrixAboutVector;
31using synthesis::Condensate;
32using synthesis::CondensateWriter;
33using synthesis::PhaseSpaceSynthesis;
34using synthesis::PsSynthesisWriter;
35using topology::AtomGraph;
36using topology::UnitCellType;
37using trajectory::CoordinateFrame;
38using trajectory::CoordinateFrameWriter;
39using trajectory::CoordinateSeries;
40using trajectory::CoordinateSeriesWriter;
41using trajectory::PhaseSpace;
42using trajectory::PhaseSpaceWriter;
82template <
typename Tcoord,
typename Tcalc>
83void rotateAboutBond(Tcoord* xcrd, Tcoord* ycrd, Tcoord* zcrd,
int atom_i,
int atom_j,
84 const int* moving_atoms,
int moving_atom_count, Tcalc rotation_angle,
85 Tcalc globalpos_scale_factor = 1.0);
88 const std::vector<int> &moving_atoms,
double rotation_angle);
91 const std::vector<int> &moving_atoms,
double rotation_angle);
93void rotateAboutBond(
PhaseSpace *ps,
int atom_i,
int atom_j,
const std::vector<int> &moving_atoms,
94 double rotation_angle);
97 const std::vector<int> &moving_atoms,
double rotation_angle);
99template <
typename Tcoord,
typename Tcalc>
101 const std::vector<int> &moving_atoms, Tcalc rotation_angle);
103template <
typename Tcoord,
typename Tcalc>
105 const int* moving_atoms,
int moving_atom_count, Tcalc rotation_angle);
107template <
typename Tcalc>
109 const std::vector<int> &moving_atoms, Tcalc rotation_angle);
111template <
typename Tcalc>
112void rotateAboutBond(
PsSynthesisWriter psynthw,
int system_index,
int atom_i,
int atom_j,
113 const int* moving_atoms,
int moving_atom_count, Tcalc rotation_angle);
115template <
typename Tcalc>
116void rotateAboutBond(
Condensate *cdns,
int system_index,
int atom_i,
int atom_j,
117 const std::vector<int> &moving_atoms, Tcalc rotation_angle);
119template <
typename Tcalc>
120void rotateAboutBond(
CondensateWriter cdnsw,
int system_index,
int atom_i,
int atom_j,
121 const std::vector<int> &moving_atoms, Tcalc rotation_angle);
155template <
typename Tcoord,
typename Tcalc>
156void flipChiralCenter(Tcoord* xcrd, Tcoord* ycrd, Tcoord* zcrd,
int center_idx,
157 const std::vector<int> &chiral_centers,
158 const std::vector<ChiralInversionProtocol> &chiral_protocols,
159 const std::vector<IsomerPlan> &inversion_groups,
160 Tcalc globalpos_scale_factor = 1.0);
163 const std::vector<int> &chiral_centers,
164 const std::vector<ChiralInversionProtocol> &chiral_protocols,
165 const std::vector<IsomerPlan> &inversion_groups);
168 const std::vector<int> &chiral_centers,
169 const std::vector<ChiralInversionProtocol> &chiral_protocols,
170 const std::vector<IsomerPlan> &inversion_groups);
172void flipChiralCenter(
PhaseSpace *ps,
int center_idx,
const std::vector<int> &chiral_centers,
173 const std::vector<ChiralInversionProtocol> &chiral_protocols,
174 const std::vector<IsomerPlan> &inversion_groups);
176void flipChiralCenter(
PhaseSpaceWriter psw,
int center_idx,
const std::vector<int> &chiral_centers,
177 const std::vector<ChiralInversionProtocol> &chiral_protocols,
178 const std::vector<IsomerPlan> &inversion_groups);
180template <
typename Tcoord,
typename Tcalc>
182 const std::vector<int> &chiral_centers,
183 const std::vector<ChiralInversionProtocol> &chiral_protocols,
184 const std::vector<IsomerPlan> &inversion_groups);
186template <
typename Tcoord,
typename Tcalc>
188 const std::vector<int> &chiral_centers,
189 const std::vector<ChiralInversionProtocol> &chiral_protocols,
190 const std::vector<IsomerPlan> &inversion_groups);
192template <
typename Tcalc>
193void flipChiralCenter(
PsSynthesisWriter psynthw,
int system_index,
int center_idx,
194 const std::vector<int> &chiral_centers,
195 const std::vector<ChiralInversionProtocol> &chiral_protocols,
196 const std::vector<IsomerPlan> &inversion_groups);
198template <
typename Tcalc>
200 const std::vector<int> &chiral_centers,
201 const std::vector<ChiralInversionProtocol> &chiral_protocols,
202 const std::vector<IsomerPlan> &inversion_groups);
204template <
typename Tcalc>
205void flipChiralCenter(
Condensate *cdns,
int system_index,
int center_idx,
206 const std::vector<int> &chiral_centers,
207 const std::vector<ChiralInversionProtocol> &chiral_protocols,
208 const std::vector<IsomerPlan> &inversion_groups);
210template <
typename Tcalc>
211void flipChiralCenter(
CondensateWriter cdnsw,
int system_index,
int center_idx,
212 const std::vector<int> &chiral_centers,
213 const std::vector<ChiralInversionProtocol> &chiral_protocols,
214 const std::vector<IsomerPlan> &inversion_groups);
220#include "isomerization.tpp"
Condense the data format, and possibly offer a reduced representation of coordinates,...
Definition condensate.h:146
A fixed-precision representation of coordinates, velocities, and forces to manage a set of simulation...
Definition phasespace_synthesis.h:325
Store the coordinates and box information for a frame, only. This abridged struct can serve when the ...
Definition coordinateframe.h:111
Store the coordinates and box information for a series of frames, in one of several levels of precisi...
Definition coordinate_series.h:137
An object to complement a topology and hold positions, velocities, and forces of all particles in a s...
Definition phasespace.h:141
Writeable abstract for the Condensate class, wherein coordinates (only) can be modified as a conseque...
Definition condensate.h:64
The writer for a PhaseSpaceSynthesis object, containing all of the data relevant for propagating dyna...
Definition phasespace_synthesis.h:87
Collect C-style pointers for the elements of a writable CoordinateFrame object.
Definition coordinateframe.h:30
Collect C-style pointers and critical constants for a writeable CoordinateSeries object.
Definition coordinate_series.h:66
Collect constants and pointers to the components of a modifiable PhaseSpace object.
Definition phasespace.h:31