GwyScatter

GwyScatter — Irregular two-dimensional data

Functions

gboolean (*GwyScatterFilterFunc) ()
gint (*GwyScatterCompareFunc) ()
GwyScatter * gwy_scatter_new ()
GwyScatter * gwy_scatter_new_sized ()
GwyScatter * gwy_scatter_new_from_data ()
GwyScatter * gwy_scatter_new_from_xyz ()
GwyScatter * gwy_scatter_new_alike ()
GwyScatter * gwy_scatter_new_part ()
gint gwy_scatter_get_n_values ()
GwyXY * gwy_scatter_get_xy ()
const GwyXY * gwy_scatter_get_xy_const ()
gdouble * gwy_scatter_get_data ()
const gdouble * gwy_scatter_get_data_const ()
gdouble * gwy_scatter_pack ()
gsize gwy_scatter_get_n_points ()
void gwy_scatter_copy_data ()
void gwy_scatter_invalidate ()
void gwy_scatter_xy_changed ()
void gwy_scatter_data_changed ()
GwyScatter * gwy_scatter_copy ()
void gwy_scatter_assign ()
void gwy_scatter_set_from_field ()
void gwy_scatter_set_from_field_area ()
void gwy_scatter_set_from_packed ()
void gwy_scatter_set_data_label ()
const gchar * gwy_scatter_get_data_label ()
gint gwy_scatter_find_data_by_label ()
void gwy_scatter_clear_data_labels ()
GwyUnit * gwy_scatter_get_unit_xy ()
GwyUnit * gwy_scatter_get_unit_data ()
GwyValueFormat * gwy_scatter_get_value_format_xy ()
GwyValueFormat * gwy_scatter_get_value_format_data ()
void gwy_scatter_copy_units ()
void gwy_field_copy_units_to_scatter ()
void gwy_scatter_copy_units_to_field ()
void gwy_scatter_xrange ()
void gwy_scatter_yrange ()
void gwy_scatter_min_max ()
void gwy_scatter_multiply ()
void gwy_scatter_add ()
void gwy_scatter_scale_xy ()
const gdouble * gwy_scatter_get_xy_full ()
void gwy_scatter_set_xy_full ()
const gdouble * gwy_scatter_get_data_full ()
void gwy_scatter_set_data_full ()
GwyScatter * gwy_scatter_new_reduced_points ()
void gwy_scatter_reduce_points ()
void gwy_scatter_resize ()
gsize gwy_scatter_filter ()
GwyScatter * gwy_scatter_new_filtered ()
gsize gwy_scatter_reduce_to_subset ()
GwyScatter * gwy_scatter_new_subset ()
void gwy_scatter_sort ()
void gwy_scatter_sort_by_value ()
void gwy_scatter_stack ()
void gwy_scatter_insert_values ()
void gwy_scatter_remove_values ()

Signals

void data-changed Run First
void xy-changed Run First

Types and Values

struct GwyScatter
struct GwyScatterClass

Object Hierarchy

    GObject
    ╰── GwyScatter

Implemented Interfaces

GwyScatter implements GwySerializable.

Includes

#include <libgwyddion/gwyddion.h>

Description

GwyScatter represents general, i.e. possibly unevenly spaced, two-dimensional data, also called XYZ data. Each point has X and Y coordinates, and then any number of data values, including none (representing just a set of coordinates in the plane). Nevertheless, the number of data values is uniform over all the points. Unlike images (GwyField or GwyNield), scattered data can also be empty, i.e. contain zero points.

Many functions take a value index, usually denoted i , and operate on the i -th value in each point.

Functions

GwyScatterFilterFunc()

gboolean
(*GwyScatterFilterFunc) (const GwyXY *xy,
                         const gdouble *values,
                         gpointer user_data);

Type of scattered data filtering function.

Retrurns: TRUE to keep the point; FALSE to discard it.

Parameters

xy

Pointer to the XY coordinates of the point.

 

values

Pointer to the array of all values for the point.

 

user_data

User data passed to the driver function.

[closure]

GwyScatterCompareFunc()

gint
(*GwyScatterCompareFunc) (const gdouble *xydataa,
                          const gdouble *xydatab,
                          gpointer user_data);

Type of scattered data sorting function.

Both xydataa and ydatab are packed blocks of nvalues+2 doubles, with XY first, followed by all data values for the point. The format is the same as in gwy_scatter_pack() and gwy_scatter_set_from_packed().

Retrurns: Negative value if a < b; zero if a = b; positive value if a > b.

Parameters

xydataa

Coordinates and values of point a.

 

xydatab

Coordinates and values of point b.

 

user_data

User data passed to the driver function.

[closure]

gwy_scatter_new()

GwyScatter *
gwy_scatter_new (gint nvalues);

Creates a new empty scattered data.

The scattered data will not contain any points. Usually, gwy_scatter_new_from_data() is more useful.

[constructor]

Parameters

nvalues

The number of data values per point (excluding XY coordinates).

 

Returns

A newly created scattered data.

[transfer full]


gwy_scatter_new_sized()

GwyScatter *
gwy_scatter_new_sized (gint nvalues,
                       gsize n);

Creates a new scattered data with a preallocated size.

The scattered data will contain the speficied number of points with uninitialised (undefined) content.

Parameters

nvalues

The number of data values per point (excluding XY coordinates).

 

n

Number of points.

 

Returns

A newly created scattered data.

[transfer full]


gwy_scatter_new_from_data()

GwyScatter *
gwy_scatter_new_from_data (const GwyXY *points,
                           const gdouble *data,
                           gint nvalues,
                           gsize n);

Creates a new single-value scattered data, filling it with provided coordinates and data.

The data are passed as a single flat array, indexed first by value (outer index), then by point (inner index).

Parameters

points

Array of n XY coordinates for the scattered data.

 

data

Array of n ×nvalues data values with the data values.

 

nvalues

The number of data values per point (excluding XY coordinates).

 

n

Number of points.

 

Returns

A newly created scattered data.

[transfer full]


gwy_scatter_new_from_xyz()

GwyScatter *
gwy_scatter_new_from_xyz (const GwyXYZ *xyz,
                          gsize n);

Creates a new single-value scattered data, filling it with provided XYZ data.

The X and Y parts of xyz will become the coordinatres and Z will become the value.

Parameters

xyz

Array of n points with the scattered data.

[array length=n]

n

Number of points.

 

Returns

A newly created scattered data.

[transfer full]


gwy_scatter_new_alike()

GwyScatter *
gwy_scatter_new_alike (GwyScatter *model);

Creates a new empty scattered data similar to another scattered data.

The number of values per point and their units of the new scattered data will be identical to those of model but the new scattered data will not contain any points. Use gwy_scatter_copy() to completely duplicate scattered data including points and values.

Parameters

model

A scattered data to use as the template.

 

Returns

A newly created scattered data.

[transfer full]


gwy_scatter_new_part()

GwyScatter *
gwy_scatter_new_part (GwyScatter *scatter,
                      gdouble xfrom,
                      gdouble xto,
                      gdouble yfrom,
                      gdouble yto);

Creates a new scattered data as a part of another scattered data.

The new scattered data consits of data with lateral coordinates within the specified ranges (inclusively). It may be empty.

Data are physically copied, i.e. changing the new scattered data does not change scatter 's data and vice versa.

Parameters

scatter

A scattered data.

 

xfrom

Minimum x-coordinate value.

 

xto

Maximum x-coordinate value.

 

yfrom

Minimum y-coordinate value.

 

yto

Maximum y-coordinate value.

 

Returns

A newly created scattered data.

[transfer full]


gwy_scatter_get_n_values()

gint
gwy_scatter_get_n_values (GwyScatter *scatter);

Reports the number of values per point in scattered data.

Parameters

scatter

A scattered data.

 

Returns

The number of values per point.


gwy_scatter_get_xy()

GwyXY *
gwy_scatter_get_xy (GwyScatter *scatter);

Gets one raw value array of a scattered data.

The returned array contains gwy_scatter_get_n_points() data values which can directly modified. It is owned by scatter and is not guaranteed to be valid through it data life time, only until it changes.

This function invalidates any cached information, use gwy_scatter_get_xy_const() if you are not going to change the data. See gwy_scatter_invalidate() for some discussion.

Parameters

scatter

A scattered data.

 

Returns

The array with XY point coordinates.


gwy_scatter_get_xy_const()

const GwyXY *
gwy_scatter_get_xy_const (GwyScatter *scatter);

Gets one raw value array of a scattered data, read-only.

The returned array contains gwy_scatter_get_n_points() coordinates. It is owned by scatter and is not guaranteed to be valid through it data life time, only until it changes.

Use gwy_scatter_get_xy() if you want to to change the data. See gwy_scatter_invalidate() for some discussion.

Parameters

scatter

A scattered data.

 

Returns

The array with XY point coordinates.


gwy_scatter_get_data()

gdouble *
gwy_scatter_get_data (GwyScatter *scatter,
                      gint i);

Gets one raw value array of a scattered data.

The returned array contains gwy_scatter_get_n_points() data values which can directly modified. It is owned by scatter and is not guaranteed to be valid through it data life time, only until it changes.

This function invalidates any cached information, use gwy_scatter_get_data_const() if you are not going to change the data. See gwy_scatter_invalidate() for some discussion.

Parameters

scatter

A scattered data.

 

i

Index of a value in scatter .

 

Returns

The array with i -th scattered data values.


gwy_scatter_get_data_const()

const gdouble *
gwy_scatter_get_data_const (GwyScatter *scatter,
                            gint i);

Gets one raw value array of a scattered data, read-only.

The returned array contains gwy_scatter_get_n_points() data values. It is owned by scatter and is not guaranteed to be valid through it data life time, only until it changes.

Use gwy_scatter_get_data() if you want to to change the data. See gwy_scatter_invalidate() for some discussion.

Parameters

scatter

A scattered data.

 

i

Index of a value in scatter .

 

Returns

The array with i -th scattered data values.


gwy_scatter_pack()

gdouble *
gwy_scatter_pack (GwyScatter *scatter,
                  gint i);

Packs scattered data by point into a new array.

The scattered data are normally organised by value planes. If you need to transform them to a form organised by point, this function does such transformation.

When i is non-negative, the returned flat array consists of value triplets x, y, v_i. When i is negative, the array always contains x, y and then all the values for the correspoinding point.

See also gwy_scatter_set_from_packed() which takes data in the packed format a uses them to fill scatter .

Parameters

scatter

A scattered data.

 

i

Index of a value in scatter , or -1 for all values.

 

Returns

The array with packed data values, to be freed with g_free().

[transfer full]


gwy_scatter_get_n_points()

gsize
gwy_scatter_get_n_points (GwyScatter *scatter);

Gets the number of points in a scattered data.

Parameters

scatter

A scattered data.

 

Returns

The number of points.


gwy_scatter_copy_data()

void
gwy_scatter_copy_data (GwyScatter *scatter,
                       GwyScatter *target);

Copies the data of a scattered data to another scattered data of the same dimensions.

Only the data points are copied. Both the number of points and number of values per point must match. To make a scattered data completely identical to another, including resizing and chanding units or labels, you can use gwy_scatter_assign().

Parameters

scatter

Source scattered data.

 

target

Destination scattered data.

 

gwy_scatter_invalidate()

void
gwy_scatter_invalidate (GwyScatter *scatter);

Invalidates cached scattered data statistics.

Cached statistics include ranges returned by gwy_scatter_xrange(), gwy_scatter_yrange() and gwy_scatter_min_max(), the fingerprint for gwy_scatter_xy_is_compatible() and and possibly other characteristics in the future.

See gwy_field_invalidate() for discussion of invalidation and examples.

Parameters

scatter

A scattered data.

 

gwy_scatter_xy_changed()

void
gwy_scatter_xy_changed (GwyScatter *scatter);

Emits signal GwyScatter::xy-changed on a scattered data.

If you change both coordinates and data, you should also emit GwyScatter::data-changed.

Parameters

scatter

A scattered data.

 

gwy_scatter_data_changed()

void
gwy_scatter_data_changed (GwyScatter *scatter);

Emits signal GwyScatter::data-changed on a scattered data.

If you change both coordinates and data, you should also emit GwyScatter::xy-changed.

Parameters

scatter

A scattered data.

 

gwy_scatter_copy()

GwyScatter *
gwy_scatter_copy (GwyScatter *scatter);

Create a new XYZ scattered data as a copy of an existing one.

This function is a convenience gwy_serializable_copy() wrapper.

Parameters

scatter

A XYZ scattered data to duplicate.

 

Returns

A copy of the XYZ scattered data.

[transfer full]


gwy_scatter_assign()

void
gwy_scatter_assign (GwyScatter *destination,
                    GwyScatter *source);

Makes one XYZ scattered data equal to another.

This function is a convenience gwy_serializable_assign() wrapper.

Parameters

destination

Target XYZ scattered data.

 

source

Source XYZ scattered data.

 

gwy_scatter_set_from_field()

void
gwy_scatter_set_from_field (GwyScatter *scatter,
                            GwyField *field);

Fills the data of a scattered data from a data field.

The number of points in the new scattered data will be equal to the number of points in the field. Lateral coordinates will be equal to the corresponding field coordinates; values will be created in regular grid according to field 's physical size and offset.

Lateral and value units will correspond to field 's units. This means the field needs to have identical x and y units.

Parameters

scatter

A scattered data.

 

field

A two-dimensional data field.

 

gwy_scatter_set_from_field_area()

void
gwy_scatter_set_from_field_area (GwyScatter *scatter,
                                 GwyField *field,
                                 GwyNield *mask,
                                 GwyMaskingType masking,
                                 gint col,
                                 gint row,
                                 gint width,
                                 gint height);

Fills the data of a scattered data from a data field, possibly using masking.

Parameters

scatter

A scattered data.

 

field

A two-dimensional data field.

 

mask

Mask of pixels to include from/exclude, or NULL.

[nullable]

masking

Masking mode to use.

 

col

Column index.

 

row

Row index.

 

width

Area width (number of columns).

 

height

Area height (number of rows)

 

gwy_scatter_set_from_packed()

void
gwy_scatter_set_from_packed (GwyScatter *scatter,
                             const gdouble *data,
                             gint nvalues,
                             gsize n);

Fills a scattered data from packed values.

The data format is the same as what gwy_scatter_pack() creates, i.e. it is grouped by point, not by value planes. For single-valued data, you can also type-cast GwyXYZ to gdouble* and pass it as data .

The scattered data object is resized to match nvalues and n . Units and labels are kept (for the minimum of old and new nvalues ). However, if you change the number of values, usually all the units and labels need to be updated.

Parameters

scatter

A scattered data.

 

data

Array of n ×(nvalues + 2) data values with XY coordinates and data values.

 

nvalues

The number of data values per point (excluding XY coordinates).

 

n

Number of points.

 

gwy_scatter_set_data_label()

void
gwy_scatter_set_data_label (GwyScatter *scatter,
                            gint i,
                            const gchar *label);

Sets the label of a value in scattered data.

All values can be either unlabelled or labelled. When they are unlabelled and you set the first label, all others automatically get a label (‘Unknown’, ‘Value 1’ or similar).

Parameters

scatter

A scattered data.

 

i

Index of a value in scatter .

 

label

New value label.

 

gwy_scatter_get_data_label()

const gchar *
gwy_scatter_get_data_label (GwyScatter *scatter,
                            gint i);

Gets the label of a value in a scattered data.

Parameters

scatter

A scattered data.

 

i

Index of a value in scatter .

 

Returns

Value label, as a string owned by scatter . It may be NULL.

[nullable]


gwy_scatter_find_data_by_label()

gint
gwy_scatter_find_data_by_label (GwyScatter *scatter,
                                const gchar *label);

Finds the first value in scattered data matching a label.

It is possible to pass NULL as label . It can find anything only if all values are unlabelled, and in such case it will return the first value index (provided there are any values). Hence, it is not particularly useful.

Parameters

scatter

A scattered data.

 

label

Value label to find.

[nullable]

Returns

The value index if found, a negative value (-1) if not found.


gwy_scatter_clear_data_labels()

void
gwy_scatter_clear_data_labels (GwyScatter *scatter);

Completely removes all data labels in a scattered data.

The scattered data revert to a clean state when gwy_scatter_get_data_label() returns NULL for all values. See gwy_scatter_set_data_label() for a discussion.

Parameters

scatter

A scattered data.

 

gwy_scatter_get_unit_xy()

GwyUnit *
gwy_scatter_get_unit_xy (GwyScatter *scatter);

Returns lateral SI unit of a scattered data.

The returned object can be modified to change the scattered data coordinate units.

Parameters

scatter

A scattered data.

 

Returns

SI unit corresponding to the lateral (XY) dimensions of the scattered data. Its reference count is not incremented.

[transfer none]


gwy_scatter_get_unit_data()

GwyUnit *
gwy_scatter_get_unit_data (GwyScatter *scatter,
                           gint i);

Returns a value SI unit of a scattered data.

The returned object can be modified to change the scattered data value units.

Parameters

scatter

A scattered data.

 

i

Index of a value in scatter .

 

Returns

SI unit corresponding to the i -th value of the scattered data. Its reference count is not incremented.

[transfer none]


gwy_scatter_get_value_format_xy()

GwyValueFormat *
gwy_scatter_get_value_format_xy (GwyScatter *scatter,
                                 GwyUnitFormatStyle style,
                                 GwyValueFormat *format);

Finds value format good for displaying coordinates of a scattered data.

Parameters

scatter

A scattered data.

 

style

Unit format style.

 

format

A SI value format to modify, or NULL to allocate a new one.

[nullable]

Returns

The value format. If format is NULL, a newly allocated format is returned, otherwise (modified) format itself is returned.


gwy_scatter_get_value_format_data()

GwyValueFormat *
gwy_scatter_get_value_format_data (GwyScatter *scatter,
                                   gint i,
                                   GwyUnitFormatStyle style,
                                   GwyValueFormat *format);

Finds value format good for displaying values of a scattered data.

Parameters

scatter

A scattered data.

 

i

Index of a value in scatter .

 

style

Unit format style.

 

format

A SI value format to modify, or NULL to allocate a new one.

[nullable]

Returns

The value format. If format is NULL, a newly allocated format is returned, otherwise (modified) format itself is returned.


gwy_scatter_copy_units()

void
gwy_scatter_copy_units (GwyScatter *scatter,
                        GwyScatter *target);

Sets lateral and value units of a scattered data to match another scattered data.

Parameters

scatter

A scattered data.

 

target

Target scattered data with the same number of data values.

 

gwy_field_copy_units_to_scatter()

void
gwy_field_copy_units_to_scatter (GwyField *field,
                                 GwyScatter *scatter,
                                 gint i);

Sets lateral and value units of a scattered data to match a data field.

Latera units are set always. Value index i determines which value units to copy from the field.

Parameters

field

A two-dimensional data field.

 

scatter

A scattered data.

 

i

Index of a value in scatter . It can be negative to copy only lateral units.

 

gwy_scatter_copy_units_to_field()

void
gwy_scatter_copy_units_to_field (GwyScatter *scatter,
                                 gint i,
                                 GwyField *field);

Sets lateral and value units of a data field to match a scattered data.

Value index i determines which value units to copy to the field.

Parameters

scatter

A scattered data.

 

i

Index of a value in scatter . It can be negative to only copy lateral units.

 

field

A two-dimensional data field.

 

gwy_scatter_xrange()

void
gwy_scatter_xrange (GwyScatter *scatter,
                    gdouble *min,
                    gdouble *max);

Gets the range of X coordinates of an XYZ scattered data.

This information is cached.

Parameters

scatter

A scattered data.

 

min

Location where to store the minimum value.

[out]

max

Location where to store the maximum value.

[out]

gwy_scatter_yrange()

void
gwy_scatter_yrange (GwyScatter *scatter,
                    gdouble *min,
                    gdouble *max);

Gets the range of Y coordinates of an XYZ scattered data.

This information is cached.

Parameters

scatter

A scattered data.

 

min

Location where to store the minimum value.

[out]

max

Location where to store the maximum value.

[out]

gwy_scatter_min_max()

void
gwy_scatter_min_max (GwyScatter *scatter,
                     gint i,
                     gdouble *min,
                     gdouble *max);

Gets the range of one value in a scattered data.

This information is cached.

Parameters

scatter

A scattered data.

 

i

Index of a value in scatter .

 

min

Location where to store the minimum value.

[out]

max

Location where to store the maximum value.

[out]

gwy_scatter_multiply()

void
gwy_scatter_multiply (GwyScatter *scatter,
                      gint i,
                      gdouble value);

Multiplies values in a scattered data by given constant.

Parameters

scatter

A scattered data.

 

i

Index of a value in scatter .

 

value

The value to multiply all data with.

 

gwy_scatter_add()

void
gwy_scatter_add (GwyScatter *scatter,
                 gint i,
                 gdouble value);

Adds a constant to values in a scattered data.

Parameters

scatter

A scattered data.

 

i

Index of a value in scatter .

 

value

The value to add to all data.

 

gwy_scatter_scale_xy()

void
gwy_scatter_scale_xy (GwyScatter *scatter,
                      gdouble xfactor,
                      gdouble yfactor,
                      gdouble xoffset,
                      gdouble yoffset);

Rescales and/or shifts all X and Y coordinates of an XYZ scattered data.

The multiplicative factors are applied before the offsets.

Parameters

scatter

A scattered data.

 

xfactor

Factor to multiply all X coordinates with.

 

yfactor

Factor to multiply all Y coordinates with.

 

xoffset

Offset to add to all X coordinates.

 

yoffset

Offset to add to all Y coordinates.

 

gwy_scatter_get_xy_full()

const gdouble *
gwy_scatter_get_xy_full (GwyScatter *scatter,
                         gsize *n);

Provides the values of an entire coordinates of scattered data as a flat array.

This function, paired with gwy_scatter_set_xy_full() can be namely useful in language bindings. In C, gwy_scatter_get_xy_const() or gwy_scatter_get_xy() is usually fine.

Note that this function returns a pointer directly to scatter 's XY data, as a flat array with alternating X and Y values.

Parameters

scatter

A scattered data.

 

n

Location to store the number of extracted values (twice the number of data points).

[out]

Returns

The array containing the scattered data point coordinates.

[array length=n]


gwy_scatter_set_xy_full()

void
gwy_scatter_set_xy_full (GwyScatter *scatter,
                         const gdouble *points,
                         gsize n);

Puts back coordinates from a flat array to scattered data.

If the number of points changes, all data become undefined.

This function, paired with gwy_scatter_get_xy_full() can be namely useful in language bindings. In C, you can just use gwy_scatter_set_xy() and gwy_assign().

See gwy_scatter_get_xy_full() for a discussion.

Parameters

scatter

A scattered data.

 

points

Coordinates to copy to the scattered data. They will replace whatever points are in scatter now.

[array length=n]

n

The number of values in data . The number must be even since every point has two coordinates, X and Y.

 

gwy_scatter_get_data_full()

const gdouble *
gwy_scatter_get_data_full (GwyScatter *scatter,
                           gint i,
                           gsize *n);

Provides all the data for a single value in scattered data as a flat array.

This function, paired with gwy_scatter_set_data_full() can be namely useful in language bindings. In C, gwy_scatter_get_data_const() or gwy_scatter_get_data() is usually fine.

Note that this function returns a pointer directly to scatter 's data.

Parameters

scatter

A scattered data.

 

i

Index of a value in scatter .

 

n

Location to store the total count of extracted data values (which is the product of the number of points and the number of values per point).

[out]

Returns

The array containing the scattered data points.

[array length=n]


gwy_scatter_set_data_full()

void
gwy_scatter_set_data_full (GwyScatter *scatter,
                           gint i,
                           const gdouble *data,
                           gsize n);

Puts back all the data for a single value in scattered data from a flat array.

See gwy_scatter_get_data_full() for a discussion.

Parameters

scatter

A scattered data.

 

i

Index of a value in scatter .

 

data

Data values to copy into the scattered data. They will replace whatever values are in scatter now.

[array length=n]

n

The number of values in data . It must be equal to the product of the number of points. Unlike gwy_scatter_set_xy_full(), this function never resizes the scattered data.

 

gwy_scatter_new_reduced_points()

GwyScatter *
gwy_scatter_new_reduced_points (GwyScatter *scatter,
                                gsize n);

Creates a similar scattered data with smaller number of points.

The functions attempts to choose points from the original scattered data to cover its full area, even though points from dense regions are still more likely to be found in the result than points from sparse regions. As the main purpose to enable quick rough operations that may take a long time with the full scattered data, the focus is on speed not fidelity.

The function may employ random selection and thus be be non-deterministic.

Parameters

scatter

A scattered data.

 

n

Requested number of points in the reduced scattered data. If it is not smaller than the number of points in scatter then the function behaves like gwy_scatter_copy().

 

Returns

A newly created GwyScatter with reduced number of points.

[transfer full]


gwy_scatter_reduce_points()

void
gwy_scatter_reduce_points (GwyScatter *scatter,
                           gsize n);

Reduces the number of points in scattered data.

The functions attempts to choose points from the original scattered data to cover its full area, even though points from dense regions are still more likely to be found in the result than points from sparse regions. As the main purpose to enable quick rough operations that may take a long time with the full scattered data, the focus is on speed not fidelity.

The function may employ random selection and thus be be non-deterministic.

If you take advantage of the possibility of passing n larger than the current number of points, you cannot assume that after the reduction the scattered data will have n points (if the number is actually reduced, then you can).

Parameters

scatter

A scattered data.

 

n

Requested number of points in the reduced scattered data. If it is not smaller than the number of points in scatter the number of points is unchanged.

 

gwy_scatter_resize()

void
gwy_scatter_resize (GwyScatter *scatter,
                    gsize n);

Changes the number of points in a scattered data.

If the number of points decreases then the first npoints points will be kept. If the number of points increases the new points will be uninitialised. Although typically one overwrites all the points after using this function.

Use gwy_scatter_set_xy_full() if you already have an array of points to fill the scattered data with.

Parameters

scatter

A scattered data.

 

n

New number of points in the scattered data.

 

gwy_scatter_filter()

gsize
gwy_scatter_filter (GwyScatter *scatter,
                    GwyScatterFilterFunc filter,
                    gpointer user_data);

Filters scattered data using a user-specified filter function.

See also gwy_scatter_reduce_to_subset() which filters scattered data using a bit mask.

Parameters

scatter

A scattered data.

 

filter

Function returning TRUE for points to keep and FALSE for points to discard.

[scope call][closure user_data]

user_data

User data passed to filter .

 

Returns

The new number of points in scatter .


gwy_scatter_new_filtered()

GwyScatter *
gwy_scatter_new_filtered (GwyScatter *scatter,
                          GwyScatterFilterFunc filter,
                          gpointer user_data);

Creates new scattered data by filtering another data using a user-specified filter function.

See also gwy_scatter_new_subset() which filters scattered data using a bit mask.

Parameters

scatter

A scattered data.

 

filter

Function returning TRUE for points to keep and FALSE for points to discard.

[scope call][closure user_data]

user_data

User data passed to filter .

 

Returns

Newly created filtered scattered data.

[transfer full]


gwy_scatter_reduce_to_subset()

gsize
gwy_scatter_reduce_to_subset (GwyScatter *scatter,
                              const guint32 *keepbits);

Keeps a subset of scattered data points, defined using a bitmask.

The scatter array must have at least ceil(gwy_scatter_get_n_points()/32) elements. Bits in the array correspond to the scattered data – in order. Within each 32bit integer, the bits go from the lowest to the highest.

See also gwy_scatter_filter() which filters scattered data using a filter function.

Parameters

scatter

A scattered data.

 

keepbits

Bit mask defining which data to keep.

 

Returns

The number of values in the reduced data (given by the number of set bits in keepbits ).


gwy_scatter_new_subset()

GwyScatter *
gwy_scatter_new_subset (GwyScatter *scatter,
                        const guint32 *keepbits);

Creates new scattered data as a subset of another, defined using a bitmask.

The scatter array must have at least ceil(gwy_scatter_get_n_points()/32) elements. Bits in the array correspond to the scattered data – in order. Within each 32bit integer, the bits go from the lowest to the highest.

See also gwy_scatter_new_filtered() which filters scattered data using a filter function.

Parameters

scatter

A scattered data.

 

keepbits

Bit mask defining which data to keep.

 

Returns

Newly created filtered scattered data.

[transfer full]


gwy_scatter_sort()

void
gwy_scatter_sort (GwyScatter *scatter,
                  GwyScatterCompareFunc compare,
                  gpointer user_data);

Sorts scattered data using a user-provided function.

See also gwy_scatter_sort_by_value() if you want to simple sort by one data value, for example time.

Parameters

scatter

A scattered data.

 

compare

Point comparison function.

[scope call][closure user_data]

user_data

User data passed to compare .

 

gwy_scatter_sort_by_value()

void
gwy_scatter_sort_by_value (GwyScatter *scatter,
                           gint i,
                           gboolean ascending);

Sorts scattered data using one data value.

See also gwy_scatter_sort() for a general sorting function.

Parameters

scatter

A scattered data.

 

i

Index of data value to use for comparison.

 

ascending

TRUE to sort in ascending order, FALSE in descending order.

 

gwy_scatter_stack()

void
gwy_scatter_stack (GwyScatter *scatter,
                   GwyScatter **operands,
                   guint n);

Adds data from scattered data as new values to another scattered data, ‘stacking’ the data.

All the operands must share the set of XY points with scatter . Meaning, they must pass GWY_DATA_MISMATCH_POINTS and GWY_DATA_MISMATCH_LATERAL checks with gwy_scatter_is_incompatible(). Nevertheless, it is an error to try to stack a scattered data to itself.

All data from the operands are then added to scatter , in given order, including units and labels. First all data from the first operand are added, then all data from the second operand, etc.

Parameters

scatter

A scattered data.

 

operands

Array with more compatible scattered data.

[array size=n][transfer none]

n

Number of items in operands .

 

gwy_scatter_insert_values()

void
gwy_scatter_insert_values (GwyScatter *scatter,
                           gint i,
                           gint nvalues);

Increases the number of values per point in scattered data.

The new data start as uninitialised. Use gwy_scatter_get_data() afterwards to get the data arrays and fill them.

The XY coordinates remain unchanged.

Parameters

scatter

A scattered data.

 

i

Index in scattered data values where to insert the new values. It can be between zero and the current number of values (inclusive). The latter case means appending to the end.

 

nvalues

The number of values to add.

 

gwy_scatter_remove_values()

void
gwy_scatter_remove_values (GwyScatter *scatter,
                           gint i,
                           gint nvalues);

Decreases the number of values per point in scattered data.

The XY coordinates remain unchanged.

Parameters

scatter

A scattered data.

 

i

Index of the first scattered data value to remove. It can be between zero and the current number of values (inclusive). However, the latter case means nvalues must be zero and is not particularly useful.

 

nvalues

The number of values to remove. It must not exceed the number of values that exist in scatter (starting from i ).

 

Types and Values

struct GwyScatter

struct GwyScatter {
    gsize n;
};

Object representing scattered data.

The GwyScatter struct contains some public fields that can be directly accessed for reading. To change them, you must use the GwyScatter methods.

Members

gsize n;

Number of points.

 

struct GwyScatterClass

struct GwyScatterClass {
    GObjectClass parent_class;

    void (*xy_changed)(GwyScatter *scatter);
    void (*data_changed)(GwyScatter *scatter);
};

Class of scattered data.

Signal Details

The “data-changed” signal

void
user_function (GwyScatter *gwyscatter,
               gpointer    user_data)

The ::data-changed signal is never emitted by the object itself. It is intended as a means to notify object users they should update themselves, usually when a computation modifying the data is finished.

Parameters

gwyscatter

The GwyScatter which received the signal.

 

user_data

user data set when the signal handler was connected.

 

Flags: Run First


The “xy-changed” signal

void
user_function (GwyScatter *gwyscatter,
               gpointer    user_data)

The ::xy-changed signal is never emitted by the object itself. It is intended as a means to notify object users they should update themselves, usually when a computation modifying the XY positions is finished.

Parameters

gwyscatter

The GwyScatter which received the signal.

 

user_data

user data set when the signal handler was connected.

 

Flags: Run First