Skip to main content

README.md

Project description

grdb

A Python library for creating and managing SQLite databases of THz pulse measurement data.

Installation

pip install grdb

Examples

Loading Pulses

Load sample pulses:

from pathlib import Path
from grdb import load_pulses

db_path = Path("raster.grf")

# Load first 100 sample pulses
samples = load_pulses(db_path, offset=0, limit=100, variant="sample")

Load reference pulses:

from pathlib import Path
from grdb import load_pulses

db_path = Path("raster.grf")

# Load first 50 reference pulses
references = load_pulses(db_path, offset=0, limit=50, variant="reference")

Load all pulses (both samples and references):

from pathlib import Path
from grdb import load_pulses

db_path = Path("raster.grf")

# Load all pulse types (variant=None)
all_pulses = load_pulses(db_path, offset=0, limit=1000, variant=None)

Loading Metadata

from pathlib import Path
from grdb import load_metadata

db_path = Path("raster.grf")

raster_config, device_metadata, raster_metadata, n_refs, n_samples = load_metadata(db_path)
  • raster_config: Acquisition settings such as raster patterns, scan stepsize, optional reference_point, how often to acquire_ref_every, and any multi-pass repetitions_config.
  • device_metadata: Instrument identifiers including the serial number and firmware version captured at acquisition time.
  • raster_metadata: Session-level context like the GRDB app version, optional raster_id, acquisition timestamp, user-supplied annotations, raw device_configuration, and any saved coordinate transform in user_coordinates.
  • user_coordinates (within raster_metadata): A CoordinateTransform that captures how user coordinates map to machine space, including the UUID and name of the transform, the XYZ offset applied, the axis/sign remapping in mapping, the last_used timestamp, and optional operator notes.
  • n_refs and n_samples: Counts of final reference and sample pulses stored in the database (stitched sources are excluded so the numbers reflect the user-facing traces).

Understanding the Measurement Data Structure

The load_pulses function returns a list of Measurement objects. Each Measurement represents a single pulse measurement with its associated metadata and spatial information.

Measurement Fields

A Measurement object contains the following fields:

  • pulse (Trace): The actual pulse data containing:

    • time (list[float]): Time values for the pulse waveform
    • signal (list[float]): Signal amplitude values corresponding to each time point
    • uuid (UUID): Unique identifier for this pulse
    • timestamp (int): Unix timestamp in milliseconds when the pulse was acquired
    • derived_from (list[PulseComposition] | None): If this pulse was created by stitching multiple pulses together, this contains information about the source pulses
    • averaged_from (list[Trace] | None): If this pulse was created by averaging multiple pulses, this lists the contributing source traces (which may themselves be stitched)
  • point (Point3D): The 3D spatial coordinates where this pulse was measured:

    • x (float | None): X coordinate
    • y (float | None): Y coordinate
    • z (float | None): Z coordinate
  • variant (str): The type of measurement, one of:

    • "reference": Reference measurement taken at a known location
    • "sample": Sample measurement taken on the object being scanned
    • "noise": Noise measurement for baseline correction
    • "other": Other types of measurements
  • reference (UUID | None): If this is a sample measurement, this field may contain the UUID of the associated reference pulse

  • annotations (list[KVPair] | None): Optional key-value pairs for additional metadata

Example: Accessing Measurement Data

from pathlib import Path
from grdb import load_pulses

db_path = Path("raster.grf")

# Load sample pulses
samples = load_pulses(db_path, offset=0, limit=10, variant="sample")

# Access the first measurement
first_measurement = samples[0]

# Access pulse waveform data
time_values = first_measurement.pulse.time
signal_values = first_measurement.pulse.signal

# Access spatial coordinates
x_position = first_measurement.point.x
y_position = first_measurement.point.y
z_position = first_measurement.point.z

# Check the measurement type
measurement_type = first_measurement.variant

# Get the pulse UUID
pulse_id = first_measurement.pulse.uuid

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

grdb-0.9.3.tar.gz (22.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

grdb-0.9.3-py3-none-any.whl (17.7 kB view details)

Uploaded Python 3

File details

Details for the file grdb-0.9.3.tar.gz.

File metadata

  • Download URL: grdb-0.9.3.tar.gz
  • Upload date:
  • Size: 22.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for grdb-0.9.3.tar.gz
Algorithm Hash digest
SHA256 21b614acc230af1b59e4e5d7fee3a8368aa4978ff2719180b652372c31496322
MD5 0174ece923626befa509c1826a640a12
BLAKE2b-256 0ce4e7b4ecb5d9f741f383a1fea1f6015d4488d79c9466a3ef0fef21edc9830b

See more details on using hashes here.

File details

Details for the file grdb-0.9.3-py3-none-any.whl.

File metadata

  • Download URL: grdb-0.9.3-py3-none-any.whl
  • Upload date:
  • Size: 17.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for grdb-0.9.3-py3-none-any.whl
Algorithm Hash digest
SHA256 62f1432b0529095136a7f2200eec7c85c530dedad0410ec0adfd949ccbb57d46
MD5 ff77684acc14fabb646c3a6cf13407b3
BLAKE2b-256 e1a399d13a5720ae7958d45450855989cef15ba55105ba72262fa7f028b12a5b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page