1#ifndef TAKANE_SUMMARIZED_EXPERIMENT_HPP
2#define TAKANE_SUMMARIZED_EXPERIMENT_HPP
4#include "millijson/millijson.hpp"
5#include "byteme/byteme.hpp"
8#include "utils_other.hpp"
9#include "utils_summarized_experiment.hpp"
25void validate(
const std::filesystem::path&,
const ObjectMetadata&, Options& options);
26size_t height(
const std::filesystem::path&,
const ObjectMetadata&, Options& options);
27std::vector<size_t>
dimensions(
const std::filesystem::path&,
const ObjectMetadata&, Options& options);
37namespace summarized_experiment {
45 const std::string type_name =
"summarized_experiment";
46 const auto& semap = internal_json::extract_typed_object_from_metadata(metadata.
other, type_name);
48 const std::string version_name =
"version";
49 const std::string& vstring = internal_json::extract_string_from_typed_object(semap, version_name, type_name);
50 auto version = ritsuko::parse_version_string(vstring.c_str(), vstring.size(),
true);
51 if (version.major != 1) {
52 throw std::runtime_error(
"unsupported version string '" + vstring +
"'");
56 auto dims = internal_summarized_experiment::extract_dimensions_json(semap, type_name);
57 size_t num_rows = dims.first;
58 size_t num_cols = dims.second;
62 auto adir = path /
"assays";
63 if (std::filesystem::exists(adir)) {
64 size_t num_assays = internal_summarized_experiment::check_names_json(adir);
65 for (
size_t i = 0; i < num_assays; ++i) {
66 auto aname = std::to_string(i);
67 auto apath = adir / aname;
72 if (dims.size() < 2) {
73 throw std::runtime_error(
"object in 'assays/" + aname +
"' should have two or more dimensions");
75 if (dims[0] != num_rows) {
76 throw std::runtime_error(
"object in 'assays/" + aname +
"' should have the same number of rows as its parent '" + metadata.
type +
"'");
78 if (dims[1] != num_cols) {
79 throw std::runtime_error(
"object in 'assays/" + aname +
"' should have the same number of columns as its parent '" + metadata.
type +
"'");
83 size_t num_dir_obj = internal_other::count_directory_entries(adir);
84 if (num_dir_obj - 1 != num_assays) {
85 throw std::runtime_error(
"more objects than expected inside the 'assays' subdirectory");
89 auto rd_path = path /
"row_data";
90 if (std::filesystem::exists(rd_path)) {
93 throw std::runtime_error(
"object in 'row_data' should satisfy the 'DATA_FRAME' interface");
97 throw std::runtime_error(
"data frame at 'row_data' should have number of rows equal to that of the '" + metadata.
type +
"'");
101 auto cd_path = path /
"column_data";
102 if (std::filesystem::exists(cd_path)) {
105 throw std::runtime_error(
"object in 'column_data' should satisfy the 'DATA_FRAME' interface");
109 throw std::runtime_error(
"data frame at 'column_data' should have number of rows equal to the number of columns of its parent '" + metadata.
type +
"'");
113 internal_other::validate_metadata(path,
"other_data", options);
124 const auto& semap = internal_json::extract_object(metadata.
other,
"summarized_experiment");
125 auto dims = internal_summarized_experiment::extract_dimensions_json(semap,
"summarized_experiment");
137 const auto& semap = internal_json::extract_object(metadata.
other,
"summarized_experiment");
138 auto dims = internal_summarized_experiment::extract_dimensions_json(semap,
"summarized_experiment");
139 return std::vector<size_t>{ dims.first, dims.second };
void validate(const std::filesystem::path &path, const ObjectMetadata &metadata, Options &options)
Definition summarized_experiment.hpp:44
std::vector< size_t > dimensions(const std::filesystem::path &path, const ObjectMetadata &metadata, Options &options)
Definition summarized_experiment.hpp:135
size_t height(const std::filesystem::path &path, const ObjectMetadata &metadata, Options &options)
Definition summarized_experiment.hpp:122
takane validation functions.
Definition _derived_from.hpp:15
size_t height(const std::filesystem::path &path, const ObjectMetadata &metadata, Options &options)
Definition _height.hpp:88
bool satisfies_interface(const std::string &type, const std::string &interface, const Options &options)
Definition _satisfies_interface.hpp:67
ObjectMetadata read_object_metadata(const std::filesystem::path &path)
Definition utils_public.hpp:74
void validate(const std::filesystem::path &path, const ObjectMetadata &metadata, Options &options)
Definition _validate.hpp:107
std::vector< size_t > dimensions(const std::filesystem::path &path, const ObjectMetadata &metadata, Options &options)
Definition _dimensions.hpp:69
Validation options.
Definition utils_public.hpp:94