void MultiviewRecognizerWithChangeDetection<PointT>::cleanupHVFilters() { std::vector<size_t> view_ids_vector = getMapKeys(views_); std::set<size_t> view_ids_set(view_ids_vector.begin(), view_ids_vector.end()); std::vector<size_t> removed_ids = getMapKeys(removed_points_history_); for(size_t id_to_remove : removed_ids) { if(view_ids_set.find(id_to_remove) == view_ids_set.end()) { removed_points_history_.erase(id_to_remove); removed_points_cumulated_history_.erase(id_to_remove); } } }
std::vector<bool> MultiviewRecognizerWithChangeDetection<PointT>::getHypothesisInViewsMask(ModelTPtr model, const Eigen::Matrix4f &pose, size_t origin_id) { std::vector<size_t> sorted_view_ids = getMapKeys(views_); std::sort(sorted_view_ids.begin(), sorted_view_ids.end()); size_t hypothesis_removed_since_view = id_ + 1; // assuming never removed (id_+1 = future) for(std::vector<size_t>::iterator view_id = sorted_view_ids.begin(); view_id < sorted_view_ids.end(); view_id++) { if(*view_id <= origin_id) { continue; // hypothesis can not be removed before discovered } if(removed_points_history_[*view_id]->empty()) { continue; // no changes were found in this view } CloudPtr model_aligned(new Cloud); pcl::transformPointCloud(*model->assembled_, *model_aligned, pose); int rem_support = v4r::ChangeDetector<PointT>::removalSupport( removed_points_history_[*view_id], model_aligned, param_.tolerance_for_cloud_diff_, 1.1)->size(); PCL_INFO("Support for the removal of object [%s,%d]: %d\n", model->id_.c_str(), *view_id, rem_support); if(rem_support > param_.min_points_for_hyp_removal_) { hypothesis_removed_since_view = *view_id; } } std::vector<bool> mask; for(auto view : views_) { mask.push_back(view.first >= origin_id && view.first < hypothesis_removed_since_view); } return mask; }
/// validate the species bool CKReader::validateSpecies(std::ostream& log) { size_t nel = elements.size(); size_t nsp = species.size(); double tol; log << newTask("validating species"); // check for undeclared elements vector<string> esyms; log << " checking that all species have been defined... "; for (size_t k = 0; k < nsp; k++) { Species& s = species[k]; if (s.valid == 0) { log << endl << " species " << s.name << " undefined "; s.valid = -1; } } if (valid(species)) log << "OK" << endl; else { log << endl; return false; } log << " checking that all species elements have been declared... "; for (size_t k = 0; k < nsp; k++) { Species& s = species[k]; getMapKeys(s.comp, esyms); size_t nm = esyms.size(); for (size_t m = 0; m < nm; m++) { size_t j; for (j = 0; j < nel; j++) { if (esyms[m] == elements[j].name) break; } if (j == nel) { log << endl << " species " << s.name << ": undeclared element " << esyms[m]; s.valid = -1; } } } if (valid(species)) log << "OK" << endl; else { log << endl; return false; } log << " checking consistency of species thermo data... "; tol = 0.01; if (checkThermo(log, species, tol)) log << "OK" << endl; else { log << endl; return false; } return true; }
/// print a summary of all reactions to the log file bool CKReader::writeReactions(std::ostream& log) { bool ok = true; // int ns = species.size(); int nrxns = static_cast<int>(reactions.size()); log.flags(ios::unitbuf); log.precision(6); log << endl; for (int n = 0; n < nrxns; n++) { Reaction& r = reactions[n]; log << "reaction " << r.number << endl; log << " "; printReactionEquation(log, r); log << endl; // rate coefficient if (r.isFalloffRxn) { log << " high P rate coeff: "; ok = ok && writeRateCoeff(r.kf, log) ; log << " low P rate coeff: "; ok = ok && writeRateCoeff(r.kf_aux, log); ok = ok && writeFalloff(r.falloffType, r.falloffParameters, log); } else { log << " rate coeff: "; ok = ok && writeRateCoeff(r.kf, log); } if (r.isReversible && r.krev.A > 0) { log << " reverse rate coeff: "; ok = ok && writeRateCoeff(r.krev, log); } int ne = static_cast<int>(r.e3b.size()); if (ne > 0) { vector<string> enhSpecies; getMapKeys(r.e3b, enhSpecies); log << " enhanced collision efficiencies:" << endl; log << " "; for (int nn = 0; nn < ne; nn++) { log << enhSpecies[nn] << " " << r.e3b[enhSpecies[nn]]; if (nn < ne-1) log << ", "; } log << endl; } if (r.isDuplicate) log << " declared duplicate reaction. See reaction " << r.duplicate << "." << endl; log << endl; } return ok; }
int main (int argc, char ** argv) { printf ("YAJL TESTS\n"); printf ("==================\n\n"); modules = ksNew (0, KS_END); elektraModulesInit (modules, 0); init (argc, argv); test_nextNotBelow (); test_reverseLevel (); test_countLevel (); test_writing (); test_json ("yajl/testdata_null.json", getNullKeys (), ksNew (0, KS_END)); test_json ("yajl/testdata_boolean.json", getBooleanKeys (), ksNew (0, KS_END)); test_json ("yajl/testdata_number.json", getNumberKeys (), ksNew (0, KS_END)); test_json ("yajl/testdata_string.json", getStringKeys (), ksNew (0, KS_END)); test_json ("yajl/testdata_maps.json", getMapKeys (), ksNew (0, KS_END)); test_json ("yajl/testdata_array.json", getArrayKeys (), ksNew (0, KS_END)); test_json ("yajl/testdata_below.json", getBelowKeys (), ksNew (0, KS_END)); test_json ("yajl/OpenICC_device_config_DB.json", getOpenICCKeys (), ksNew (0, KS_END)); // TODO currently do not have a KeySet, wait for C-plugin to make // it easy to generate it.. test_readWrite ("yajl/empty_object.json", ksNew (0, KS_END)); test_readWrite ("yajl/empty_array.json", ksNew (0, KS_END)); test_readWrite ("yajl/top_level_string.json", ksNew (0, KS_END)); test_readWrite ("yajl/top_level_integer.json", ksNew (0, KS_END)); test_readWrite ("yajl/rfc_object.json", ksNew (0, KS_END)); test_readWrite ("yajl/rfc_array.json", ksNew (0, KS_END)); test_readWrite ("yajl/testdata_array_mixed.json", ksNew (0, KS_END)); test_readWrite ("yajl/testdata_array_in_array.json", ksNew (0, KS_END)); test_readWrite ("yajl/testdata_array_in_array_anon_map.json", ksNew (0, KS_END)); test_readWrite ("yajl/testdata_array_nested.json", ksNew (0, KS_END)); test_readWrite ("yajl/testdata_array_broken.json", ksNew (0, KS_END)); test_readWrite ("yajl/testdata_array_special_ending.json", ksNew (0, KS_END)); test_readWrite ("yajl/testdata_array_outside.json", ksNew (0, KS_END)); test_readWrite ("yajl/keyframes_complex.json", ksNew (0, KS_END)); test_readWrite ("yajl/testdata_array_mixed2.json", ksNew (0, KS_END)); test_readWrite ("yajl/testdata_array_special_start.json", ksNew (0, KS_END)); test_readWrite ("yajl/testdata_array_mixed3.json", ksNew (0, KS_END)); test_readWrite ("yajl/testdata_empty_in_array.json", ksNew (0, KS_END)); test_readWrite ("yajl/testdata_empty_in_map.json", ksNew (0, KS_END)); test_readWrite ("yajl/testdata_empty_in_array1.json", ksNew (0, KS_END)); test_readWrite ("yajl/testdata_empty_in_map2.json", ksNew (0, KS_END)); test_readWrite ("yajl/testdata_empty_in_map1.json", ksNew (0, KS_END)); elektraModulesClose (modules, 0); ksDel (modules); print_result ("test_yajl"); return nbError; }
/** * Check that all reactions balance. * @param speciesData species property dataset used to look up * elemental compositions. * @param r list of reactions to check * @param unbalanced list of integers specifying reaction numbers of * unbalanced reactions. * @return true if all reactions balance * @todo use reaction number stored in reaction object */ bool checkBalance(std::ostream& f, speciesTable& speciesData, reactionList& r, std::vector<int>& unbalanced, double tolerance) { int nrxn = static_cast<int>(r.size()); string rname, pname; vector<string> elementSyms; unsigned int m; unbalanced.clear(); map<string, double> atoms; for (int i = 0; i < nrxn; i++) { atoms.clear(); int nr = static_cast<int>(r[i].reactants.size()); int np = static_cast<int>(r[i].products.size()); int j; double stoichCoeff; for (j = 0; j < nr; j++) { rname = r[i].reactants[j].name; stoichCoeff = r[i].reactants[j].number; vector<Constituent>& elements = speciesData[rname].elements; for (m = 0; m < elements.size(); m++) { atoms[elements[m].name] -= stoichCoeff * elements[m].number; } } for (j = 0; j < np; j++) { pname = r[i].products[j].name; stoichCoeff = r[i].products[j].number; vector<Constituent>& elements = speciesData[pname].elements; for (m = 0; m < elements.size(); m++) { atoms[elements[m].name] += stoichCoeff * elements[m].number; } } double atms; getMapKeys(atoms, elementSyms); for (m = 0; m < elementSyms.size(); m++) { atms = atoms[elementSyms[m]]; if (fabs(atms) > tolerance) { //if (atoms[elementSyms[m]] != 0.0) { // cout << "Reaction " << i+1 << " has an unbalanced element: " // << elementSyms[m] << " " // << atoms[elementSyms[m]] << endl; unbalanced.push_back(i+1); break; } } } return (unbalanced.empty()); }
void test_nextNotBelow (void) { printf ("Test next not below\n"); KeySet * ks = getNullKeys (); ksRewind (ks); Key * k = elektraNextNotBelow (ks); succeed_if_equal (keyName (k), "user/tests/yajl/nullkey"); succeed_if_equal (keyName (ksCurrent (ks)), "user/tests/yajl/nullkey"); k = elektraNextNotBelow (ks); succeed_if_equal (keyName (k), "user/tests/yajl/second_nullkey"); succeed_if_equal (keyName (ksCurrent (ks)), "user/tests/yajl/second_nullkey"); k = elektraNextNotBelow (ks); succeed_if (k == 0, "not at end of keyset"); succeed_if (ksCurrent (ks) == 0, "not at end of keyset"); ksDel (ks); ks = getBooleanKeys (); ksRewind (ks); k = elektraNextNotBelow (ks); succeed_if_equal (keyName (k), "user/tests/yajl/boolean_key"); succeed_if_equal (keyName (ksCurrent (ks)), "user/tests/yajl/boolean_key"); k = elektraNextNotBelow (ks); succeed_if_equal (keyName (k), "user/tests/yajl/second_boolean_key"); succeed_if_equal (keyName (ksCurrent (ks)), "user/tests/yajl/second_boolean_key"); k = elektraNextNotBelow (ks); succeed_if (k == 0, "not at end of keyset"); succeed_if (ksCurrent (ks) == 0, "not at end of keyset"); ksDel (ks); ks = getBelowKeys (); ksRewind (ks); k = elektraNextNotBelow (ks); succeed_if_equal (keyName (k), "user/tests/yajl/fancy/path/below/v/y/z"); succeed_if_equal (keyName (ksCurrent (ks)), "user/tests/yajl/fancy/path/below/v/y/z"); k = elektraNextNotBelow (ks); succeed_if_equal (keyName (k), "user/tests/yajl/fancy/path/below/x/y/z"); succeed_if_equal (keyName (ksCurrent (ks)), "user/tests/yajl/fancy/path/below/x/y/z"); k = elektraNextNotBelow (ks); succeed_if (k == 0, "not at end of keyset"); succeed_if (ksCurrent (ks) == 0, "not at end of keyset"); ksDel (ks); ks = getMapKeys (); ksRewind (ks); k = elektraNextNotBelow (ks); succeed_if_equal (keyName (k), "user/tests/yajl/map/nested_map/second_string_key"); succeed_if_equal (keyName (ksCurrent (ks)), "user/tests/yajl/map/nested_map/second_string_key"); ksDel (ks); }