26 namespace astrotypes {
29 template<
typename HeaderType>
34 template<
typename HeaderType>
40 template<
typename HeaderType>
45 template<
typename HeaderType>
48 if(_stream.is_open()) _stream.close();
52 template<
typename HeaderType>
55 _file_name = file_name;
56 _stream.open(_file_name, std::ios::in | std::ios::binary);
57 if(!_stream)
throw std::runtime_error(file_name +
" failed to open");
58 this->new_header(_stream);
61 template<
typename HeaderType>
64 struct stat file_info;
65 stat(_file_name.c_str(), &file_info);
66 return ((file_info.st_size - this->_header.size())*(8.0/this->_header.number_of_bits()));
69 template<
typename HeaderType>
70 template<
typename DataType>
71 typename std::enable_if<has_dimensions<DataType, units::Time, units::Frequency>::value,
FileReader<HeaderType>>::type &
74 BaseT::read(_stream, data);
80 template<
typename Dimension>
81 struct DimensionHelper {
82 template<
typename HeaderType>
90 struct DimensionHelper<units::
Time> {
91 template<
typename HeaderType>
92 inline static DimensionSize<units::Time> exec(FileReader<HeaderType>
const& fr)
94 return DimensionSize<units::Time>(fr.number_of_data_points()/ (fr.header().number_of_ifs() * fr.header().number_of_channels()));
99 struct DimensionHelper<units::
Frequency> {
100 template<
typename HeaderType>
101 inline static DimensionSize<units::Frequency> exec(FileReader<HeaderType>
const& fr)
103 return fr.header().number_of_channels();
108 template<
typename HeaderType>
109 template<
typename Dimension>
112 return DimensionHelper<Dimension>::exec(*
this);
std::size_t number_of_data_points() const
the number of data points in the file (i.e number of data points of nbits)
std::enable_if< has_dimensions< DataType, units::Time, units::Frequency >::value, FileReader >::type & operator>>(DataType &data)
read in to the provided data object
boost::units::time_dimension Time
void open(std::string const &file_name)
set the filename to read
DimensionSize< Dimension > dimension() const
return the expected dimension of the data in the file
A compile time dimesion tagging of size_t.
void do_open(std::string const &file_name)
boost::units::frequency_dimension Frequency