def process_data_groups(data_groups, output_dir, ami_dir, array="LA", script=None):
    """Args:
    data_groups: Dictionary mapping groupname -> list of raw filenames
    output_dir: Folder where dataset group subfolders will be created.
    ami_dir: Top dir of the AMI ``reduce`` installation.
    array: 'LA' or 'SA' (Default: LA)
    """
    if not script:
        script = driveami.scripts.standard_reduction

    processed_files_info = {}
    for grp_name in sorted(data_groups.keys()):

        try:
            r = driveami.Reduce(ami_dir, array=array)
            files = data_groups[grp_name][driveami.keys.files]
            grp_dir = os.path.join(output_dir, grp_name, "ami")
            driveami.ensure_dir(grp_dir)
            logger.info("Calibrating rawfiles and writing to {}".format(grp_dir))
            for rawfile in files:
                try:
                    logger.info("Reducing rawfile %s ...", rawfile)
                    file_info = driveami.process_rawfile(rawfile, output_dir=grp_dir, reduce=r, script=script)
                except (ValueError, IOError) as e:
                    logger.exception("Hit exception reducing file: %s\n" "Exception reads:\n%s\n", rawfile, e)
                    continue
                # Also save the group assignment in the listings:
                file_info[driveami.keys.group_name] = grp_name
                processed_files_info[rawfile] = driveami.make_serializable(file_info)
        except Exception as e:
            logger.exception("Hit exception (probable timeout) reducing group: {}".format(grp_name))
            continue
    return processed_files_info
Esempio n. 2
0
 def test_reduction(self):
     file_info = driveami.process_rawfile(self.rawfile_basename,
                                          output_dir=resources.driveami_testdir,
                                          reduce=self.reduce,
                                          script=standard_legacy_reduction)
     output_fits = file_info[keys.target_uvfits]
     self.assertTrue(os.path.isfile(output_fits))
Esempio n. 3
0
def ami_rawfile_quicklook(filename, ami_dir, casa_dir, output_dir):
    """A data reduction subroutine (specific to user's application)."""
    rawfile = os.path.basename(filename)

    groupname = rawfile.split('-')[0]
    group_dir = os.path.join(output_dir, groupname)
    group_ami_outdir = os.path.join(group_dir, 'ami')
    group_casa_outdir = os.path.join(group_dir, 'casa')
    group_fits_outdir = os.path.join(group_dir, 'images')
    try:
        with driveami.Reduce(ami_dir,
                             ami_version=driveami.AmiVersion.digital) as reduce:
            obs_info = driveami.process_rawfile(
                rawfile, group_ami_outdir, reduce,
                script=driveami.scripts.standard_digital_reduction)
        image_casa_outdir = os.path.join(group_casa_outdir,
                                         obs_info[amikeys.obs_name])
        casa_logfile = os.path.join(group_casa_outdir, 'casalog.txt')
        casa_script = []
        vis = drivecasa.commands.import_uvfits(casa_script,
                                 uvfits_path=obs_info[amikeys.target_uvfits],
                                 out_dir=image_casa_outdir,
                                 overwrite=True)
        dirty_maps = drivecasa.commands.clean(casa_script,
                 vis_paths=vis,
                 niter=200,
                 threshold_in_jy=2.5 * obs_info[amikeys.est_noise_jy],
                 mask='',
                 other_clean_args=ami_clean_args,
                 out_dir=image_casa_outdir,
                 overwrite=True)
        dirty_maps_fits_image = drivecasa.commands.export_fits(casa_script,
                                image_path=dirty_maps.image,
                                out_dir=group_fits_outdir,
                                overwrite=True)
        casa = drivecasa.Casapy(casa_logfile=casa_logfile,
                                casa_dir=casa_dir)
        casa.run_script(casa_script, raise_on_severe=True)

    except Exception as e:
        error_message = ("Hit exception reducing file: %s, exception reads:\n%s\n"
                         % (rawfile, e))
        logger.exception(e)
        return error_message

    return "Successfully processed " + filename