#include "gridfire/engine/views/engine_priming.h" #include "gridfire/solver/solver.h" #include "fourdst/composition/species.h" #include "quill/LogMacros.h" #include "quill/Logger.h" #include #include #include #include #include namespace gridfire { using fourdst::atomic::species; NetworkPrimingEngineView::NetworkPrimingEngineView( const std::string &primingSymbol, GraphEngine &baseEngine ) : DefinedEngineView( constructPrimingReactionSet( species.at(primingSymbol), baseEngine ), baseEngine ), m_primingSpecies(species.at(primingSymbol)) {} NetworkPrimingEngineView::NetworkPrimingEngineView( const fourdst::atomic::Species &primingSpecies, GraphEngine &baseEngine ) : DefinedEngineView( constructPrimingReactionSet( primingSpecies, baseEngine ), baseEngine ), m_primingSpecies(primingSpecies) { } std::vector NetworkPrimingEngineView::constructPrimingReactionSet( const fourdst::atomic::Species &primingSpecies, const GraphEngine &baseEngine ) const { std::unordered_set primeReactions; for (const auto &reaction : baseEngine.getNetworkReactions()) { if (reaction->contains(primingSpecies)) { primeReactions.insert(std::string(reaction->id())); } } if (primeReactions.empty()) { LOG_INFO(m_logger, "No priming reactions found for species '{}', returning empty peName set.", primingSpecies.name()); return std::vector{}; // m_logger->flush_log(); // throw std::runtime_error("No priming reactions found for species '" + std::string(primingSpecies.name()) + "'."); } std::vector primingReactionSet(primeReactions.begin(), primeReactions.end()); // LOG_INFO(m_logger, "Constructed priming reaction set with {} reactions for species '{}'.", primingReactionSet.size(), primingSpecies.name()); return primingReactionSet; } }