10 #include <sharg/parser.hpp>
12 #include <seqan3/io/sequence_file/input.hpp>
19 static inline std::vector<std::string> sequence_extensions{
20 seqan3::detail::valid_file_extensions<typename seqan3::sequence_file_input<>::valid_formats>()};
22 static inline std::vector<std::string> compression_extensions{[]()
24 std::vector<std::string> result;
25 #ifdef SEQAN3_HAS_BZIP2
26 result.push_back(
"bz2");
28 #ifdef SEQAN3_HAS_ZLIB
29 result.push_back(
"gz");
30 result.push_back(
"bgzf");
35 static inline std::vector<std::string> combined_extensions{
38 if (compression_extensions.empty())
39 return sequence_extensions;
40 std::vector<std::string> result;
41 for (
auto && sequence_extension : sequence_extensions)
43 result.push_back(sequence_extension);
44 for (
auto && compression_extension : compression_extensions)
45 result.push_back(sequence_extension + std::string{
'.'} + compression_extension);
61 if (!std::has_single_bit(val))
62 throw sharg::validation_error{
"The value must be a power of two."};
67 return "Value must be a power of two.";
93 if (!is_zero_positive && !val)
94 throw sharg::validation_error{
"The value must be a positive integer."};
100 return "Value must be a positive integer or 0.";
102 return "Value must be a positive integer.";
106 bool is_zero_positive{
false};
126 if (!std::regex_match(cmp, expression))
127 throw sharg::validation_error{
128 seqan3::detail::to_string(
"Value ",
130 " must be an integer followed by [k,m,g,t] (case insensitive).")};
133 template <std::ranges::forward_range range_type>
134 requires std::convertible_to<std::ranges::range_value_t<range_type>,
option_value_type const &>
137 std::for_each(v.begin(),
147 return "Must be an integer followed by [k,m,g,t] (case insensitive).";
151 std::regex expression;
169 throw sharg::validation_error{
"The list of input files cannot be empty."};
171 bool const is_minimiser_input = std::filesystem::path{values[0][0]}.extension() ==
".minimiser";
173 for (std::vector<std::string>
const & vector_of_paths : values)
175 for (std::string
const & value : vector_of_paths)
177 std::filesystem::path
const file_path{value};
179 if (is_minimiser_input && (file_path.extension() !=
".minimiser"))
180 throw sharg::validation_error{
"You cannot mix sequence and minimiser files as input."};
181 if (std::filesystem::file_size(file_path) == 0u)
182 throw sharg::validation_error{
"The file " + value +
" is empty."};
184 if (is_minimiser_input)
185 minimiser_file_validator(file_path);
195 return seqan3::detail::to_string(
"The file must contain at least one file path per line, with multiple paths "
196 "being separated by a whitespace. Each line in the file corresponds to one "
197 "bin. Valid extensions for the paths in the file are [minimiser] when "
198 " preprocessing, and ",
199 raptor::detail::sequence_extensions,
200 #
if defined(SEQAN3_HAS_BZIP2) || defined(SEQAN3_HAS_ZLIB)
201 ", possibly followed by ",
202 raptor::detail::compression_extensions,
208 sharg::input_file_validator minimiser_file_validator{{
"minimiser"}};
Definition: validators.hpp:155
sharg::input_file_validator sequence_file_validator
Definition: validators.hpp:211
bin_validator(bin_validator &&)=default
void operator()(option_value_type const &values) const
Definition: validators.hpp:166
std::vector< std::vector< std::string > > option_value_type
Definition: validators.hpp:157
std::string get_help_page_message() const
Definition: validators.hpp:192
bin_validator & operator=(bin_validator &&)=default
bin_validator & operator=(bin_validator const &)=default
bin_validator(bin_validator const &)=default
Definition: validators.hpp:72
std::string get_help_page_message() const
Definition: validators.hpp:97
positive_integer_validator & operator=(positive_integer_validator &&)=default
size_t option_value_type
Definition: validators.hpp:74
positive_integer_validator()=default
~positive_integer_validator()=default
void operator()(window const &val) const
Definition: validators.hpp:86
void operator()(option_value_type const &val) const
Definition: validators.hpp:91
positive_integer_validator(positive_integer_validator &&)=default
positive_integer_validator & operator=(positive_integer_validator const &)=default
positive_integer_validator(positive_integer_validator const &)=default
positive_integer_validator(bool const is_zero_positive_)
Definition: validators.hpp:83
Definition: validators.hpp:110
void operator()(option_value_type const &cmp) const
Definition: validators.hpp:124
size_validator & operator=(size_validator const &)=default
size_validator(size_validator const &)=default
std::string get_help_page_message() const
Definition: validators.hpp:145
~size_validator()=default
std::string option_value_type
Definition: validators.hpp:112
size_validator(size_validator &&)=default
size_validator & operator=(size_validator &&)=default
size_validator(std::string const &pattern)
Definition: validators.hpp:121
requires std::convertible_to< std::ranges::range_value_t< range_type >, option_value_type const & > void operator()(range_type const &v) const
Definition: validators.hpp:135
Definition: parse_bin_path.hpp:17
Definition: adjust_seed.hpp:13
Definition: validators.hpp:56
size_t option_value_type
Definition: validators.hpp:57
void operator()(option_value_type const &val) const
Definition: validators.hpp:59
static std::string get_help_page_message()
Definition: validators.hpp:65
Strong type for passing the window size.
Definition: strong_types.hpp:17
uint32_t v
Definition: strong_types.hpp:18