@@ -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