Note
Go to the end to download the full example code
Optogenetics¶
This tutorial will demonstrate how to write optogenetics data.
Creating an NWBFile object¶
When creating a NWB file, the first step is to create the NWBFile
object.
from datetime import datetime
from uuid import uuid4
from dateutil.tz import tzlocal
from pynwb import NWBFile
nwbfile = NWBFile(
session_description="my first synthetic recording",
identifier=str(uuid4()),
session_start_time=datetime.now(tzlocal()),
experimenter="Baggins, Bilbo",
lab="Bag End Laboratory",
institution="University of Middle Earth at the Shire",
experiment_description="I went on an adventure to reclaim vast treasures.",
session_id="LONELYMTN",
)
Adding optogenetic data¶
The ogen
module contains two data types that you will need to write optogenetics data,
OptogeneticStimulusSite
, which contains metadata about the stimulus site, and
OptogeneticSeries
, which contains the power applied by the laser over time, in watts.
First, you need to create a Device
object linked to the NWBFile
:
device = nwbfile.create_device(
name="device",
description="description of device",
manufacturer="optional but recommended",
)
Now, you can create an OptogeneticStimulusSite
. The easiest way to do this is to use the
create_ogen_site
method.
ogen_site = nwbfile.create_ogen_site(
name="OptogeneticStimulusSite",
device=device,
description="This is an example optogenetic site.",
excitation_lambda=600.0, # nm
location="VISrl",
)
Another equivalent approach would be to create a OptogeneticStimulusSite
and then add it to
the NWBFile
:
from pynwb.ogen import OptogeneticStimulusSite
ogen_stim_site = OptogeneticStimulusSite(
name="OptogeneticStimulusSite2",
device=device,
description="This is an example optogenetic site.",
excitation_lambda=600.0, # nm
location="VISrl",
)
nwbfile.add_ogen_site(ogen_stim_site)
The second approach is necessary if you have an extension of OptogeneticStimulusSite
.
With the OptogeneticStimulusSite
added, you can now create a
OptogeneticSeries
. Here, we will generate some random data using numpy and specify the
timing using rate
. By default, the starting time of the time series is the session start time, specified in
NWBFile
.
If you have samples at irregular intervals, you should use timestamps
instead.
import numpy as np
from pynwb.ogen import OptogeneticSeries
ogen_series = OptogeneticSeries(
name="OptogeneticSeries",
data=np.random.randn(20), # watts
site=ogen_site,
rate=30.0, # Hz
)
nwbfile.add_stimulus(ogen_series)