CASM
AClustersApproachtoStatisticalMechanics
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules
Enumerator.cc
Go to the documentation of this file.
3 #include "casm/clex/ScelEnum.hh"
4 
5 namespace CASM {
6 
9  const jsonParser &_kwargs,
10  const Completer::EnumOption &enum_opt) {
11 
12  jsonParser kwargs {_kwargs};
13  if(kwargs.is_null()) {
14  kwargs = jsonParser::object();
15  }
16 
17  jsonParser scel_input;
18  scel_input["existing_only"] = true;
19  kwargs.get_if(scel_input, "supercells");
20 
21  // check supercell shortcuts
22  if(enum_opt.vm().count("min")) {
23  scel_input["min"] = enum_opt.min_volume();
24  }
25 
26  if(enum_opt.vm().count("max")) {
27  scel_input["max"] = enum_opt.max_volume();
28  }
29 
30  if(enum_opt.all_existing()) {
31  scel_input.erase("min");
32  scel_input.erase("max");
33  scel_input["existing_only"] = true;
34  }
35 
36  if(enum_opt.vm().count("scelnames")) {
37  scel_input["name"] = enum_opt.supercell_strs();
38  }
39 
40  return scel_input;
41  }
42 
46  const jsonParser &_kwargs,
47  const Completer::EnumOption &enum_opt) {
48 
49  return make_scel_enum_props(
50  primclex,
51  make_enumerator_scel_enum_input(_kwargs, enum_opt));
52  }
53 
57  std::unique_ptr<SupercellEnumerator<Lattice> > make_enumerator_superlat_enum(
59  const jsonParser &_kwargs,
60  const Completer::EnumOption &enum_opt) {
61 
63  primclex,
64  _kwargs,
65  enum_opt);
66 
67  Supercell unit_cell(&primclex, enum_props.generating_matrix());
68 
69  return notstd::make_unique<SupercellEnumerator<Lattice> >(
70  primclex.get_prim().lattice(),
71  unit_cell.factor_group(),
72  enum_props);
73  }
74 
78  std::unique_ptr<ScelEnum> make_enumerator_scel_enum(
80  const jsonParser &_kwargs,
81  const Completer::EnumOption &enum_opt) {
82 
83  return notstd::make_unique<ScelEnum>(
84  primclex,
85  make_enumerator_scel_enum_input(_kwargs, enum_opt));
86  }
87 
91  std::vector<std::string> make_enumerator_filter_expr(
92  const jsonParser &_kwargs,
93  const Completer::EnumOption &enum_opt) {
94 
95  std::vector<std::string> filter_expr;
96  // check shortcuts
97  if(enum_opt.vm().count("filter")) {
98  filter_expr = enum_opt.filter_strs();
99  }
100  else if(_kwargs.contains("filter")) {
101  filter_expr.push_back(_kwargs["filter"].get<std::string>());
102  };
103 
104  return filter_expr;
105  }
106 }
std::vector< std::string > make_enumerator_filter_expr(const jsonParser &_kwargs, const Completer::EnumOption &enum_opt)
Standardizes parsing casm enum filter expressions.
Definition: Enumerator.cc:91
bool get_if(T &t, const std::string &key, Args...args) const
Definition: jsonParser.hh:740
const std::vector< std::string > & filter_strs() const
Definition: Handlers.hh:841
Data structure for holding supercell enumeration properties.
PrimClex * primclex
Definition: settings.cc:101
Main CASM namespace.
Definition: complete.cpp:8
const Lattice & lattice() const
Represents a supercell of the primitive parent crystal structure.
Definition: Supercell.hh:37
jsonParser make_enumerator_scel_enum_input(const jsonParser &_kwargs, const Completer::EnumOption &enum_opt)
Standardizes parsing casm enum input options to make ScelEnum JSON input.
Definition: Enumerator.cc:8
ScelEnumProps make_enumerator_scel_enum_props(PrimClex &primclex, const jsonParser &_kwargs, const Completer::EnumOption &enum_opt)
Standardizes parsing casm enum input options to make an ScelEnumProps.
Definition: Enumerator.cc:44
size_type erase(const std::string &name)
Erase key:value pair from an object.
Definition: jsonParser.cc:506
ScelEnumProps make_scel_enum_props(PrimClex &primclex, const jsonParser &input)
Make a ScelEnumProps object from JSON input.
Eigen::Matrix3i generating_matrix() const
std::unique_ptr< SupercellEnumerator< Lattice > > make_enumerator_superlat_enum(PrimClex &primclex, const jsonParser &_kwargs, const Completer::EnumOption &enum_opt)
Standardizes parsing casm enum input options to make an SupercellEnumerator ...
Definition: Enumerator.cc:57
PrimClex is the top-level data structure for a CASM project.
Definition: PrimClex.hh:52
bool all_existing() const
Definition: Handlers.hh:837
const std::vector< std::string > & supercell_strs() const
Returns the list of the supercells for add_scelnames_suboption()
Definition: Handlers.cc:212
po::variables_map & vm()
Get the variables map.
Definition: Handlers.cc:145
bool contains(const std::string &name) const
Return true if JSON object contains 'name'.
Definition: jsonParser.cc:500
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.
Definition: Enumerator.cc:78
static jsonParser object()
Returns an empty json object.
Definition: jsonParser.hh:329
const Structure & get_prim() const
const Access to primitive Structure
Definition: PrimClex.cc:260