Esempio n. 1
0
// Return true if stoichiometry is defined for this species reference
static bool isStoichDefined(const SpeciesReference* s) {
    if (!s)
        // null ref
        return false;
    if (hasInitialAssignment(s) || hasAssignmentRule(s))
        // stoich can be set by assignments
        return true;
    return s->isSetStoichiometry();
}
bool LLVMModelDataSymbols::isValidSpeciesReference(
        const libsbml::SimpleSpeciesReference* ref, const std::string& reacOrProd)
{
    string id = ref->getSpecies();

    // can only define a reaction for a floating species
    if (isIndependentFloatingSpecies(id))
    {
        return true;
    }
    else
    {
        string id = ref->getSpecies();
        string err = "the species reference with id ";
        err += string("\'" + ref->getId() + "\', ");
        err += "which references species ";
        string("\'" + id + "\', ");
        err += "is NOT a valid " + reacOrProd + " reference, ";
        // figure out what kind of thing we have and give a warning
        if (hasAssignmentRule(id))
        {
            err += "it is defined by an assignment rule";
        }
        else if (hasRateRule(id))
        {
            err += "it is defined by rate rule";
        }
        else if (isIndependentBoundarySpecies(id))
        {
            err += "it is a boundary species";
        }
        else
        {
            err += "it is not a species";
        }

        err += ", it will be ignored.";

        if  (isIndependentBoundarySpecies(id))
        {
            // fairly common
            Log(Logger::PRIO_DEBUG) << err;
        }
        else
        {
            // serious error
            Log(Logger::PRIO_WARNING) << err;
        }
        return false;
    }
}