.. _program_listing_file_src_nebular_Nebular.hpp: Program Listing for File Nebular.hpp ==================================== |exhale_lsh| :ref:`Return to documentation for file ` (``src/nebular/Nebular.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #ifndef NEBULAR_HPP #define NEBULAR_HPP #include "../phot/FilterIdeal.hpp" #include "../tracks/TrackCommons.hpp" #include #include #include // NOLINT(misc-include-cleaner) #include #include #include namespace io { class SimControls; } // namespace io namespace nebular { class Nebular { public: // Shorten mdspan types using Grid2D = std::mdspan>; // NOLINT(misc-include-cleaner) using Grid3D = std::mdspan>; Nebular( const std::string& tableName, const std::string& trackName, const io::SimControls& simControls, double vvcrit = tracks::defaultVVcrit); ~Nebular() = default; // The mdspan members below are non-owning views into this // object's own backing vectors (lineLumPerQClusterData_ etc); // a naive copy or move would leave the copy's/moved-from's own // views pointing at the wrong object's data, so both are // disallowed for now -- mirrors utils::ThreadVec's own // identical reasoning for its own vector-backed member. Nebular(const Nebular&) = delete; Nebular(Nebular&&) = delete; auto operator=(const Nebular&) -> Nebular& = delete; auto operator=(Nebular&&) -> Nebular& = delete; // Observers [[nodiscard]] auto simControls() const -> const io::SimControls& { return simControls_; } [[nodiscard]] auto lineLabel() const -> const std::vector& { return lineLabel_; } [[nodiscard]] auto lineWl() const -> const std::vector& { return lineWl_; } // Nebular emission [[nodiscard]] auto getGalaxy(const std::vector& spec, double feH) const -> std::pair, std::vector>; [[nodiscard]] auto getCluster(const std::vector& spec, double feH, double age) const -> std::pair, std::vector>; private: [[nodiscard]] auto stellarAboveEdge(const std::vector& spec) const -> std::vector; void depositLines(const std::vector& lineLum, std::vector& spec) const; void loadTable(const std::string& trackName, double vvcrit, const std::filesystem::path& tablePath); const io::SimControls& simControls_; phot::FilterIdeal qhiFilter_; std::vector wl_; std::vector lineLabel_; std::vector lineWl_; std::vector lineCenterIdx_; Grid2D lineDepositFrac_; std::vector lineDepositFracData_; std::vector feH_; std::vector clusterAge_; Grid3D lineLumPerQCluster_; std::vector lineLumPerQClusterData_; Grid2D lineLumPerQGalaxy_; std::vector lineLumPerQGalaxyData_; Grid3D ctmLumPerQCluster_; std::vector ctmLumPerQClusterData_; Grid2D ctmLumPerQGalaxy_; std::vector ctmLumPerQGalaxyData_; }; } // namespace nebular #endif // NEBULAR_HPP