Source code for meersolar.crystalball.filtering
import logging
log = logging.getLogger(__name__)
[docs]
def select_field_id(field_datasets, field=None):
"""
Parameters
----------
field_datasets : list of :class:`daskms.Dataset`
field : None or str
if None, will try and return the only field in the MS.
.. code-block:: python
select_field_id(field_ds, "PKS-1934")
Returns
-------
fields_id : int
Selected field ID
"""
if field is None:
if len(field_datasets) == 1:
return 0
names = [
"%s or %d" % (ds.NAME.values[0], i) for i, ds in enumerate(field_datasets)
]
raise ValueError(
"No field was provided "
"but multiple fields are present "
"in the Measurement Set. "
"Please select a field %s." % names
)
elif not isinstance(field, str):
raise TypeError("field must be None or str")
for i, ds in enumerate(field_datasets):
names = ds.NAME.values
assert len(names) == 1, "Should have a single name per row"
if str(names[0]) == field or str(i) == field:
return i
names = ["%s or %d" % (ds.NAME.values[0], i) for i, ds in enumerate(field_datasets)]
raise ValueError(
"%s was requested, but no matching field " "was found %s" % (field, names)
)
[docs]
def filter_datasets(datasets, field_id):
"""
Parameters
----------
datasets : list of :class:`daskms.Dataset`
List of datasets representing partitions of the Measurement Set.
Should be partitioned by FIELD_ID and DATA_DESC_ID at least
field_id : list of ints
List of valid fields
Returns
-------
datasets : list of :class:`daskms.Dataset`
Filtered list of datasets
"""
return [ds for ds in datasets if ds.FIELD_ID == field_id]