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;
}
コード例 #3
0
ファイル: CKReader.cpp プロジェクト: hkmoffat/cantera
/// 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;

}
コード例 #4
0
ファイル: CKReader.cpp プロジェクト: hkmoffat/cantera
/// 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;
}
コード例 #5
0
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;
}
コード例 #6
0
ファイル: CKReader.cpp プロジェクト: hkmoffat/cantera
    /**
     * 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());
    }
コード例 #7
0
ファイル: testmod_yajl.c プロジェクト: reox/libelektra
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);
}