Source code for aces.holography.holo_filenames

#!/usr/bin/env python3
""" Utility for generating names for holography and ASKAP primary beam files """

import glob


[docs]def make_file_name(obj, kind): """Returns a file name according to metadata and the label provided in kind :param obj: MapSet object holding holography beam data :param kind: str """ parts = ['akpb'] pol = set(obj.metadata["polarizations"].astype(str)) if pol == {"I", "Q", "U", "V"}: parts.append('iquv') elif pol == {"XX", "XY", "YX", "YY"}: parts.append('xxyy') elif len(pol) == 1: parts.append(list(pol)[0].lower()) else: parts.append('????') parts.append(obj.metadata['fp_name']) p_arcmin = int(obj.metadata['fp_pitch'] * 60 + 0.5) parts.append("{:02d}".format(p_arcmin)) frqs = obj.frequencies frq_centre = int((frqs[0] + frqs[-1])/2.0 + 0.5) parts.append("{:d}MHz".format(frq_centre)) sb = obj.metadata['holographySBID'] parts.append("SB{:d}".format(sb)) if len(kind) > 0: parts.append(kind) fix_parts = [] for p in parts: if type(p) is bytes: p = p.decode() fix_parts.append(p) return '.'.join(fix_parts)
[docs]def make_file_name_template(pol='????', fp_name='*', fp_pitch=0, frq_centre=0, sbid=-1, kind='.*'): """Returns a file name according to arguments and the label provided in kind. Parameters not provided result in wild-card sections in the file name :param pol: str Polarization desriptor 'xxyy' or 'iquv' :param fp_name: str Footprint name :param fp_pitch: int beam pitch in arcminutes :param frq_centre: int Centre frequency in integer MHz. :param sbid: int Scheduling block ident. :param kind: str """ parts = ['akpb', pol, fp_name] if fp_pitch == 0: parts.append('??') else: parts.append("{:02d}".format(fp_pitch)) if frq_centre == 0: parts.append('*MHz') else: parts.append("{:d}MHz".format(frq_centre)) if sbid == -1: parts.append('SB*') else: parts.append("SB{:d}".format(sbid)) if len(kind) > 0: parts.append(kind) return '.'.join(parts)
[docs]def find_holo_file(holo_dir, pol='????', fp_name='*', fp_pitch=0, frq_centre=0, sbid=-1, kind='*'): """Returns a file name according to arguments and the label provided in kind. Parameters not provided result in wild-card sections in the file name, and the disk is searched for a matching file. :param holo_dir: str Name of directory holding files :param pol: str Polarization desriptor 'xxyy' or 'iquv' :param fp_name: str Footprint name :param fp_pitch: int beam pitch in arcminutes :param frq_centre: int Centre frequency in integer MHz. :param sbid: int Scheduling block ident. :param kind: str """ templ = holo_dir + '/' + make_file_name_template(pol=pol, fp_name=fp_name, fp_pitch=fp_pitch, frq_centre=frq_centre, sbid=sbid, kind=kind) names = glob.glob(templ) if len(names) == 1: return names[0] else: raise FileNotFoundError("No file {} found".format(templ))