Skip to content

Commit fb85886

Browse files
Load only one NISAR frequency
1 parent f1c33dd commit fb85886

1 file changed

Lines changed: 39 additions & 0 deletions

File tree

insardev_pygmtsar/insardev_pygmtsar/Nisar_transform.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -697,6 +697,7 @@ def transform(self,
697697
target: str,
698698
ref: str,
699699
records: pd.DataFrame | None = None,
700+
frequency: str | None = None,
700701
epsg: str | int | None = 'auto',
701702
resolution: tuple[int, int] = (8, 16),
702703
chunk: tuple[int, int] = (8192, 8192),
@@ -724,6 +725,11 @@ def transform(self,
724725
The reference scene date (YYYY-MM-DD).
725726
records : pd.DataFrame, optional
726727
The records to use. By default, all records are used.
728+
frequency : str | None, optional
729+
Frequency band to process: 'A' or 'B'.
730+
- None: Auto-detect if files have single frequency, error if both present
731+
- 'A': Process frequencyA (20MHz, ~7m resolution)
732+
- 'B': Process frequencyB (5MHz, ~25m resolution)
727733
epsg : str|int|None, optional
728734
The EPSG code to use for the output data. Use 'auto' for automatic.
729735
Use epsg=0 to disable geocoding and keep radar coordinates.
@@ -782,6 +788,35 @@ def transform(self,
782788
if records is None:
783789
records = self.to_dataframe(ref=ref)
784790

791+
# Validate and determine frequency to use
792+
if frequency is not None:
793+
if frequency not in ('A', 'B'):
794+
raise ValueError(f"frequency must be 'A', 'B', or None, got '{frequency}'")
795+
use_frequency = frequency
796+
elif self.frequency is not None:
797+
# Use frequency detected during __init__
798+
use_frequency = self.frequency
799+
else:
800+
# Check what frequencies are available in input files
801+
import h5py
802+
from .utils_nisar import nisar_get_frequencies
803+
sample_path = records['path'].iloc[0]
804+
available_freqs = nisar_get_frequencies(sample_path)
805+
if len(available_freqs) == 1:
806+
use_frequency = available_freqs[0]
807+
else:
808+
raise ValueError(
809+
f"Input files contain both frequencyA and frequencyB.\n"
810+
f"Please specify frequency='A' or frequency='B' parameter:\n"
811+
f" frequency='A': 20MHz bandwidth (~7m resolution)\n"
812+
f" frequency='B': 5MHz bandwidth (~25m resolution)"
813+
)
814+
815+
# Store for use in processing (override self.frequency for this transform)
816+
original_frequency = self.frequency
817+
self.frequency = use_frequency
818+
print(f'NOTE: Processing frequency{use_frequency}.')
819+
785820
if epsg == 0:
786821
print('NOTE: epsg=0, keeping radar coordinates (no geocoding).')
787822
elif epsg is None:
@@ -805,6 +840,7 @@ def transform(self,
805840
print(f'NOTE: target processing is not completed. Continuing...')
806841
elif not append:
807842
print(f'NOTE: target processing is completed. Skipping...')
843+
self.frequency = original_frequency
808844
return
809845
if os.path.exists(metafile):
810846
os.remove(metafile)
@@ -944,3 +980,6 @@ def process_scene_sequential(scenes, target, debug=False):
944980

945981
# Consolidate zarr metadata
946982
self.consolidate_metadata(target)
983+
984+
# Restore original frequency setting
985+
self.frequency = original_frequency

0 commit comments

Comments
 (0)