// 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; } }