Ejemplo n.º 1
0
def test_astropy_return():
    hrcI_file = os.path.abspath(
        os.path.dirname(os.path.abspath(__file__)) +
        '/data/hrcI_evt1_testfile.fits.gz')
    hrcI_evt1_df = hypercore.HRCevt1(hrcI_file)
    hrcI_evt1_table = hypercore.HRCevt1(hrcI_file, as_astropy_table=True)
    assert isinstance(hrcI_evt1_df.data, pd.DataFrame)
    assert type(hrcI_evt1_table.data) is astropy.table.table.Table
Ejemplo n.º 2
0
def hrcS_evt1():
    print("Loading test HRC-S EVT1 File as a pytest Fixture")
    hrcS_file = os.path.abspath(
        os.path.dirname(os.path.abspath(__file__)) +
        '/data/hrcS_evt1_testfile.fits.gz')
    hrcS_evt1 = hypercore.HRCevt1(hrcS_file)
    return hrcS_evt1
Ejemplo n.º 3
0
def hrcS_evt1_sparsetap():
    print(
        "Loading test HRC-S EVT1 File, which includes some sparsely rung taps, as a pytest Fixture"
    )
    hrcS_file = os.path.abspath(
        os.path.dirname(os.path.abspath(__file__)) +
        '/data/hrcS_evt1_sparsetap_testfile.fits.gz')
    hrcS_evt1_sparsetap = hypercore.HRCevt1(hrcS_file)
    return hrcS_evt1_sparsetap
Ejemplo n.º 4
0
def screenHRCevt1(input_fits_file, hyperscreen_results_dict=None, comparison_products=True, savepath=None, verbose=True, backup=True):

    obsid = fits.getheader(input_fits_file)['OBS_ID']

    # Get the root string to use as our naming convention
    file_name = input_fits_file.split('/')[-1]  # Split off the path
    # Split off the .fits (or .fits.gz)
    file_root = file_name.split('.fits')[0].split('_')[0]
    file_path = os.path.realpath(os.path.dirname(input_fits_file))
    print(file_path)
    if savepath is None:
        savepath = file_path
    backup_dir = os.path.join(
        savepath, '{}_hyperscreen_report'.format(obsid))

    if not os.path.exists(backup_dir):
        os.makedirs(backup_dir)
        if verbose is True:
            print("Made HyperScreen Products Directory {}".format(backup_dir))

    # Check if the passed input file is a string ending with .fits or .fits.gz
    if isinstance(input_fits_file, str):
        filetype_match = input_fits_file.split(
            '.')[-1] == 'fits' or input_fits_file.split('.')[-1] == 'gz'

        if filetype_match is False:
            raise Exception(
                'ERROR: Input given ({}) is not recognized as a .fits[.gz] or HRCevt1 object.'.format(input_fits_file))

    if hyperscreen_results_dict is None:
        # Then you need to make it!
        if verbose is True:
            print("Applying HyperScreen algorithm to {}".format(file_name))
        obs = hypercore.HRCevt1(input_fits_file)
        hyperscreen_results = obs.hyperscreen()
    else:
        hyperscreen_results = hyperscreen_results_dict

    # if backup is True:
    #     if not os.path.exists(backup_dir):
    #         os.makedirs(backup_dir)
    #         if verbose is True:
    #             print("Made backup directory {}".format(backup_dir))

    #     if verbose is True:
    #         print("Backing up (copying) input fits file {} to {}".format(
    #             input_fits_file.split('/')[-1], backup_dir))
    #     copyfile(input_fits_file, os.path.join(
    #         file_path, '{}_original_event_list.fits'.format(obsid)))

    # hyperscreen_fits_file = file_path + '/hyperscreen_' + file_name
    hyperscreen_fits_file = os.path.join(file_path, 'hyperscreen_' + file_name)

    rejected_events_file = os.path.join(
        backup_dir, '{}_hyperscreen_rejected_events.fits'.format(obsid))
    # difference_map_file = file_path + '/hyperscreen_DIFFERENCE_MAP_' + file_name

    survival_mask = hyperscreen_results['All Survivals (boolean mask)']
    failure_mask = hyperscreen_results['All Failures (boolean mask)']

    with fits.open(input_fits_file) as hdul:
        original_data = hdul[1].data
        hdul[1].data = hdul[1].data[survival_mask]
        if verbose is True:
            print("Masking data with HyperScreen Results")
        hdul.writeto(hyperscreen_fits_file, overwrite=True)

        if verbose is True:
            print(
                "Wrote new HyperScreen-filtered evt1 file to {}".format(hyperscreen_fits_file))

        if comparison_products is True:
            hdul[1].data = original_data[failure_mask]
            hdul.writeto(rejected_events_file, overwrite=True)
            if verbose is True:
                print("Wrote Rejected Events Map {}".format(rejected_events_file))

    original_evt1_file_path = os.path.join(
        file_path, '{}_original_event_list.fits'.format(obsid))
    os.rename(input_fits_file, original_evt1_file_path)
    print("Backed up original evt1 file to {}".format(original_evt1_file_path))
Ejemplo n.º 5
0
def screener(evt1file,
             verbose=False,
             savepath=None,
             make_reportCard=True,
             make_fitsfiles=False,
             save_json=True,
             show=False,
             overwrite=False):  # pragma: no cover

    obs = hypercore.HRCevt1(evt1file)

    if verbose is True:
        print(
            "Gathering HyperScreen performance statistics for {} | {}, {} ksec, {:,} counts"
            .format(obs.obsid, obs.detector, round(obs.exptime / 1000., 2),
                    obs.numevents))

    # if make_reportCard is True:
    #     reportCard(obs, show=show, savepath=savepath)
    #     if verbose is True:
    #         print("Report Card generated for {} | {}, {} ksec, {} counts".format(
    #             obs.obsid, obs.detector, round(obs.exptime/1000.,2), obs.numevents))

    try:
        results_dict = obs.hyperscreen()

        if save_json is True:
            json_savepath = os.path.join(
                savepath, '{}_{}_{}_hyperResults.json'.format(
                    obs.obsid, obs.target.replace(' ', '_'), obs.detector))

            if os.path.exists(json_savepath) and overwrite is False:
                print("{} exists and overwrite=False. Skipping.".format(
                    json_savepath.split('/')[-1]))

            else:
                if os.path.exists(json_savepath) and verbose is True:
                    print("Overwriting existing {}".format(
                        json_savepath.split('/')[-1]))
                # We don't want JSONify the full results dictionary (which includes embedded dictionaries!)
                json_reduced_results_dict = {
                    "ObsID":
                    results_dict['ObsID'],
                    "Target":
                    results_dict['Target'],
                    "Exposure Time":
                    results_dict['Exposure Time'],
                    "Detector":
                    results_dict['Detector'],
                    "Number of Events":
                    results_dict['Number of Events'],
                    "Number of Good Time Events":
                    results_dict['Number of Good Time Events'],
                    # YOU CAN'T JSONIFY AN NDARRAY. MUST MAKE IT A LIST!
                    "All Survivals (event indices)":
                    results_dict['All Survivals (event indices)'].tolist(),
                    "All Survivals (boolean mask)":
                    results_dict['All Survivals (boolean mask)'].tolist(),
                    "All Failures (boolean mask)":
                    results_dict['All Failures (boolean mask)'].tolist(),
                    "Percent rejected by Tapscreen":
                    results_dict['Percent rejected by Tapscreen'],
                    "Percent rejected by Hyperbola":
                    results_dict['Percent rejected by Hyperbola'],
                    "Percent improvement":
                    results_dict['Percent improvement']
                }

                with open(json_savepath, 'w') as json_file:
                    json.dump(json_reduced_results_dict,
                              json_file,
                              sort_keys=True,
                              indent=4)
                if verbose is True:
                    print("Created {}".format(json_savepath.split('/')[-1]))

        if make_reportCard is True:
            reportCard_savepath = os.path.join(
                savepath,
                '{}_{}_{}_hyperReport.pdf'.format(obs.obsid,
                                                  obs.target.replace(' ', '_'),
                                                  obs.detector))

            if os.path.exists(reportCard_savepath) and overwrite is False:
                print("{} exists and overwrite=False. Skipping.".format(
                    reportCard_savepath.split('/')[-1]))
            else:
                if os.path.exists(reportCard_savepath) and verbose is True:
                    print("Overwriting existing {}".format(
                        reportCard_savepath.split('/')[-1]))
                reportCard(obs,
                           hyperscreen_results_dict=results_dict,
                           show=show,
                           reportCard_savepath=reportCard_savepath)

                if verbose is True:
                    print(
                        "Report Card generated for {} | {}, {} ksec, {:,} counts"
                        .format(obs.obsid, obs.detector,
                                round(obs.exptime / 1000., 2), obs.numevents))

        if make_fitsfiles is True:
            evtscreen.screenHRCevt1(evt1file,
                                    hyperscreen_results_dict=results_dict,
                                    savepath=savepath,
                                    comparison_products=True,
                                    verbose=True)

    except Exception as exception_message:
        print(
            "ERROR on {} ({} | {} ksec | {:,} events | {:,} good time events), pressing on"
            .format(obs.obsid, obs.detector, round(obs.exptime / 1000, 2),
                    obs.numevents, obs.goodtimeevents))
        print("Exception message is: {}".format(exception_message))