Esempio n. 1
0
def write_netcdf(filename, df, info=None):
    # FIXME: still a lot of issues here
    if info is None:
        info = {}

    f = NetCDFFile(filename, "w")

    f.createDimension("_2_byte_string", 2)
    f.createDimension("_4_byte_string", 4)
    f.createDimension("_8_byte_string", 8)
    f.createDimension("_16_byte_string", 16)
    f.createDimension("_32_byte_string", 32)
    f.createDimension("_64_byte_string", 64)
    f.createDimension("_128_byte_string", 128)
    f.createDimension("_255_byte_string", 255)
    f.createDimension("error_number", 1)
    f.flush()

    f.dataset_completeness = "C1"  # TODO: save peaks too? ('C1+C2')
    f.netcdf_revision = "2.3.2"
    f.languages = "English"
    f.flush()

    f.experiment_title = info.get("name", " ")
    f.operator_name = info.get("operator", " ")
    # TODO: wrong format for injection_date_time_stamp
    f.injection_date_time_stamp = info.get("date", " ")
    f.company_method_id = info.get("method", " ")
    f.sample_name = info.get("sample", " ")
    f.flush()

    f.createDimension("scan_number", len(df.index))
    v = f.createVariable("scan_acquisition_time", ">d", ("scan_number",))
    v[:] = df.index.astype("d")
    v = f.createVariable("total_intensity", ">d", ("scan_number",))
    v[:] = df.values.sum(axis=1).astype("d")
    v = f.createVariable("point_count", ">i", ("scan_number",))
    v[:] = np.sum(df.values != 0, axis=1).astype("i")
    f.flush()

    f.createDimension("point_number", np.sum(df.values != 0))
    stretch_t = np.resize(df.index, df.values.T.shape).T
    v = f.createVariable("mass_values", ">f", ("point_number",))
    v[:] = stretch_t[df.values != 0]
    v = f.createVariable("intensity_values", ">f", ("point_number",))
    v[:] = df.values[df.values != 0]

    f.close()
Esempio n. 2
0
def write_netcdf(filename, df, info=None):
    # FIXME: still a lot of issues here
    if info is None:
        info = {}

    f = NetCDFFile(filename, 'w', version=1)

    f.createDimension('_2_byte_string', 2)
    f.createDimension('_4_byte_string', 4)
    f.createDimension('_8_byte_string', 8)
    f.createDimension('_16_byte_string', 16)
    f.createDimension('_32_byte_string', 32)
    f.createDimension('_64_byte_string', 64)
    f.createDimension('_128_byte_string', 128)
    f.createDimension('_255_byte_string', 255)
    f.createDimension('error_number', 1)
    f.flush()

    # TODO: check that these do anything
    f.createDimension('instrument_number', 1)
    f.createDimension('range', 2)
    f.flush()

    f.dataset_completeness = 'C1'  # TODO: save peaks too? ('C1+C2')
    f.aia_template_revision = '1.0'
    f.ms_template_revision = '1.0.1'
    f.netcdf_revision = '2.3.2'
    f.languages = 'English'

    f.administrative_comments = 'none'
    f.dataset_origin = 'none'
    f.dataset_owner = ' '
    f.dataset_date_time_stamp = ' '
    f.flush()

    f.company_method_name = ' '
    f.pre_experiment_program_name = ' '
    f.post_experiment_program_name = ' '
    f.source_file_reference = ' '

    f.experiment_title = info.get('name', ' ')
    f.operator_name = info.get('operator', ' ')
    # TODO: wrong format for injection_date_time_stamp
    # example: 20141027123030-0500
    f.injection_date_time_stamp = info.get('date', ' ')
    f.company_method_id = info.get('method', ' ')
    f.sample_name = info.get('sample', ' ')
    f.flush()

    f.sample_id_comments = 'none'
    f.sample_id = 'none'
    f.sample_name = 'none'
    f.sample_type = 'none'
    f.sample_injection_volume = 'none'
    f.sample_amount = 'none'
    f.flush()

    f.retention_unit = 'Seconds'

    # TODO: need to merge this back into access method
    if hasattr(df.values, 'todense'):
        scan_locs = (df.values != 0).todense()
    else:
        scan_locs = df.values != 0

    f.createVariable('error_log', 'c', ('error_number', '_64_byte_string'))

    f.createDimension('scan_number', len(df.index))
    v = f.createVariable('scan_acquisition_time', '>d', ('scan_number',))
    v[:] = 60. * df.index.astype('d')
    v = f.createVariable('total_intensity', '>d', ('scan_number',))
    v[:] = df.values.sum(axis=1).astype('d').flatten()
    v = f.createVariable('point_count', '>i', ('scan_number',))
    v[:] = np.sum(scan_locs, axis=1).astype('i').flatten()
    f.flush()

    f.createDimension('point_number', np.sum(scan_locs))
    stretch_t = np.resize(df.index, df.values.T.shape).T
    v = f.createVariable('mass_values', '>f', ('point_number',))
    v[:] = stretch_t[scan_locs]
    v = f.createVariable('intensity_values', '>f', ('point_number',))
    if hasattr(df.values, 'todense'):
        v[:] = df.values.todense()[scan_locs]
    else:
        v[:] = df.values[scan_locs]

    # TODO: check that these do anything
    # f.createVariable('time_values', 'd', ('point_number',))
    v = f.createVariable('resolution', 'd', ('scan_number',))
    v[:] = -9999
    f.createVariable('actual_scan_number', 'i', ('scan_number',))
    v[:] = -9999
    f.createVariable('scan_index', 'i', ('scan_number',))
    v[:] = np.cumsum(np.sum(scan_locs, axis=1).astype('i'))
    f.createVariable('mass_range_min', 'd', ('scan_number',))
    v[:] = np.min(stretch_t[scan_locs]) * np.ones(stretch_t.shape[0])
    v = f.createVariable('mass_range_max', 'd', ('scan_number',))
    v[:] = np.max(stretch_t[scan_locs]) * np.ones(stretch_t.shape[0])
    v = f.createVariable('a_d_sampling_rate', 'd', ('scan_number',))
    v[:] = -9999
    v = f.createVariable('a_d_coaddition_factor', 'h', ('scan_number',))
    v[:] = -9999
    v = f.createVariable('flag_count', 'i', ('scan_number',))
    v[:] = 0
    f.createVariable('inter_scan_time', 'd', ('scan_number',))
    v[0] = 0
    v[1:] = np.diff(df.index.astype('d'))
    f.createVariable('scan_duration', 'd', ('scan_number',))
    v[:] = 1
    v = f.createVariable('time_range_min', 'd', ('scan_number',))
    v[:] = -9999
    v = f.createVariable('time_range_max', 'd', ('scan_number',))
    v[:] = -9999

    inst_tup = ('instrument_number', '_32_byte_string')
    f.createVariable('instrument_serial_no', 'c', inst_tup)
    f.createVariable('instrument_fw_version', 'c', inst_tup)
    f.createVariable('instrument_app_version', 'c', inst_tup)
    f.createVariable('instrument_os_version', 'c', inst_tup)
    f.createVariable('instrument_sw_version', 'c', inst_tup)
    f.createVariable('instrument_comments', 'c', inst_tup)
    f.createVariable('instrument_model', 'c', inst_tup)
    f.createVariable('instrument_name', 'c', inst_tup)
    f.createVariable('instrument_id', 'c', inst_tup)
    f.createVariable('instrument_mfr', 'c', inst_tup)

    f.close()