Exemplo n.º 1
0
void acceptParticle(peak_param *peak, SMC_ABC_t *ABC, particle_t *newPa, error **err)
{
  //-- WARNING: d-dependent
  int reject = 1;
  do {
    generateParam(peak, ABC->oldPart, newPa, ABC->priorFct);
    printf("(Omega_M, sigma_8) = (%.3f, %.3f), ", newPa->param[0], newPa->param[1]);
    
    generateObs(peak, ABC, newPa, err);
    if (isError(*err)) {
      printf(", get error and resample\n");
      purgeError(err);
    }
    else {
      ABC->newPart->nbAttempts += 1;
      printf("diff = %6.3f, ", newPa->diff);
      if (newPa->diff <= ABC->oldPart->epsilon) {
	reject = 0;
	printf("accepted\n");
      }
      else printf("rejected\n");
    }
  }
  while (reject);
  return;
}
Exemplo n.º 2
0
QString CodeGenerator::generateCode(const DraggableElement* element, int sub)
{
    QString str;
    bool stop = false;

    for(const DraggableElement* next = element; next && !stop; next = next->getNextElem())
    {
        QString name = next->getIdentifier();

        // TODO: indent should be more dynamic
        QString tmp;
        if (next->getType() == DraggableElement::Hat && _events.contains(name))
        {
           tmp = indentCode(&_events[name]._code, sub, generateCode(next->getNextElem(), sub+1));
           if(_eventCounters.contains(name))
               _eventCounters[name]++;
           else
               _eventCounters[name] = 1;
           tmp.replace(QLatin1String("%counter%"), QString::number(_eventCounters[name]));
           stop = true;
        }
        else if (next->getType() == DraggableElement::Wrapper && _controls.contains(name))
        {
            tmp = indentCode(&_controls[name], sub, generateCode(next->getWrapElem(), sub+1));
        }
        else if (next->getType() == DraggableElement::Command && _commands.contains(name))
        {
            tmp = indentCode(&_commands[name], sub);
        }
        else
        {
            qDebug() << "block: " << name << "not supported yet";
            str += indent(sub) + "pass\n";
            continue;
        }

        if(tmp.contains(QLatin1String("%indent_counter%")))
        {
            tmp.replace(QLatin1String("%indent_counter%"), QString::number(_indentCounter));
            _indentCounter++;
        }

        const std::vector<ParamBase*>* params = next->getParamsVector();
        for(std::vector<ParamBase*>::const_iterator it = params->begin(); it != params->end(); it++)
        {
            tmp = tmp.arg(generateParam(*it));
        }

        str += tmp;
    }

    if(str.isEmpty())
    {
        str = indent(sub) + "pass\n";
    }

    return str;
}
Exemplo n.º 3
0
QString CodeGenerator::generateParam(const ParamBase* param)
{
    if(param->getDragElem())
    {
        const DraggableElement* element = param->getDragElem();

        if (element && (element->getType() == DraggableElement::Predicate || element->getType() == DraggableElement::Reporter)
                && _expressions.contains(element->getIdentifier()))
        {
            QString tmp = _expressions[element->getIdentifier()];

            const std::vector<ParamBase*>* params = element->getParamsVector();
            for(std::vector<ParamBase*>::const_iterator it = params->begin(); it != params->end(); it++)
            {
                tmp = tmp.arg(generateParam(*it));
            }

            return tmp;
        }
    }
    return param->getValue();
}