16#include <isce3/core/Constants.h>
17#include <isce3/core/Ellipsoid.h>
21#include <isce3/io/IH5.h>
25#include <isce3/product/Metadata.h>
26#include <isce3/product/Swath.h>
27#include <isce3/product/Grid.h>
49 std::vector<std::string> frequencies{
"A",
"B" };
51 for (
auto frequency : frequencies) {
53 std::string frequency_str =
"frequency" + frequency;
105 std::string freqString(
"frequency");
106 freqString.push_back(freq);
110 std::valarray<double> s_array;
115 std::valarray<double> t_array;
124 int num_of_sub_swaths = 1;
131 for (
int i=1; i<=num_of_sub_swaths; ++i) {
133 std::to_string(i))) {
137 std::vector<int> image_dims = getImageDims(fgroup,
138 "validSamplesSubSwath" + std::to_string(i));
140 if (image_dims[0] != t_array.size()) {
141 std::string error_msg =
"ERROR the valid-samples";
142 error_msg +=
" arrays for sub-swath " + std::to_string(i);
143 error_msg +=
" has length ";
144 error_msg += std::to_string(image_dims[0]);
145 error_msg +=
" whereas dataset zeroDopplerTime has";
146 error_msg +=
" length ";
147 error_msg += std::to_string(t_array.size());
148 throw isce3::except::RuntimeError(ISCE_SRCINFO(), error_msg);
152 image_dims[0], image_dims[1]);
155 fgroup,
"validSamplesSubSwath" + std::to_string(i),
156 valid_samples_sub_swath_array);
212 std::string freqString(
"frequency");
213 freqString.push_back(freq);
242 auto zero_dop_freq_vect = fgroup.
find(
"zeroDopplerTimeSpacing",
248 if (zero_dop_freq_vect.size() > 0) {
257 auto zero_dop_vect = group.
find(
"zeroDopplerTimeSpacing",
259 if (zero_dop_vect.size() > 0) {
276 std::string freqString(
"frequency");
277 freqString.push_back(freq);
289 std::valarray<double> x_array;
291 grid.
startX(x_array[0] - 0.5 * dx);
292 grid.
width(x_array.size());
295 std::valarray<double> y_array;
297 grid.
startY(y_array[0] - 0.5 * dy);
298 grid.
length(y_array.size());
300 auto epsg_freq_vect = fgroup.
find(
"epsg",
".",
"DATASET");
304 if (epsg_freq_vect.size() > 0) {
310 auto projection_vect = fgroup.
find(
"projection",
312 if (projection_vect.size() > 0) {
313 for (
auto projection_str: projection_vect) {
314 auto projection_obj = fgroup.
openDataSet(projection_str);
315 if (projection_obj.attrExists(
"epsg_code")) {
316 auto attr = projection_obj.openAttribute(
"epsg_code");
317 attr.read(getH5Type<int>(), &epsg);
325 throw isce3::except::RuntimeError(ISCE_SRCINFO(),
326 "ERROR could not infer EPSG code from input HDF5 file");
351 const std::string& product_level) {
370 if (product_level ==
"L1") {
377 if (product_level ==
"L2" &&
Store and interpolate attitude measurements.
Definition Attitude.h:17
Data structure to store date time to nano-sec precision.
Definition DateTime.h:18
Data structure to store 2D Lookup table.
Definition LUT2d.h:20
Data structure for a 2D row-major matrix.
Definition Matrix.h:23
Sequence of platform ephemeris samples (state vectors) with uniform temporal spacing,...
Definition Orbit.h:44
IGroup openGroup(const H5std_string &name)
Open a given group.
Definition IH5.cpp:720
IDataSet openDataSet(const H5std_string &name)
Open a given dataset.
Definition IH5.cpp:712
std::vector< std::string > find(const std::string name, const std::string start=".", const std::string type="BOTH", const std::string path="FULL")
Search function for given name in the group.
Definition IH5.cpp:662
A class for representing Grid metadata originally based on NISAR L2 products.
Definition Grid.h:29
double azimuthBandwidth() const
Get acquired azimuth bandwidth in Hz.
Definition Grid.h:41
size_t epsg() const
Get epsg code for geocoded grid.
Definition Grid.h:112
double centerFrequency() const
Get processed center frequency in Hz.
Definition Grid.h:46
double rangeBandwidth() const
Get acquired range bandwidth in Hz.
Definition Grid.h:36
double spacingY() const
Get the y-coordinate spacing.
Definition Grid.h:97
size_t width() const
Get number of pixels in east-west/x direction for geocoded grid.
Definition Grid.h:102
double slantRangeSpacing() const
Get scene center ground range spacing in meters.
Definition Grid.h:56
double startX() const
Get the X-coordinate start.
Definition Grid.h:82
double startY() const
Get the y-coordinate start.
Definition Grid.h:87
double zeroDopplerTimeSpacing() const
Get time spacing of raster grid in seconds.
Definition Grid.h:75
size_t length() const
Get number of pixels in north-south/y direction for geocoded grid.
Definition Grid.h:107
double spacingX() const
Get the X-coordinate spacing.
Definition Grid.h:92
void setValidSamplesArray(const int n, const isce3::core::Matrix< int > &v)
Set valid samples for a sub-swath's array indexed from 1 (1st sub-swath)
Definition SubSwaths.cpp:30
int numSubSwaths() const
Get number of sub-swaths.
Definition SubSwaths.h:61
const isce3::core::DateTime & refEpoch() const
Get reference epoch.
Definition Swath.h:113
double sceneCenterAlongTrackSpacing() const
Get scene center along track spacing.
Definition Swath.h:90
double processedAzimuthBandwidth() const
Get processed azimuth bandwidth.
Definition Swath.h:108
double acquiredCenterFrequency() const
Get acquired center frequency.
Definition Swath.h:55
double processedCenterFrequency() const
Get processed center frequency.
Definition Swath.h:60
const std::valarray< double > & zeroDopplerTime() const
Get zero Doppler time array.
Definition Swath.h:41
isce3::product::SubSwaths & subSwaths()
Get SubSwaths object.
Definition Swath.h:118
double sceneCenterGroundRangeSpacing() const
Get scene center ground range spacing.
Definition Swath.h:99
double processedRangeBandwidth() const
Get processed range bandwidth.
Definition Swath.h:75
double acquiredRangeBandwidth() const
Get acquired range bandwidth.
Definition Swath.h:70
double zeroDopplerTimeSpacing() const
Get time spacing of raster grid.
Definition Swath.h:85
double nominalAcquisitionPRF() const
Get nominal acquisition PRF.
Definition Swath.h:80
const std::valarray< double > & slantRange() const
Get slant range array.
Definition Swath.h:30
Serialization functions for isce3::core objects.
void loadCalGrid(isce3::io::IGroup &group, const std::string &dsetName, isce3::core::LUT2d< T > &lut)
Load LUT2d data from HDF5 product.
Definition Serialization.h:306
void loadFromH5(isce3::io::IGroup &group, Ellipsoid &ellps)
Load Ellipsoid parameters from HDF5.
Definition Serialization.h:41
Serialization utilities using HDF5 API.
bool exists(H5obj &h5obj, const std::string &name, const std::string start=".", const std::string type="BOTH")
Check existence of a dataset or group.
Definition Serialization.h:36
isce3::core::DateTime getRefEpoch(H5obj &h5obj, const std::string &datasetPath)
Parse time units in a dataset attribute to get a reference epoch.
Definition Serialization.h:269
void loadFromH5(H5obj &h5obj, const std::string &datasetPath, T &v)
Load scalar dataset from HDF5 file.
Definition Serialization.h:56
The isce3::product namespace.
Definition forward.h:3
void populateGridSwathParameterFromH5(isce3::io::IGroup &group, Grid &grid, const char freq)
Populate swath-related parameters of the Grid object from HDF5.
Definition Serialization.h:209
void loadFromH5(isce3::io::IGroup &group, ProcessingInformation &proc)
Load ProcessingInformation from HDF5.
Definition Serialization.h:40
base interpolator is an abstract base class
Definition BinarySearchFunc.cpp:5