4#include <tula/config/core.h> 
    5#include <tula/config/flatconfig.h> 
    6#include <tula/config/yamlconfig.h> 
    8#include <tula/filesystem.h> 
    9#include <tula/formatter/container.h> 
   10#include <tula/formatter/enum.h> 
   11#include <tula/grppi.h> 
   12#include <tula/logging.h> 
   13#include <tula/switch_invoke.h> 
   24static_assert(std::is_same_v<std::ptrdiff_t, Eigen::Index>,
 
   25              "UNEXPECTED EIGEN INDEX TYPE");
 
   27using shape_t = Eigen::Matrix<index_t, 2, 1>;
 
   31namespace kidsdata = kids::toltec;
 
   37using timestream::TCDataKind;
 
 
   41template <
typename Derived>
 
   43    tula::config::ConfigValidatorMixin<Derived, tula::config::YamlConfig>;
 
   62                                           std::tuple{
"meta", 
"interface"})),
 
   63              m_filepath(this->config().get_filepath(
"filepath")) {}
 
 
   66            -> std::optional<std::string> {
 
   67            std::vector<std::string> missing_keys;
 
   68            SPDLOG_INFO(
"check data item config\n{}", config);
 
   69            if (!config.has(std::tuple{
"meta", 
"interface"})) {
 
   70                missing_keys.push_back(
"meta.interface");
 
   72            if (!config.has(
"filepath")) {
 
   73                missing_keys.push_back(
"filepath");
 
   75            if (missing_keys.empty()) {
 
   78            return fmt::format(
"invalid or missing keys={}", missing_keys);
 
 
 
   96    using CalItemTypes = tula::meta::cases<CalItemType::array_prop_table,
 
   97                                           CalItemType::photometry,
 
   98                                           CalItemType::astrometry,
 
   99                                           CalItemType::unresolved>;
 
  108        tula::meta::case_t<CalItemType::array_prop_table, ArrayPropTable>,
 
  109        tula::meta::case_t<CalItemType::photometry, PhotometryCalibInfo>,
 
  110        tula::meta::case_t<CalItemType::astrometry, AstrometryCalibInfo>,
 
  111        tula::meta::case_t<CalItemType::unresolved, CalItem>>;
 
  124              m_filepath(this->config().get_str(
"filepath")) {}
 
 
  127            -> std::optional<std::string> {
 
  128            std::vector<std::string> missing_keys;
 
  129            SPDLOG_INFO(
"check array prop table config\n{}", config);
 
  130            if (!config.has(
"filepath")) {
 
  131                missing_keys.push_back(
"filepath");
 
  133            if (missing_keys.empty()) {
 
  136            return fmt::format(
"invalid or missing keys={}", missing_keys);
 
 
 
  149            -> std::optional<std::string> {
 
  150            std::vector<std::string> missing_keys;
 
  151            SPDLOG_INFO(
"check photometry calib info\n{}", config);
 
  153            if (missing_keys.empty()) {
 
  156            return fmt::format(
"invalid or missing keys={}", missing_keys);
 
 
  158        template <
typename OStream>
 
  161            return os << fmt::format(
"PhotometryCalibInfo()");
 
 
 
  170            -> std::optional<std::string> {
 
  171            std::vector<std::string> missing_keys;
 
  172            SPDLOG_INFO(
"check astrometry calib info\n{}", config);
 
  174            if (missing_keys.empty()) {
 
  177            return fmt::format(
"invalid or missing keys={}", missing_keys);
 
 
  179        template <
typename OStream>
 
  182            return os << fmt::format(
"AstrometryCalibInfo()");
 
 
 
  196            -> std::optional<std::string> {
 
  197            std::vector<std::string> missing_keys;
 
  199            if (!config.has(
"type")) {
 
  200                missing_keys.push_back(
"type");
 
  202            if (missing_keys.empty()) {
 
  205            return fmt::format(
"invalid or missing keys={}", missing_keys);
 
 
  214            return CalItemType::unresolved;
 
 
  217        template <auto type_>
 
  222        template <auto type_>
 
  224            return std::get<cal_item_t<type_>>(
m_cal_item);
 
 
  231            tula::meta::switch_invoke<CalItemTypes>(
 
  233                    constexpr auto type_ = std::decay_t<
decltype(
_)>::value;
 
  234                    if constexpr (
type_ == CalItemType::unresolved) {
 
 
 
  246                                       std::tuple{
"meta", 
"name"})} {
 
 
  252        -> std::optional<std::string> {
 
  253        std::vector<std::string> missing_keys;
 
  254        SPDLOG_INFO(
"check raw obs config\n{}", config);
 
  255        if (!config.has(std::tuple{
"meta", 
"name"})) {
 
  256            missing_keys.push_back(
"meta.name");
 
  258        if (!config.has_list(
"data_items")) {
 
  259            missing_keys.push_back(
"data_items");
 
  261        if (!config.has_list(
"cal_items")) {
 
  262            missing_keys.push_back(
"cal_items");
 
  264        if (missing_keys.empty()) {
 
  267        return fmt::format(
"invalid or missing keys={}", missing_keys);
 
 
  277            return std::optional{
 
 
  284        std::vector<std::reference_wrapper<const DataItem>> result{};
 
 
  295            .get<CalItemType::array_prop_table>();
 
 
  299            .get<CalItemType::photometry>();
 
 
  303            .get<CalItemType::astrometry>();
 
 
 
  331struct formatter<
std::reference_wrapper<T>>
 
  332    : tula::fmt_utils::nullspec_formatter_base {
 
  333    template <
typename FormatContext>
 
  334    auto format(
const std::reference_wrapper<T> &ref,
 
  335                FormatContext &ctx) 
const noexcept -> 
decltype(ctx.out()) {
 
  336        return format_to(ctx.out(), 
"{}", ref.get());
 
 
 
  342    : tula::fmt_utils::nullspec_formatter_base {
 
  343    template <
typename FormatContext>
 
  345        -> 
decltype(ctx.out()) {
 
  346        return format_to(ctx.out(), 
"RawObs(name={}, n_data_items={})",
 
  347                         obs.name(), obs.n_data_items());
 
 
 
  353    : tula::fmt_utils::nullspec_formatter_base {
 
  354    template <
typename FormatContext>
 
  356        -> 
decltype(ctx.out()) {
 
  357        return format_to(ctx.out(), 
"DataItem(interface={}, filepath={})",
 
  358                         item.interface(), item.filepath());
 
 
 
  364    : tula::fmt_utils::nullspec_formatter_base {
 
  365    template <
typename FormatContext>
 
  367        -> 
decltype(ctx.out()) {
 
  368        return format_to(ctx.out(), 
"CalItem(typestr={})",
 
 
 
  375    : tula::fmt_utils::nullspec_formatter_base {
 
  376    template <
typename FormatContext>
 
  378        -> 
decltype(ctx.out()) {
 
  379        return format_to(ctx.out(), 
"ArrayPropTable(filepath={})",
 
 
 
 
  390    auto node_data_items = this->config().get_node(
"data_items");
 
  395            config_t{node_data_items[i], this->config().filepath()});
 
  401        if ((a.interface().find(
"toltec"))!=std::string::npos && (b.interface().find(
"toltec"))!=std::string::npos) {
 
  402            std::string cmp_a { a.interface().begin() + 6, a.interface().end() };
 
  403            std::string cmp_b { b.interface().begin() + 6, b.interface().end() };
 
  404            return std::stoi(cmp_a) < std::stoi(cmp_b);
 
  411    SPDLOG_DEBUG(
"collected n_data_items={}\n{}", this->n_data_items(),
 
  414    m_kidsdata_indices.clear();
 
  415    m_teldata_index.reset();
 
  416    m_hwpdata_index.reset();
 
  418    for (std::size_t i = 0; i < m_data_items.size(); ++i) {
 
  419        if (std::regex_match(m_data_items[i].interface(), m,
 
  420                             re_interface_kidsdata)) {
 
  421            m_kidsdata_indices.push_back(i);
 
  423        if (std::regex_match(m_data_items[i].interface(), m,
 
  424                             re_interface_teldata)) {
 
  425            if (m_teldata_index.has_value()) {
 
  426                throw std::runtime_error(
"found too many telescope data items");
 
  430        if (std::regex_match(m_data_items[i].interface(), m,
 
  431                             re_interface_hwpdata)) {
 
  432            if (m_hwpdata_index.has_value()) {
 
  433                throw std::runtime_error(
 
  434                    "found too many halfwave plate data items");
 
  439    if (!m_teldata_index) {
 
  440        throw std::runtime_error(
"no telescope data item found");
 
  443    if (!m_hwpdata_index) {
 
  444        SPDLOG_INFO(
"no hwp data item found");
 
  446    SPDLOG_INFO(
"kidsdata_indices={} teldata_index={} hwpdata_index={}",
 
  447                 m_kidsdata_indices, m_teldata_index, m_hwpdata_index);
 
  448    SPDLOG_INFO(
"kidsdata={} teldata={} hwpdata={}", kidsdata(), teldata(),
 
 
  457    auto node_cal_items = this->config().get_node(
"cal_items");
 
  461            config_t{node_cal_items[i], this->config().filepath()});
 
  464    SPDLOG_DEBUG(
"collected n_cal_items={}\n{}", this->
n_cal_items(),
 
  470    for (std::size_t i = 0; i < 
m_cal_items.size(); ++i) {
 
  471        if (
m_cal_items[i].is_type<CalItemType::array_prop_table>()) {
 
  473                throw std::runtime_error(
"found too many array prop tables");
 
  477        if (
m_cal_items[i].is_type<CalItemType::photometry>()) {
 
  479                throw std::runtime_error(
"found too many photometry calib info.");
 
  483        if (
m_cal_items[i].is_type<CalItemType::astrometry>()) {
 
  485                throw std::runtime_error(
"found too many astrometry calib info.");
 
  491        throw std::runtime_error(
"no array prop table found");
 
 
  521        -> std::optional<std::string> {
 
  522        if (config.has_list(
"inputs")) {
 
  525        return fmt::format(
"invalid or missing key \"inputs\"");
 
 
  529        return os << fmt::format(
"SeqIOCoordinator(n_inputs={})",
 
 
  539        std::vector<input_t> 
inputs;
 
  540        auto node_inputs = this->config().get_node(
"inputs");
 
  542        for (std::size_t i = 0; i < 
n_inputs; ++i) {
 
  543            SPDLOG_INFO(
"add input {} of {}", i, 
n_inputs);
 
  545                config_t{node_inputs[i], this->config().filepath()});
 
  549        SPDLOG_DEBUG(
"collected n_inputs={}\n{}", this->
n_inputs(),
 
 
 
tula::config::ConfigValidatorMixin< Derived, tula::config::YamlConfig > ConfigMapper
Definition io.h:43
 
TULA_ENUM_REGISTER(RawObs::CalItemType)
 
config::ConfigValidatorMixin< Derived, config::YamlConfig > ConfigMapper
Definition main_old.cpp:124
 
std::ptrdiff_t index_t
This namespace contains global settings for common types and constants.
Definition io.h:26
 
double data_t
Definition io.h:28
 
Eigen::Matrix< index_t, 2, 1 > shape_t
Definition io.h:27
 
Definition timestream.h:59
 
ArrayPropTable(config_t config)
Definition io.h:122
 
std::string m_filepath
Definition io.h:141
 
const std::string & filepath() const
Definition io.h:138
 
static auto check_config(config_t &config) -> std::optional< std::string >
Definition io.h:126
 
ConfigMapper< ArrayPropTable > Base
Definition io.h:121
 
static auto check_config(config_t &config) -> std::optional< std::string >
Definition io.h:169
 
ConfigMapper< AstrometryCalibInfo > Base
Definition io.h:166
 
friend auto operator<<(OStream &os, const AstrometryCalibInfo &d) -> decltype(auto)
Definition io.h:180
 
AstrometryCalibInfo(config_t config)
Definition io.h:167
 
@breif a generic cal item holder
Definition io.h:187
 
void resolve()
Definition io.h:230
 
auto type() const
Definition io.h:209
 
auto is_type() -> bool
Definition io.h:218
 
ConfigMapper< CalItem > Base
Definition io.h:188
 
CalItem(config_t config)
Definition io.h:189
 
cal_item_var_t m_cal_item
Definition io.h:229
 
std::string m_typestr
Definition io.h:228
 
static auto check_config(config_t &config) -> std::optional< std::string >
Definition io.h:195
 
auto get() const -> const auto &
Definition io.h:223
 
const std::string & typestr() const
Definition io.h:207
 
The DataItem struct This represent a single data item that belongs to a particular observation.
Definition io.h:58
 
ConfigMapper< DataItem > Base
Definition io.h:59
 
std::string m_filepath
Definition io.h:85
 
const std::string & interface() const
Definition io.h:80
 
const std::string & filepath() const
Definition io.h:81
 
static auto check_config(config_t &config) -> std::optional< std::string >
Definition io.h:65
 
std::string m_interface
Definition io.h:84
 
DataItem(config_t config)
Definition io.h:60
 
friend auto operator<<(OStream &os, const PhotometryCalibInfo &d) -> decltype(auto)
Definition io.h:159
 
ConfigMapper< PhotometryCalibInfo > Base
Definition io.h:145
 
static auto check_config(config_t &config) -> std::optional< std::string >
Definition io.h:148
 
PhotometryCalibInfo(config_t config)
Definition io.h:146
 
The raw obs struct This represents a single observation that contains a set of data items and calibra...
Definition io.h:50
 
ConfigMapper< RawObs > Base
Definition io.h:51
 
std::variant< std::monostate, cal_item_t< CalItemType::array_prop_table >, cal_item_t< CalItemType::photometry >, cal_item_t< CalItemType::astrometry > > cal_item_var_t
Definition io.h:118
 
std::optional< DataItem > hwpdata() const
Definition io.h:275
 
const AstrometryCalibInfo & astrometry_calib_info() const
Definition io.h:301
 
RawObs(config_t config)
Definition io.h:244
 
static const std::regex re_interface_kidsdata
Definition io.h:307
 
auto n_data_items() const
Definition io.h:270
 
const std::string & name() const
Definition io.h:269
 
void collect_data_items()
Definition io.h:387
 
const std::vector< CalItem > & cal_items() const
Definition io.h:292
 
const ArrayPropTable & array_prop_table() const
Definition io.h:293
 
tula::meta::switch_t< type, tula::meta::case_t< CalItemType::array_prop_table, ArrayPropTable >, tula::meta::case_t< CalItemType::photometry, PhotometryCalibInfo >, tula::meta::case_t< CalItemType::astrometry, AstrometryCalibInfo >, tula::meta::case_t< CalItemType::unresolved, CalItem > > cal_item_t
Definition io.h:111
 
std::vector< std::size_t > m_kidsdata_indices
Definition io.h:313
 
auto kidsdata() const -> decltype(auto)
Definition io.h:283
 
void collect_cal_items()
Definition io.h:454
 
std::optional< std::size_t > m_astro_cal_index
Definition io.h:321
 
const DataItem & teldata() const
Definition io.h:272
 
std::string m_name
Definition io.h:311
 
static auto check_config(const config_t &config) -> std::optional< std::string >
Definition io.h:251
 
TULA_ENUM_DECL(CalItemType, int, array_prop_table, photometry, astrometry, unresolved)
 
static const std::regex re_interface_teldata
Definition io.h:308
 
tula::meta::cases< CalItemType::array_prop_table, CalItemType::photometry, CalItemType::astrometry, CalItemType::unresolved > CalItemTypes
Definition io.h:99
 
std::vector< DataItem > m_data_items
Definition io.h:312
 
std::optional< std::size_t > m_apt_index
Definition io.h:319
 
auto n_cal_items() const
Definition io.h:291
 
std::optional< std::size_t > m_hwpdata_index
Definition io.h:315
 
const PhotometryCalibInfo & photometry_calib_info() const
Definition io.h:297
 
std::optional< std::size_t > m_phot_cal_index
Definition io.h:320
 
static const std::regex re_interface_hwpdata
Definition io.h:309
 
std::optional< std::size_t > m_teldata_index
Definition io.h:314
 
const std::vector< DataItem > & data_items() const
Definition io.h:271
 
std::vector< CalItem > m_cal_items
Definition io.h:318
 
The Coordinator struct This wraps around the config object and provides high level methods in various...
Definition io.h:502
 
auto n_inputs() const
Definition io.h:516
 
std::vector< input_t > m_inputs
Definition io.h:534
 
predefs::data_t payloads_buffer_data_t
Definition io.h:514
 
static auto check_config(const config_t &config) -> std::optional< std::string >
Definition io.h:520
 
const std::vector< input_t > & inputs() const
Definition io.h:518
 
ConfigMapper< SeqIOCoordinator > Base
Definition io.h:503
 
predefs::shape_t shape_t
Definition io.h:505
 
predefs::index_t index_t
Definition io.h:504
 
void collect_inputs()
Definition io.h:537
 
friend std::ostream & operator<<(std::ostream &os, const SeqIOCoordinator &co)
Definition io.h:527
 
SeqIOCoordinator(config_t config)
Definition io.h:509
 
TC data class.
Definition timestream.h:55