4 #include "casm/external/MersenneTwister/MersenneTwister.h"
18 "ConfigEnumRandomOccupations: \n\n"
20 " supercells: ScelEnum JSON settings (default='{\"existing_only\"=true}')\n"
21 " Indicate supercells to enumerate all occupational configurations in. May \n"
22 " be a JSON array of supercell names, or a JSON object specifying \n"
23 " supercells in terms of size and unit cell. By default, all existing \n"
24 " supercells are used. See 'ScelEnum' description for details. \n\n"
26 " n_config: integer (optional, default=100) \n"
27 " How many random configurations to generate. Includes duplicate and pre-\n"
28 " existing configurations. \n\n"
30 " primitive_only: bool (default=true)\n"
31 " If true, only the primitive form of a configuration is saved in the \n"
32 " configuration list. Otherwise, both primitive and non-primitive \n"
33 " configurations are saved. \n\n"
35 " filter: string (optional, default=None)\n"
36 " A query command to use to filter which Configurations are kept. \n\n"
39 " To enumerate 200 random occupations in supercells up to and including size 4:\n"
40 " casm enum --method ConfigEnumRandomOccupations -i \n"
41 " '{\"supercell\":{\"max\":4}, \"n_config\": 200}' \n"
43 " To enumerate 200 random occupations in all existing supercells:\n"
44 " casm enum --method ConfigEnumRandomOccupations -i '{\"n_config\": 200}' \n"
46 " To enumerate 100 random occupations in all existing supercells:\n"
47 " casm enum --method ConfigEnumRandomOccupations' \n"
49 " To enumerate 200 random occupations in particular supercells:\n"
50 " casm enum --method ConfigEnumRandomOccupations -i \n"
52 " \"supercells\": { \n"
54 " \"SCEL1_1_1_1_0_0_0\",\n"
55 " \"SCEL2_1_2_1_0_0_0\",\n"
56 " \"SCEL4_1_4_1_0_0_0\"\n"
59 " \"n_config\": 200\n"
74 bool primitive_only =
true;
75 _kwargs.
get_if(primitive_only,
"primitive_only");
79 return notstd::make_unique<ConfigEnumRandomOccupations>(scel, n_config, mtrand);
107 m_n_config(_n_config),
109 m_max_allowed(_scel.max_allowed_occupation()) {
112 throw std::runtime_error(
"Error in ConfigEnumRandomOccupations: n_config < 0");
119 m_current = notstd::make_cloneable<Configuration>(_scel, this->
source(0));
void reset_properties(ConfigDoF &_dof)
std::vector< std::string > make_enumerator_filter_expr(const jsonParser &_kwargs, const Completer::EnumOption &enum_opt)
Standardizes parsing casm enum filter expressions.
bool get_if(T &t, const std::string &key, Args...args) const
notstd::cloneable_ptr< Configuration > m_current
ConfigEnumRandomOccupations(Supercell &_scel, Index _n_config, MTRand &_mtrand)
Construct with a Supercell, using all permutations.
Base class for generic use of enumerators that may be accessed through the API.
static const std::string interface_help
virtual jsonParser source(step_type step) const
Represents a supercell of the primitive parent crystal structure.
static int run(PrimClex &primclex, const jsonParser &kwargs, const Completer::EnumOption &enum_opt)
int insert_configs(std::string method, PrimClex &primclex, ScelIterator begin, ScelIterator end, ConfigEnumConstructor f, std::vector< std::string > filter_expr, bool primitive_only)
Standardizes insertion from enumerators that construct configurations.
Template class to be specialized for each enumerator that may be accessed via the API...
value_type & _current()
Access the current ObjectType by reference.
EigenIndex Index
For long integer indexing:
void _invalidate()
Call if enumeration complete.
step_type step() const
Increments with each enumerated object.
bool get_else(T &t, const std::string &key, const T &default_value, Args...args) const
PrimClex is the top-level data structure for a CASM project.
void _set_step(step_type val)
Set current step value.
void set_source(const jsonParser &source)
void increment() override
Implements increment.
std::unique_ptr< ScelEnum > make_enumerator_scel_enum(PrimClex &primclex, const jsonParser &_kwargs, const Completer::EnumOption &enum_opt)
Standardizes parsing casm enum input options to make an ScelEnum.
static const std::string enumerator_name
Array< int > m_max_allowed
void _increment_step()
Increment current step value.
CASM::EnumInterfaceBase * make_ConfigEnumRandomOccupations_interface()