Skip to main content

A standardized format for single-molecule FRET data

Project description

OpenFRET Data Format Python Library

This Python library provides tools for reading and writing single-molecule FRET (Förster Resonance Energy Transfer) data according to the OpenFRET data format specification (version 1.0.0).

Installation

pip install openfret

Usage

The library provides classes for representing the different components of the OpenFRET data format: Dataset, Trace, Channel, and Metadata.

Writing Data

from openfret import Dataset, Trace, Channel, Metadata, write_data
from datetime import date

# Create Channel objects
channel1 = Channel("donor", [10.0, 12.0, 15.0], excitation_wavelength=488.0, emission_wavelength=520.0)
channel2 = Channel("acceptor", [2.0, 5.0, 8.0], excitation_wavelength=532.0, emission_wavelength=580.0)

# Create a Trace object
trace1 = Trace([channel1, channel2], metadata=Metadata({"molecule_id": "1"}))

# Create a Dataset object
dataset = Dataset(
    title="My FRET Experiment",
    traces=[trace1],
    description="FRET data of protein folding",
    experiment_type="2-Color FRET",
    authors=["John Doe", "Jane Smith"],
    institution="University X",
    date=date(2024, 1, 1),
    metadata=Metadata({"experiment_id": "20240101_JD_JS_1", "movie_file": "20240101_CoolExperiment.TIF"}),
    sample_details={"buffer_conditions": "Phosphate buffer", "other_details": Metadata({"ph": 7.4})}, #Example of nested metadata
    instrument_details={"microscope": "Olympus IX83", "other_details": Metadata({"objective": "60x oil 1.5 NA"})}, #Example of nested metadata
)

# Write the dataset to a JSON file
write_data(dataset, "fret_data.json", compress=True)

Reading Data

from openfret import read_data

# Read the dataset from a JSON file
loaded_dataset = read_data("fret_data.json.zip")

# Access data
print(loaded_dataset.title)
for trace in loaded_dataset.traces:
    for channel in trace.channels:
        print(f"Channel type: {channel.channel_type}, Data: {channel.data}")
print(loaded_dataset.sample_details["other_details"])
print(loaded_dataset.instrument_details["other_details"])

# Or print the whole dictionary
import json
print(json.dumps(loaded_dataset.to_dict(), indent=4))

Loads traces stored in CSV format

import openfret
root_folder = "fret_data_csv"  # Replace with your root folder path
dataset = openfret.load_csv_traces(root_folder)
openfret.write_data(dataset, "fret_data_from_csv.json", compress=True)
loaded_dataset = openfret.read_data("fret_data_from_csv.json.zip")
print(json.dumps(loaded_dataset.to_dict(), indent=4))
 
 # Example folder structure:
 # fret_data_csv/
 # ├── condition_A/
 # │   ├── trace1.csv
 # │   └── trace2.csv
 # └── condition_B/
 #     ├── trace3.csv
 #     └── trace4.csv

Classes

  • Metadata(dict): Represents user-defined metadata. Inherits from dict to allow arbitrary key-value pairs.
  • Channel: Represents a single data channel with intensity data and associated metadata.
    • channel_type (str): String identifier for the channel (e.g., donor, acceptor, FRET).
    • excitation_wavelength (float, optional): Excitation wavelength in nanometers.
    • emission_wavelength (float, optional): Emission wavelength in nanometers.
    • exposure_time (float, optional): Exposure time per frame in seconds.
    • data (List[float]): Intensity values for the channel.
    • metadata (Metadata, optional): Metadata for the channel.
  • Trace: Represents a single-molecule trace containing multiple channels.
    • channels (List[Channel]): Array of channel data for this trace.
    • metadata (Metadata, optional): Metadata for the trace.
  • Dataset: Represents a collection of single-molecule traces.
    • title (str): Title of the experiment or dataset.
    • description (str, optional): Detailed description of the experiment.
    • experiment_type (str, optional): Type of experiment.
    • authors (List[str], optional): List of authors.
    • institution (str, optional): Institution where the experiment was conducted.
    • date (datetime.date, optional): Date of the experiment.
    • traces (List[Trace]): Array of single-molecule traces.
    • metadata (Metadata, optional): Metadata for the dataset.
    • sample_details (dict, optional): Details about the sample.
    • instrument_details (dict, optional): Details about the instrument.

Functions

  • write_data(dataset: Dataset, filename: str, compress: bool): Writes a Dataset object to a JSON file.
  • read_data(filename: str) -> Dataset: Reads a Dataset object from a JSON file.
  • load_csv_traces(root_folder: str) -> Dataset: Loads a folder of CSV files into a dataset.

Contributing

Contributions are welcome! Please open an issue or submit a pull request on GitHub.

License

MIT License

Acknowledgements

This library is based on the OpenFRET data format specification.

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

openfret-0.1.2.tar.gz (9.0 kB view details)

Uploaded Source

Built Distribution

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

openfret-0.1.2-py3-none-any.whl (8.0 kB view details)

Uploaded Python 3

File details

Details for the file openfret-0.1.2.tar.gz.

File metadata

  • Download URL: openfret-0.1.2.tar.gz
  • Upload date:
  • Size: 9.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.9.6

File hashes

Hashes for openfret-0.1.2.tar.gz
Algorithm Hash digest
SHA256 c7eb9d9fe361d3163d7bda9c8174ddb5e6f1f76c8a4403f17a745f2a74177288
MD5 bdc372f8fae3173dbb71d6d6dd653dc4
BLAKE2b-256 e20f2326880650623b61ced0f2be2ae39b0cfa40faec423664818ea0bf002376

See more details on using hashes here.

File details

Details for the file openfret-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: openfret-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 8.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.9.6

File hashes

Hashes for openfret-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 9e4d0261f4dbbaa03cb71f26df27179c18139aadc614f088acd87d564af449cf
MD5 f1a6c29b602f07dddb971b4a81114893
BLAKE2b-256 fc2fd2bed4948b0aa745ec4412abf667c184ae3feeb1d12bae7313129737dcae

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