void parse_schema(pugi::xml_node node, config::config & conf) {
    for (pugi::xml_node source_node : node.children("source")) {
        size_t source_type = source_node.attribute("type").as_uint();
        for (pugi::xml_node target_node : source_node.children("target")) {
            char multiplicity = '*';
            size_t target_type = target_node.attribute("type").as_uint();
            size_t symbol = target_node.attribute("symbol").as_uint();
            string mult_string = target_node.attribute("multiplicity").value();
            if (mult_string.size() > 0 && (mult_string[0] == '?' || mult_string[0] == '+' || mult_string[0] == '1')) {
                multiplicity = mult_string[0];
            }
            pugi::xml_node outdistribution_node = target_node.child("outdistribution");
            distribution outdistribution = parse_distribution(outdistribution_node);
            pugi::xml_node indistribution_node = target_node.child("indistribution");
            distribution indistribution = parse_distribution(indistribution_node);
            
            if (multiplicity == '1') { // && outdistribution.type == DISTRIBUTION::UNDEFINED) {
                outdistribution = distribution(DISTRIBUTION::UNIFORM, 1, 1);
            }
            else if (multiplicity == '?') {// && outdistribution.type == DISTRIBUTION::UNDEFINED) {
                outdistribution = distribution(DISTRIBUTION::UNIFORM, 0, 1);
            }
            
            if(outdistribution.type == DISTRIBUTION::UNDEFINED) {
                outdistribution = distribution(DISTRIBUTION::ZIPFIAN, 0, 2.5);
            }
            
            
            
            conf.schema.add_edge(source_type, symbol, target_type, multiplicity, outdistribution, indistribution);
            //cout << "conf.add_edge "  << source_type << " " << symbol << " " << target_type << " " << multiplicity << " " << outdistribution << " " << indistribution <<endl;
            
        }
    }
}
void parse_predicates(pugi::xml_node node, config::config & conf) {
    size_t size = node.child("size").text().as_uint();
    //cout << "predicates size: " << size << endl;
    conf.predicates.resize(size);
    
    conf.predicate_distribution = parse_distribution(node.child("distribution"));
    
    for (pugi::xml_node alias_node : node.children("alias")) {
        size_t id = alias_node.attribute("symbol").as_uint();//
        string name = alias_node.text().get();
        //cout << "alias " << id << ", " << name  << endl;
        if (id < 0 || id >= size) {
            cerr << "id " << id << " is out of range" << endl;
            continue;
        }

        conf.predicates[id].alias = name;
    }
    
    for (pugi::xml_node proportion_node : node.children("proportion")) {
        size_t id = proportion_node.attribute("symbol").as_uint();
        double proportion = proportion_node.text().as_double();
        if (id < 0 || id >= size) {
            cerr << "id " << id << " is out of range" << endl;
            continue;
        }
        conf.predicates[id].proportion = proportion;
        conf.predicates[id].size = (size_t) (proportion * conf.nb_edges);
    }
}
Ejemplo n.º 3
0
static Manifest *parse_manifest(xmlNodePtr element, const unsigned int flags, const gchar *container_filter, const gchar *component_filter)
{
    Manifest *manifest = (Manifest*)g_malloc0(sizeof(Manifest));
    xmlNodePtr element_children = element->children;

    while(element_children != NULL)
    {
        if((flags & MANIFEST_DISTRIBUTION_FLAG) && xmlStrcmp(element_children->name, (xmlChar*) "distribution") == 0)
            manifest->distribution_array = parse_distribution(element_children);
        else if((flags & MANIFEST_ACTIVATION_FLAG) && xmlStrcmp(element_children->name, (xmlChar*) "activation") == 0)
            manifest->activation_array = parse_activation(element_children);
        else if((flags & MANIFEST_SNAPSHOT_FLAG) && xmlStrcmp(element_children->name, (xmlChar*) "snapshots") == 0)
            manifest->snapshots_array = parse_snapshots(element_children, container_filter, component_filter);
        else if((flags & MANIFEST_TARGETS_FLAG) && xmlStrcmp(element_children->name, (xmlChar*) "targets") == 0)
            manifest->target_array = parse_targets(element_children);

        element_children = element_children->next;
    }

    return manifest;
}
Ejemplo n.º 4
0
std::piecewise_linear_distribution<double> parse_distribution(const std::string &func, const double range_min, const double range_max){
	double x;
	exprtk::symbol_table<double> symbol_table;
	symbol_table.add_variable("x", x);
	symbol_table.add_function("ProtonBetaSpectrum", ProtonBetaSpectrum);
	symbol_table.add_function("ElectronBetaSpectrum", ElectronBetaSpectrum);
	symbol_table.add_function("MaxwellBoltzSpectrum", MaxwellBoltzSpectrum);
	symbol_table.add_constants();

	exprtk::expression<double> expression;
	expression.register_symbol_table(symbol_table);

	exprtk::parser<double> parser;
	parser.compile(func, expression);
	return parse_distribution(
			[&x, &expression](const double px){
				x = px;
				return expression.value();
			},
			range_min,
			range_max
	);
}
Ejemplo n.º 5
0

std::piecewise_linear_distribution<double> parse_distribution(const std::string &func, const double range_min, const double range_max){
	double x;
	exprtk::symbol_table<double> symbol_table;
	symbol_table.add_variable("x", x);
	symbol_table.add_function("ProtonBetaSpectrum", ProtonBetaSpectrum);
	symbol_table.add_function("ElectronBetaSpectrum", ElectronBetaSpectrum);
	symbol_table.add_function("MaxwellBoltzSpectrum", MaxwellBoltzSpectrum);
	symbol_table.add_constants();

	exprtk::expression<double> expression;
	expression.register_symbol_table(symbol_table);

	exprtk::parser<double> parser;
	parser.compile(func, expression);
	return parse_distribution(
			[&x, &expression](const double px){
				x = px;
				return expression.value();
			},
			range_min,
			range_max
	);
}

std::piecewise_linear_distribution<double> proton_beta_distribution = parse_distribution(ProtonBetaSpectrum, 0., 750.);
std::piecewise_linear_distribution<double> electron_beta_distribution = parse_distribution(ElectronBetaSpectrum, 0., 782000.);