| 85 | } |
| 86 | |
| 87 | void parse_thickness_parameters(ParameterManager::Ptr manager, |
| 88 | PTree& config, SymmetryOrbits& orbits) { |
| 89 | std::string type = config.get<std::string>("type"); |
| 90 | Float default_thickness = config.get<Float>("default"); |
| 91 | manager->set_default_thickness(default_thickness); |
| 92 | if (type == "vertex_orbit") { |
| 93 | manager->set_thickness_type(ParameterCommon::VERTEX); |
| 94 | } else if (type == "edge_orbit") { |
| 95 | manager->set_thickness_type(ParameterCommon::EDGE); |
| 96 | } else { |
| 97 | std::stringstream err_msg; |
| 98 | err_msg << "Invalid thickness type: " << type; |
| 99 | throw NotImplementedError(err_msg.str()); |
| 100 | } |
| 101 | |
| 102 | PTree& effective_orbits = config.get_child("effective_orbits"); |
| 103 | PTree& thicknesses = config.get_child("thickness"); |
| 104 | auto orbit_itr = effective_orbits.begin(); |
| 105 | auto thickness_itr = thicknesses.begin(); |
| 106 | while (orbit_itr != effective_orbits.end()) { |
| 107 | assert(thickness_itr != thicknesses.end()); |
| 108 | |
| 109 | size_t orbit_index = orbit_itr->second.get_value<int>(); |
| 110 | VectorI roi; |
| 111 | if (type == "vertex_orbit") { |
| 112 | roi = orbits.get_vertex_orbit(orbit_index); |
| 113 | } else { |
| 114 | roi = orbits.get_edge_orbit(orbit_index); |
| 115 | } |
| 116 | |
| 117 | std::string thickness = |
| 118 | thickness_itr->second.get_value<std::string>(); |
| 119 | Float val = parse_value(thickness); |
| 120 | std::string formula = parse_formula(thickness); |
| 121 | manager->add_thickness_parameter(roi, formula, val); |
| 122 | |
| 123 | orbit_itr++; |
| 124 | thickness_itr++; |
| 125 | } |
| 126 | } |
| 127 | |
| 128 | std::list<VectorI> group_by_label(const MatrixFr& labels) { |
| 129 | std::map<int, std::vector<size_t> > groups; |
no test coverage detected