def generate_contour_data(pid):
    """
    Main function for this program.

    This will read in sensitivity_curves and binary parameters; calculate snrs
    with a matched filtering approach; and then read the contour data out to a file.

    Args:
        pid (obj or dict): GenInput class or dictionary containing all of the input information for
            the generation. See BOWIE documentation and example notebooks for usage of
            this class.

    """
    # check if pid is  dicionary or GenInput class
    # if GenInput, change to dictionary
    if isinstance(pid, GenInput):
        pid = pid.return_dict()

    begin_time = time.time()

    WORKING_DIRECTORY = '.'
    if 'WORKING_DIRECTORY' not in pid['general'].keys():
        pid['general']['WORKING_DIRECTORY'] = WORKING_DIRECTORY

    # Generate the contour data.
    running_process = GenProcess(**{**pid, **pid['generate_info']})
    running_process.set_parameters()
    running_process.run_snr()

    # Read out
    file_out = FileReadOut(running_process.xvals, running_process.yvals,
                           running_process.final_dict,
                           **{**pid['general'], **pid['generate_info'], **pid['output_info']})

    print('outputing file:', pid['general']['WORKING_DIRECTORY'] + '/'
          + pid['output_info']['output_file_name'])
    getattr(file_out, file_out.output_file_type + '_read_out')()

    print(time.time()-begin_time)
    return
Main function for this program.

    This will read in sensitivity_curves and binary parameters; calculate snrs
    with a matched filtering approach; and then read the contour data out to a file.

    Args:
        pid (obj or dict): GenInput class or dictionary containing all of the input information for
            the generation. See BOWIE documentation and example notebooks for usage of
            this class.