📄 gsegyseismicaccessor.c
字号:
GArray *traces_indices = g_array_sized_new (FALSE, FALSE, sizeof (guint32), number_of_traces);
for (i = second_level_start; i < second_level_end; i++)
g_array_append_val (traces_indices, g_array_index (private->second_sort_level, guint32, i));
g_segy_format_wizard_get_labels_for_sorting_field (g_segy_file_accessor_get_format_wizard (private->file_accessor),
second_level_id, traces_indices,
g_segy_file_accessor_get_sorting_contents (private->file_accessor),
chunk, labels);
g_array_free (traces_indices, TRUE);
}
void g_segy_seismic_accessor_get_labels_for_trace_header (GSEGYSeismicAccessor *self,
guint32 first_level_index, guint32 second_level_index,
GStringChunk **chunk, GPtrArray **labels) {
GSEGYSeismicAccessorPrivate *private = G_SEGY_SEISMIC_ACCESSOR_GET_PRIVATE (self);
if (NULL == private->trace_header_buffer)
private->trace_header_buffer = (guint8*)g_malloc (g_segy_format_wizard_get_trace_header_size (g_segy_file_accessor_get_format_wizard (private->file_accessor)));
guint8* decoded_trace_header = g_segy_file_accessor_get_trace_header (private->file_accessor,
g_array_index (private->second_sort_level, guint32,
g_array_index (private->first_sort_level, guint32, first_level_index) +
second_level_index),
private->trace_header_buffer,
g_segy_format_wizard_get_trace_header_size (g_segy_file_accessor_get_format_wizard (private->file_accessor)));
if (NULL == decoded_trace_header)
return;
g_segy_format_wizard_get_labels_for_trace_header (g_segy_file_accessor_get_format_wizard (private->file_accessor),
decoded_trace_header, chunk, labels);
}
gfloat* g_segy_seismic_accessor_get_data (GSEGYSeismicAccessor *self, guint32 first_level_index,
guint32 *slow_num, guint32 *fast_num, gboolean double_buffer,
GSEGYFileError *file_error) {
GSEGYSeismicAccessorPrivate *private = G_SEGY_SEISMIC_ACCESSOR_GET_PRIVATE (self);
if (slow_num)
*slow_num = 0;
if (fast_num)
*fast_num = 0;
if (first_level_index >= private->first_sort_level->len)
return NULL;
guint32 second_level_start = g_array_index (private->first_sort_level, guint32, first_level_index);
guint32 second_level_end = first_level_index == (private->first_sort_level->len - 1)
? private->second_sort_level->len
: g_array_index (private->first_sort_level, guint32, first_level_index + 1);
return g_segy_file_accessor_get_data (private->file_accessor,
&(g_array_index (private->second_sort_level, guint32, second_level_start)),
second_level_end - second_level_start, slow_num, fast_num,
double_buffer, file_error);
}
gint16 g_segy_seismic_accessor_get_first_level_sort_id (GSEGYSeismicAccessor *self) {
GSEGYSeismicAccessorPrivate *private = G_SEGY_SEISMIC_ACCESSOR_GET_PRIVATE (self);
return private->first_sort_level_id;
}
gint16 g_segy_seismic_accessor_get_second_level_sort_id (GSEGYSeismicAccessor *self) {
GSEGYSeismicAccessorPrivate *private = G_SEGY_SEISMIC_ACCESSOR_GET_PRIVATE (self);
return private->second_sort_level_id;
}
GPtrArray* g_segy_seismic_accessor_get_trace_header_fields_desc (GSEGYSeismicAccessor *self) {
GSEGYSeismicAccessorPrivate *private = G_SEGY_SEISMIC_ACCESSOR_GET_PRIVATE (self);
return g_segy_format_wizard_get_trace_header_fields_desc (g_segy_file_accessor_get_format_wizard (private->file_accessor));
}
GPtrArray* g_segy_seismic_accessor_get_trace_header_fields_names (GSEGYSeismicAccessor *self) {
GSEGYSeismicAccessorPrivate *private = G_SEGY_SEISMIC_ACCESSOR_GET_PRIVATE (self);
return g_segy_format_wizard_get_trace_header_fields_names (g_segy_file_accessor_get_format_wizard (private->file_accessor));
}
GPtrArray* g_segy_seismic_accessor_get_sorting_fields_names (GSEGYSeismicAccessor *self) {
GSEGYSeismicAccessorPrivate *private = G_SEGY_SEISMIC_ACCESSOR_GET_PRIVATE (self);
return g_segy_format_wizard_get_sorting_fields_names (g_segy_file_accessor_get_format_wizard (private->file_accessor));
}
guint32 g_segy_seismic_accessor_get_number_of_traces_for_first_level (GSEGYSeismicAccessor *self) {
GSEGYSeismicAccessorPrivate *private = G_SEGY_SEISMIC_ACCESSOR_GET_PRIVATE (self);
return g_segy_file_accessor_get_number_of_traces (private->file_accessor);
}
guint32 g_segy_seismic_accessor_get_number_of_traces_for_second_level (GSEGYSeismicAccessor *self,
guint32 first_level_index) {
GSEGYSeismicAccessorPrivate *private = G_SEGY_SEISMIC_ACCESSOR_GET_PRIVATE (self);
if (first_level_index >= private->first_sort_level->len)
return 0;
guint32 second_level_start = g_array_index (private->first_sort_level, guint32, first_level_index);
guint32 second_level_end = first_level_index == (private->first_sort_level->len - 1)
? private->second_sort_level->len
: g_array_index (private->first_sort_level, guint32, first_level_index + 1);
return (second_level_end - second_level_start);
}
guint16 g_segy_seismic_accessor_get_sample_interval (GSEGYSeismicAccessor *self) {
GSEGYSeismicAccessorPrivate *private = G_SEGY_SEISMIC_ACCESSOR_GET_PRIVATE (self);
return g_segy_file_accessor_get_sample_interval (private->file_accessor);
}
guint16 g_segy_seismic_accessor_get_number_of_samples (GSEGYSeismicAccessor *self) {
GSEGYSeismicAccessorPrivate *private = G_SEGY_SEISMIC_ACCESSOR_GET_PRIVATE (self);
return g_segy_file_accessor_get_number_of_samples (private->file_accessor);
}
static void g_segy_seismic_accessor_init (GSEGYSeismicAccessor *self) {
GSEGYSeismicAccessorPrivate *private = G_SEGY_SEISMIC_ACCESSOR_GET_PRIVATE (self);
private->first_sort_level_id = 0;
private->second_sort_level_id = 0;
private->first_sort_level = NULL;
private->second_sort_level = NULL;
private->first_level_ascending = TRUE;
private->second_level_ascending = TRUE;
private->trace_header_buffer = NULL;
private->file_accessor = NULL;
#ifdef DEBUG
g_print ("<GSEGYSeismicAccessor is inited>\n");
#endif
}
static void g_segy_seismic_accessor_finalize (GObject *object) {
GSEGYSeismicAccessorPrivate *private = G_SEGY_SEISMIC_ACCESSOR_GET_PRIVATE (G_SEGY_SEISMIC_ACCESSOR (object));
if (private->first_sort_level)
g_array_free (private->first_sort_level, TRUE);
if (private->second_sort_level)
g_array_free (private->second_sort_level, TRUE);
if (private->trace_header_buffer)
g_free (private->trace_header_buffer);
if (private->file_accessor)
g_object_unref (G_OBJECT (private->file_accessor));
#ifdef DEBUG
g_print ("<GSEGYSeismicAccessor is finalized>\n");
#endif
if (G_OBJECT_CLASS (g_segy_seismic_accessor_parent_class)->finalize)
G_OBJECT_CLASS (g_segy_seismic_accessor_parent_class)->finalize (object);
}
enum {
PROP_0,
PROP_FILE_ACCESSOR
};
static void g_segy_seismic_accessor_set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec) {
GSEGYSeismicAccessorPrivate *private = G_SEGY_SEISMIC_ACCESSOR_GET_PRIVATE (G_SEGY_SEISMIC_ACCESSOR (object));
switch (prop_id) {
case PROP_FILE_ACCESSOR: {
GSEGYFileAccessor *file_accessor = G_SEGY_FILE_ACCESSOR (g_value_get_object (value));
private->file_accessor = file_accessor;
g_object_ref (G_OBJECT (private->file_accessor));
g_object_notify (object, "file_accessor");
}
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void g_segy_seismic_accessor_get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec) {
GSEGYSeismicAccessorPrivate *private = G_SEGY_SEISMIC_ACCESSOR_GET_PRIVATE (G_SEGY_SEISMIC_ACCESSOR (object));
switch (prop_id) {
case PROP_FILE_ACCESSOR:
g_value_set_object (value, private->file_accessor);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void g_segy_seismic_accessor_class_init (GSEGYSeismicAccessorClass *klass) {
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (klass, sizeof (GSEGYSeismicAccessorPrivate));
gobject_class->finalize = (GObjectFinalizeFunc) g_segy_seismic_accessor_finalize;
gobject_class->set_property = g_segy_seismic_accessor_set_property;
gobject_class->get_property = g_segy_seismic_accessor_get_property;
g_object_class_install_property (gobject_class,
PROP_FILE_ACCESSOR,
g_param_spec_object ("file_accessor", "FileAccessor",
"Object responsible for an opened seismic file access",
G_SEGY_TYPE_FILE_ACCESSOR,
G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
#ifdef DEBUG
g_print ("<GSEGYSeismicAccessor class is inited>\n");
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -