STORMM Source Documentation
Loading...
Searching...
No Matches
stormm::synthesis::SynthesisPermutor Class Reference

An object for tracking the states and The object itself stores a series of permutor maps, detailing the atoms that move as a consequence of rotating about some bond or inverting a chiral center. One such map is kept for each unique topology, and the atom indices of a particular system are then obtained by adding the atom offset from the PhaseSpaceSynthesis, Condensate, or AtomGraphSynthesis. More...

#include <synthesis_permutor.h>

Public Member Functions

int getSystemCount () const
 Get the total number of systems tracked in the synthesis.
 
int getPermutorSetCount () const
 Get the number of unique permutor sets (the number of unique topologies served by the object).
 
int getRotatableBondSampleCount () const
 Get the default number of rotatable bond angle samples.
 
int getCisTransBondSampleCount () const
 Get the default number of cis-trans isomeric bond angle samples.
 
int getVariableElementCount (int system_index) const
 Get the total number of variable elements in one of the systems: rotatable bonds, cis-trans bonds, and chiral centers (even centers that cannot invert are counted).
 
int getSystemRotatableBondCount (int system_index) const
 Get the number of rotatable groups in one of the systems of the attached synthesis.
 
int getSystemCisTransBondCount (int system_index) const
 Get the number of cis-trans isomeric groups in one of the systems of the attached synthesis.
 
int getSystemChiralCenterCount (int system_index) const
 Get the number of chiral centers in one of the systems of the attached synthesis.
 
const IsomerPlangetRotatableGroup (int system_index, int group_index) const
 Get one of the rotatable groups.
 
const IsomerPlangetCisTransGroup (int system_index, int group_index) const
 Get one of the cis-trans isomeric groups.
 
const IsomerPlangetInvertibleGroup (int system_index, int group_index) const
 Get one of the invertible chiral centers.
 
const PhaseSpaceSynthesisgetSynthesisPointer () const
 Get the a pointer to the coordinate synthesis for the collection of permutor maps.
 
const SyPermutorKit< double > dpData (HybridTargetLevel tier=HybridTargetLevel::HOST) const
 Get the double-precision read-only abstract for the object.
 
const SyPermutorKit< float > spData (HybridTargetLevel tier=HybridTargetLevel::HOST) const
 Get the single-precision read-only abstract for the object.
 
void defineRotatableBondSettings (int map_index, const std::vector< std::vector< double > > &settings)
 Load specific settings into the available states of rotatable bonds for a particular system. If the vectors differ from the originally stated rotatable bond sample counts, the specific system will be updated.
 
void defineCisTransBondSettings (int system_index, const std::vector< std::vector< double > > &settings)
 Load specific settings into the available states of cis-trans bonds for a particular system. If the vectors are not of length 2 (the assumption for the number of choices in a cis-trans rotatable bond), the number of states will be updated to accommodate the provided choices.
 
void defineChiralCenterSettings (int system_index, const std::vector< std::vector< int > > &settings)
 Load specific settings into the available states of an invertible chiral center for a particular system.
 
void setVariableRanges (const std::vector< double > &general_rot_settings_in, const std::vector< double > &general_ctx_settings_in, bool sample_cis_trans_states=false, bool sample_chiral_states=false)
 Set the ranges of variables (rotatable bonds, cis-trans bonds, chiral centers) for each permutor map.
 
void impartControlData (const ConformerControls &confcon)
 Transfer control data from a &conformer namelist to the object. This will include vectors of torsion angle settings as well as information on how to adjust the settings based on a set of supplied structures.
 
 SynthesisPermutor ()
 The constructor accepts an array of pointers to existing chemical features objects, in which case a pointer to the original object for each system will be retained. The constructor also accepts an array of topologies, in which case the chemical features object will be temporarily created for the purpose of extracting critical arrays of atoms used in manipulations while the pointer to the chemical features object itself will go on to read null.
 
 SynthesisPermutor (const AtomGraphSynthesis *poly_ag, StopWatch *timer=nullptr)
 
 SynthesisPermutor (const AtomGraphSynthesis &poly_ag, StopWatch *timer=nullptr)
 
 SynthesisPermutor (const AtomGraphSynthesis *poly_ag, const ConformerControls &confcon, StopWatch *timer=nullptr)
 
 SynthesisPermutor (const AtomGraphSynthesis &poly_ag, const ConformerControls &confcon, StopWatch *timer=nullptr)
 
 SynthesisPermutor (const PhaseSpaceSynthesis *poly_ps, StopWatch *timer=nullptr)
 
 SynthesisPermutor (const PhaseSpaceSynthesis &poly_ps, StopWatch *timer=nullptr)
 
 SynthesisPermutor (const PhaseSpaceSynthesis *poly_ps, const ConformerControls &confcon, StopWatch *timer=nullptr)
 
 SynthesisPermutor (const PhaseSpaceSynthesis &poly_ps, const ConformerControls &confcon, StopWatch *timer=nullptr)
 
 SynthesisPermutor (const std::vector< ChemicalFeatures * > &chemfe_in, bool retain_pointers=true, StopWatch *timer=nullptr)
 
 SynthesisPermutor (const std::vector< ChemicalFeatures > &chemfe_in, bool retain_pointers=true, StopWatch *timer=nullptr)
 
 SynthesisPermutor (const std::vector< ChemicalFeatures * > &chemfe_in, const PhaseSpaceSynthesis *poly_ps, const ConformerControls &confcon, const bool retain_pointers=true, StopWatch *timer=nullptr)
 
 SynthesisPermutor (const std::vector< ChemicalFeatures * > &chemfe_in, const PhaseSpaceSynthesis &poly_ps, const ConformerControls &confcon, const bool retain_pointers=true, StopWatch *timer=nullptr)
 
 SynthesisPermutor (const std::vector< ChemicalFeatures > &chemfe_in, const PhaseSpaceSynthesis &poly_ps, const ConformerControls &confcon, const bool retain_pointers=true, StopWatch *timer=nullptr)
 
 SynthesisPermutor (const SynthesisPermutor &original)
 The presence of POINTER-kind Hybrid objects and multiple ARRAY-kind members means that the copy and move constructors as well as assignment operators must be written out explicitly.
 
 SynthesisPermutor (SynthesisPermutor &&original)
 
SynthesisPermutoroperator= (const SynthesisPermutor &other)
 
SynthesisPermutoroperator= (SynthesisPermutor &&other)
 
int getPermutorMapIndex (const AtomGraph *query_ag) const
 Match a topology to the permutor map index, or a system in a synthesis to its permutor map index.
 
int getPermutorMapIndex (const AtomGraph &query_ag) const
 
int getPermutorMapIndex (const PhaseSpaceSynthesis *poly_ps, int system_index) const
 
int getPermutorMapIndex (const PhaseSpaceSynthesis &poly_ps, int system_index) const
 
int getRotatableBondCount (const int permutor_map_index) const
 Get the number of relevant rotatable bonds.
 
int getRotatableBondCount () const
 
int getCisTransBondCount (const int permutor_map_index) const
 Get the number of relevant cis-trans isomeric bonds.
 
int getCisTransBondCount () const
 
int getChiralCenterCount (const int permutor_map_index) const
 Get the number of relevant chiral centers.
 
int getChiralCenterCount () const
 
const std::vector< int > & getElementSampleCounts (int system_index) const
 Get the numbers of options for each mutable element in a specific system.
 
const std::vector< int > & getElementSampleCounts (const AtomGraph *query_ag) const
 
const std::vector< int > & getElementSampleCounts (const AtomGraph &query_ag) const
 
int getElementSampleCount (ConformationEdit element_kind, int index) const
 Get the number of settings to be sampled in one element, of a particular kind, from the concatenated list spanning all systems.
 
int getElementSampleCount (CoupledEdit ce) const
 
const TickCounter< double > & getStateTracker (int system_index) const
 Get a const reference to the state tracker for the molecule. Also useable to get a copy of the state tracker which is then mutable.
 
const TickCounter< double > & getStateTracker (const AtomGraph *ag) const
 
const TickCounter< double > & getStateTracker (const AtomGraph &ag) const
 
llint getReplicaCount (int query_index, SamplingIntensity effort) const
 Get the number of replicas needed to fulfill a given level of sampling in one of the permutor maps.
 
llint getReplicaCount (const AtomGraph *query_ag, SamplingIntensity effort) const
 
llint getReplicaCount (const AtomGraph &query_ag, SamplingIntensity effort) const
 
std::vector< llint > getReplicaCount (SamplingIntensity effort) const
 
const ChemicalFeaturesgetChemicalFeaturesPointer (int map_index) const
 Get the pointer to the chemical features object for one of the permutor maps, which can in turn reveal the original topology governing the map. This function will apply a check to ensure that the ChemicalFeatures pointers are valid.
 
const std::vector< ChemicalFeatures * > getChemicalFeaturesPointer () const
 
void applySynthesis (const PhaseSpaceSynthesis *poly_ps_in, VariableTorsionAdjustment adj=VariableTorsionAdjustment::DO_NOT_CHANGE)
 Apply a synthesis to the permutor maps, which will be used as the starting point for defining new conformations of each molecule. If cis-trans or chirality sampling are shut off, the synthesis will be used to define the settings available for sampling.
 
void applySynthesis (const PhaseSpaceSynthesis &poly_ps_in, VariableTorsionAdjustment adj=VariableTorsionAdjustment::DO_NOT_CHANGE)
 
void permuteSystem (PhaseSpaceSynthesis *psynth, int system_index, int map_index, const CoupledEdit ce, int setting_index, PrecisionModel prec=PrecisionModel::SINGLE) const
 Manipulate one of the systems inside a synthesis, based on the internal permutor maps. The type of manipulation will be interpreted so that the appropriate group of atoms can be set to the internal coordinates selected from the array of settings. See randomizeSystem() below for a discussion on the limited advantages of batching these operations to work on a single, real-valued coordinate set and then converting all of the coordinates back to the split fixed-precision format.
 
void permuteSystem (int system_index, const CoupledEdit ce, int setting_index, PrecisionModel prec=PrecisionModel::SINGLE)
 
void randomizeSystem (PhaseSpaceSynthesis *psynth, int system_index, int map_index, Xoshiro256ppGenerator *xrs, PrecisionModel prec=PrecisionModel::SINGLE, const CoupledEdit mask_a={ ConformationEdit::BOND_ROTATION, -1 }, const CoupledEdit mask_b={ ConformationEdit::BOND_ROTATION, -1 }, const CoupledEdit mask_c={ ConformationEdit::BOND_ROTATION, -1 }) const
 Randomize the system's degrees of freedom. Up to three degrees of freedom can be masked against any changes. This function inherently converts the (possibly split) fixed-precision coordinate arrays of the synthesis to real numbers for manipulation, then converts the real numbers back. However, due to the limited extent to which this happens, it is not of much performance advantage to perform the full conversion of all coordinates to real values, batch the manipulations, and then convert the results back (primarily because of the reverse conversion). Such an optimization would also require additional code, and not be replicable on the GPU.
 
void randomizeSystem (int system_index, Xoshiro256ppGenerator *xrs, PrecisionModel prec=PrecisionModel::SINGLE, const CoupledEdit mask_a={ ConformationEdit::BOND_ROTATION, -1 }, const CoupledEdit mask_b={ ConformationEdit::BOND_ROTATION, -1 }, const CoupledEdit mask_c={ ConformationEdit::BOND_ROTATION, -1 })
 
PhaseSpaceSynthesis buildSynthesis (SamplingIntensity effort, Xoshiro256ppGenerator *xrs, std::vector< int > *correspondence, int system_limit, int globalpos_scale_bits=default_globalpos_scale_bits, int localpos_scale_bits=default_localpos_scale_bits, int velocity_scale_bits=default_velocity_scale_bits, int force_scale_bits=default_force_scale_bits, PrecisionModel prec=PrecisionModel::SINGLE, ClashReport *clrep=nullptr, int iteration_limit=default_conf_max_seeding_attempts, int max_clashes=default_conf_clash_pairs) const
 Produce a new synthesis containing permutations of each structure in the current synthesis linked to the object.
 
PhaseSpaceSynthesis buildSynthesis (SamplingIntensity effort, Xoshiro256ppGenerator *xrs, std::vector< int > *correspondence, PrecisionModel prec, int system_limit, ClashReport *clrep=nullptr, int iteration_limit=default_conf_max_seeding_attempts, int max_clashes=default_conf_clash_pairs) const
 
PhaseSpaceSynthesis buildSynthesis (SamplingIntensity effort, Xoshiro256ppGenerator *xrs, int system_limit, int globalpos_scale_bits=default_globalpos_scale_bits, int localpos_scale_bits=default_localpos_scale_bits, int velocity_scale_bits=default_velocity_scale_bits, int force_scale_bits=default_force_scale_bits, PrecisionModel prec=PrecisionModel::SINGLE, ClashReport *clrep=nullptr, int iteration_limit=default_conf_max_seeding_attempts, int max_clashes=default_conf_clash_pairs) const
 
PhaseSpaceSynthesis buildSynthesis (SamplingIntensity effort, Xoshiro256ppGenerator *xrs, PrecisionModel prec, int system_limit, ClashReport *clrep=nullptr, int iteration_limit=default_conf_max_seeding_attempts, int max_clashes=default_conf_clash_pairs) const
 

Detailed Description

An object for tracking the states and The object itself stores a series of permutor maps, detailing the atoms that move as a consequence of rotating about some bond or inverting a chiral center. One such map is kept for each unique topology, and the atom indices of a particular system are then obtained by adding the atom offset from the PhaseSpaceSynthesis, Condensate, or AtomGraphSynthesis.

Constructor & Destructor Documentation

◆ SynthesisPermutor() [1/2]

stormm::synthesis::SynthesisPermutor::SynthesisPermutor ( )

The constructor accepts an array of pointers to existing chemical features objects, in which case a pointer to the original object for each system will be retained. The constructor also accepts an array of topologies, in which case the chemical features object will be temporarily created for the purpose of extracting critical arrays of atoms used in manipulations while the pointer to the chemical features object itself will go on to read null.

Parameters
poly_agTopology synthesis (sufficient for generating the object, but will calculate and discard chemical features for all individual topologies)
poly_psCoordinate synthesis (also sufficient for generating the object, but will again imply creating and discarding chemical features)
chemfe_inA series of pointers to chemical features objects for each system
retain_pointersIndicate whether a pointer to the provided chemical features object should be retained. This has a default value of true to make it transparent to future development, with any SynthesisPermutor created based on a topology passing a value of false.
timerWall time tracking object, passed down to ChemicalFeatures computations

◆ SynthesisPermutor() [2/2]

stormm::synthesis::SynthesisPermutor::SynthesisPermutor ( const SynthesisPermutor & original)

The presence of POINTER-kind Hybrid objects and multiple ARRAY-kind members means that the copy and move constructors as well as assignment operators must be written out explicitly.

Parameters
originalThe object to copy or move
otherAnother object sitting on the right hand side of the assignment operator

Member Function Documentation

◆ applySynthesis()

void stormm::synthesis::SynthesisPermutor::applySynthesis ( const PhaseSpaceSynthesis * poly_ps_in,
VariableTorsionAdjustment adj = VariableTorsionAdjustment::DO_NOT_CHANGE )

Apply a synthesis to the permutor maps, which will be used as the starting point for defining new conformations of each molecule. If cis-trans or chirality sampling are shut off, the synthesis will be used to define the settings available for sampling.

Overloaded:

  • Provide the synthesis by const pointer
  • Provide the synthesis by const reference
Parameters
poly_ps_inThe input synthesis of coordinates
adjThe manner in which to adjust settings for the permutation of molecular geometric variables (e.g. rotatable bonds, chiral centers) in response to the initial state of the synthesis

◆ buildSynthesis()

PhaseSpaceSynthesis stormm::synthesis::SynthesisPermutor::buildSynthesis ( SamplingIntensity effort,
Xoshiro256ppGenerator * xrs,
std::vector< int > * correspondence,
int system_limit,
int globalpos_scale_bits = default_globalpos_scale_bits,
int localpos_scale_bits = default_localpos_scale_bits,
int velocity_scale_bits = default_velocity_scale_bits,
int force_scale_bits = default_force_scale_bits,
PrecisionModel prec = PrecisionModel::SINGLE,
ClashReport * clrep = nullptr,
int iteration_limit = default_conf_max_seeding_attempts,
int max_clashes = default_conf_clash_pairs ) const

Produce a new synthesis containing permutations of each structure in the current synthesis linked to the object.

Overloaded:

  • Build the synthesis with or without specifying precision metrics for positions, velocities, and force accumulators
  • Provide an option to return the vector indicating which systems in the result originated in each system of the synthesis attached to this SynthesisPermutor object.
Parameters
effortThe degree of sampling to be carried out on the structures of the current synthesis.
xrsRandom number generator to use in randomizing degrees of freedom not explicitly sampled
system_limitThe maximum number of systems that the resulting synthesis can contain. If this limit would be exceeded, structures in the current synthesis will have their respective permutation efforts dialed down until the result falls within the system limits.
globalpos_scale_bitsGlobal position coordinate bits after the decimal
localpos_scale_bitsLocal position coordinate bits after the decimal
velocity_scale_bitsVelocity coordinate bits after the decimal
force_scale_bitsForce component bits after the decimal
precPrecision model in whcih to do calculations for structural manipulations
clrepObject to collect reports on clashes in each structure as it is produced. A nullptr value will skip clash detection. If clashes are detected during EXHAUSTIVE permutation evaluations, the clashing structures will not be included in the output. In other contexts, if clash-free structures cannot be found within the allowed iterations, the structures will be removed from the output.
iteration_limitThe maximum number of iterations for randomizing variable groups before the sturcture is declared a loss
max_clashesThe maximum number of clashes between atoms before a structure is declared to clash

◆ defineChiralCenterSettings()

void stormm::synthesis::SynthesisPermutor::defineChiralCenterSettings ( int system_index,
const std::vector< std::vector< int > > & settings )

Load specific settings into the available states of an invertible chiral center for a particular system.

Parameters
system_indexIndex of the system of interest
settingsA vector of vectors containing the acceptable settings as 0 or 1

◆ defineCisTransBondSettings()

void stormm::synthesis::SynthesisPermutor::defineCisTransBondSettings ( int system_index,
const std::vector< std::vector< double > > & settings )

Load specific settings into the available states of cis-trans bonds for a particular system. If the vectors are not of length 2 (the assumption for the number of choices in a cis-trans rotatable bond), the number of states will be updated to accommodate the provided choices.

Parameters
system_indexIndex of the system of interest
settingsA vector of vectors containing the acceptable settings as real numbers, in units of radians

◆ defineRotatableBondSettings()

void stormm::synthesis::SynthesisPermutor::defineRotatableBondSettings ( int map_index,
const std::vector< std::vector< double > > & settings )

Load specific settings into the available states of rotatable bonds for a particular system. If the vectors differ from the originally stated rotatable bond sample counts, the specific system will be updated.

Parameters
system_indexIndex of the system of interest
settingsA vector of vectors containing the acceptable settings as real numbers, in units of radians

◆ dpData()

const SyPermutorKit< double > stormm::synthesis::SynthesisPermutor::dpData ( HybridTargetLevel tier = HybridTargetLevel::HOST) const

Get the double-precision read-only abstract for the object.

Parameters
tierGet data pointers relevant to the CPU, or to the GPU.

◆ getChemicalFeaturesPointer()

const ChemicalFeatures * stormm::synthesis::SynthesisPermutor::getChemicalFeaturesPointer ( int map_index) const

Get the pointer to the chemical features object for one of the permutor maps, which can in turn reveal the original topology governing the map. This function will apply a check to ensure that the ChemicalFeatures pointers are valid.

Overloaded:

  • Get the pointer to one map's underlying features
  • Get a const reference to the array of all such pointers
Parameters
map_indexIndex of the map of interest (this will also be checked for validity)

◆ getChiralCenterCount()

int stormm::synthesis::SynthesisPermutor::getChiralCenterCount ( const int permutor_map_index) const

Get the number of relevant chiral centers.

Overloaded:

  • Get the number of chiral centers for a specific map
  • Get the number of chiral centers across all maps
Parameters
permutor_map_indexIndex of the map / topology of interest

◆ getCisTransBondCount()

int stormm::synthesis::SynthesisPermutor::getCisTransBondCount ( const int permutor_map_index) const

Get the number of relevant cis-trans isomeric bonds.

Overloaded:

  • Get the number of cis-trans isomeric bonds for a specific map
  • Get the number of cis-trans isomeric bonds across all maps
Parameters
permutor_map_indexIndex of the map / topology of interest

◆ getCisTransGroup()

const IsomerPlan & stormm::synthesis::SynthesisPermutor::getCisTransGroup ( int system_index,
int group_index ) const

Get one of the cis-trans isomeric groups.

Parameters
system_indexIndex of the system of interest within the attached synthesis
group_indexThe cis-trans isomeric group of interest

◆ getElementSampleCount()

int stormm::synthesis::SynthesisPermutor::getElementSampleCount ( ConformationEdit element_kind,
int index ) const

Get the number of settings to be sampled in one element, of a particular kind, from the concatenated list spanning all systems.

Overloaded:

  • Provide the type and index of the element separately
  • Provide a tuple of the two pieces of information

element_kind The type of element, e.g. a rotatable bond

index Index of the variable element from within the concatenated list

◆ getElementSampleCounts()

const std::vector< int > & stormm::synthesis::SynthesisPermutor::getElementSampleCounts ( int system_index) const

Get the numbers of options for each mutable element in a specific system.

Overloaded:

  • Search by system index
  • Search by topology
Parameters
system_indexIndex of the system of interest
query_agTopology of interest (must match one of the topology pointers guiding a map, or the function will return an error)

◆ getInvertibleGroup()

const IsomerPlan & stormm::synthesis::SynthesisPermutor::getInvertibleGroup ( int system_index,
int group_index ) const

Get one of the invertible chiral centers.

Parameters
system_indexIndex of the system of interest within the attached synthesis
group_indexThe chiral center of interest

◆ getPermutorMapIndex()

int stormm::synthesis::SynthesisPermutor::getPermutorMapIndex ( const AtomGraph * query_ag) const

Match a topology to the permutor map index, or a system in a synthesis to its permutor map index.

Overloaded:

  • Provide the topology by pointer or by const reference
  • Provide a coordinate synthesis by pointer or const reference with a system index indicating a topology to search for
Parameters
query_agThe topology to search for
poly_psCoordinate synthesis containing many systems with topology pointers
system_indexIndex of system within the coordinate synthesis

◆ getReplicaCount()

llint stormm::synthesis::SynthesisPermutor::getReplicaCount ( int query_index,
SamplingIntensity effort ) const

Get the number of replicas needed to fulfill a given level of sampling in one of the permutor maps.

Overloaded:

  • Identify the map of interest by system index from the attached synthesis
  • Identify the map of interest by topology pointer
  • Obtain a list of replicas needed for all permutor maps
Parameters
query_indexIndex of the system of interest within the attached synthesis
query_agPointer to the topology of interest
effortThe requested level of sampling effort

◆ getRotatableBondCount()

int stormm::synthesis::SynthesisPermutor::getRotatableBondCount ( const int permutor_map_index) const

Get the number of relevant rotatable bonds.

Overloaded:

  • Get the number of rotatable bonds for a specific map
  • Get the number of rotatable bonds across all maps
Parameters
permutor_map_indexIndex of the map / topology of interest

◆ getRotatableGroup()

const IsomerPlan & stormm::synthesis::SynthesisPermutor::getRotatableGroup ( int system_index,
int group_index ) const

Get one of the rotatable groups.

Parameters
system_indexIndex of the system of interest
group_indexThe rotatable group of interest

◆ getStateTracker()

const TickCounter< double > & stormm::synthesis::SynthesisPermutor::getStateTracker ( int system_index) const

Get a const reference to the state tracker for the molecule. Also useable to get a copy of the state tracker which is then mutable.

Overloaded:

  • Get the state tracker based on an index in the permutor
  • Get the state tracker based on a system's topology (this will raise an exception if the search fails)
Parameters
system_indexIndex of the system of interest
agSystem topology

◆ getSystemChiralCenterCount()

int stormm::synthesis::SynthesisPermutor::getSystemChiralCenterCount ( int system_index) const

Get the number of chiral centers in one of the systems of the attached synthesis.

Parameters
system_indexIndex of the system of interest

◆ getSystemCisTransBondCount()

int stormm::synthesis::SynthesisPermutor::getSystemCisTransBondCount ( int system_index) const

Get the number of cis-trans isomeric groups in one of the systems of the attached synthesis.

Parameters
system_indexIndex of the system of interest

◆ getSystemRotatableBondCount()

int stormm::synthesis::SynthesisPermutor::getSystemRotatableBondCount ( int system_index) const

Get the number of rotatable groups in one of the systems of the attached synthesis.

Parameters
system_indexIndex of the system of interest

◆ getVariableElementCount()

int stormm::synthesis::SynthesisPermutor::getVariableElementCount ( int system_index) const

Get the total number of variable elements in one of the systems: rotatable bonds, cis-trans bonds, and chiral centers (even centers that cannot invert are counted).

Overloaded:

  • Search by system index
  • Search by topology
Parameters
system_indexIndex of the system of interest

◆ impartControlData()

void stormm::synthesis::SynthesisPermutor::impartControlData ( const ConformerControls & confcon)

Transfer control data from a &conformer namelist to the object. This will include vectors of torsion angle settings as well as information on how to adjust the settings based on a set of supplied structures.

Parameters
confconUser input derived from a &conformer namelist

◆ permuteSystem()

void stormm::synthesis::SynthesisPermutor::permuteSystem ( PhaseSpaceSynthesis * psynth,
int system_index,
int map_index,
const CoupledEdit ce,
int setting_index,
PrecisionModel prec = PrecisionModel::SINGLE ) const

Manipulate one of the systems inside a synthesis, based on the internal permutor maps. The type of manipulation will be interpreted so that the appropriate group of atoms can be set to the internal coordinates selected from the array of settings. See randomizeSystem() below for a discussion on the limited advantages of batching these operations to work on a single, real-valued coordinate set and then converting all of the coordinates back to the split fixed-precision format.

Overloaded:

  • Manipulate a structure in an arbitrary synthesis, such as one created by the object by replicating structures in the synthesis it references internally.
  • Manipulate a structure in the synthesis that this object references internally.
Parameters
psynthThe collection of systems to operate upon
system_indexIndex of the system to manipulate within synth
map_indexIndex of the permutor map (this can be inferred if the attached synthesis is the one being altered)
ceA tuple of the manipulation to perform and its index from within the concatenated lists spanning all permutor maps
setting_indexIndex of the setting to use, numbered 0, 1, ... N for a choice of N possible options

◆ randomizeSystem()

void stormm::synthesis::SynthesisPermutor::randomizeSystem ( PhaseSpaceSynthesis * psynth,
int system_index,
int map_index,
Xoshiro256ppGenerator * xrs,
PrecisionModel prec = PrecisionModel::SINGLE,
const CoupledEdit mask_a = { ConformationEdit::BOND_ROTATION, -1 },
const CoupledEdit mask_b = { ConformationEdit::BOND_ROTATION, -1 },
const CoupledEdit mask_c = { ConformationEdit::BOND_ROTATION, -1 } ) const

Randomize the system's degrees of freedom. Up to three degrees of freedom can be masked against any changes. This function inherently converts the (possibly split) fixed-precision coordinate arrays of the synthesis to real numbers for manipulation, then converts the real numbers back. However, due to the limited extent to which this happens, it is not of much performance advantage to perform the full conversion of all coordinates to real values, batch the manipulations, and then convert the results back (primarily because of the reverse conversion). Such an optimization would also require additional code, and not be replicable on the GPU.

Overloaded:

  • Manipulate a structure in an arbitrary synthesis, such as one created by the object by replicating structures in the synthesis it references internally.
  • Manipulate a structure in the synthesis that this object references internally.
Parameters
psynthThe collection of systems to operate upon
system_indexIndex of the system to manipulate within synth
map_indexIndex of the permutor map to which the system corresponds (if the synthesis to manipulate differs from the one referenced in the object)
xrsPsuedo-random number generator for selecting random settings of each mutable element
precPrecision model under which to perform the structural operations
mask_aFirst of up to three features that will be left as they are found
mask_cSecond of up to three features that will be left as they are found
mask_bThird of up to three features that will be left as they are found

◆ setVariableRanges()

void stormm::synthesis::SynthesisPermutor::setVariableRanges ( const std::vector< double > & general_rot_settings_in,
const std::vector< double > & general_ctx_settings_in,
bool sample_cis_trans_states = false,
bool sample_chiral_states = false )

Set the ranges of variables (rotatable bonds, cis-trans bonds, chiral centers) for each permutor map.

Parameters
general_rot_settings_inGeneral-purpose settings for any rotatable bond
general_ctx_settings_inGeneral-purpose settings for any cis-trans bond
sample_cis_trans_statesDirective to sample cis- and trans-isomeric forms of double bonds (likely passed down from a &conformer namelist, which carries the same default value of FALSE)
sample_chiral_statesDirective to sample D- and L-chiral states of invertible atom centers (likely passed down from a &conformer namelist, which carries the same default value of FALSE)

◆ spData()

const SyPermutorKit< float > stormm::synthesis::SynthesisPermutor::spData ( HybridTargetLevel tier = HybridTargetLevel::HOST) const

Get the single-precision read-only abstract for the object.

Parameters
tierGet data pointers relevant to the CPU, or to the GPU.

The documentation for this class was generated from the following files: