mirror of
https://github.com/p2p-ld/nwb-linkml.git
synced 2024-11-10 00:34:29 +00:00
update models
This commit is contained in:
parent
b3b5b9d793
commit
0a150d6bc2
242 changed files with 9341 additions and 1449 deletions
|
@ -87,7 +87,7 @@ class Image(NWBData):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -189,7 +189,7 @@ class TimeSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion'.""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* num_times"], Any],
|
||||
NDArray[Shape["* num_times, * num_dim2"], Any],
|
||||
|
@ -241,7 +241,7 @@ class ProcessingModule(NWBContainer):
|
|||
{"from_schema": "core.nwb.base", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[Union[DynamicTable, NWBDataInterface]]] = Field(
|
||||
value: Optional[List[Union[DynamicTable, NWBDataInterface]]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"any_of": [{"range": "NWBDataInterface"}, {"range": "DynamicTable"}]}
|
||||
|
|
|
@ -131,7 +131,7 @@ class SpatialSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. The default value is 'meters'. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion'.""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* num_times"], float],
|
||||
NDArray[Shape["* num_times, * num_features"], float],
|
||||
|
@ -148,7 +148,7 @@ class BehavioralEpochs(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[IntervalSeries]] = Field(
|
||||
value: Optional[List[IntervalSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "IntervalSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -163,7 +163,7 @@ class BehavioralEvents(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[TimeSeries]] = Field(
|
||||
value: Optional[List[TimeSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "TimeSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -178,7 +178,7 @@ class BehavioralTimeSeries(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[TimeSeries]] = Field(
|
||||
value: Optional[List[TimeSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "TimeSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -193,7 +193,7 @@ class PupilTracking(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[TimeSeries]] = Field(
|
||||
value: Optional[List[TimeSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "TimeSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -208,7 +208,7 @@ class EyeTracking(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpatialSeries]] = Field(
|
||||
value: Optional[List[SpatialSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpatialSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -223,7 +223,7 @@ class CompassDirection(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpatialSeries]] = Field(
|
||||
value: Optional[List[SpatialSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpatialSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -238,7 +238,7 @@ class Position(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpatialSeries]] = Field(
|
||||
value: Optional[List[SpatialSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpatialSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
|
|
@ -16,6 +16,7 @@ from pydantic import (
|
|||
ValidationInfo,
|
||||
BeforeValidator,
|
||||
)
|
||||
from ...core.v2_2_0.core_nwb_device import Device
|
||||
from ...core.v2_2_0.core_nwb_base import (
|
||||
TimeSeries,
|
||||
TimeSeriesStartingTime,
|
||||
|
@ -116,7 +117,12 @@ class ElectricalSeries(TimeSeries):
|
|||
...,
|
||||
description="""DynamicTableRegion pointer to the electrodes that this time series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
channel_conversion: Optional[NDArray[Shape["* num_channels"], float]] = Field(
|
||||
|
@ -179,7 +185,12 @@ class SpikeEventSeries(ElectricalSeries):
|
|||
...,
|
||||
description="""DynamicTableRegion pointer to the electrodes that this time series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
channel_conversion: Optional[NDArray[Shape["* num_channels"], float]] = Field(
|
||||
|
@ -256,7 +267,12 @@ class FeatureExtraction(NWBDataInterface):
|
|||
...,
|
||||
description="""DynamicTableRegion pointer to the electrodes that this time series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
@ -287,6 +303,15 @@ class EventDetection(NWBDataInterface):
|
|||
description="""Timestamps of events, in seconds.""",
|
||||
json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_events"}]}}},
|
||||
)
|
||||
source_electricalseries: Union[ElectricalSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ElectricalSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class EventWaveform(NWBDataInterface):
|
||||
|
@ -298,7 +323,7 @@ class EventWaveform(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ecephys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpikeEventSeries]] = Field(
|
||||
value: Optional[List[SpikeEventSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpikeEventSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -313,7 +338,7 @@ class FilteredEphys(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ecephys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[ElectricalSeries]] = Field(
|
||||
value: Optional[List[ElectricalSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "ElectricalSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -328,7 +353,7 @@ class LFP(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ecephys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[ElectricalSeries]] = Field(
|
||||
value: Optional[List[ElectricalSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "ElectricalSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -352,6 +377,15 @@ class ElectrodeGroup(NWBContainer):
|
|||
position: Optional[ElectrodeGroupPosition] = Field(
|
||||
None, description="""stereotaxic or common framework coordinates"""
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class ElectrodeGroupPosition(ConfiguredBaseModel):
|
||||
|
@ -406,6 +440,15 @@ class ClusterWaveforms(NWBDataInterface):
|
|||
}
|
||||
},
|
||||
)
|
||||
clustering_interface: Union[Clustering, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Clustering"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class Clustering(NWBDataInterface):
|
||||
|
|
|
@ -127,7 +127,12 @@ class TimeIntervals(DynamicTable):
|
|||
None,
|
||||
description="""Index for tags.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
timeseries: Optional[TimeIntervalsTimeseries] = Field(
|
||||
|
@ -137,7 +142,12 @@ class TimeIntervals(DynamicTable):
|
|||
None,
|
||||
description="""Index for timeseries.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
|
|
@ -7,7 +7,6 @@ import sys
|
|||
from typing import Any, ClassVar, List, Literal, Dict, Optional, Union
|
||||
from pydantic import BaseModel, ConfigDict, Field, RootModel, field_validator
|
||||
import numpy as np
|
||||
from ...core.v2_2_0.core_nwb_epoch import TimeIntervals
|
||||
from ...core.v2_2_0.core_nwb_misc import Units
|
||||
from ...core.v2_2_0.core_nwb_device import Device
|
||||
from ...core.v2_2_0.core_nwb_ogen import OptogeneticStimulusSite
|
||||
|
@ -22,6 +21,7 @@ from ...core.v2_2_0.core_nwb_ecephys import ElectrodeGroup
|
|||
from numpydantic import NDArray, Shape
|
||||
from ...hdmf_common.v1_1_0.hdmf_common_table import DynamicTable, VectorData, VectorIndex
|
||||
from ...core.v2_2_0.core_nwb_icephys import IntracellularElectrode, SweepTable
|
||||
from ...core.v2_2_0.core_nwb_epoch import TimeIntervals
|
||||
|
||||
metamodel_version = "None"
|
||||
version = "2.2.0"
|
||||
|
@ -158,19 +158,9 @@ class NWBFile(NWBContainer):
|
|||
...,
|
||||
description="""Experimental metadata, including protocol, notes and description of hardware device(s). The metadata stored in this section should be used to describe the experiment. Metadata necessary for interpreting the data is stored with the data. General experimental metadata, including animal strain, experimental protocols, experimenter, devices, etc, are stored under 'general'. Core metadata (e.g., that required to interpret data fields) is stored with the data itself, and implicitly defined by the file specification (e.g., time is in seconds). The strategy used here for storing non-core metadata is to use free-form text fields, such as would appear in sentences or paragraphs from a Methods section. Metadata fields are text to enable them to be more general, for example to represent ranges instead of numerical values. Machine-readable metadata is stored as attributes to these free-form datasets. All entries in the below table are to be included when data is present. Unused groups (e.g., intracellular_ephys in an optophysiology experiment) should not be created unless there is data to store within them.""",
|
||||
)
|
||||
intervals: Optional[List[TimeIntervals]] = Field(
|
||||
intervals: Optional[NWBFileIntervals] = Field(
|
||||
None,
|
||||
description="""Experimental intervals, whether that be logically distinct sub-experiments having a particular scientific goal, trials (see trials subgroup) during an experiment, or epochs (see epochs subgroup) deriving from analysis of data.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"any_of": [
|
||||
{"range": "TimeIntervals"},
|
||||
{"range": "TimeIntervals"},
|
||||
{"range": "TimeIntervals"},
|
||||
{"range": "TimeIntervals"},
|
||||
]
|
||||
}
|
||||
},
|
||||
)
|
||||
units: Optional[Units] = Field(None, description="""Data about sorted spike units.""")
|
||||
|
||||
|
@ -544,6 +534,35 @@ class GeneralIntracellularEphys(ConfiguredBaseModel):
|
|||
)
|
||||
|
||||
|
||||
class NWBFileIntervals(ConfiguredBaseModel):
|
||||
"""
|
||||
Experimental intervals, whether that be logically distinct sub-experiments having a particular scientific goal, trials (see trials subgroup) during an experiment, or epochs (see epochs subgroup) deriving from analysis of data.
|
||||
"""
|
||||
|
||||
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "core.nwb.file"})
|
||||
|
||||
name: Literal["intervals"] = Field(
|
||||
"intervals",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"equals_string": "intervals", "ifabsent": "string(intervals)"}
|
||||
},
|
||||
)
|
||||
epochs: Optional[TimeIntervals] = Field(
|
||||
None,
|
||||
description="""Divisions in time marking experimental stages or sub-divisions of a single recording session.""",
|
||||
)
|
||||
trials: Optional[TimeIntervals] = Field(
|
||||
None, description="""Repeated experimental events that have a logical grouping."""
|
||||
)
|
||||
invalid_times: Optional[TimeIntervals] = Field(
|
||||
None, description="""Time intervals that should be removed from analysis."""
|
||||
)
|
||||
time_intervals: Optional[List[TimeIntervals]] = Field(
|
||||
None,
|
||||
description="""Optional additional table(s) for describing other experimental time intervals.""",
|
||||
)
|
||||
|
||||
|
||||
# Model rebuild
|
||||
# see https://pydantic-docs.helpmanual.io/usage/models/#rebuilding-a-model
|
||||
NWBFile.model_rebuild()
|
||||
|
@ -554,3 +573,4 @@ Subject.model_rebuild()
|
|||
GeneralExtracellularEphys.model_rebuild()
|
||||
ExtracellularEphysElectrodes.model_rebuild()
|
||||
GeneralIntracellularEphys.model_rebuild()
|
||||
NWBFileIntervals.model_rebuild()
|
||||
|
|
|
@ -11,6 +11,7 @@ from ...core.v2_2_0.core_nwb_base import (
|
|||
TimeSeriesSync,
|
||||
NWBContainer,
|
||||
)
|
||||
from ...core.v2_2_0.core_nwb_device import Device
|
||||
from typing import Any, ClassVar, List, Literal, Dict, Optional, Union, Annotated, Type, TypeVar
|
||||
from pydantic import (
|
||||
BaseModel,
|
||||
|
@ -117,6 +118,15 @@ class PatchClampSeries(TimeSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -164,7 +174,7 @@ class PatchClampSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion'.""",
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_times"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_times"], float]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_times"}]}}}
|
||||
)
|
||||
|
||||
|
@ -195,6 +205,15 @@ class CurrentClampSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -271,6 +290,15 @@ class IZeroClampSeries(CurrentClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -324,6 +352,15 @@ class CurrentClampStimulusSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -416,6 +453,15 @@ class VoltageClampSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -648,6 +694,15 @@ class VoltageClampStimulusSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -724,6 +779,15 @@ class IntracellularElectrode(NWBContainer):
|
|||
slice: Optional[str] = Field(
|
||||
None, description="""Information about slice used for recording."""
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class SweepTable(DynamicTable):
|
||||
|
@ -752,7 +816,12 @@ class SweepTable(DynamicTable):
|
|||
...,
|
||||
description="""Index for series.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
|
|
@ -75,7 +75,7 @@ class GrayscaleImage(Image):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -98,7 +98,7 @@ class RGBImage(Image):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -121,7 +121,7 @@ class RGBAImage(Image):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -208,7 +208,7 @@ class ImageSeriesExternalFile(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Each external image may contain one or more consecutive frames of the full ImageSeries. This attribute serves as an index to indicate which frames each file contains, to faciliate random access. The 'starting_frame' attribute, hence, contains a list of frame numbers within the full ImageSeries of the first frame of each file listed in the parent 'external_file' dataset. Zero-based indexing is used (hence, the first element will always be zero). For example, if the 'external_file' dataset has three paths to files and the first file has 5 frames, the second file has 10 frames, and the third file has 20 frames, then this attribute will have values [0, 5, 15]. If there is a single external file that holds all of the frames of the ImageSeries (and so there is a single element in the 'external_file' dataset), then this attribute should have value [0].""",
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_files"], str]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_files"], str]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_files"}]}}}
|
||||
)
|
||||
|
||||
|
@ -223,6 +223,15 @@ class ImageMaskSeries(ImageSeries):
|
|||
)
|
||||
|
||||
name: str = Field(...)
|
||||
masked_imageseries: Union[ImageSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImageSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
data: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* frame, * x, * y"], float],
|
||||
|
@ -362,6 +371,15 @@ class IndexSeries(TimeSeries):
|
|||
description="""Index of the frame in the referenced ImageSeries.""",
|
||||
json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_times"}]}}},
|
||||
)
|
||||
indexed_timeseries: Union[ImageSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImageSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
|
|
@ -167,7 +167,7 @@ class AbstractFeatureSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Since there can be different units for different features, store the units in 'feature_units'. The default value for this attribute is \"see 'feature_units'\".""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* num_times"], float],
|
||||
NDArray[Shape["* num_times, * num_features"], float],
|
||||
|
@ -287,6 +287,15 @@ class DecompositionSeries(TimeSeries):
|
|||
...,
|
||||
description="""Table for describing the bands that this series was generated from. There should be one row in this table for each band.""",
|
||||
)
|
||||
source_timeseries: Optional[Union[TimeSeries, str]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "TimeSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -334,7 +343,7 @@ class DecompositionSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion'.""",
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_times, * num_channels, * num_bands"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_times, * num_channels, * num_bands"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
|
@ -428,7 +437,12 @@ class Units(DynamicTable):
|
|||
None,
|
||||
description="""Index into the spike_times dataset.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
spike_times: Optional[UnitsSpikeTimes] = Field(
|
||||
|
@ -438,7 +452,12 @@ class Units(DynamicTable):
|
|||
None,
|
||||
description="""Index into the obs_intervals dataset.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
obs_intervals: Optional[NDArray[Shape["* num_intervals, 2 start_end"], float]] = Field(
|
||||
|
@ -459,14 +478,24 @@ class Units(DynamicTable):
|
|||
None,
|
||||
description="""Index into electrodes.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
electrodes: Named[Optional[DynamicTableRegion]] = Field(
|
||||
None,
|
||||
description="""Electrode that each spike unit came from, specified using a DynamicTableRegion.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
electrode_group: Optional[List[ElectrodeGroup]] = Field(
|
||||
|
|
|
@ -14,6 +14,7 @@ from ...core.v2_2_0.core_nwb_base import (
|
|||
TimeSeriesSync,
|
||||
NWBContainer,
|
||||
)
|
||||
from ...core.v2_2_0.core_nwb_device import Device
|
||||
|
||||
metamodel_version = "None"
|
||||
version = "2.2.0"
|
||||
|
@ -81,6 +82,15 @@ class OptogeneticSeries(TimeSeries):
|
|||
description="""Applied power for optogenetic stimulus, in watts.""",
|
||||
json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_times"}]}}},
|
||||
)
|
||||
site: Union[OptogeneticStimulusSite, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "OptogeneticStimulusSite"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -129,6 +139,15 @@ class OptogeneticStimulusSite(NWBContainer):
|
|||
...,
|
||||
description="""Location of the stimulation site. Specify the area, layer, comments on estimation of area/layer, stereotaxic coordinates if in vivo, etc. Use standard atlas names for anatomical regions when possible.""",
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
# Model rebuild
|
||||
|
|
|
@ -17,6 +17,7 @@ from pydantic import (
|
|||
BeforeValidator,
|
||||
)
|
||||
from ...hdmf_common.v1_1_0.hdmf_common_table import DynamicTableRegion, DynamicTable
|
||||
from ...core.v2_2_0.core_nwb_device import Device
|
||||
from numpydantic import NDArray, Shape
|
||||
from ...core.v2_2_0.core_nwb_base import (
|
||||
TimeSeriesStartingTime,
|
||||
|
@ -117,6 +118,15 @@ class TwoPhotonSeries(ImageSeries):
|
|||
field_of_view: Optional[
|
||||
Union[NDArray[Shape["2 width_height"], float], NDArray[Shape["3 width_height"], float]]
|
||||
] = Field(None, description="""Width, height and depth of image, or imaged area, in meters.""")
|
||||
imaging_plane: Union[ImagingPlane, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImagingPlane"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
data: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* frame, * x, * y"], float],
|
||||
|
@ -185,7 +195,12 @@ class RoiResponseSeries(TimeSeries):
|
|||
...,
|
||||
description="""DynamicTableRegion referencing into an ROITable containing information on the ROIs stored in this timeseries.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
|
@ -229,7 +244,7 @@ class DfOverF(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[RoiResponseSeries]] = Field(
|
||||
value: Optional[List[RoiResponseSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "RoiResponseSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -244,7 +259,7 @@ class Fluorescence(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[RoiResponseSeries]] = Field(
|
||||
value: Optional[List[RoiResponseSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "RoiResponseSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -259,7 +274,7 @@ class ImageSegmentation(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[DynamicTable]] = Field(
|
||||
value: Optional[List[DynamicTable]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "DynamicTable"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -302,6 +317,15 @@ class ImagingPlane(NWBContainer):
|
|||
optical_channel: OpticalChannel = Field(
|
||||
..., description="""An optical channel used to record from an imaging plane."""
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class ImagingPlaneManifold(ConfiguredBaseModel):
|
||||
|
@ -325,7 +349,7 @@ class ImagingPlaneManifold(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. The default value is 'meters'.""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* height, * width, 3 x_y_z"], float],
|
||||
NDArray[Shape["* height, * width, * depth, 3 x_y_z"], float],
|
||||
|
@ -349,7 +373,7 @@ class ImagingPlaneOriginCoords(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Measurement units for origin_coords. The default value is 'meters'."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["2 x_y, 3 x_y_z"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["2 x_y, 3 x_y_z"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
|
@ -380,7 +404,7 @@ class ImagingPlaneGridSpacing(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Measurement units for grid_spacing. The default value is 'meters'."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["2 x_y, 3 x_y_z"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["2 x_y, 3 x_y_z"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
|
@ -416,7 +440,7 @@ class MotionCorrection(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[NWBDataInterface]] = Field(
|
||||
value: Optional[List[NWBDataInterface]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "NWBDataInterface"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
|
|
@ -101,7 +101,7 @@ class RetinotopyMap(NWBData):
|
|||
description="""Number of rows and columns in the image. NOTE: row, column representation is equivalent to height, width.""",
|
||||
)
|
||||
field_of_view: Optional[float] = Field(None, description="""Size of viewing area, in meters.""")
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -122,7 +122,7 @@ class AxisMap(RetinotopyMap):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Unit that axis data is stored in (e.g., degrees)."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -161,7 +161,7 @@ class RetinotopyImage(GrayscaleImage):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -187,35 +187,60 @@ class ImagingRetinotopy(NWBDataInterface):
|
|||
...,
|
||||
description="""Phase response to stimulus on the first measured axis.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
axis_1_power_map: Named[Optional[AxisMap]] = Field(
|
||||
None,
|
||||
description="""Power response on the first measured axis. Response is scaled so 0.0 is no power in the response and 1.0 is maximum relative power.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
axis_2_phase_map: Named[AxisMap] = Field(
|
||||
...,
|
||||
description="""Phase response to stimulus on the second measured axis.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
axis_2_power_map: Named[Optional[AxisMap]] = Field(
|
||||
None,
|
||||
description="""Power response to stimulus on the second measured axis.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
sign_map: Named[RetinotopyMap] = Field(
|
||||
...,
|
||||
description="""Sine of the angle between the direction of the gradient in axis_1 and axis_2.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
axis_descriptions: NDArray[Shape["2 num_axes"], str] = Field(
|
||||
|
@ -235,7 +260,12 @@ class ImagingRetinotopy(NWBDataInterface):
|
|||
...,
|
||||
description="""Gray-scale anatomical image of cortical surface. Array structure: [rows][columns]""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
@ -273,7 +303,7 @@ class ImagingRetinotopyFocalDepthImage(RetinotopyImage):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
|
|
@ -133,6 +133,7 @@ from ...core.v2_2_0.core_nwb_file import (
|
|||
GeneralExtracellularEphys,
|
||||
ExtracellularEphysElectrodes,
|
||||
GeneralIntracellularEphys,
|
||||
NWBFileIntervals,
|
||||
)
|
||||
from ...core.v2_2_0.core_nwb_epoch import TimeIntervals, TimeIntervalsTimeseries
|
||||
|
||||
|
|
|
@ -87,7 +87,7 @@ class Image(NWBData):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -189,7 +189,7 @@ class TimeSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion'.""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* num_times"], Any],
|
||||
NDArray[Shape["* num_times, * num_dim2"], Any],
|
||||
|
@ -241,7 +241,7 @@ class ProcessingModule(NWBContainer):
|
|||
{"from_schema": "core.nwb.base", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[Union[DynamicTable, NWBDataInterface]]] = Field(
|
||||
value: Optional[List[Union[DynamicTable, NWBDataInterface]]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"any_of": [{"range": "NWBDataInterface"}, {"range": "DynamicTable"}]}
|
||||
|
|
|
@ -131,7 +131,7 @@ class SpatialSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. The default value is 'meters'. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion'.""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* num_times"], float],
|
||||
NDArray[Shape["* num_times, * num_features"], float],
|
||||
|
@ -148,7 +148,7 @@ class BehavioralEpochs(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[IntervalSeries]] = Field(
|
||||
value: Optional[List[IntervalSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "IntervalSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -163,7 +163,7 @@ class BehavioralEvents(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[TimeSeries]] = Field(
|
||||
value: Optional[List[TimeSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "TimeSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -178,7 +178,7 @@ class BehavioralTimeSeries(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[TimeSeries]] = Field(
|
||||
value: Optional[List[TimeSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "TimeSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -193,7 +193,7 @@ class PupilTracking(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[TimeSeries]] = Field(
|
||||
value: Optional[List[TimeSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "TimeSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -208,7 +208,7 @@ class EyeTracking(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpatialSeries]] = Field(
|
||||
value: Optional[List[SpatialSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpatialSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -223,7 +223,7 @@ class CompassDirection(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpatialSeries]] = Field(
|
||||
value: Optional[List[SpatialSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpatialSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -238,7 +238,7 @@ class Position(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpatialSeries]] = Field(
|
||||
value: Optional[List[SpatialSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpatialSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
|
|
@ -16,6 +16,7 @@ from pydantic import (
|
|||
ValidationInfo,
|
||||
BeforeValidator,
|
||||
)
|
||||
from ...core.v2_2_1.core_nwb_device import Device
|
||||
from ...core.v2_2_1.core_nwb_base import (
|
||||
TimeSeries,
|
||||
TimeSeriesStartingTime,
|
||||
|
@ -116,7 +117,12 @@ class ElectricalSeries(TimeSeries):
|
|||
...,
|
||||
description="""DynamicTableRegion pointer to the electrodes that this time series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
channel_conversion: Optional[NDArray[Shape["* num_channels"], float]] = Field(
|
||||
|
@ -179,7 +185,12 @@ class SpikeEventSeries(ElectricalSeries):
|
|||
...,
|
||||
description="""DynamicTableRegion pointer to the electrodes that this time series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
channel_conversion: Optional[NDArray[Shape["* num_channels"], float]] = Field(
|
||||
|
@ -256,7 +267,12 @@ class FeatureExtraction(NWBDataInterface):
|
|||
...,
|
||||
description="""DynamicTableRegion pointer to the electrodes that this time series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
@ -287,6 +303,15 @@ class EventDetection(NWBDataInterface):
|
|||
description="""Timestamps of events, in seconds.""",
|
||||
json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_events"}]}}},
|
||||
)
|
||||
source_electricalseries: Union[ElectricalSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ElectricalSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class EventWaveform(NWBDataInterface):
|
||||
|
@ -298,7 +323,7 @@ class EventWaveform(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ecephys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpikeEventSeries]] = Field(
|
||||
value: Optional[List[SpikeEventSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpikeEventSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -313,7 +338,7 @@ class FilteredEphys(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ecephys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[ElectricalSeries]] = Field(
|
||||
value: Optional[List[ElectricalSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "ElectricalSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -328,7 +353,7 @@ class LFP(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ecephys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[ElectricalSeries]] = Field(
|
||||
value: Optional[List[ElectricalSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "ElectricalSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -352,6 +377,15 @@ class ElectrodeGroup(NWBContainer):
|
|||
position: Optional[ElectrodeGroupPosition] = Field(
|
||||
None, description="""stereotaxic or common framework coordinates"""
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class ElectrodeGroupPosition(ConfiguredBaseModel):
|
||||
|
@ -406,6 +440,15 @@ class ClusterWaveforms(NWBDataInterface):
|
|||
}
|
||||
},
|
||||
)
|
||||
clustering_interface: Union[Clustering, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Clustering"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class Clustering(NWBDataInterface):
|
||||
|
|
|
@ -127,7 +127,12 @@ class TimeIntervals(DynamicTable):
|
|||
None,
|
||||
description="""Index for tags.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
timeseries: Optional[TimeIntervalsTimeseries] = Field(
|
||||
|
@ -137,7 +142,12 @@ class TimeIntervals(DynamicTable):
|
|||
None,
|
||||
description="""Index for timeseries.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
|
|
@ -7,7 +7,6 @@ import sys
|
|||
from typing import Any, ClassVar, List, Literal, Dict, Optional, Union
|
||||
from pydantic import BaseModel, ConfigDict, Field, RootModel, field_validator
|
||||
import numpy as np
|
||||
from ...core.v2_2_1.core_nwb_epoch import TimeIntervals
|
||||
from ...core.v2_2_1.core_nwb_misc import Units
|
||||
from ...core.v2_2_1.core_nwb_device import Device
|
||||
from ...core.v2_2_1.core_nwb_ogen import OptogeneticStimulusSite
|
||||
|
@ -22,6 +21,7 @@ from ...core.v2_2_1.core_nwb_ecephys import ElectrodeGroup
|
|||
from numpydantic import NDArray, Shape
|
||||
from ...hdmf_common.v1_1_2.hdmf_common_table import DynamicTable, VectorData, VectorIndex
|
||||
from ...core.v2_2_1.core_nwb_icephys import IntracellularElectrode, SweepTable
|
||||
from ...core.v2_2_1.core_nwb_epoch import TimeIntervals
|
||||
|
||||
metamodel_version = "None"
|
||||
version = "2.2.1"
|
||||
|
@ -158,19 +158,9 @@ class NWBFile(NWBContainer):
|
|||
...,
|
||||
description="""Experimental metadata, including protocol, notes and description of hardware device(s). The metadata stored in this section should be used to describe the experiment. Metadata necessary for interpreting the data is stored with the data. General experimental metadata, including animal strain, experimental protocols, experimenter, devices, etc, are stored under 'general'. Core metadata (e.g., that required to interpret data fields) is stored with the data itself, and implicitly defined by the file specification (e.g., time is in seconds). The strategy used here for storing non-core metadata is to use free-form text fields, such as would appear in sentences or paragraphs from a Methods section. Metadata fields are text to enable them to be more general, for example to represent ranges instead of numerical values. Machine-readable metadata is stored as attributes to these free-form datasets. All entries in the below table are to be included when data is present. Unused groups (e.g., intracellular_ephys in an optophysiology experiment) should not be created unless there is data to store within them.""",
|
||||
)
|
||||
intervals: Optional[List[TimeIntervals]] = Field(
|
||||
intervals: Optional[NWBFileIntervals] = Field(
|
||||
None,
|
||||
description="""Experimental intervals, whether that be logically distinct sub-experiments having a particular scientific goal, trials (see trials subgroup) during an experiment, or epochs (see epochs subgroup) deriving from analysis of data.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"any_of": [
|
||||
{"range": "TimeIntervals"},
|
||||
{"range": "TimeIntervals"},
|
||||
{"range": "TimeIntervals"},
|
||||
{"range": "TimeIntervals"},
|
||||
]
|
||||
}
|
||||
},
|
||||
)
|
||||
units: Optional[Units] = Field(None, description="""Data about sorted spike units.""")
|
||||
|
||||
|
@ -544,6 +534,35 @@ class GeneralIntracellularEphys(ConfiguredBaseModel):
|
|||
)
|
||||
|
||||
|
||||
class NWBFileIntervals(ConfiguredBaseModel):
|
||||
"""
|
||||
Experimental intervals, whether that be logically distinct sub-experiments having a particular scientific goal, trials (see trials subgroup) during an experiment, or epochs (see epochs subgroup) deriving from analysis of data.
|
||||
"""
|
||||
|
||||
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "core.nwb.file"})
|
||||
|
||||
name: Literal["intervals"] = Field(
|
||||
"intervals",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"equals_string": "intervals", "ifabsent": "string(intervals)"}
|
||||
},
|
||||
)
|
||||
epochs: Optional[TimeIntervals] = Field(
|
||||
None,
|
||||
description="""Divisions in time marking experimental stages or sub-divisions of a single recording session.""",
|
||||
)
|
||||
trials: Optional[TimeIntervals] = Field(
|
||||
None, description="""Repeated experimental events that have a logical grouping."""
|
||||
)
|
||||
invalid_times: Optional[TimeIntervals] = Field(
|
||||
None, description="""Time intervals that should be removed from analysis."""
|
||||
)
|
||||
time_intervals: Optional[List[TimeIntervals]] = Field(
|
||||
None,
|
||||
description="""Optional additional table(s) for describing other experimental time intervals.""",
|
||||
)
|
||||
|
||||
|
||||
# Model rebuild
|
||||
# see https://pydantic-docs.helpmanual.io/usage/models/#rebuilding-a-model
|
||||
NWBFile.model_rebuild()
|
||||
|
@ -554,3 +573,4 @@ Subject.model_rebuild()
|
|||
GeneralExtracellularEphys.model_rebuild()
|
||||
ExtracellularEphysElectrodes.model_rebuild()
|
||||
GeneralIntracellularEphys.model_rebuild()
|
||||
NWBFileIntervals.model_rebuild()
|
||||
|
|
|
@ -11,6 +11,7 @@ from ...core.v2_2_1.core_nwb_base import (
|
|||
TimeSeriesSync,
|
||||
NWBContainer,
|
||||
)
|
||||
from ...core.v2_2_1.core_nwb_device import Device
|
||||
from typing import Any, ClassVar, List, Literal, Dict, Optional, Union, Annotated, Type, TypeVar
|
||||
from pydantic import (
|
||||
BaseModel,
|
||||
|
@ -117,6 +118,15 @@ class PatchClampSeries(TimeSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -164,7 +174,7 @@ class PatchClampSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion'.""",
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_times"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_times"], float]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_times"}]}}}
|
||||
)
|
||||
|
||||
|
@ -195,6 +205,15 @@ class CurrentClampSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -271,6 +290,15 @@ class IZeroClampSeries(CurrentClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -324,6 +352,15 @@ class CurrentClampStimulusSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -416,6 +453,15 @@ class VoltageClampSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -648,6 +694,15 @@ class VoltageClampStimulusSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -724,6 +779,15 @@ class IntracellularElectrode(NWBContainer):
|
|||
slice: Optional[str] = Field(
|
||||
None, description="""Information about slice used for recording."""
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class SweepTable(DynamicTable):
|
||||
|
@ -752,7 +816,12 @@ class SweepTable(DynamicTable):
|
|||
...,
|
||||
description="""Index for series.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
|
|
@ -75,7 +75,7 @@ class GrayscaleImage(Image):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -98,7 +98,7 @@ class RGBImage(Image):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -121,7 +121,7 @@ class RGBAImage(Image):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -208,7 +208,7 @@ class ImageSeriesExternalFile(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Each external image may contain one or more consecutive frames of the full ImageSeries. This attribute serves as an index to indicate which frames each file contains, to faciliate random access. The 'starting_frame' attribute, hence, contains a list of frame numbers within the full ImageSeries of the first frame of each file listed in the parent 'external_file' dataset. Zero-based indexing is used (hence, the first element will always be zero). For example, if the 'external_file' dataset has three paths to files and the first file has 5 frames, the second file has 10 frames, and the third file has 20 frames, then this attribute will have values [0, 5, 15]. If there is a single external file that holds all of the frames of the ImageSeries (and so there is a single element in the 'external_file' dataset), then this attribute should have value [0].""",
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_files"], str]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_files"], str]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_files"}]}}}
|
||||
)
|
||||
|
||||
|
@ -223,6 +223,15 @@ class ImageMaskSeries(ImageSeries):
|
|||
)
|
||||
|
||||
name: str = Field(...)
|
||||
masked_imageseries: Union[ImageSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImageSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
data: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* frame, * x, * y"], float],
|
||||
|
@ -362,6 +371,15 @@ class IndexSeries(TimeSeries):
|
|||
description="""Index of the frame in the referenced ImageSeries.""",
|
||||
json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_times"}]}}},
|
||||
)
|
||||
indexed_timeseries: Union[ImageSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImageSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
|
|
@ -167,7 +167,7 @@ class AbstractFeatureSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Since there can be different units for different features, store the units in 'feature_units'. The default value for this attribute is \"see 'feature_units'\".""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* num_times"], float],
|
||||
NDArray[Shape["* num_times, * num_features"], float],
|
||||
|
@ -287,6 +287,15 @@ class DecompositionSeries(TimeSeries):
|
|||
...,
|
||||
description="""Table for describing the bands that this series was generated from. There should be one row in this table for each band.""",
|
||||
)
|
||||
source_timeseries: Optional[Union[TimeSeries, str]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "TimeSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -334,7 +343,7 @@ class DecompositionSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion'.""",
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_times, * num_channels, * num_bands"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_times, * num_channels, * num_bands"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
|
@ -428,7 +437,12 @@ class Units(DynamicTable):
|
|||
None,
|
||||
description="""Index into the spike_times dataset.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
spike_times: Optional[UnitsSpikeTimes] = Field(
|
||||
|
@ -438,7 +452,12 @@ class Units(DynamicTable):
|
|||
None,
|
||||
description="""Index into the obs_intervals dataset.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
obs_intervals: Optional[NDArray[Shape["* num_intervals, 2 start_end"], float]] = Field(
|
||||
|
@ -459,14 +478,24 @@ class Units(DynamicTable):
|
|||
None,
|
||||
description="""Index into electrodes.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
electrodes: Named[Optional[DynamicTableRegion]] = Field(
|
||||
None,
|
||||
description="""Electrode that each spike unit came from, specified using a DynamicTableRegion.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
electrode_group: Optional[List[ElectrodeGroup]] = Field(
|
||||
|
|
|
@ -14,6 +14,7 @@ from ...core.v2_2_1.core_nwb_base import (
|
|||
TimeSeriesSync,
|
||||
NWBContainer,
|
||||
)
|
||||
from ...core.v2_2_1.core_nwb_device import Device
|
||||
|
||||
metamodel_version = "None"
|
||||
version = "2.2.1"
|
||||
|
@ -81,6 +82,15 @@ class OptogeneticSeries(TimeSeries):
|
|||
description="""Applied power for optogenetic stimulus, in watts.""",
|
||||
json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_times"}]}}},
|
||||
)
|
||||
site: Union[OptogeneticStimulusSite, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "OptogeneticStimulusSite"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -129,6 +139,15 @@ class OptogeneticStimulusSite(NWBContainer):
|
|||
...,
|
||||
description="""Location of the stimulation site. Specify the area, layer, comments on estimation of area/layer, stereotaxic coordinates if in vivo, etc. Use standard atlas names for anatomical regions when possible.""",
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
# Model rebuild
|
||||
|
|
|
@ -17,6 +17,7 @@ from pydantic import (
|
|||
BeforeValidator,
|
||||
)
|
||||
from ...hdmf_common.v1_1_2.hdmf_common_table import DynamicTableRegion, DynamicTable
|
||||
from ...core.v2_2_1.core_nwb_device import Device
|
||||
from numpydantic import NDArray, Shape
|
||||
from ...core.v2_2_1.core_nwb_base import (
|
||||
TimeSeriesStartingTime,
|
||||
|
@ -117,6 +118,15 @@ class TwoPhotonSeries(ImageSeries):
|
|||
field_of_view: Optional[
|
||||
Union[NDArray[Shape["2 width_height"], float], NDArray[Shape["3 width_height"], float]]
|
||||
] = Field(None, description="""Width, height and depth of image, or imaged area, in meters.""")
|
||||
imaging_plane: Union[ImagingPlane, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImagingPlane"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
data: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* frame, * x, * y"], float],
|
||||
|
@ -185,7 +195,12 @@ class RoiResponseSeries(TimeSeries):
|
|||
...,
|
||||
description="""DynamicTableRegion referencing into an ROITable containing information on the ROIs stored in this timeseries.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
|
@ -229,7 +244,7 @@ class DfOverF(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[RoiResponseSeries]] = Field(
|
||||
value: Optional[List[RoiResponseSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "RoiResponseSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -244,7 +259,7 @@ class Fluorescence(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[RoiResponseSeries]] = Field(
|
||||
value: Optional[List[RoiResponseSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "RoiResponseSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -259,7 +274,7 @@ class ImageSegmentation(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[DynamicTable]] = Field(
|
||||
value: Optional[List[DynamicTable]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "DynamicTable"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -302,6 +317,15 @@ class ImagingPlane(NWBContainer):
|
|||
optical_channel: OpticalChannel = Field(
|
||||
..., description="""An optical channel used to record from an imaging plane."""
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class ImagingPlaneManifold(ConfiguredBaseModel):
|
||||
|
@ -325,7 +349,7 @@ class ImagingPlaneManifold(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. The default value is 'meters'.""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* height, * width, 3 x_y_z"], float],
|
||||
NDArray[Shape["* height, * width, * depth, 3 x_y_z"], float],
|
||||
|
@ -349,7 +373,7 @@ class ImagingPlaneOriginCoords(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Measurement units for origin_coords. The default value is 'meters'."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["2 x_y, 3 x_y_z"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["2 x_y, 3 x_y_z"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
|
@ -380,7 +404,7 @@ class ImagingPlaneGridSpacing(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Measurement units for grid_spacing. The default value is 'meters'."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["2 x_y, 3 x_y_z"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["2 x_y, 3 x_y_z"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
|
@ -416,7 +440,7 @@ class MotionCorrection(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[NWBDataInterface]] = Field(
|
||||
value: Optional[List[NWBDataInterface]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "NWBDataInterface"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
|
|
@ -101,7 +101,7 @@ class RetinotopyMap(NWBData):
|
|||
description="""Number of rows and columns in the image. NOTE: row, column representation is equivalent to height, width.""",
|
||||
)
|
||||
field_of_view: Optional[float] = Field(None, description="""Size of viewing area, in meters.""")
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -122,7 +122,7 @@ class AxisMap(RetinotopyMap):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Unit that axis data is stored in (e.g., degrees)."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -161,7 +161,7 @@ class RetinotopyImage(GrayscaleImage):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -187,35 +187,60 @@ class ImagingRetinotopy(NWBDataInterface):
|
|||
...,
|
||||
description="""Phase response to stimulus on the first measured axis.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
axis_1_power_map: Named[Optional[AxisMap]] = Field(
|
||||
None,
|
||||
description="""Power response on the first measured axis. Response is scaled so 0.0 is no power in the response and 1.0 is maximum relative power.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
axis_2_phase_map: Named[AxisMap] = Field(
|
||||
...,
|
||||
description="""Phase response to stimulus on the second measured axis.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
axis_2_power_map: Named[Optional[AxisMap]] = Field(
|
||||
None,
|
||||
description="""Power response to stimulus on the second measured axis.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
sign_map: Named[RetinotopyMap] = Field(
|
||||
...,
|
||||
description="""Sine of the angle between the direction of the gradient in axis_1 and axis_2.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
axis_descriptions: NDArray[Shape["2 num_axes"], str] = Field(
|
||||
|
@ -235,7 +260,12 @@ class ImagingRetinotopy(NWBDataInterface):
|
|||
...,
|
||||
description="""Gray-scale anatomical image of cortical surface. Array structure: [rows][columns]""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
@ -273,7 +303,7 @@ class ImagingRetinotopyFocalDepthImage(RetinotopyImage):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
|
|
@ -133,6 +133,7 @@ from ...core.v2_2_1.core_nwb_file import (
|
|||
GeneralExtracellularEphys,
|
||||
ExtracellularEphysElectrodes,
|
||||
GeneralIntracellularEphys,
|
||||
NWBFileIntervals,
|
||||
)
|
||||
from ...core.v2_2_1.core_nwb_epoch import TimeIntervals, TimeIntervalsTimeseries
|
||||
|
||||
|
|
|
@ -87,7 +87,7 @@ class Image(NWBData):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -189,7 +189,7 @@ class TimeSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion'.""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* num_times"], Any],
|
||||
NDArray[Shape["* num_times, * num_dim2"], Any],
|
||||
|
@ -241,7 +241,7 @@ class ProcessingModule(NWBContainer):
|
|||
{"from_schema": "core.nwb.base", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[Union[DynamicTable, NWBDataInterface]]] = Field(
|
||||
value: Optional[List[Union[DynamicTable, NWBDataInterface]]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"any_of": [{"range": "NWBDataInterface"}, {"range": "DynamicTable"}]}
|
||||
|
|
|
@ -131,7 +131,7 @@ class SpatialSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. The default value is 'meters'. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion'.""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* num_times"], float],
|
||||
NDArray[Shape["* num_times, * num_features"], float],
|
||||
|
@ -148,7 +148,7 @@ class BehavioralEpochs(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[IntervalSeries]] = Field(
|
||||
value: Optional[List[IntervalSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "IntervalSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -163,7 +163,7 @@ class BehavioralEvents(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[TimeSeries]] = Field(
|
||||
value: Optional[List[TimeSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "TimeSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -178,7 +178,7 @@ class BehavioralTimeSeries(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[TimeSeries]] = Field(
|
||||
value: Optional[List[TimeSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "TimeSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -193,7 +193,7 @@ class PupilTracking(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[TimeSeries]] = Field(
|
||||
value: Optional[List[TimeSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "TimeSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -208,7 +208,7 @@ class EyeTracking(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpatialSeries]] = Field(
|
||||
value: Optional[List[SpatialSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpatialSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -223,7 +223,7 @@ class CompassDirection(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpatialSeries]] = Field(
|
||||
value: Optional[List[SpatialSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpatialSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -238,7 +238,7 @@ class Position(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpatialSeries]] = Field(
|
||||
value: Optional[List[SpatialSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpatialSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
|
|
@ -16,6 +16,7 @@ from pydantic import (
|
|||
ValidationInfo,
|
||||
BeforeValidator,
|
||||
)
|
||||
from ...core.v2_2_2.core_nwb_device import Device
|
||||
from ...core.v2_2_2.core_nwb_base import (
|
||||
TimeSeries,
|
||||
TimeSeriesStartingTime,
|
||||
|
@ -116,7 +117,12 @@ class ElectricalSeries(TimeSeries):
|
|||
...,
|
||||
description="""DynamicTableRegion pointer to the electrodes that this time series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
channel_conversion: Optional[NDArray[Shape["* num_channels"], float]] = Field(
|
||||
|
@ -179,7 +185,12 @@ class SpikeEventSeries(ElectricalSeries):
|
|||
...,
|
||||
description="""DynamicTableRegion pointer to the electrodes that this time series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
channel_conversion: Optional[NDArray[Shape["* num_channels"], float]] = Field(
|
||||
|
@ -256,7 +267,12 @@ class FeatureExtraction(NWBDataInterface):
|
|||
...,
|
||||
description="""DynamicTableRegion pointer to the electrodes that this time series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
@ -287,6 +303,15 @@ class EventDetection(NWBDataInterface):
|
|||
description="""Timestamps of events, in seconds.""",
|
||||
json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_events"}]}}},
|
||||
)
|
||||
source_electricalseries: Union[ElectricalSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ElectricalSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class EventWaveform(NWBDataInterface):
|
||||
|
@ -298,7 +323,7 @@ class EventWaveform(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ecephys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpikeEventSeries]] = Field(
|
||||
value: Optional[List[SpikeEventSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpikeEventSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -313,7 +338,7 @@ class FilteredEphys(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ecephys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[ElectricalSeries]] = Field(
|
||||
value: Optional[List[ElectricalSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "ElectricalSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -328,7 +353,7 @@ class LFP(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ecephys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[ElectricalSeries]] = Field(
|
||||
value: Optional[List[ElectricalSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "ElectricalSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -352,6 +377,15 @@ class ElectrodeGroup(NWBContainer):
|
|||
position: Optional[ElectrodeGroupPosition] = Field(
|
||||
None, description="""stereotaxic or common framework coordinates"""
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class ElectrodeGroupPosition(ConfiguredBaseModel):
|
||||
|
@ -406,6 +440,15 @@ class ClusterWaveforms(NWBDataInterface):
|
|||
}
|
||||
},
|
||||
)
|
||||
clustering_interface: Union[Clustering, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Clustering"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class Clustering(NWBDataInterface):
|
||||
|
|
|
@ -127,7 +127,12 @@ class TimeIntervals(DynamicTable):
|
|||
None,
|
||||
description="""Index for tags.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
timeseries: Optional[TimeIntervalsTimeseries] = Field(
|
||||
|
@ -137,7 +142,12 @@ class TimeIntervals(DynamicTable):
|
|||
None,
|
||||
description="""Index for timeseries.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
@ -187,7 +197,7 @@ class TimeIntervalsTimeseries(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
|
|
@ -7,7 +7,6 @@ import sys
|
|||
from typing import Any, ClassVar, List, Literal, Dict, Optional, Union
|
||||
from pydantic import BaseModel, ConfigDict, Field, RootModel, field_validator
|
||||
import numpy as np
|
||||
from ...core.v2_2_2.core_nwb_epoch import TimeIntervals
|
||||
from ...core.v2_2_2.core_nwb_misc import Units
|
||||
from ...core.v2_2_2.core_nwb_device import Device
|
||||
from ...core.v2_2_2.core_nwb_ogen import OptogeneticStimulusSite
|
||||
|
@ -22,6 +21,7 @@ from ...core.v2_2_2.core_nwb_ecephys import ElectrodeGroup
|
|||
from numpydantic import NDArray, Shape
|
||||
from ...hdmf_common.v1_1_3.hdmf_common_table import DynamicTable, VectorData, VectorIndex
|
||||
from ...core.v2_2_2.core_nwb_icephys import IntracellularElectrode, SweepTable
|
||||
from ...core.v2_2_2.core_nwb_epoch import TimeIntervals
|
||||
|
||||
metamodel_version = "None"
|
||||
version = "2.2.2"
|
||||
|
@ -158,19 +158,9 @@ class NWBFile(NWBContainer):
|
|||
...,
|
||||
description="""Experimental metadata, including protocol, notes and description of hardware device(s). The metadata stored in this section should be used to describe the experiment. Metadata necessary for interpreting the data is stored with the data. General experimental metadata, including animal strain, experimental protocols, experimenter, devices, etc, are stored under 'general'. Core metadata (e.g., that required to interpret data fields) is stored with the data itself, and implicitly defined by the file specification (e.g., time is in seconds). The strategy used here for storing non-core metadata is to use free-form text fields, such as would appear in sentences or paragraphs from a Methods section. Metadata fields are text to enable them to be more general, for example to represent ranges instead of numerical values. Machine-readable metadata is stored as attributes to these free-form datasets. All entries in the below table are to be included when data is present. Unused groups (e.g., intracellular_ephys in an optophysiology experiment) should not be created unless there is data to store within them.""",
|
||||
)
|
||||
intervals: Optional[List[TimeIntervals]] = Field(
|
||||
intervals: Optional[NWBFileIntervals] = Field(
|
||||
None,
|
||||
description="""Experimental intervals, whether that be logically distinct sub-experiments having a particular scientific goal, trials (see trials subgroup) during an experiment, or epochs (see epochs subgroup) deriving from analysis of data.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"any_of": [
|
||||
{"range": "TimeIntervals"},
|
||||
{"range": "TimeIntervals"},
|
||||
{"range": "TimeIntervals"},
|
||||
{"range": "TimeIntervals"},
|
||||
]
|
||||
}
|
||||
},
|
||||
)
|
||||
units: Optional[Units] = Field(None, description="""Data about sorted spike units.""")
|
||||
|
||||
|
@ -544,6 +534,35 @@ class GeneralIntracellularEphys(ConfiguredBaseModel):
|
|||
)
|
||||
|
||||
|
||||
class NWBFileIntervals(ConfiguredBaseModel):
|
||||
"""
|
||||
Experimental intervals, whether that be logically distinct sub-experiments having a particular scientific goal, trials (see trials subgroup) during an experiment, or epochs (see epochs subgroup) deriving from analysis of data.
|
||||
"""
|
||||
|
||||
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "core.nwb.file"})
|
||||
|
||||
name: Literal["intervals"] = Field(
|
||||
"intervals",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"equals_string": "intervals", "ifabsent": "string(intervals)"}
|
||||
},
|
||||
)
|
||||
epochs: Optional[TimeIntervals] = Field(
|
||||
None,
|
||||
description="""Divisions in time marking experimental stages or sub-divisions of a single recording session.""",
|
||||
)
|
||||
trials: Optional[TimeIntervals] = Field(
|
||||
None, description="""Repeated experimental events that have a logical grouping."""
|
||||
)
|
||||
invalid_times: Optional[TimeIntervals] = Field(
|
||||
None, description="""Time intervals that should be removed from analysis."""
|
||||
)
|
||||
time_intervals: Optional[List[TimeIntervals]] = Field(
|
||||
None,
|
||||
description="""Optional additional table(s) for describing other experimental time intervals.""",
|
||||
)
|
||||
|
||||
|
||||
# Model rebuild
|
||||
# see https://pydantic-docs.helpmanual.io/usage/models/#rebuilding-a-model
|
||||
NWBFile.model_rebuild()
|
||||
|
@ -554,3 +573,4 @@ Subject.model_rebuild()
|
|||
GeneralExtracellularEphys.model_rebuild()
|
||||
ExtracellularEphysElectrodes.model_rebuild()
|
||||
GeneralIntracellularEphys.model_rebuild()
|
||||
NWBFileIntervals.model_rebuild()
|
||||
|
|
|
@ -11,6 +11,7 @@ from ...core.v2_2_2.core_nwb_base import (
|
|||
TimeSeriesSync,
|
||||
NWBContainer,
|
||||
)
|
||||
from ...core.v2_2_2.core_nwb_device import Device
|
||||
from typing import Any, ClassVar, List, Literal, Dict, Optional, Union, Annotated, Type, TypeVar
|
||||
from pydantic import (
|
||||
BaseModel,
|
||||
|
@ -117,6 +118,15 @@ class PatchClampSeries(TimeSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -164,7 +174,7 @@ class PatchClampSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion'.""",
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_times"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_times"], float]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_times"}]}}}
|
||||
)
|
||||
|
||||
|
@ -195,6 +205,15 @@ class CurrentClampSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -271,6 +290,15 @@ class IZeroClampSeries(CurrentClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -324,6 +352,15 @@ class CurrentClampStimulusSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -416,6 +453,15 @@ class VoltageClampSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -648,6 +694,15 @@ class VoltageClampStimulusSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -724,6 +779,15 @@ class IntracellularElectrode(NWBContainer):
|
|||
slice: Optional[str] = Field(
|
||||
None, description="""Information about slice used for recording."""
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class SweepTable(DynamicTable):
|
||||
|
@ -752,7 +816,12 @@ class SweepTable(DynamicTable):
|
|||
...,
|
||||
description="""Index for series.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
|
|
@ -75,7 +75,7 @@ class GrayscaleImage(Image):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -98,7 +98,7 @@ class RGBImage(Image):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -121,7 +121,7 @@ class RGBAImage(Image):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -208,7 +208,7 @@ class ImageSeriesExternalFile(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Each external image may contain one or more consecutive frames of the full ImageSeries. This attribute serves as an index to indicate which frames each file contains, to faciliate random access. The 'starting_frame' attribute, hence, contains a list of frame numbers within the full ImageSeries of the first frame of each file listed in the parent 'external_file' dataset. Zero-based indexing is used (hence, the first element will always be zero). For example, if the 'external_file' dataset has three paths to files and the first file has 5 frames, the second file has 10 frames, and the third file has 20 frames, then this attribute will have values [0, 5, 15]. If there is a single external file that holds all of the frames of the ImageSeries (and so there is a single element in the 'external_file' dataset), then this attribute should have value [0].""",
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_files"], str]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_files"], str]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_files"}]}}}
|
||||
)
|
||||
|
||||
|
@ -223,6 +223,15 @@ class ImageMaskSeries(ImageSeries):
|
|||
)
|
||||
|
||||
name: str = Field(...)
|
||||
masked_imageseries: Union[ImageSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImageSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
data: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* frame, * x, * y"], float],
|
||||
|
@ -360,6 +369,15 @@ class IndexSeries(TimeSeries):
|
|||
description="""Index of the frame in the referenced ImageSeries.""",
|
||||
json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_times"}]}}},
|
||||
)
|
||||
indexed_timeseries: Union[ImageSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImageSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
|
|
@ -167,7 +167,7 @@ class AbstractFeatureSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Since there can be different units for different features, store the units in 'feature_units'. The default value for this attribute is \"see 'feature_units'\".""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* num_times"], float],
|
||||
NDArray[Shape["* num_times, * num_features"], float],
|
||||
|
@ -287,6 +287,15 @@ class DecompositionSeries(TimeSeries):
|
|||
...,
|
||||
description="""Table for describing the bands that this series was generated from. There should be one row in this table for each band.""",
|
||||
)
|
||||
source_timeseries: Optional[Union[TimeSeries, str]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "TimeSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -334,7 +343,7 @@ class DecompositionSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion'.""",
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_times, * num_channels, * num_bands"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_times, * num_channels, * num_bands"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
|
@ -428,7 +437,12 @@ class Units(DynamicTable):
|
|||
None,
|
||||
description="""Index into the spike_times dataset.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
spike_times: Optional[UnitsSpikeTimes] = Field(
|
||||
|
@ -438,7 +452,12 @@ class Units(DynamicTable):
|
|||
None,
|
||||
description="""Index into the obs_intervals dataset.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
obs_intervals: Optional[NDArray[Shape["* num_intervals, 2 start_end"], float]] = Field(
|
||||
|
@ -459,14 +478,24 @@ class Units(DynamicTable):
|
|||
None,
|
||||
description="""Index into electrodes.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
electrodes: Named[Optional[DynamicTableRegion]] = Field(
|
||||
None,
|
||||
description="""Electrode that each spike unit came from, specified using a DynamicTableRegion.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
electrode_group: Optional[List[ElectrodeGroup]] = Field(
|
||||
|
@ -524,7 +553,7 @@ class UnitsSpikeTimes(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
|
|
@ -14,6 +14,7 @@ from ...core.v2_2_2.core_nwb_base import (
|
|||
TimeSeriesSync,
|
||||
NWBContainer,
|
||||
)
|
||||
from ...core.v2_2_2.core_nwb_device import Device
|
||||
|
||||
metamodel_version = "None"
|
||||
version = "2.2.2"
|
||||
|
@ -81,6 +82,15 @@ class OptogeneticSeries(TimeSeries):
|
|||
description="""Applied power for optogenetic stimulus, in watts.""",
|
||||
json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_times"}]}}},
|
||||
)
|
||||
site: Union[OptogeneticStimulusSite, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "OptogeneticStimulusSite"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -129,6 +139,15 @@ class OptogeneticStimulusSite(NWBContainer):
|
|||
...,
|
||||
description="""Location of the stimulation site. Specify the area, layer, comments on estimation of area/layer, stereotaxic coordinates if in vivo, etc. Use standard atlas names for anatomical regions when possible.""",
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
# Model rebuild
|
||||
|
|
|
@ -16,8 +16,9 @@ from pydantic import (
|
|||
ValidationInfo,
|
||||
BeforeValidator,
|
||||
)
|
||||
from numpydantic import NDArray, Shape
|
||||
from ...hdmf_common.v1_1_3.hdmf_common_table import DynamicTableRegion, DynamicTable
|
||||
from ...core.v2_2_2.core_nwb_device import Device
|
||||
from numpydantic import NDArray, Shape
|
||||
from ...core.v2_2_2.core_nwb_base import (
|
||||
TimeSeriesStartingTime,
|
||||
TimeSeriesSync,
|
||||
|
@ -117,6 +118,15 @@ class TwoPhotonSeries(ImageSeries):
|
|||
field_of_view: Optional[
|
||||
Union[NDArray[Shape["2 width_height"], float], NDArray[Shape["3 width_height"], float]]
|
||||
] = Field(None, description="""Width, height and depth of image, or imaged area, in meters.""")
|
||||
imaging_plane: Union[ImagingPlane, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImagingPlane"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
data: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* frame, * x, * y"], float],
|
||||
|
@ -185,7 +195,12 @@ class RoiResponseSeries(TimeSeries):
|
|||
...,
|
||||
description="""DynamicTableRegion referencing into an ROITable containing information on the ROIs stored in this timeseries.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
|
@ -229,7 +244,7 @@ class DfOverF(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[RoiResponseSeries]] = Field(
|
||||
value: Optional[List[RoiResponseSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "RoiResponseSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -244,7 +259,7 @@ class Fluorescence(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[RoiResponseSeries]] = Field(
|
||||
value: Optional[List[RoiResponseSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "RoiResponseSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -259,7 +274,7 @@ class ImageSegmentation(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[DynamicTable]] = Field(
|
||||
value: Optional[List[DynamicTable]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "DynamicTable"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -274,10 +289,146 @@ class ImagingPlane(NWBContainer):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[NWBContainer]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "NWBContainer"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
description: Optional[str] = Field(None, description="""Description of the imaging plane.""")
|
||||
excitation_lambda: float = Field(..., description="""Excitation wavelength, in nm.""")
|
||||
imaging_rate: float = Field(..., description="""Rate that images are acquired, in Hz.""")
|
||||
indicator: str = Field(..., description="""Calcium indicator.""")
|
||||
location: str = Field(
|
||||
...,
|
||||
description="""Location of the imaging plane. Specify the area, layer, comments on estimation of area/layer, stereotaxic coordinates if in vivo, etc. Use standard atlas names for anatomical regions when possible.""",
|
||||
)
|
||||
manifold: Optional[ImagingPlaneManifold] = Field(
|
||||
None,
|
||||
description="""DEPRECATED Physical position of each pixel. 'xyz' represents the position of the pixel relative to the defined coordinate space. Deprecated in favor of origin_coords and grid_spacing.""",
|
||||
)
|
||||
origin_coords: Optional[ImagingPlaneOriginCoords] = Field(
|
||||
None,
|
||||
description="""Physical location of the first element of the imaging plane (0, 0) for 2-D data or (0, 0, 0) for 3-D data. See also reference_frame for what the physical location is relative to (e.g., bregma).""",
|
||||
)
|
||||
grid_spacing: Optional[ImagingPlaneGridSpacing] = Field(
|
||||
None,
|
||||
description="""Space between pixels in (x, y) or voxels in (x, y, z) directions, in the specified unit. Assumes imaging plane is a regular grid. See also reference_frame to interpret the grid.""",
|
||||
)
|
||||
reference_frame: Optional[str] = Field(
|
||||
None,
|
||||
description="""Describes reference frame of origin_coords and grid_spacing. For example, this can be a text description of the anatomical location and orientation of the grid defined by origin_coords and grid_spacing or the vectors needed to transform or rotate the grid to a common anatomical axis (e.g., AP/DV/ML). This field is necessary to interpret origin_coords and grid_spacing. If origin_coords and grid_spacing are not present, then this field is not required. For example, if the microscope takes 10 x 10 x 2 images, where the first value of the data matrix (index (0, 0, 0)) corresponds to (-1.2, -0.6, -2) mm relative to bregma, the spacing between pixels is 0.2 mm in x, 0.2 mm in y and 0.5 mm in z, and larger numbers in x means more anterior, larger numbers in y means more rightward, and larger numbers in z means more ventral, then enter the following -- origin_coords = (-1.2, -0.6, -2) grid_spacing = (0.2, 0.2, 0.5) reference_frame = \"Origin coordinates are relative to bregma. First dimension corresponds to anterior-posterior axis (larger index = more anterior). Second dimension corresponds to medial-lateral axis (larger index = more rightward). Third dimension corresponds to dorsal-ventral axis (larger index = more ventral).\"""",
|
||||
)
|
||||
optical_channel: List[OpticalChannel] = Field(
|
||||
..., description="""An optical channel used to record from an imaging plane."""
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class ImagingPlaneManifold(ConfiguredBaseModel):
|
||||
"""
|
||||
DEPRECATED Physical position of each pixel. 'xyz' represents the position of the pixel relative to the defined coordinate space. Deprecated in favor of origin_coords and grid_spacing.
|
||||
"""
|
||||
|
||||
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "core.nwb.ophys"})
|
||||
|
||||
name: Literal["manifold"] = Field(
|
||||
"manifold",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"equals_string": "manifold", "ifabsent": "string(manifold)"}
|
||||
},
|
||||
)
|
||||
conversion: Optional[float] = Field(
|
||||
None,
|
||||
description="""Scalar to multiply each element in data to convert it to the specified 'unit'. If the data are stored in acquisition system units or other units that require a conversion to be interpretable, multiply the data by 'conversion' to convert the data to the specified 'unit'. e.g. if the data acquisition system stores values in this object as pixels from x = -500 to 499, y = -500 to 499 that correspond to a 2 m x 2 m range, then the 'conversion' multiplier to get from raw data acquisition pixel units to meters is 2/1000.""",
|
||||
)
|
||||
unit: Optional[str] = Field(
|
||||
None,
|
||||
description="""Base unit of measurement for working with the data. The default value is 'meters'.""",
|
||||
)
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* height, * width, 3 x_y_z"], float],
|
||||
NDArray[Shape["* height, * width, * depth, 3 x_y_z"], float],
|
||||
]
|
||||
] = Field(None)
|
||||
|
||||
|
||||
class ImagingPlaneOriginCoords(ConfiguredBaseModel):
|
||||
"""
|
||||
Physical location of the first element of the imaging plane (0, 0) for 2-D data or (0, 0, 0) for 3-D data. See also reference_frame for what the physical location is relative to (e.g., bregma).
|
||||
"""
|
||||
|
||||
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "core.nwb.ophys"})
|
||||
|
||||
name: Literal["origin_coords"] = Field(
|
||||
"origin_coords",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"equals_string": "origin_coords", "ifabsent": "string(origin_coords)"}
|
||||
},
|
||||
)
|
||||
unit: Optional[str] = Field(
|
||||
None, description="""Measurement units for origin_coords. The default value is 'meters'."""
|
||||
)
|
||||
value: Optional[NDArray[Shape["2 x_y, 3 x_y_z"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"array": {
|
||||
"dimensions": [
|
||||
{"alias": "x_y", "exact_cardinality": 2},
|
||||
{"alias": "x_y_z", "exact_cardinality": 3},
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class ImagingPlaneGridSpacing(ConfiguredBaseModel):
|
||||
"""
|
||||
Space between pixels in (x, y) or voxels in (x, y, z) directions, in the specified unit. Assumes imaging plane is a regular grid. See also reference_frame to interpret the grid.
|
||||
"""
|
||||
|
||||
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "core.nwb.ophys"})
|
||||
|
||||
name: Literal["grid_spacing"] = Field(
|
||||
"grid_spacing",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"equals_string": "grid_spacing", "ifabsent": "string(grid_spacing)"}
|
||||
},
|
||||
)
|
||||
unit: Optional[str] = Field(
|
||||
None, description="""Measurement units for grid_spacing. The default value is 'meters'."""
|
||||
)
|
||||
value: Optional[NDArray[Shape["2 x_y, 3 x_y_z"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"array": {
|
||||
"dimensions": [
|
||||
{"alias": "x_y", "exact_cardinality": 2},
|
||||
{"alias": "x_y_z", "exact_cardinality": 3},
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class OpticalChannel(NWBContainer):
|
||||
"""
|
||||
An optical channel used to record from an imaging plane.
|
||||
"""
|
||||
|
||||
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "core.nwb.ophys"})
|
||||
|
||||
name: str = Field(...)
|
||||
description: str = Field(..., description="""Description or other notes about the channel.""")
|
||||
emission_lambda: float = Field(..., description="""Emission wavelength for channel, in nm.""")
|
||||
|
||||
|
||||
class MotionCorrection(NWBDataInterface):
|
||||
|
@ -289,7 +440,7 @@ class MotionCorrection(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[NWBDataInterface]] = Field(
|
||||
value: Optional[List[NWBDataInterface]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "NWBDataInterface"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -303,4 +454,8 @@ DfOverF.model_rebuild()
|
|||
Fluorescence.model_rebuild()
|
||||
ImageSegmentation.model_rebuild()
|
||||
ImagingPlane.model_rebuild()
|
||||
ImagingPlaneManifold.model_rebuild()
|
||||
ImagingPlaneOriginCoords.model_rebuild()
|
||||
ImagingPlaneGridSpacing.model_rebuild()
|
||||
OpticalChannel.model_rebuild()
|
||||
MotionCorrection.model_rebuild()
|
||||
|
|
|
@ -135,7 +135,7 @@ class ImagingRetinotopyAxis1PhaseMap(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Unit that axis data is stored in (e.g., degrees)."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -167,7 +167,7 @@ class ImagingRetinotopyAxis1PowerMap(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Unit that axis data is stored in (e.g., degrees)."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -199,7 +199,7 @@ class ImagingRetinotopyAxis2PhaseMap(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Unit that axis data is stored in (e.g., degrees)."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -231,7 +231,7 @@ class ImagingRetinotopyAxis2PowerMap(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Unit that axis data is stored in (e.g., degrees)."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -268,7 +268,7 @@ class ImagingRetinotopyFocalDepthImage(ConfiguredBaseModel):
|
|||
format: Optional[str] = Field(
|
||||
None, description="""Format of image. Right now only 'raw' is supported."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], int]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], int]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -294,7 +294,7 @@ class ImagingRetinotopySignMap(ConfiguredBaseModel):
|
|||
description="""Number of rows and columns in the image. NOTE: row, column representation is equivalent to height, width.""",
|
||||
)
|
||||
field_of_view: Optional[float] = Field(None, description="""Size of viewing area, in meters.""")
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -330,7 +330,7 @@ class ImagingRetinotopyVasculatureImage(ConfiguredBaseModel):
|
|||
format: Optional[str] = Field(
|
||||
None, description="""Format of image. Right now only 'raw' is supported."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], int]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], int]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
|
|
@ -52,6 +52,10 @@ from ...core.v2_2_2.core_nwb_ophys import (
|
|||
Fluorescence,
|
||||
ImageSegmentation,
|
||||
ImagingPlane,
|
||||
ImagingPlaneManifold,
|
||||
ImagingPlaneOriginCoords,
|
||||
ImagingPlaneGridSpacing,
|
||||
OpticalChannel,
|
||||
MotionCorrection,
|
||||
)
|
||||
from ...core.v2_2_2.core_nwb_device import Device
|
||||
|
@ -132,6 +136,7 @@ from ...core.v2_2_2.core_nwb_file import (
|
|||
GeneralExtracellularEphys,
|
||||
ExtracellularEphysElectrodes,
|
||||
GeneralIntracellularEphys,
|
||||
NWBFileIntervals,
|
||||
)
|
||||
from ...core.v2_2_2.core_nwb_epoch import TimeIntervals, TimeIntervalsTimeseries
|
||||
|
||||
|
|
|
@ -87,7 +87,7 @@ class Image(NWBData):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -189,7 +189,7 @@ class TimeSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion'.""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* num_times"], Any],
|
||||
NDArray[Shape["* num_times, * num_dim2"], Any],
|
||||
|
@ -241,7 +241,7 @@ class ProcessingModule(NWBContainer):
|
|||
{"from_schema": "core.nwb.base", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[Union[DynamicTable, NWBDataInterface]]] = Field(
|
||||
value: Optional[List[Union[DynamicTable, NWBDataInterface]]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"any_of": [{"range": "NWBDataInterface"}, {"range": "DynamicTable"}]}
|
||||
|
|
|
@ -131,7 +131,7 @@ class SpatialSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. The default value is 'meters'. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion'.""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* num_times"], float],
|
||||
NDArray[Shape["* num_times, * num_features"], float],
|
||||
|
@ -148,7 +148,7 @@ class BehavioralEpochs(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[IntervalSeries]] = Field(
|
||||
value: Optional[List[IntervalSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "IntervalSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -163,7 +163,7 @@ class BehavioralEvents(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[TimeSeries]] = Field(
|
||||
value: Optional[List[TimeSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "TimeSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -178,7 +178,7 @@ class BehavioralTimeSeries(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[TimeSeries]] = Field(
|
||||
value: Optional[List[TimeSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "TimeSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -193,7 +193,7 @@ class PupilTracking(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[TimeSeries]] = Field(
|
||||
value: Optional[List[TimeSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "TimeSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -208,7 +208,7 @@ class EyeTracking(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpatialSeries]] = Field(
|
||||
value: Optional[List[SpatialSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpatialSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -223,7 +223,7 @@ class CompassDirection(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpatialSeries]] = Field(
|
||||
value: Optional[List[SpatialSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpatialSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -238,7 +238,7 @@ class Position(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpatialSeries]] = Field(
|
||||
value: Optional[List[SpatialSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpatialSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
|
|
@ -16,6 +16,7 @@ from pydantic import (
|
|||
ValidationInfo,
|
||||
BeforeValidator,
|
||||
)
|
||||
from ...core.v2_2_4.core_nwb_device import Device
|
||||
from ...core.v2_2_4.core_nwb_base import (
|
||||
TimeSeries,
|
||||
TimeSeriesStartingTime,
|
||||
|
@ -116,7 +117,12 @@ class ElectricalSeries(TimeSeries):
|
|||
...,
|
||||
description="""DynamicTableRegion pointer to the electrodes that this time series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
channel_conversion: Optional[NDArray[Shape["* num_channels"], float]] = Field(
|
||||
|
@ -179,7 +185,12 @@ class SpikeEventSeries(ElectricalSeries):
|
|||
...,
|
||||
description="""DynamicTableRegion pointer to the electrodes that this time series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
channel_conversion: Optional[NDArray[Shape["* num_channels"], float]] = Field(
|
||||
|
@ -256,7 +267,12 @@ class FeatureExtraction(NWBDataInterface):
|
|||
...,
|
||||
description="""DynamicTableRegion pointer to the electrodes that this time series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
@ -287,6 +303,15 @@ class EventDetection(NWBDataInterface):
|
|||
description="""Timestamps of events, in seconds.""",
|
||||
json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_events"}]}}},
|
||||
)
|
||||
source_electricalseries: Union[ElectricalSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ElectricalSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class EventWaveform(NWBDataInterface):
|
||||
|
@ -298,7 +323,7 @@ class EventWaveform(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ecephys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpikeEventSeries]] = Field(
|
||||
value: Optional[List[SpikeEventSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpikeEventSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -313,7 +338,7 @@ class FilteredEphys(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ecephys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[ElectricalSeries]] = Field(
|
||||
value: Optional[List[ElectricalSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "ElectricalSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -328,7 +353,7 @@ class LFP(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ecephys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[ElectricalSeries]] = Field(
|
||||
value: Optional[List[ElectricalSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "ElectricalSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -352,6 +377,15 @@ class ElectrodeGroup(NWBContainer):
|
|||
position: Optional[ElectrodeGroupPosition] = Field(
|
||||
None, description="""stereotaxic or common framework coordinates"""
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class ElectrodeGroupPosition(ConfiguredBaseModel):
|
||||
|
@ -406,6 +440,15 @@ class ClusterWaveforms(NWBDataInterface):
|
|||
}
|
||||
},
|
||||
)
|
||||
clustering_interface: Union[Clustering, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Clustering"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class Clustering(NWBDataInterface):
|
||||
|
|
|
@ -127,7 +127,12 @@ class TimeIntervals(DynamicTable):
|
|||
None,
|
||||
description="""Index for tags.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
timeseries: Optional[TimeIntervalsTimeseries] = Field(
|
||||
|
@ -137,7 +142,12 @@ class TimeIntervals(DynamicTable):
|
|||
None,
|
||||
description="""Index for timeseries.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
@ -187,7 +197,7 @@ class TimeIntervalsTimeseries(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
|
|
@ -7,7 +7,6 @@ import sys
|
|||
from typing import Any, ClassVar, List, Literal, Dict, Optional, Union
|
||||
from pydantic import BaseModel, ConfigDict, Field, RootModel, field_validator
|
||||
import numpy as np
|
||||
from ...core.v2_2_4.core_nwb_epoch import TimeIntervals
|
||||
from ...core.v2_2_4.core_nwb_misc import Units
|
||||
from ...core.v2_2_4.core_nwb_device import Device
|
||||
from ...core.v2_2_4.core_nwb_ogen import OptogeneticStimulusSite
|
||||
|
@ -16,6 +15,7 @@ from ...core.v2_2_4.core_nwb_ecephys import ElectrodeGroup
|
|||
from numpydantic import NDArray, Shape
|
||||
from ...hdmf_common.v1_1_3.hdmf_common_table import DynamicTable, VectorData, VectorIndex
|
||||
from ...core.v2_2_4.core_nwb_icephys import IntracellularElectrode, SweepTable
|
||||
from ...core.v2_2_4.core_nwb_epoch import TimeIntervals
|
||||
from ...core.v2_2_4.core_nwb_base import (
|
||||
NWBData,
|
||||
NWBContainer,
|
||||
|
@ -174,19 +174,9 @@ class NWBFile(NWBContainer):
|
|||
...,
|
||||
description="""Experimental metadata, including protocol, notes and description of hardware device(s). The metadata stored in this section should be used to describe the experiment. Metadata necessary for interpreting the data is stored with the data. General experimental metadata, including animal strain, experimental protocols, experimenter, devices, etc, are stored under 'general'. Core metadata (e.g., that required to interpret data fields) is stored with the data itself, and implicitly defined by the file specification (e.g., time is in seconds). The strategy used here for storing non-core metadata is to use free-form text fields, such as would appear in sentences or paragraphs from a Methods section. Metadata fields are text to enable them to be more general, for example to represent ranges instead of numerical values. Machine-readable metadata is stored as attributes to these free-form datasets. All entries in the below table are to be included when data is present. Unused groups (e.g., intracellular_ephys in an optophysiology experiment) should not be created unless there is data to store within them.""",
|
||||
)
|
||||
intervals: Optional[List[TimeIntervals]] = Field(
|
||||
intervals: Optional[NWBFileIntervals] = Field(
|
||||
None,
|
||||
description="""Experimental intervals, whether that be logically distinct sub-experiments having a particular scientific goal, trials (see trials subgroup) during an experiment, or epochs (see epochs subgroup) deriving from analysis of data.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"any_of": [
|
||||
{"range": "TimeIntervals"},
|
||||
{"range": "TimeIntervals"},
|
||||
{"range": "TimeIntervals"},
|
||||
{"range": "TimeIntervals"},
|
||||
]
|
||||
}
|
||||
},
|
||||
)
|
||||
units: Optional[Units] = Field(None, description="""Data about sorted spike units.""")
|
||||
|
||||
|
@ -522,6 +512,35 @@ class GeneralIntracellularEphys(ConfiguredBaseModel):
|
|||
)
|
||||
|
||||
|
||||
class NWBFileIntervals(ConfiguredBaseModel):
|
||||
"""
|
||||
Experimental intervals, whether that be logically distinct sub-experiments having a particular scientific goal, trials (see trials subgroup) during an experiment, or epochs (see epochs subgroup) deriving from analysis of data.
|
||||
"""
|
||||
|
||||
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "core.nwb.file"})
|
||||
|
||||
name: Literal["intervals"] = Field(
|
||||
"intervals",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"equals_string": "intervals", "ifabsent": "string(intervals)"}
|
||||
},
|
||||
)
|
||||
epochs: Optional[TimeIntervals] = Field(
|
||||
None,
|
||||
description="""Divisions in time marking experimental stages or sub-divisions of a single recording session.""",
|
||||
)
|
||||
trials: Optional[TimeIntervals] = Field(
|
||||
None, description="""Repeated experimental events that have a logical grouping."""
|
||||
)
|
||||
invalid_times: Optional[TimeIntervals] = Field(
|
||||
None, description="""Time intervals that should be removed from analysis."""
|
||||
)
|
||||
time_intervals: Optional[List[TimeIntervals]] = Field(
|
||||
None,
|
||||
description="""Optional additional table(s) for describing other experimental time intervals.""",
|
||||
)
|
||||
|
||||
|
||||
class LabMetaData(NWBContainer):
|
||||
"""
|
||||
Lab-specific meta-data.
|
||||
|
@ -579,5 +598,6 @@ GeneralSourceScript.model_rebuild()
|
|||
GeneralExtracellularEphys.model_rebuild()
|
||||
ExtracellularEphysElectrodes.model_rebuild()
|
||||
GeneralIntracellularEphys.model_rebuild()
|
||||
NWBFileIntervals.model_rebuild()
|
||||
LabMetaData.model_rebuild()
|
||||
Subject.model_rebuild()
|
||||
|
|
|
@ -11,6 +11,7 @@ from ...core.v2_2_4.core_nwb_base import (
|
|||
TimeSeriesSync,
|
||||
NWBContainer,
|
||||
)
|
||||
from ...core.v2_2_4.core_nwb_device import Device
|
||||
from typing import Any, ClassVar, List, Literal, Dict, Optional, Union, Annotated, Type, TypeVar
|
||||
from pydantic import (
|
||||
BaseModel,
|
||||
|
@ -117,6 +118,15 @@ class PatchClampSeries(TimeSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -164,7 +174,7 @@ class PatchClampSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion'.""",
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_times"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_times"], float]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_times"}]}}}
|
||||
)
|
||||
|
||||
|
@ -195,6 +205,15 @@ class CurrentClampSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -271,6 +290,15 @@ class IZeroClampSeries(CurrentClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -324,6 +352,15 @@ class CurrentClampStimulusSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -416,6 +453,15 @@ class VoltageClampSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -648,6 +694,15 @@ class VoltageClampStimulusSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -724,6 +779,15 @@ class IntracellularElectrode(NWBContainer):
|
|||
slice: Optional[str] = Field(
|
||||
None, description="""Information about slice used for recording."""
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class SweepTable(DynamicTable):
|
||||
|
@ -752,7 +816,12 @@ class SweepTable(DynamicTable):
|
|||
...,
|
||||
description="""Index for series.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
|
|
@ -75,7 +75,7 @@ class GrayscaleImage(Image):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -98,7 +98,7 @@ class RGBImage(Image):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -121,7 +121,7 @@ class RGBAImage(Image):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -208,7 +208,7 @@ class ImageSeriesExternalFile(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Each external image may contain one or more consecutive frames of the full ImageSeries. This attribute serves as an index to indicate which frames each file contains, to faciliate random access. The 'starting_frame' attribute, hence, contains a list of frame numbers within the full ImageSeries of the first frame of each file listed in the parent 'external_file' dataset. Zero-based indexing is used (hence, the first element will always be zero). For example, if the 'external_file' dataset has three paths to files and the first file has 5 frames, the second file has 10 frames, and the third file has 20 frames, then this attribute will have values [0, 5, 15]. If there is a single external file that holds all of the frames of the ImageSeries (and so there is a single element in the 'external_file' dataset), then this attribute should have value [0].""",
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_files"], str]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_files"], str]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_files"}]}}}
|
||||
)
|
||||
|
||||
|
@ -223,6 +223,15 @@ class ImageMaskSeries(ImageSeries):
|
|||
)
|
||||
|
||||
name: str = Field(...)
|
||||
masked_imageseries: Union[ImageSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImageSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
data: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* frame, * x, * y"], float],
|
||||
|
@ -360,6 +369,15 @@ class IndexSeries(TimeSeries):
|
|||
description="""Index of the frame in the referenced ImageSeries.""",
|
||||
json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_times"}]}}},
|
||||
)
|
||||
indexed_timeseries: Union[ImageSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImageSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
|
|
@ -167,7 +167,7 @@ class AbstractFeatureSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Since there can be different units for different features, store the units in 'feature_units'. The default value for this attribute is \"see 'feature_units'\".""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* num_times"], float],
|
||||
NDArray[Shape["* num_times, * num_features"], float],
|
||||
|
@ -287,6 +287,15 @@ class DecompositionSeries(TimeSeries):
|
|||
...,
|
||||
description="""Table for describing the bands that this series was generated from. There should be one row in this table for each band.""",
|
||||
)
|
||||
source_timeseries: Optional[Union[TimeSeries, str]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "TimeSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -334,7 +343,7 @@ class DecompositionSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion'.""",
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_times, * num_channels, * num_bands"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_times, * num_channels, * num_bands"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
|
@ -428,7 +437,12 @@ class Units(DynamicTable):
|
|||
None,
|
||||
description="""Index into the spike_times dataset.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
spike_times: Optional[UnitsSpikeTimes] = Field(
|
||||
|
@ -438,7 +452,12 @@ class Units(DynamicTable):
|
|||
None,
|
||||
description="""Index into the obs_intervals dataset.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
obs_intervals: Optional[NDArray[Shape["* num_intervals, 2 start_end"], float]] = Field(
|
||||
|
@ -459,14 +478,24 @@ class Units(DynamicTable):
|
|||
None,
|
||||
description="""Index into electrodes.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
electrodes: Named[Optional[DynamicTableRegion]] = Field(
|
||||
None,
|
||||
description="""Electrode that each spike unit came from, specified using a DynamicTableRegion.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
electrode_group: Optional[List[ElectrodeGroup]] = Field(
|
||||
|
@ -524,7 +553,7 @@ class UnitsSpikeTimes(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
|
|
@ -14,6 +14,7 @@ from ...core.v2_2_4.core_nwb_base import (
|
|||
TimeSeriesSync,
|
||||
NWBContainer,
|
||||
)
|
||||
from ...core.v2_2_4.core_nwb_device import Device
|
||||
|
||||
metamodel_version = "None"
|
||||
version = "2.2.4"
|
||||
|
@ -81,6 +82,15 @@ class OptogeneticSeries(TimeSeries):
|
|||
description="""Applied power for optogenetic stimulus, in watts.""",
|
||||
json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_times"}]}}},
|
||||
)
|
||||
site: Union[OptogeneticStimulusSite, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "OptogeneticStimulusSite"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -129,6 +139,15 @@ class OptogeneticStimulusSite(NWBContainer):
|
|||
...,
|
||||
description="""Location of the stimulation site. Specify the area, layer, comments on estimation of area/layer, stereotaxic coordinates if in vivo, etc. Use standard atlas names for anatomical regions when possible.""",
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
# Model rebuild
|
||||
|
|
|
@ -21,8 +21,8 @@ from ...hdmf_common.v1_1_3.hdmf_common_table import (
|
|||
VectorIndex,
|
||||
VectorData,
|
||||
)
|
||||
from ...core.v2_2_4.core_nwb_device import Device
|
||||
from numpydantic import NDArray, Shape
|
||||
from ...core.v2_2_4.core_nwb_image import ImageSeries, ImageSeriesExternalFile
|
||||
from ...core.v2_2_4.core_nwb_base import (
|
||||
TimeSeriesStartingTime,
|
||||
TimeSeriesSync,
|
||||
|
@ -30,6 +30,7 @@ from ...core.v2_2_4.core_nwb_base import (
|
|||
NWBDataInterface,
|
||||
NWBContainer,
|
||||
)
|
||||
from ...core.v2_2_4.core_nwb_image import ImageSeries, ImageSeriesExternalFile
|
||||
|
||||
metamodel_version = "None"
|
||||
version = "2.2.4"
|
||||
|
@ -122,6 +123,15 @@ class TwoPhotonSeries(ImageSeries):
|
|||
field_of_view: Optional[
|
||||
Union[NDArray[Shape["2 width_height"], float], NDArray[Shape["3 width_height"], float]]
|
||||
] = Field(None, description="""Width, height and depth of image, or imaged area, in meters.""")
|
||||
imaging_plane: Union[ImagingPlane, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImagingPlane"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
data: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* frame, * x, * y"], float],
|
||||
|
@ -190,7 +200,12 @@ class RoiResponseSeries(TimeSeries):
|
|||
...,
|
||||
description="""DynamicTableRegion referencing into an ROITable containing information on the ROIs stored in this timeseries.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
|
@ -234,7 +249,7 @@ class DfOverF(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[RoiResponseSeries]] = Field(
|
||||
value: Optional[List[RoiResponseSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "RoiResponseSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -249,7 +264,7 @@ class Fluorescence(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[RoiResponseSeries]] = Field(
|
||||
value: Optional[List[RoiResponseSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "RoiResponseSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -264,7 +279,7 @@ class ImageSegmentation(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[PlaneSegmentation]] = Field(
|
||||
value: Optional[List[PlaneSegmentation]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "PlaneSegmentation"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -288,7 +303,12 @@ class PlaneSegmentation(DynamicTable):
|
|||
None,
|
||||
description="""Index into pixel_mask.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
pixel_mask: Optional[PlaneSegmentationPixelMask] = Field(
|
||||
|
@ -299,7 +319,12 @@ class PlaneSegmentation(DynamicTable):
|
|||
None,
|
||||
description="""Index into voxel_mask.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
voxel_mask: Optional[PlaneSegmentationVoxelMask] = Field(
|
||||
|
@ -311,6 +336,15 @@ class PlaneSegmentation(DynamicTable):
|
|||
description="""Image stacks that the segmentation masks apply to.""",
|
||||
json_schema_extra={"linkml_meta": {"any_of": [{"range": "ImageSeries"}]}},
|
||||
)
|
||||
imaging_plane: Union[ImagingPlane, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImagingPlane"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
None,
|
||||
description="""The names of the columns in this table. This should be used to specify an order to the columns.""",
|
||||
|
@ -347,7 +381,7 @@ class PlaneSegmentationImageMask(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
@ -376,7 +410,7 @@ class PlaneSegmentationPixelMask(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
@ -406,7 +440,7 @@ class PlaneSegmentationVoxelMask(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
@ -425,10 +459,137 @@ class ImagingPlane(NWBContainer):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[OpticalChannel]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "OpticalChannel"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
description: Optional[str] = Field(None, description="""Description of the imaging plane.""")
|
||||
excitation_lambda: float = Field(..., description="""Excitation wavelength, in nm.""")
|
||||
imaging_rate: Optional[float] = Field(
|
||||
None,
|
||||
description="""Rate that images are acquired, in Hz. If the corresponding TimeSeries is present, the rate should be stored there instead.""",
|
||||
)
|
||||
indicator: str = Field(..., description="""Calcium indicator.""")
|
||||
location: str = Field(
|
||||
...,
|
||||
description="""Location of the imaging plane. Specify the area, layer, comments on estimation of area/layer, stereotaxic coordinates if in vivo, etc. Use standard atlas names for anatomical regions when possible.""",
|
||||
)
|
||||
manifold: Optional[ImagingPlaneManifold] = Field(
|
||||
None,
|
||||
description="""DEPRECATED Physical position of each pixel. 'xyz' represents the position of the pixel relative to the defined coordinate space. Deprecated in favor of origin_coords and grid_spacing.""",
|
||||
)
|
||||
origin_coords: Optional[ImagingPlaneOriginCoords] = Field(
|
||||
None,
|
||||
description="""Physical location of the first element of the imaging plane (0, 0) for 2-D data or (0, 0, 0) for 3-D data. See also reference_frame for what the physical location is relative to (e.g., bregma).""",
|
||||
)
|
||||
grid_spacing: Optional[ImagingPlaneGridSpacing] = Field(
|
||||
None,
|
||||
description="""Space between pixels in (x, y) or voxels in (x, y, z) directions, in the specified unit. Assumes imaging plane is a regular grid. See also reference_frame to interpret the grid.""",
|
||||
)
|
||||
reference_frame: Optional[str] = Field(
|
||||
None,
|
||||
description="""Describes reference frame of origin_coords and grid_spacing. For example, this can be a text description of the anatomical location and orientation of the grid defined by origin_coords and grid_spacing or the vectors needed to transform or rotate the grid to a common anatomical axis (e.g., AP/DV/ML). This field is necessary to interpret origin_coords and grid_spacing. If origin_coords and grid_spacing are not present, then this field is not required. For example, if the microscope takes 10 x 10 x 2 images, where the first value of the data matrix (index (0, 0, 0)) corresponds to (-1.2, -0.6, -2) mm relative to bregma, the spacing between pixels is 0.2 mm in x, 0.2 mm in y and 0.5 mm in z, and larger numbers in x means more anterior, larger numbers in y means more rightward, and larger numbers in z means more ventral, then enter the following -- origin_coords = (-1.2, -0.6, -2) grid_spacing = (0.2, 0.2, 0.5) reference_frame = \"Origin coordinates are relative to bregma. First dimension corresponds to anterior-posterior axis (larger index = more anterior). Second dimension corresponds to medial-lateral axis (larger index = more rightward). Third dimension corresponds to dorsal-ventral axis (larger index = more ventral).\"""",
|
||||
)
|
||||
optical_channel: List[OpticalChannel] = Field(
|
||||
..., description="""An optical channel used to record from an imaging plane."""
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class ImagingPlaneManifold(ConfiguredBaseModel):
|
||||
"""
|
||||
DEPRECATED Physical position of each pixel. 'xyz' represents the position of the pixel relative to the defined coordinate space. Deprecated in favor of origin_coords and grid_spacing.
|
||||
"""
|
||||
|
||||
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "core.nwb.ophys"})
|
||||
|
||||
name: Literal["manifold"] = Field(
|
||||
"manifold",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"equals_string": "manifold", "ifabsent": "string(manifold)"}
|
||||
},
|
||||
)
|
||||
conversion: Optional[float] = Field(
|
||||
None,
|
||||
description="""Scalar to multiply each element in data to convert it to the specified 'unit'. If the data are stored in acquisition system units or other units that require a conversion to be interpretable, multiply the data by 'conversion' to convert the data to the specified 'unit'. e.g. if the data acquisition system stores values in this object as pixels from x = -500 to 499, y = -500 to 499 that correspond to a 2 m x 2 m range, then the 'conversion' multiplier to get from raw data acquisition pixel units to meters is 2/1000.""",
|
||||
)
|
||||
unit: Optional[str] = Field(
|
||||
None,
|
||||
description="""Base unit of measurement for working with the data. The default value is 'meters'.""",
|
||||
)
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* height, * width, 3 x_y_z"], float],
|
||||
NDArray[Shape["* height, * width, * depth, 3 x_y_z"], float],
|
||||
]
|
||||
] = Field(None)
|
||||
|
||||
|
||||
class ImagingPlaneOriginCoords(ConfiguredBaseModel):
|
||||
"""
|
||||
Physical location of the first element of the imaging plane (0, 0) for 2-D data or (0, 0, 0) for 3-D data. See also reference_frame for what the physical location is relative to (e.g., bregma).
|
||||
"""
|
||||
|
||||
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "core.nwb.ophys"})
|
||||
|
||||
name: Literal["origin_coords"] = Field(
|
||||
"origin_coords",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"equals_string": "origin_coords", "ifabsent": "string(origin_coords)"}
|
||||
},
|
||||
)
|
||||
unit: Optional[str] = Field(
|
||||
None, description="""Measurement units for origin_coords. The default value is 'meters'."""
|
||||
)
|
||||
value: Optional[NDArray[Shape["2 x_y, 3 x_y_z"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"array": {
|
||||
"dimensions": [
|
||||
{"alias": "x_y", "exact_cardinality": 2},
|
||||
{"alias": "x_y_z", "exact_cardinality": 3},
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class ImagingPlaneGridSpacing(ConfiguredBaseModel):
|
||||
"""
|
||||
Space between pixels in (x, y) or voxels in (x, y, z) directions, in the specified unit. Assumes imaging plane is a regular grid. See also reference_frame to interpret the grid.
|
||||
"""
|
||||
|
||||
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "core.nwb.ophys"})
|
||||
|
||||
name: Literal["grid_spacing"] = Field(
|
||||
"grid_spacing",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"equals_string": "grid_spacing", "ifabsent": "string(grid_spacing)"}
|
||||
},
|
||||
)
|
||||
unit: Optional[str] = Field(
|
||||
None, description="""Measurement units for grid_spacing. The default value is 'meters'."""
|
||||
)
|
||||
value: Optional[NDArray[Shape["2 x_y, 3 x_y_z"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"array": {
|
||||
"dimensions": [
|
||||
{"alias": "x_y", "exact_cardinality": 2},
|
||||
{"alias": "x_y_z", "exact_cardinality": 3},
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class OpticalChannel(NWBContainer):
|
||||
|
@ -454,7 +615,7 @@ class MotionCorrection(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[CorrectedImageStack]] = Field(
|
||||
value: Optional[List[CorrectedImageStack]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "CorrectedImageStack"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -477,6 +638,15 @@ class CorrectedImageStack(NWBDataInterface):
|
|||
...,
|
||||
description="""Stores the x,y delta necessary to align each frame to the common coordinates, for example, to align each frame to a reference image.""",
|
||||
)
|
||||
original: Union[ImageSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImageSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
# Model rebuild
|
||||
|
@ -491,6 +661,9 @@ PlaneSegmentationImageMask.model_rebuild()
|
|||
PlaneSegmentationPixelMask.model_rebuild()
|
||||
PlaneSegmentationVoxelMask.model_rebuild()
|
||||
ImagingPlane.model_rebuild()
|
||||
ImagingPlaneManifold.model_rebuild()
|
||||
ImagingPlaneOriginCoords.model_rebuild()
|
||||
ImagingPlaneGridSpacing.model_rebuild()
|
||||
OpticalChannel.model_rebuild()
|
||||
MotionCorrection.model_rebuild()
|
||||
CorrectedImageStack.model_rebuild()
|
||||
|
|
|
@ -135,7 +135,7 @@ class ImagingRetinotopyAxis1PhaseMap(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Unit that axis data is stored in (e.g., degrees)."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -167,7 +167,7 @@ class ImagingRetinotopyAxis1PowerMap(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Unit that axis data is stored in (e.g., degrees)."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -199,7 +199,7 @@ class ImagingRetinotopyAxis2PhaseMap(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Unit that axis data is stored in (e.g., degrees)."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -231,7 +231,7 @@ class ImagingRetinotopyAxis2PowerMap(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Unit that axis data is stored in (e.g., degrees)."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -268,7 +268,7 @@ class ImagingRetinotopyFocalDepthImage(ConfiguredBaseModel):
|
|||
format: Optional[str] = Field(
|
||||
None, description="""Format of image. Right now only 'raw' is supported."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], int]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], int]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -294,7 +294,7 @@ class ImagingRetinotopySignMap(ConfiguredBaseModel):
|
|||
description="""Number of rows and columns in the image. NOTE: row, column representation is equivalent to height, width.""",
|
||||
)
|
||||
field_of_view: Optional[float] = Field(None, description="""Size of viewing area, in meters.""")
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -330,7 +330,7 @@ class ImagingRetinotopyVasculatureImage(ConfiguredBaseModel):
|
|||
format: Optional[str] = Field(
|
||||
None, description="""Format of image. Right now only 'raw' is supported."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], int]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], int]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
|
|
@ -56,6 +56,9 @@ from ...core.v2_2_4.core_nwb_ophys import (
|
|||
PlaneSegmentationPixelMask,
|
||||
PlaneSegmentationVoxelMask,
|
||||
ImagingPlane,
|
||||
ImagingPlaneManifold,
|
||||
ImagingPlaneOriginCoords,
|
||||
ImagingPlaneGridSpacing,
|
||||
OpticalChannel,
|
||||
MotionCorrection,
|
||||
CorrectedImageStack,
|
||||
|
@ -138,6 +141,7 @@ from ...core.v2_2_4.core_nwb_file import (
|
|||
GeneralExtracellularEphys,
|
||||
ExtracellularEphysElectrodes,
|
||||
GeneralIntracellularEphys,
|
||||
NWBFileIntervals,
|
||||
LabMetaData,
|
||||
Subject,
|
||||
)
|
||||
|
|
|
@ -87,7 +87,7 @@ class Image(NWBData):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -189,7 +189,7 @@ class TimeSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion'.""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* num_times"], Any],
|
||||
NDArray[Shape["* num_times, * num_dim2"], Any],
|
||||
|
@ -241,7 +241,7 @@ class ProcessingModule(NWBContainer):
|
|||
{"from_schema": "core.nwb.base", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[Union[DynamicTable, NWBDataInterface]]] = Field(
|
||||
value: Optional[List[Union[DynamicTable, NWBDataInterface]]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"any_of": [{"range": "NWBDataInterface"}, {"range": "DynamicTable"}]}
|
||||
|
|
|
@ -131,7 +131,7 @@ class SpatialSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. The default value is 'meters'. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion'.""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* num_times"], float],
|
||||
NDArray[Shape["* num_times, * num_features"], float],
|
||||
|
@ -148,7 +148,7 @@ class BehavioralEpochs(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[IntervalSeries]] = Field(
|
||||
value: Optional[List[IntervalSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "IntervalSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -163,7 +163,7 @@ class BehavioralEvents(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[TimeSeries]] = Field(
|
||||
value: Optional[List[TimeSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "TimeSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -178,7 +178,7 @@ class BehavioralTimeSeries(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[TimeSeries]] = Field(
|
||||
value: Optional[List[TimeSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "TimeSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -193,7 +193,7 @@ class PupilTracking(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[TimeSeries]] = Field(
|
||||
value: Optional[List[TimeSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "TimeSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -208,7 +208,7 @@ class EyeTracking(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpatialSeries]] = Field(
|
||||
value: Optional[List[SpatialSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpatialSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -223,7 +223,7 @@ class CompassDirection(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpatialSeries]] = Field(
|
||||
value: Optional[List[SpatialSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpatialSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -238,7 +238,7 @@ class Position(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpatialSeries]] = Field(
|
||||
value: Optional[List[SpatialSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpatialSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
|
|
@ -16,6 +16,7 @@ from pydantic import (
|
|||
ValidationInfo,
|
||||
BeforeValidator,
|
||||
)
|
||||
from ...core.v2_2_5.core_nwb_device import Device
|
||||
from ...core.v2_2_5.core_nwb_base import (
|
||||
TimeSeries,
|
||||
TimeSeriesStartingTime,
|
||||
|
@ -116,7 +117,12 @@ class ElectricalSeries(TimeSeries):
|
|||
...,
|
||||
description="""DynamicTableRegion pointer to the electrodes that this time series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
channel_conversion: Optional[NDArray[Shape["* num_channels"], float]] = Field(
|
||||
|
@ -179,7 +185,12 @@ class SpikeEventSeries(ElectricalSeries):
|
|||
...,
|
||||
description="""DynamicTableRegion pointer to the electrodes that this time series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
channel_conversion: Optional[NDArray[Shape["* num_channels"], float]] = Field(
|
||||
|
@ -256,7 +267,12 @@ class FeatureExtraction(NWBDataInterface):
|
|||
...,
|
||||
description="""DynamicTableRegion pointer to the electrodes that this time series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
@ -287,6 +303,15 @@ class EventDetection(NWBDataInterface):
|
|||
description="""Timestamps of events, in seconds.""",
|
||||
json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_events"}]}}},
|
||||
)
|
||||
source_electricalseries: Union[ElectricalSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ElectricalSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class EventWaveform(NWBDataInterface):
|
||||
|
@ -298,7 +323,7 @@ class EventWaveform(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ecephys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpikeEventSeries]] = Field(
|
||||
value: Optional[List[SpikeEventSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpikeEventSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -313,7 +338,7 @@ class FilteredEphys(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ecephys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[ElectricalSeries]] = Field(
|
||||
value: Optional[List[ElectricalSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "ElectricalSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -328,7 +353,7 @@ class LFP(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ecephys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[ElectricalSeries]] = Field(
|
||||
value: Optional[List[ElectricalSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "ElectricalSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -352,6 +377,15 @@ class ElectrodeGroup(NWBContainer):
|
|||
position: Optional[ElectrodeGroupPosition] = Field(
|
||||
None, description="""stereotaxic or common framework coordinates"""
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class ElectrodeGroupPosition(ConfiguredBaseModel):
|
||||
|
@ -406,6 +440,15 @@ class ClusterWaveforms(NWBDataInterface):
|
|||
}
|
||||
},
|
||||
)
|
||||
clustering_interface: Union[Clustering, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Clustering"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class Clustering(NWBDataInterface):
|
||||
|
|
|
@ -127,7 +127,12 @@ class TimeIntervals(DynamicTable):
|
|||
None,
|
||||
description="""Index for tags.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
timeseries: Optional[TimeIntervalsTimeseries] = Field(
|
||||
|
@ -137,7 +142,12 @@ class TimeIntervals(DynamicTable):
|
|||
None,
|
||||
description="""Index for timeseries.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
@ -187,7 +197,7 @@ class TimeIntervalsTimeseries(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
|
|
@ -7,7 +7,6 @@ import sys
|
|||
from typing import Any, ClassVar, List, Literal, Dict, Optional, Union
|
||||
from pydantic import BaseModel, ConfigDict, Field, RootModel, field_validator
|
||||
import numpy as np
|
||||
from ...core.v2_2_5.core_nwb_epoch import TimeIntervals
|
||||
from ...core.v2_2_5.core_nwb_misc import Units
|
||||
from ...core.v2_2_5.core_nwb_device import Device
|
||||
from ...core.v2_2_5.core_nwb_ogen import OptogeneticStimulusSite
|
||||
|
@ -16,6 +15,7 @@ from ...core.v2_2_5.core_nwb_ecephys import ElectrodeGroup
|
|||
from numpydantic import NDArray, Shape
|
||||
from ...hdmf_common.v1_1_3.hdmf_common_table import DynamicTable, VectorData, VectorIndex
|
||||
from ...core.v2_2_5.core_nwb_icephys import IntracellularElectrode, SweepTable
|
||||
from ...core.v2_2_5.core_nwb_epoch import TimeIntervals
|
||||
from ...core.v2_2_5.core_nwb_base import (
|
||||
NWBData,
|
||||
NWBContainer,
|
||||
|
@ -174,19 +174,9 @@ class NWBFile(NWBContainer):
|
|||
...,
|
||||
description="""Experimental metadata, including protocol, notes and description of hardware device(s). The metadata stored in this section should be used to describe the experiment. Metadata necessary for interpreting the data is stored with the data. General experimental metadata, including animal strain, experimental protocols, experimenter, devices, etc, are stored under 'general'. Core metadata (e.g., that required to interpret data fields) is stored with the data itself, and implicitly defined by the file specification (e.g., time is in seconds). The strategy used here for storing non-core metadata is to use free-form text fields, such as would appear in sentences or paragraphs from a Methods section. Metadata fields are text to enable them to be more general, for example to represent ranges instead of numerical values. Machine-readable metadata is stored as attributes to these free-form datasets. All entries in the below table are to be included when data is present. Unused groups (e.g., intracellular_ephys in an optophysiology experiment) should not be created unless there is data to store within them.""",
|
||||
)
|
||||
intervals: Optional[List[TimeIntervals]] = Field(
|
||||
intervals: Optional[NWBFileIntervals] = Field(
|
||||
None,
|
||||
description="""Experimental intervals, whether that be logically distinct sub-experiments having a particular scientific goal, trials (see trials subgroup) during an experiment, or epochs (see epochs subgroup) deriving from analysis of data.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"any_of": [
|
||||
{"range": "TimeIntervals"},
|
||||
{"range": "TimeIntervals"},
|
||||
{"range": "TimeIntervals"},
|
||||
{"range": "TimeIntervals"},
|
||||
]
|
||||
}
|
||||
},
|
||||
)
|
||||
units: Optional[Units] = Field(None, description="""Data about sorted spike units.""")
|
||||
|
||||
|
@ -522,6 +512,35 @@ class GeneralIntracellularEphys(ConfiguredBaseModel):
|
|||
)
|
||||
|
||||
|
||||
class NWBFileIntervals(ConfiguredBaseModel):
|
||||
"""
|
||||
Experimental intervals, whether that be logically distinct sub-experiments having a particular scientific goal, trials (see trials subgroup) during an experiment, or epochs (see epochs subgroup) deriving from analysis of data.
|
||||
"""
|
||||
|
||||
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "core.nwb.file"})
|
||||
|
||||
name: Literal["intervals"] = Field(
|
||||
"intervals",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"equals_string": "intervals", "ifabsent": "string(intervals)"}
|
||||
},
|
||||
)
|
||||
epochs: Optional[TimeIntervals] = Field(
|
||||
None,
|
||||
description="""Divisions in time marking experimental stages or sub-divisions of a single recording session.""",
|
||||
)
|
||||
trials: Optional[TimeIntervals] = Field(
|
||||
None, description="""Repeated experimental events that have a logical grouping."""
|
||||
)
|
||||
invalid_times: Optional[TimeIntervals] = Field(
|
||||
None, description="""Time intervals that should be removed from analysis."""
|
||||
)
|
||||
time_intervals: Optional[List[TimeIntervals]] = Field(
|
||||
None,
|
||||
description="""Optional additional table(s) for describing other experimental time intervals.""",
|
||||
)
|
||||
|
||||
|
||||
class LabMetaData(NWBContainer):
|
||||
"""
|
||||
Lab-specific meta-data.
|
||||
|
@ -579,5 +598,6 @@ GeneralSourceScript.model_rebuild()
|
|||
GeneralExtracellularEphys.model_rebuild()
|
||||
ExtracellularEphysElectrodes.model_rebuild()
|
||||
GeneralIntracellularEphys.model_rebuild()
|
||||
NWBFileIntervals.model_rebuild()
|
||||
LabMetaData.model_rebuild()
|
||||
Subject.model_rebuild()
|
||||
|
|
|
@ -11,6 +11,7 @@ from ...core.v2_2_5.core_nwb_base import (
|
|||
TimeSeriesSync,
|
||||
NWBContainer,
|
||||
)
|
||||
from ...core.v2_2_5.core_nwb_device import Device
|
||||
from typing import Any, ClassVar, List, Literal, Dict, Optional, Union, Annotated, Type, TypeVar
|
||||
from pydantic import (
|
||||
BaseModel,
|
||||
|
@ -117,6 +118,15 @@ class PatchClampSeries(TimeSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -164,7 +174,7 @@ class PatchClampSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion'.""",
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_times"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_times"], float]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_times"}]}}}
|
||||
)
|
||||
|
||||
|
@ -195,6 +205,15 @@ class CurrentClampSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -271,6 +290,15 @@ class IZeroClampSeries(CurrentClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -324,6 +352,15 @@ class CurrentClampStimulusSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -416,6 +453,15 @@ class VoltageClampSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -648,6 +694,15 @@ class VoltageClampStimulusSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -724,6 +779,15 @@ class IntracellularElectrode(NWBContainer):
|
|||
slice: Optional[str] = Field(
|
||||
None, description="""Information about slice used for recording."""
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class SweepTable(DynamicTable):
|
||||
|
@ -752,7 +816,12 @@ class SweepTable(DynamicTable):
|
|||
...,
|
||||
description="""Index for series.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
|
|
@ -75,7 +75,7 @@ class GrayscaleImage(Image):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -98,7 +98,7 @@ class RGBImage(Image):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -121,7 +121,7 @@ class RGBAImage(Image):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -208,7 +208,7 @@ class ImageSeriesExternalFile(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Each external image may contain one or more consecutive frames of the full ImageSeries. This attribute serves as an index to indicate which frames each file contains, to faciliate random access. The 'starting_frame' attribute, hence, contains a list of frame numbers within the full ImageSeries of the first frame of each file listed in the parent 'external_file' dataset. Zero-based indexing is used (hence, the first element will always be zero). For example, if the 'external_file' dataset has three paths to files and the first file has 5 frames, the second file has 10 frames, and the third file has 20 frames, then this attribute will have values [0, 5, 15]. If there is a single external file that holds all of the frames of the ImageSeries (and so there is a single element in the 'external_file' dataset), then this attribute should have value [0].""",
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_files"], str]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_files"], str]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_files"}]}}}
|
||||
)
|
||||
|
||||
|
@ -223,6 +223,15 @@ class ImageMaskSeries(ImageSeries):
|
|||
)
|
||||
|
||||
name: str = Field(...)
|
||||
masked_imageseries: Union[ImageSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImageSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
data: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* frame, * x, * y"], float],
|
||||
|
@ -360,6 +369,15 @@ class IndexSeries(TimeSeries):
|
|||
description="""Index of the frame in the referenced ImageSeries.""",
|
||||
json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_times"}]}}},
|
||||
)
|
||||
indexed_timeseries: Union[ImageSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImageSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
|
|
@ -167,7 +167,7 @@ class AbstractFeatureSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Since there can be different units for different features, store the units in 'feature_units'. The default value for this attribute is \"see 'feature_units'\".""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* num_times"], float],
|
||||
NDArray[Shape["* num_times, * num_features"], float],
|
||||
|
@ -287,6 +287,15 @@ class DecompositionSeries(TimeSeries):
|
|||
...,
|
||||
description="""Table for describing the bands that this series was generated from. There should be one row in this table for each band.""",
|
||||
)
|
||||
source_timeseries: Optional[Union[TimeSeries, str]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "TimeSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -334,7 +343,7 @@ class DecompositionSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion'.""",
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_times, * num_channels, * num_bands"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_times, * num_channels, * num_bands"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
|
@ -428,7 +437,12 @@ class Units(DynamicTable):
|
|||
None,
|
||||
description="""Index into the spike_times dataset.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
spike_times: Optional[UnitsSpikeTimes] = Field(
|
||||
|
@ -438,7 +452,12 @@ class Units(DynamicTable):
|
|||
None,
|
||||
description="""Index into the obs_intervals dataset.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
obs_intervals: Optional[NDArray[Shape["* num_intervals, 2 start_end"], float]] = Field(
|
||||
|
@ -459,14 +478,24 @@ class Units(DynamicTable):
|
|||
None,
|
||||
description="""Index into electrodes.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
electrodes: Named[Optional[DynamicTableRegion]] = Field(
|
||||
None,
|
||||
description="""Electrode that each spike unit came from, specified using a DynamicTableRegion.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
electrode_group: Optional[List[ElectrodeGroup]] = Field(
|
||||
|
@ -524,7 +553,7 @@ class UnitsSpikeTimes(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
|
|
@ -14,6 +14,7 @@ from ...core.v2_2_5.core_nwb_base import (
|
|||
TimeSeriesSync,
|
||||
NWBContainer,
|
||||
)
|
||||
from ...core.v2_2_5.core_nwb_device import Device
|
||||
|
||||
metamodel_version = "None"
|
||||
version = "2.2.5"
|
||||
|
@ -81,6 +82,15 @@ class OptogeneticSeries(TimeSeries):
|
|||
description="""Applied power for optogenetic stimulus, in watts.""",
|
||||
json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_times"}]}}},
|
||||
)
|
||||
site: Union[OptogeneticStimulusSite, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "OptogeneticStimulusSite"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -129,6 +139,15 @@ class OptogeneticStimulusSite(NWBContainer):
|
|||
...,
|
||||
description="""Location of the stimulation site. Specify the area, layer, comments on estimation of area/layer, stereotaxic coordinates if in vivo, etc. Use standard atlas names for anatomical regions when possible.""",
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
# Model rebuild
|
||||
|
|
|
@ -21,8 +21,8 @@ from ...hdmf_common.v1_1_3.hdmf_common_table import (
|
|||
VectorIndex,
|
||||
VectorData,
|
||||
)
|
||||
from ...core.v2_2_5.core_nwb_device import Device
|
||||
from numpydantic import NDArray, Shape
|
||||
from ...core.v2_2_5.core_nwb_image import ImageSeries, ImageSeriesExternalFile
|
||||
from ...core.v2_2_5.core_nwb_base import (
|
||||
TimeSeriesStartingTime,
|
||||
TimeSeriesSync,
|
||||
|
@ -30,6 +30,7 @@ from ...core.v2_2_5.core_nwb_base import (
|
|||
NWBDataInterface,
|
||||
NWBContainer,
|
||||
)
|
||||
from ...core.v2_2_5.core_nwb_image import ImageSeries, ImageSeriesExternalFile
|
||||
|
||||
metamodel_version = "None"
|
||||
version = "2.2.5"
|
||||
|
@ -124,6 +125,15 @@ class TwoPhotonSeries(ImageSeries):
|
|||
NDArray[Shape["2 width_height"], float], NDArray[Shape["3 width_height_depth"], float]
|
||||
]
|
||||
] = Field(None, description="""Width, height and depth of image, or imaged area, in meters.""")
|
||||
imaging_plane: Union[ImagingPlane, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImagingPlane"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
data: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* frame, * x, * y"], float],
|
||||
|
@ -192,7 +202,12 @@ class RoiResponseSeries(TimeSeries):
|
|||
...,
|
||||
description="""DynamicTableRegion referencing into an ROITable containing information on the ROIs stored in this timeseries.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
|
@ -236,7 +251,7 @@ class DfOverF(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[RoiResponseSeries]] = Field(
|
||||
value: Optional[List[RoiResponseSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "RoiResponseSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -251,7 +266,7 @@ class Fluorescence(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[RoiResponseSeries]] = Field(
|
||||
value: Optional[List[RoiResponseSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "RoiResponseSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -266,7 +281,7 @@ class ImageSegmentation(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[PlaneSegmentation]] = Field(
|
||||
value: Optional[List[PlaneSegmentation]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "PlaneSegmentation"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -290,7 +305,12 @@ class PlaneSegmentation(DynamicTable):
|
|||
None,
|
||||
description="""Index into pixel_mask.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
pixel_mask: Optional[PlaneSegmentationPixelMask] = Field(
|
||||
|
@ -301,7 +321,12 @@ class PlaneSegmentation(DynamicTable):
|
|||
None,
|
||||
description="""Index into voxel_mask.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
voxel_mask: Optional[PlaneSegmentationVoxelMask] = Field(
|
||||
|
@ -313,6 +338,15 @@ class PlaneSegmentation(DynamicTable):
|
|||
description="""Image stacks that the segmentation masks apply to.""",
|
||||
json_schema_extra={"linkml_meta": {"any_of": [{"range": "ImageSeries"}]}},
|
||||
)
|
||||
imaging_plane: Union[ImagingPlane, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImagingPlane"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
None,
|
||||
description="""The names of the columns in this table. This should be used to specify an order to the columns.""",
|
||||
|
@ -349,7 +383,7 @@ class PlaneSegmentationImageMask(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
@ -378,7 +412,7 @@ class PlaneSegmentationPixelMask(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
@ -408,7 +442,7 @@ class PlaneSegmentationVoxelMask(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
@ -427,10 +461,117 @@ class ImagingPlane(NWBContainer):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[OpticalChannel]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "OpticalChannel"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
description: Optional[str] = Field(None, description="""Description of the imaging plane.""")
|
||||
excitation_lambda: float = Field(..., description="""Excitation wavelength, in nm.""")
|
||||
imaging_rate: Optional[float] = Field(
|
||||
None,
|
||||
description="""Rate that images are acquired, in Hz. If the corresponding TimeSeries is present, the rate should be stored there instead.""",
|
||||
)
|
||||
indicator: str = Field(..., description="""Calcium indicator.""")
|
||||
location: str = Field(
|
||||
...,
|
||||
description="""Location of the imaging plane. Specify the area, layer, comments on estimation of area/layer, stereotaxic coordinates if in vivo, etc. Use standard atlas names for anatomical regions when possible.""",
|
||||
)
|
||||
manifold: Optional[ImagingPlaneManifold] = Field(
|
||||
None,
|
||||
description="""DEPRECATED Physical position of each pixel. 'xyz' represents the position of the pixel relative to the defined coordinate space. Deprecated in favor of origin_coords and grid_spacing.""",
|
||||
)
|
||||
origin_coords: Optional[ImagingPlaneOriginCoords] = Field(
|
||||
None,
|
||||
description="""Physical location of the first element of the imaging plane (0, 0) for 2-D data or (0, 0, 0) for 3-D data. See also reference_frame for what the physical location is relative to (e.g., bregma).""",
|
||||
)
|
||||
grid_spacing: Optional[ImagingPlaneGridSpacing] = Field(
|
||||
None,
|
||||
description="""Space between pixels in (x, y) or voxels in (x, y, z) directions, in the specified unit. Assumes imaging plane is a regular grid. See also reference_frame to interpret the grid.""",
|
||||
)
|
||||
reference_frame: Optional[str] = Field(
|
||||
None,
|
||||
description="""Describes reference frame of origin_coords and grid_spacing. For example, this can be a text description of the anatomical location and orientation of the grid defined by origin_coords and grid_spacing or the vectors needed to transform or rotate the grid to a common anatomical axis (e.g., AP/DV/ML). This field is necessary to interpret origin_coords and grid_spacing. If origin_coords and grid_spacing are not present, then this field is not required. For example, if the microscope takes 10 x 10 x 2 images, where the first value of the data matrix (index (0, 0, 0)) corresponds to (-1.2, -0.6, -2) mm relative to bregma, the spacing between pixels is 0.2 mm in x, 0.2 mm in y and 0.5 mm in z, and larger numbers in x means more anterior, larger numbers in y means more rightward, and larger numbers in z means more ventral, then enter the following -- origin_coords = (-1.2, -0.6, -2) grid_spacing = (0.2, 0.2, 0.5) reference_frame = \"Origin coordinates are relative to bregma. First dimension corresponds to anterior-posterior axis (larger index = more anterior). Second dimension corresponds to medial-lateral axis (larger index = more rightward). Third dimension corresponds to dorsal-ventral axis (larger index = more ventral).\"""",
|
||||
)
|
||||
optical_channel: List[OpticalChannel] = Field(
|
||||
..., description="""An optical channel used to record from an imaging plane."""
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class ImagingPlaneManifold(ConfiguredBaseModel):
|
||||
"""
|
||||
DEPRECATED Physical position of each pixel. 'xyz' represents the position of the pixel relative to the defined coordinate space. Deprecated in favor of origin_coords and grid_spacing.
|
||||
"""
|
||||
|
||||
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "core.nwb.ophys"})
|
||||
|
||||
name: Literal["manifold"] = Field(
|
||||
"manifold",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"equals_string": "manifold", "ifabsent": "string(manifold)"}
|
||||
},
|
||||
)
|
||||
conversion: Optional[float] = Field(
|
||||
None,
|
||||
description="""Scalar to multiply each element in data to convert it to the specified 'unit'. If the data are stored in acquisition system units or other units that require a conversion to be interpretable, multiply the data by 'conversion' to convert the data to the specified 'unit'. e.g. if the data acquisition system stores values in this object as pixels from x = -500 to 499, y = -500 to 499 that correspond to a 2 m x 2 m range, then the 'conversion' multiplier to get from raw data acquisition pixel units to meters is 2/1000.""",
|
||||
)
|
||||
unit: Optional[str] = Field(
|
||||
None,
|
||||
description="""Base unit of measurement for working with the data. The default value is 'meters'.""",
|
||||
)
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* height, * width, 3 x_y_z"], float],
|
||||
NDArray[Shape["* height, * width, * depth, 3 x_y_z"], float],
|
||||
]
|
||||
] = Field(None)
|
||||
|
||||
|
||||
class ImagingPlaneOriginCoords(ConfiguredBaseModel):
|
||||
"""
|
||||
Physical location of the first element of the imaging plane (0, 0) for 2-D data or (0, 0, 0) for 3-D data. See also reference_frame for what the physical location is relative to (e.g., bregma).
|
||||
"""
|
||||
|
||||
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "core.nwb.ophys"})
|
||||
|
||||
name: Literal["origin_coords"] = Field(
|
||||
"origin_coords",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"equals_string": "origin_coords", "ifabsent": "string(origin_coords)"}
|
||||
},
|
||||
)
|
||||
unit: Optional[str] = Field(
|
||||
None, description="""Measurement units for origin_coords. The default value is 'meters'."""
|
||||
)
|
||||
value: Optional[Union[NDArray[Shape["2 x_y"], float], NDArray[Shape["3 x_y_z"], float]]] = (
|
||||
Field(None)
|
||||
)
|
||||
|
||||
|
||||
class ImagingPlaneGridSpacing(ConfiguredBaseModel):
|
||||
"""
|
||||
Space between pixels in (x, y) or voxels in (x, y, z) directions, in the specified unit. Assumes imaging plane is a regular grid. See also reference_frame to interpret the grid.
|
||||
"""
|
||||
|
||||
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "core.nwb.ophys"})
|
||||
|
||||
name: Literal["grid_spacing"] = Field(
|
||||
"grid_spacing",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"equals_string": "grid_spacing", "ifabsent": "string(grid_spacing)"}
|
||||
},
|
||||
)
|
||||
unit: Optional[str] = Field(
|
||||
None, description="""Measurement units for grid_spacing. The default value is 'meters'."""
|
||||
)
|
||||
value: Optional[Union[NDArray[Shape["2 x_y"], float], NDArray[Shape["3 x_y_z"], float]]] = (
|
||||
Field(None)
|
||||
)
|
||||
|
||||
|
||||
class OpticalChannel(NWBContainer):
|
||||
|
@ -456,7 +597,7 @@ class MotionCorrection(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[CorrectedImageStack]] = Field(
|
||||
value: Optional[List[CorrectedImageStack]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "CorrectedImageStack"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -479,6 +620,15 @@ class CorrectedImageStack(NWBDataInterface):
|
|||
...,
|
||||
description="""Stores the x,y delta necessary to align each frame to the common coordinates, for example, to align each frame to a reference image.""",
|
||||
)
|
||||
original: Union[ImageSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImageSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
# Model rebuild
|
||||
|
@ -493,6 +643,9 @@ PlaneSegmentationImageMask.model_rebuild()
|
|||
PlaneSegmentationPixelMask.model_rebuild()
|
||||
PlaneSegmentationVoxelMask.model_rebuild()
|
||||
ImagingPlane.model_rebuild()
|
||||
ImagingPlaneManifold.model_rebuild()
|
||||
ImagingPlaneOriginCoords.model_rebuild()
|
||||
ImagingPlaneGridSpacing.model_rebuild()
|
||||
OpticalChannel.model_rebuild()
|
||||
MotionCorrection.model_rebuild()
|
||||
CorrectedImageStack.model_rebuild()
|
||||
|
|
|
@ -135,7 +135,7 @@ class ImagingRetinotopyAxis1PhaseMap(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Unit that axis data is stored in (e.g., degrees)."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -167,7 +167,7 @@ class ImagingRetinotopyAxis1PowerMap(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Unit that axis data is stored in (e.g., degrees)."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -199,7 +199,7 @@ class ImagingRetinotopyAxis2PhaseMap(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Unit that axis data is stored in (e.g., degrees)."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -231,7 +231,7 @@ class ImagingRetinotopyAxis2PowerMap(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Unit that axis data is stored in (e.g., degrees)."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -268,7 +268,7 @@ class ImagingRetinotopyFocalDepthImage(ConfiguredBaseModel):
|
|||
format: Optional[str] = Field(
|
||||
None, description="""Format of image. Right now only 'raw' is supported."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], int]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], int]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -294,7 +294,7 @@ class ImagingRetinotopySignMap(ConfiguredBaseModel):
|
|||
description="""Number of rows and columns in the image. NOTE: row, column representation is equivalent to height, width.""",
|
||||
)
|
||||
field_of_view: Optional[float] = Field(None, description="""Size of viewing area, in meters.""")
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -330,7 +330,7 @@ class ImagingRetinotopyVasculatureImage(ConfiguredBaseModel):
|
|||
format: Optional[str] = Field(
|
||||
None, description="""Format of image. Right now only 'raw' is supported."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], int]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], int]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
|
|
@ -56,6 +56,9 @@ from ...core.v2_2_5.core_nwb_ophys import (
|
|||
PlaneSegmentationPixelMask,
|
||||
PlaneSegmentationVoxelMask,
|
||||
ImagingPlane,
|
||||
ImagingPlaneManifold,
|
||||
ImagingPlaneOriginCoords,
|
||||
ImagingPlaneGridSpacing,
|
||||
OpticalChannel,
|
||||
MotionCorrection,
|
||||
CorrectedImageStack,
|
||||
|
@ -138,6 +141,7 @@ from ...core.v2_2_5.core_nwb_file import (
|
|||
GeneralExtracellularEphys,
|
||||
ExtracellularEphysElectrodes,
|
||||
GeneralIntracellularEphys,
|
||||
NWBFileIntervals,
|
||||
LabMetaData,
|
||||
Subject,
|
||||
)
|
||||
|
|
|
@ -92,7 +92,7 @@ class Image(NWBData):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -198,7 +198,7 @@ class TimeSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Optionally describe the continuity of the data. Can be \"continuous\", \"instantaneous\", or \"step\". For example, a voltage trace would be \"continuous\", because samples are recorded from a continuous process. An array of lick times would be \"instantaneous\", because the data represents distinct moments in time. Times of image presentations would be \"step\" because the picture remains the same until the next timepoint. This field is optional, but is useful in providing information about the underlying data. It may inform the way this data is interpreted, the way it is visualized, and what analysis methods are applicable.""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* num_times"], Any],
|
||||
NDArray[Shape["* num_times, * num_dim2"], Any],
|
||||
|
@ -250,7 +250,7 @@ class ProcessingModule(NWBContainer):
|
|||
{"from_schema": "core.nwb.base", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[Union[DynamicTable, NWBDataInterface]]] = Field(
|
||||
value: Optional[List[Union[DynamicTable, NWBDataInterface]]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"any_of": [{"range": "NWBDataInterface"}, {"range": "DynamicTable"}]}
|
||||
|
|
|
@ -131,7 +131,7 @@ class SpatialSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. The default value is 'meters'. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion'.""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* num_times"], float],
|
||||
NDArray[Shape["* num_times, * num_features"], float],
|
||||
|
@ -148,7 +148,7 @@ class BehavioralEpochs(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[IntervalSeries]] = Field(
|
||||
value: Optional[List[IntervalSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "IntervalSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -163,7 +163,7 @@ class BehavioralEvents(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[TimeSeries]] = Field(
|
||||
value: Optional[List[TimeSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "TimeSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -178,7 +178,7 @@ class BehavioralTimeSeries(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[TimeSeries]] = Field(
|
||||
value: Optional[List[TimeSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "TimeSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -193,7 +193,7 @@ class PupilTracking(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[TimeSeries]] = Field(
|
||||
value: Optional[List[TimeSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "TimeSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -208,7 +208,7 @@ class EyeTracking(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpatialSeries]] = Field(
|
||||
value: Optional[List[SpatialSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpatialSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -223,7 +223,7 @@ class CompassDirection(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpatialSeries]] = Field(
|
||||
value: Optional[List[SpatialSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpatialSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -238,7 +238,7 @@ class Position(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpatialSeries]] = Field(
|
||||
value: Optional[List[SpatialSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpatialSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
|
|
@ -16,6 +16,7 @@ from pydantic import (
|
|||
ValidationInfo,
|
||||
BeforeValidator,
|
||||
)
|
||||
from ...core.v2_3_0.core_nwb_device import Device
|
||||
from ...core.v2_3_0.core_nwb_base import (
|
||||
TimeSeries,
|
||||
TimeSeriesStartingTime,
|
||||
|
@ -120,7 +121,12 @@ class ElectricalSeries(TimeSeries):
|
|||
...,
|
||||
description="""DynamicTableRegion pointer to the electrodes that this time series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
channel_conversion: Optional[NDArray[Shape["* num_channels"], float]] = Field(
|
||||
|
@ -187,7 +193,12 @@ class SpikeEventSeries(ElectricalSeries):
|
|||
...,
|
||||
description="""DynamicTableRegion pointer to the electrodes that this time series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
channel_conversion: Optional[NDArray[Shape["* num_channels"], float]] = Field(
|
||||
|
@ -264,7 +275,12 @@ class FeatureExtraction(NWBDataInterface):
|
|||
...,
|
||||
description="""DynamicTableRegion pointer to the electrodes that this time series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
@ -295,6 +311,15 @@ class EventDetection(NWBDataInterface):
|
|||
description="""Timestamps of events, in seconds.""",
|
||||
json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_events"}]}}},
|
||||
)
|
||||
source_electricalseries: Union[ElectricalSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ElectricalSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class EventWaveform(NWBDataInterface):
|
||||
|
@ -306,7 +331,7 @@ class EventWaveform(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ecephys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpikeEventSeries]] = Field(
|
||||
value: Optional[List[SpikeEventSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpikeEventSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -321,7 +346,7 @@ class FilteredEphys(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ecephys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[ElectricalSeries]] = Field(
|
||||
value: Optional[List[ElectricalSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "ElectricalSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -336,7 +361,7 @@ class LFP(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ecephys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[ElectricalSeries]] = Field(
|
||||
value: Optional[List[ElectricalSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "ElectricalSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -360,6 +385,15 @@ class ElectrodeGroup(NWBContainer):
|
|||
position: Optional[ElectrodeGroupPosition] = Field(
|
||||
None, description="""stereotaxic or common framework coordinates"""
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class ElectrodeGroupPosition(ConfiguredBaseModel):
|
||||
|
@ -414,6 +448,15 @@ class ClusterWaveforms(NWBDataInterface):
|
|||
}
|
||||
},
|
||||
)
|
||||
clustering_interface: Union[Clustering, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Clustering"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class Clustering(NWBDataInterface):
|
||||
|
|
|
@ -127,7 +127,12 @@ class TimeIntervals(DynamicTable):
|
|||
None,
|
||||
description="""Index for tags.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
timeseries: Optional[TimeIntervalsTimeseries] = Field(
|
||||
|
@ -137,7 +142,12 @@ class TimeIntervals(DynamicTable):
|
|||
None,
|
||||
description="""Index for timeseries.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
@ -184,7 +194,7 @@ class TimeIntervalsTimeseries(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
|
|
@ -7,7 +7,6 @@ import sys
|
|||
from typing import Any, ClassVar, List, Literal, Dict, Optional, Union
|
||||
from pydantic import BaseModel, ConfigDict, Field, RootModel, field_validator
|
||||
import numpy as np
|
||||
from ...core.v2_3_0.core_nwb_epoch import TimeIntervals
|
||||
from ...core.v2_3_0.core_nwb_misc import Units
|
||||
from ...core.v2_3_0.core_nwb_device import Device
|
||||
from ...core.v2_3_0.core_nwb_ogen import OptogeneticStimulusSite
|
||||
|
@ -16,6 +15,7 @@ from ...core.v2_3_0.core_nwb_ecephys import ElectrodeGroup
|
|||
from numpydantic import NDArray, Shape
|
||||
from ...hdmf_common.v1_5_0.hdmf_common_table import DynamicTable, VectorData
|
||||
from ...core.v2_3_0.core_nwb_icephys import IntracellularElectrode, SweepTable
|
||||
from ...core.v2_3_0.core_nwb_epoch import TimeIntervals
|
||||
from ...core.v2_3_0.core_nwb_base import (
|
||||
NWBData,
|
||||
NWBContainer,
|
||||
|
@ -174,19 +174,9 @@ class NWBFile(NWBContainer):
|
|||
...,
|
||||
description="""Experimental metadata, including protocol, notes and description of hardware device(s). The metadata stored in this section should be used to describe the experiment. Metadata necessary for interpreting the data is stored with the data. General experimental metadata, including animal strain, experimental protocols, experimenter, devices, etc, are stored under 'general'. Core metadata (e.g., that required to interpret data fields) is stored with the data itself, and implicitly defined by the file specification (e.g., time is in seconds). The strategy used here for storing non-core metadata is to use free-form text fields, such as would appear in sentences or paragraphs from a Methods section. Metadata fields are text to enable them to be more general, for example to represent ranges instead of numerical values. Machine-readable metadata is stored as attributes to these free-form datasets. All entries in the below table are to be included when data is present. Unused groups (e.g., intracellular_ephys in an optophysiology experiment) should not be created unless there is data to store within them.""",
|
||||
)
|
||||
intervals: Optional[List[TimeIntervals]] = Field(
|
||||
intervals: Optional[NWBFileIntervals] = Field(
|
||||
None,
|
||||
description="""Experimental intervals, whether that be logically distinct sub-experiments having a particular scientific goal, trials (see trials subgroup) during an experiment, or epochs (see epochs subgroup) deriving from analysis of data.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"any_of": [
|
||||
{"range": "TimeIntervals"},
|
||||
{"range": "TimeIntervals"},
|
||||
{"range": "TimeIntervals"},
|
||||
{"range": "TimeIntervals"},
|
||||
]
|
||||
}
|
||||
},
|
||||
)
|
||||
units: Optional[Units] = Field(None, description="""Data about sorted spike units.""")
|
||||
|
||||
|
@ -519,6 +509,35 @@ class GeneralIntracellularEphys(ConfiguredBaseModel):
|
|||
)
|
||||
|
||||
|
||||
class NWBFileIntervals(ConfiguredBaseModel):
|
||||
"""
|
||||
Experimental intervals, whether that be logically distinct sub-experiments having a particular scientific goal, trials (see trials subgroup) during an experiment, or epochs (see epochs subgroup) deriving from analysis of data.
|
||||
"""
|
||||
|
||||
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "core.nwb.file"})
|
||||
|
||||
name: Literal["intervals"] = Field(
|
||||
"intervals",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"equals_string": "intervals", "ifabsent": "string(intervals)"}
|
||||
},
|
||||
)
|
||||
epochs: Optional[TimeIntervals] = Field(
|
||||
None,
|
||||
description="""Divisions in time marking experimental stages or sub-divisions of a single recording session.""",
|
||||
)
|
||||
trials: Optional[TimeIntervals] = Field(
|
||||
None, description="""Repeated experimental events that have a logical grouping."""
|
||||
)
|
||||
invalid_times: Optional[TimeIntervals] = Field(
|
||||
None, description="""Time intervals that should be removed from analysis."""
|
||||
)
|
||||
time_intervals: Optional[List[TimeIntervals]] = Field(
|
||||
None,
|
||||
description="""Optional additional table(s) for describing other experimental time intervals.""",
|
||||
)
|
||||
|
||||
|
||||
class LabMetaData(NWBContainer):
|
||||
"""
|
||||
Lab-specific meta-data.
|
||||
|
@ -577,5 +596,6 @@ GeneralSourceScript.model_rebuild()
|
|||
GeneralExtracellularEphys.model_rebuild()
|
||||
ExtracellularEphysElectrodes.model_rebuild()
|
||||
GeneralIntracellularEphys.model_rebuild()
|
||||
NWBFileIntervals.model_rebuild()
|
||||
LabMetaData.model_rebuild()
|
||||
Subject.model_rebuild()
|
||||
|
|
|
@ -11,6 +11,7 @@ from ...core.v2_3_0.core_nwb_base import (
|
|||
TimeSeriesSync,
|
||||
NWBContainer,
|
||||
)
|
||||
from ...core.v2_3_0.core_nwb_device import Device
|
||||
from typing import Any, ClassVar, List, Literal, Dict, Optional, Union, Annotated, Type, TypeVar
|
||||
from pydantic import (
|
||||
BaseModel,
|
||||
|
@ -117,6 +118,15 @@ class PatchClampSeries(TimeSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -164,7 +174,7 @@ class PatchClampSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion'.""",
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_times"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_times"], float]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_times"}]}}}
|
||||
)
|
||||
|
||||
|
@ -195,6 +205,15 @@ class CurrentClampSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -272,6 +291,15 @@ class IZeroClampSeries(CurrentClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -325,6 +353,15 @@ class CurrentClampStimulusSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -417,6 +454,15 @@ class VoltageClampSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -649,6 +695,15 @@ class VoltageClampStimulusSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -725,6 +780,15 @@ class IntracellularElectrode(NWBContainer):
|
|||
slice: Optional[str] = Field(
|
||||
None, description="""Information about slice used for recording."""
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class SweepTable(DynamicTable):
|
||||
|
@ -753,7 +817,12 @@ class SweepTable(DynamicTable):
|
|||
...,
|
||||
description="""Index for series.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
|
|
@ -7,6 +7,7 @@ import sys
|
|||
from typing import Any, ClassVar, List, Literal, Dict, Optional, Union
|
||||
from pydantic import BaseModel, ConfigDict, Field, RootModel, field_validator
|
||||
import numpy as np
|
||||
from ...core.v2_3_0.core_nwb_device import Device
|
||||
from numpydantic import NDArray, Shape
|
||||
from ...core.v2_3_0.core_nwb_base import Image, TimeSeries, TimeSeriesStartingTime, TimeSeriesSync
|
||||
|
||||
|
@ -75,7 +76,7 @@ class GrayscaleImage(Image):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -98,7 +99,7 @@ class RGBImage(Image):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -121,7 +122,7 @@ class RGBAImage(Image):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -159,6 +160,15 @@ class ImageSeries(TimeSeries):
|
|||
None,
|
||||
description="""Format of image. If this is 'external', then the attribute 'external_file' contains the path information to the image files. If this is 'raw', then the raw (single-channel) binary data is stored in the 'data' dataset. If this attribute is not present, then the default format='raw' case is assumed.""",
|
||||
)
|
||||
device: Optional[Union[Device, str]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -208,7 +218,7 @@ class ImageSeriesExternalFile(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Each external image may contain one or more consecutive frames of the full ImageSeries. This attribute serves as an index to indicate which frames each file contains, to faciliate random access. The 'starting_frame' attribute, hence, contains a list of frame numbers within the full ImageSeries of the first frame of each file listed in the parent 'external_file' dataset. Zero-based indexing is used (hence, the first element will always be zero). For example, if the 'external_file' dataset has three paths to files and the first file has 5 frames, the second file has 10 frames, and the third file has 20 frames, then this attribute will have values [0, 5, 15]. If there is a single external file that holds all of the frames of the ImageSeries (and so there is a single element in the 'external_file' dataset), then this attribute should have value [0].""",
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_files"], str]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_files"], str]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_files"}]}}}
|
||||
)
|
||||
|
||||
|
@ -223,6 +233,15 @@ class ImageMaskSeries(ImageSeries):
|
|||
)
|
||||
|
||||
name: str = Field(...)
|
||||
masked_imageseries: Union[ImageSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImageSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
data: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* frame, * x, * y"], float],
|
||||
|
@ -242,6 +261,15 @@ class ImageMaskSeries(ImageSeries):
|
|||
None,
|
||||
description="""Format of image. If this is 'external', then the attribute 'external_file' contains the path information to the image files. If this is 'raw', then the raw (single-channel) binary data is stored in the 'data' dataset. If this attribute is not present, then the default format='raw' case is assumed.""",
|
||||
)
|
||||
device: Optional[Union[Device, str]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -313,6 +341,15 @@ class OpticalSeries(ImageSeries):
|
|||
None,
|
||||
description="""Format of image. If this is 'external', then the attribute 'external_file' contains the path information to the image files. If this is 'raw', then the raw (single-channel) binary data is stored in the 'data' dataset. If this attribute is not present, then the default format='raw' case is assumed.""",
|
||||
)
|
||||
device: Optional[Union[Device, str]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -360,6 +397,15 @@ class IndexSeries(TimeSeries):
|
|||
description="""Index of the frame in the referenced ImageSeries.""",
|
||||
json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_times"}]}}},
|
||||
)
|
||||
indexed_timeseries: Union[ImageSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImageSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
|
|
@ -167,7 +167,7 @@ class AbstractFeatureSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Since there can be different units for different features, store the units in 'feature_units'. The default value for this attribute is \"see 'feature_units'\".""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* num_times"], float],
|
||||
NDArray[Shape["* num_times, * num_features"], float],
|
||||
|
@ -287,13 +287,27 @@ class DecompositionSeries(TimeSeries):
|
|||
None,
|
||||
description="""DynamicTableRegion pointer to the channels that this decomposition series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
bands: DecompositionSeriesBands = Field(
|
||||
...,
|
||||
description="""Table for describing the bands that this series was generated from. There should be one row in this table for each band.""",
|
||||
)
|
||||
source_timeseries: Optional[Union[TimeSeries, str]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "TimeSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -341,7 +355,7 @@ class DecompositionSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion'.""",
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_times, * num_channels, * num_bands"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_times, * num_channels, * num_bands"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
|
@ -432,7 +446,12 @@ class Units(DynamicTable):
|
|||
None,
|
||||
description="""Index into the spike_times dataset.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
spike_times: Optional[UnitsSpikeTimes] = Field(
|
||||
|
@ -442,7 +461,12 @@ class Units(DynamicTable):
|
|||
None,
|
||||
description="""Index into the obs_intervals dataset.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
obs_intervals: Optional[NDArray[Shape["* num_intervals, 2 start_end"], float]] = Field(
|
||||
|
@ -463,14 +487,24 @@ class Units(DynamicTable):
|
|||
None,
|
||||
description="""Index into electrodes.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
electrodes: Named[Optional[DynamicTableRegion]] = Field(
|
||||
None,
|
||||
description="""Electrode that each spike unit came from, specified using a DynamicTableRegion.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
electrode_group: Optional[List[ElectrodeGroup]] = Field(
|
||||
|
@ -501,14 +535,24 @@ class Units(DynamicTable):
|
|||
None,
|
||||
description="""Index into the waveforms dataset. One value for every spike event. See 'waveforms' for more detail.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
waveforms_index_index: Named[Optional[VectorIndex]] = Field(
|
||||
None,
|
||||
description="""Index into the waveforms_index dataset. One value for every unit (row in the table). See 'waveforms' for more detail.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
@ -548,7 +592,7 @@ class UnitsSpikeTimes(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
|
|
@ -14,6 +14,7 @@ from ...core.v2_3_0.core_nwb_base import (
|
|||
TimeSeriesSync,
|
||||
NWBContainer,
|
||||
)
|
||||
from ...core.v2_3_0.core_nwb_device import Device
|
||||
|
||||
metamodel_version = "None"
|
||||
version = "2.3.0"
|
||||
|
@ -81,6 +82,15 @@ class OptogeneticSeries(TimeSeries):
|
|||
description="""Applied power for optogenetic stimulus, in watts.""",
|
||||
json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_times"}]}}},
|
||||
)
|
||||
site: Union[OptogeneticStimulusSite, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "OptogeneticStimulusSite"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -129,6 +139,15 @@ class OptogeneticStimulusSite(NWBContainer):
|
|||
...,
|
||||
description="""Location of the stimulation site. Specify the area, layer, comments on estimation of area/layer, stereotaxic coordinates if in vivo, etc. Use standard atlas names for anatomical regions when possible.""",
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
# Model rebuild
|
||||
|
|
|
@ -21,8 +21,8 @@ from ...hdmf_common.v1_5_0.hdmf_common_table import (
|
|||
VectorIndex,
|
||||
VectorData,
|
||||
)
|
||||
from ...core.v2_3_0.core_nwb_device import Device
|
||||
from numpydantic import NDArray, Shape
|
||||
from ...core.v2_3_0.core_nwb_image import ImageSeries, ImageSeriesExternalFile
|
||||
from ...core.v2_3_0.core_nwb_base import (
|
||||
TimeSeriesStartingTime,
|
||||
TimeSeriesSync,
|
||||
|
@ -30,6 +30,7 @@ from ...core.v2_3_0.core_nwb_base import (
|
|||
NWBDataInterface,
|
||||
NWBContainer,
|
||||
)
|
||||
from ...core.v2_3_0.core_nwb_image import ImageSeries, ImageSeriesExternalFile
|
||||
|
||||
metamodel_version = "None"
|
||||
version = "2.3.0"
|
||||
|
@ -124,6 +125,15 @@ class TwoPhotonSeries(ImageSeries):
|
|||
NDArray[Shape["2 width_height"], float], NDArray[Shape["3 width_height_depth"], float]
|
||||
]
|
||||
] = Field(None, description="""Width, height and depth of image, or imaged area, in meters.""")
|
||||
imaging_plane: Union[ImagingPlane, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImagingPlane"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
data: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* frame, * x, * y"], float],
|
||||
|
@ -143,6 +153,15 @@ class TwoPhotonSeries(ImageSeries):
|
|||
None,
|
||||
description="""Format of image. If this is 'external', then the attribute 'external_file' contains the path information to the image files. If this is 'raw', then the raw (single-channel) binary data is stored in the 'data' dataset. If this attribute is not present, then the default format='raw' case is assumed.""",
|
||||
)
|
||||
device: Optional[Union[Device, str]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -192,7 +211,12 @@ class RoiResponseSeries(TimeSeries):
|
|||
...,
|
||||
description="""DynamicTableRegion referencing into an ROITable containing information on the ROIs stored in this timeseries.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
|
@ -236,7 +260,7 @@ class DfOverF(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[RoiResponseSeries]] = Field(
|
||||
value: Optional[List[RoiResponseSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "RoiResponseSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -251,7 +275,7 @@ class Fluorescence(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[RoiResponseSeries]] = Field(
|
||||
value: Optional[List[RoiResponseSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "RoiResponseSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -266,7 +290,7 @@ class ImageSegmentation(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[PlaneSegmentation]] = Field(
|
||||
value: Optional[List[PlaneSegmentation]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "PlaneSegmentation"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -290,7 +314,12 @@ class PlaneSegmentation(DynamicTable):
|
|||
None,
|
||||
description="""Index into pixel_mask.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
pixel_mask: Optional[PlaneSegmentationPixelMask] = Field(
|
||||
|
@ -301,7 +330,12 @@ class PlaneSegmentation(DynamicTable):
|
|||
None,
|
||||
description="""Index into voxel_mask.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
voxel_mask: Optional[PlaneSegmentationVoxelMask] = Field(
|
||||
|
@ -313,6 +347,15 @@ class PlaneSegmentation(DynamicTable):
|
|||
description="""Image stacks that the segmentation masks apply to.""",
|
||||
json_schema_extra={"linkml_meta": {"any_of": [{"range": "ImageSeries"}]}},
|
||||
)
|
||||
imaging_plane: Union[ImagingPlane, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImagingPlane"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
None,
|
||||
description="""The names of the columns in this table. This should be used to specify an order to the columns.""",
|
||||
|
@ -346,7 +389,7 @@ class PlaneSegmentationImageMask(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
@ -375,7 +418,7 @@ class PlaneSegmentationPixelMask(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
@ -405,7 +448,7 @@ class PlaneSegmentationVoxelMask(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
@ -424,10 +467,117 @@ class ImagingPlane(NWBContainer):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[OpticalChannel]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "OpticalChannel"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
description: Optional[str] = Field(None, description="""Description of the imaging plane.""")
|
||||
excitation_lambda: float = Field(..., description="""Excitation wavelength, in nm.""")
|
||||
imaging_rate: Optional[float] = Field(
|
||||
None,
|
||||
description="""Rate that images are acquired, in Hz. If the corresponding TimeSeries is present, the rate should be stored there instead.""",
|
||||
)
|
||||
indicator: str = Field(..., description="""Calcium indicator.""")
|
||||
location: str = Field(
|
||||
...,
|
||||
description="""Location of the imaging plane. Specify the area, layer, comments on estimation of area/layer, stereotaxic coordinates if in vivo, etc. Use standard atlas names for anatomical regions when possible.""",
|
||||
)
|
||||
manifold: Optional[ImagingPlaneManifold] = Field(
|
||||
None,
|
||||
description="""DEPRECATED Physical position of each pixel. 'xyz' represents the position of the pixel relative to the defined coordinate space. Deprecated in favor of origin_coords and grid_spacing.""",
|
||||
)
|
||||
origin_coords: Optional[ImagingPlaneOriginCoords] = Field(
|
||||
None,
|
||||
description="""Physical location of the first element of the imaging plane (0, 0) for 2-D data or (0, 0, 0) for 3-D data. See also reference_frame for what the physical location is relative to (e.g., bregma).""",
|
||||
)
|
||||
grid_spacing: Optional[ImagingPlaneGridSpacing] = Field(
|
||||
None,
|
||||
description="""Space between pixels in (x, y) or voxels in (x, y, z) directions, in the specified unit. Assumes imaging plane is a regular grid. See also reference_frame to interpret the grid.""",
|
||||
)
|
||||
reference_frame: Optional[str] = Field(
|
||||
None,
|
||||
description="""Describes reference frame of origin_coords and grid_spacing. For example, this can be a text description of the anatomical location and orientation of the grid defined by origin_coords and grid_spacing or the vectors needed to transform or rotate the grid to a common anatomical axis (e.g., AP/DV/ML). This field is necessary to interpret origin_coords and grid_spacing. If origin_coords and grid_spacing are not present, then this field is not required. For example, if the microscope takes 10 x 10 x 2 images, where the first value of the data matrix (index (0, 0, 0)) corresponds to (-1.2, -0.6, -2) mm relative to bregma, the spacing between pixels is 0.2 mm in x, 0.2 mm in y and 0.5 mm in z, and larger numbers in x means more anterior, larger numbers in y means more rightward, and larger numbers in z means more ventral, then enter the following -- origin_coords = (-1.2, -0.6, -2) grid_spacing = (0.2, 0.2, 0.5) reference_frame = \"Origin coordinates are relative to bregma. First dimension corresponds to anterior-posterior axis (larger index = more anterior). Second dimension corresponds to medial-lateral axis (larger index = more rightward). Third dimension corresponds to dorsal-ventral axis (larger index = more ventral).\"""",
|
||||
)
|
||||
optical_channel: List[OpticalChannel] = Field(
|
||||
..., description="""An optical channel used to record from an imaging plane."""
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class ImagingPlaneManifold(ConfiguredBaseModel):
|
||||
"""
|
||||
DEPRECATED Physical position of each pixel. 'xyz' represents the position of the pixel relative to the defined coordinate space. Deprecated in favor of origin_coords and grid_spacing.
|
||||
"""
|
||||
|
||||
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "core.nwb.ophys"})
|
||||
|
||||
name: Literal["manifold"] = Field(
|
||||
"manifold",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"equals_string": "manifold", "ifabsent": "string(manifold)"}
|
||||
},
|
||||
)
|
||||
conversion: Optional[float] = Field(
|
||||
None,
|
||||
description="""Scalar to multiply each element in data to convert it to the specified 'unit'. If the data are stored in acquisition system units or other units that require a conversion to be interpretable, multiply the data by 'conversion' to convert the data to the specified 'unit'. e.g. if the data acquisition system stores values in this object as pixels from x = -500 to 499, y = -500 to 499 that correspond to a 2 m x 2 m range, then the 'conversion' multiplier to get from raw data acquisition pixel units to meters is 2/1000.""",
|
||||
)
|
||||
unit: Optional[str] = Field(
|
||||
None,
|
||||
description="""Base unit of measurement for working with the data. The default value is 'meters'.""",
|
||||
)
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* height, * width, 3 x_y_z"], float],
|
||||
NDArray[Shape["* height, * width, * depth, 3 x_y_z"], float],
|
||||
]
|
||||
] = Field(None)
|
||||
|
||||
|
||||
class ImagingPlaneOriginCoords(ConfiguredBaseModel):
|
||||
"""
|
||||
Physical location of the first element of the imaging plane (0, 0) for 2-D data or (0, 0, 0) for 3-D data. See also reference_frame for what the physical location is relative to (e.g., bregma).
|
||||
"""
|
||||
|
||||
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "core.nwb.ophys"})
|
||||
|
||||
name: Literal["origin_coords"] = Field(
|
||||
"origin_coords",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"equals_string": "origin_coords", "ifabsent": "string(origin_coords)"}
|
||||
},
|
||||
)
|
||||
unit: Optional[str] = Field(
|
||||
None, description="""Measurement units for origin_coords. The default value is 'meters'."""
|
||||
)
|
||||
value: Optional[Union[NDArray[Shape["2 x_y"], float], NDArray[Shape["3 x_y_z"], float]]] = (
|
||||
Field(None)
|
||||
)
|
||||
|
||||
|
||||
class ImagingPlaneGridSpacing(ConfiguredBaseModel):
|
||||
"""
|
||||
Space between pixels in (x, y) or voxels in (x, y, z) directions, in the specified unit. Assumes imaging plane is a regular grid. See also reference_frame to interpret the grid.
|
||||
"""
|
||||
|
||||
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "core.nwb.ophys"})
|
||||
|
||||
name: Literal["grid_spacing"] = Field(
|
||||
"grid_spacing",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"equals_string": "grid_spacing", "ifabsent": "string(grid_spacing)"}
|
||||
},
|
||||
)
|
||||
unit: Optional[str] = Field(
|
||||
None, description="""Measurement units for grid_spacing. The default value is 'meters'."""
|
||||
)
|
||||
value: Optional[Union[NDArray[Shape["2 x_y"], float], NDArray[Shape["3 x_y_z"], float]]] = (
|
||||
Field(None)
|
||||
)
|
||||
|
||||
|
||||
class OpticalChannel(NWBContainer):
|
||||
|
@ -453,7 +603,7 @@ class MotionCorrection(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[CorrectedImageStack]] = Field(
|
||||
value: Optional[List[CorrectedImageStack]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "CorrectedImageStack"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -476,6 +626,15 @@ class CorrectedImageStack(NWBDataInterface):
|
|||
...,
|
||||
description="""Stores the x,y delta necessary to align each frame to the common coordinates, for example, to align each frame to a reference image.""",
|
||||
)
|
||||
original: Union[ImageSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImageSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
# Model rebuild
|
||||
|
@ -490,6 +649,9 @@ PlaneSegmentationImageMask.model_rebuild()
|
|||
PlaneSegmentationPixelMask.model_rebuild()
|
||||
PlaneSegmentationVoxelMask.model_rebuild()
|
||||
ImagingPlane.model_rebuild()
|
||||
ImagingPlaneManifold.model_rebuild()
|
||||
ImagingPlaneOriginCoords.model_rebuild()
|
||||
ImagingPlaneGridSpacing.model_rebuild()
|
||||
OpticalChannel.model_rebuild()
|
||||
MotionCorrection.model_rebuild()
|
||||
CorrectedImageStack.model_rebuild()
|
||||
|
|
|
@ -135,7 +135,7 @@ class ImagingRetinotopyAxis1PhaseMap(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Unit that axis data is stored in (e.g., degrees)."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -167,7 +167,7 @@ class ImagingRetinotopyAxis1PowerMap(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Unit that axis data is stored in (e.g., degrees)."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -199,7 +199,7 @@ class ImagingRetinotopyAxis2PhaseMap(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Unit that axis data is stored in (e.g., degrees)."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -231,7 +231,7 @@ class ImagingRetinotopyAxis2PowerMap(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Unit that axis data is stored in (e.g., degrees)."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -268,7 +268,7 @@ class ImagingRetinotopyFocalDepthImage(ConfiguredBaseModel):
|
|||
format: Optional[str] = Field(
|
||||
None, description="""Format of image. Right now only 'raw' is supported."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], int]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], int]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -294,7 +294,7 @@ class ImagingRetinotopySignMap(ConfiguredBaseModel):
|
|||
description="""Number of rows and columns in the image. NOTE: row, column representation is equivalent to height, width.""",
|
||||
)
|
||||
field_of_view: Optional[float] = Field(None, description="""Size of viewing area, in meters.""")
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -330,7 +330,7 @@ class ImagingRetinotopyVasculatureImage(ConfiguredBaseModel):
|
|||
format: Optional[str] = Field(
|
||||
None, description="""Format of image. Right now only 'raw' is supported."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], int]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], int]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
|
|
@ -59,6 +59,9 @@ from ...core.v2_3_0.core_nwb_ophys import (
|
|||
PlaneSegmentationPixelMask,
|
||||
PlaneSegmentationVoxelMask,
|
||||
ImagingPlane,
|
||||
ImagingPlaneManifold,
|
||||
ImagingPlaneOriginCoords,
|
||||
ImagingPlaneGridSpacing,
|
||||
OpticalChannel,
|
||||
MotionCorrection,
|
||||
CorrectedImageStack,
|
||||
|
@ -141,6 +144,7 @@ from ...core.v2_3_0.core_nwb_file import (
|
|||
GeneralExtracellularEphys,
|
||||
ExtracellularEphysElectrodes,
|
||||
GeneralIntracellularEphys,
|
||||
NWBFileIntervals,
|
||||
LabMetaData,
|
||||
Subject,
|
||||
)
|
||||
|
|
|
@ -102,7 +102,7 @@ class TimeSeriesReferenceVectorData(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
@ -126,7 +126,7 @@ class Image(NWBData):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -232,7 +232,7 @@ class TimeSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Optionally describe the continuity of the data. Can be \"continuous\", \"instantaneous\", or \"step\". For example, a voltage trace would be \"continuous\", because samples are recorded from a continuous process. An array of lick times would be \"instantaneous\", because the data represents distinct moments in time. Times of image presentations would be \"step\" because the picture remains the same until the next timepoint. This field is optional, but is useful in providing information about the underlying data. It may inform the way this data is interpreted, the way it is visualized, and what analysis methods are applicable.""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* num_times"], Any],
|
||||
NDArray[Shape["* num_times, * num_dim2"], Any],
|
||||
|
@ -284,7 +284,7 @@ class ProcessingModule(NWBContainer):
|
|||
{"from_schema": "core.nwb.base", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[Union[DynamicTable, NWBDataInterface]]] = Field(
|
||||
value: Optional[List[Union[DynamicTable, NWBDataInterface]]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"any_of": [{"range": "NWBDataInterface"}, {"range": "DynamicTable"}]}
|
||||
|
|
|
@ -131,7 +131,7 @@ class SpatialSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. The default value is 'meters'. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion'.""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* num_times"], float],
|
||||
NDArray[Shape["* num_times, * num_features"], float],
|
||||
|
@ -148,7 +148,7 @@ class BehavioralEpochs(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[IntervalSeries]] = Field(
|
||||
value: Optional[List[IntervalSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "IntervalSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -163,7 +163,7 @@ class BehavioralEvents(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[TimeSeries]] = Field(
|
||||
value: Optional[List[TimeSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "TimeSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -178,7 +178,7 @@ class BehavioralTimeSeries(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[TimeSeries]] = Field(
|
||||
value: Optional[List[TimeSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "TimeSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -193,7 +193,7 @@ class PupilTracking(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[TimeSeries]] = Field(
|
||||
value: Optional[List[TimeSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "TimeSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -208,7 +208,7 @@ class EyeTracking(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpatialSeries]] = Field(
|
||||
value: Optional[List[SpatialSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpatialSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -223,7 +223,7 @@ class CompassDirection(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpatialSeries]] = Field(
|
||||
value: Optional[List[SpatialSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpatialSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -238,7 +238,7 @@ class Position(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpatialSeries]] = Field(
|
||||
value: Optional[List[SpatialSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpatialSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
|
|
@ -16,6 +16,7 @@ from pydantic import (
|
|||
ValidationInfo,
|
||||
BeforeValidator,
|
||||
)
|
||||
from ...core.v2_4_0.core_nwb_device import Device
|
||||
from ...core.v2_4_0.core_nwb_base import (
|
||||
TimeSeries,
|
||||
TimeSeriesStartingTime,
|
||||
|
@ -120,7 +121,12 @@ class ElectricalSeries(TimeSeries):
|
|||
...,
|
||||
description="""DynamicTableRegion pointer to the electrodes that this time series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
channel_conversion: Optional[NDArray[Shape["* num_channels"], float]] = Field(
|
||||
|
@ -187,7 +193,12 @@ class SpikeEventSeries(ElectricalSeries):
|
|||
...,
|
||||
description="""DynamicTableRegion pointer to the electrodes that this time series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
channel_conversion: Optional[NDArray[Shape["* num_channels"], float]] = Field(
|
||||
|
@ -264,7 +275,12 @@ class FeatureExtraction(NWBDataInterface):
|
|||
...,
|
||||
description="""DynamicTableRegion pointer to the electrodes that this time series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
@ -295,6 +311,15 @@ class EventDetection(NWBDataInterface):
|
|||
description="""Timestamps of events, in seconds.""",
|
||||
json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_events"}]}}},
|
||||
)
|
||||
source_electricalseries: Union[ElectricalSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ElectricalSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class EventWaveform(NWBDataInterface):
|
||||
|
@ -306,7 +331,7 @@ class EventWaveform(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ecephys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpikeEventSeries]] = Field(
|
||||
value: Optional[List[SpikeEventSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpikeEventSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -321,7 +346,7 @@ class FilteredEphys(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ecephys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[ElectricalSeries]] = Field(
|
||||
value: Optional[List[ElectricalSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "ElectricalSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -336,7 +361,7 @@ class LFP(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ecephys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[ElectricalSeries]] = Field(
|
||||
value: Optional[List[ElectricalSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "ElectricalSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -360,6 +385,15 @@ class ElectrodeGroup(NWBContainer):
|
|||
position: Optional[ElectrodeGroupPosition] = Field(
|
||||
None, description="""stereotaxic or common framework coordinates"""
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class ElectrodeGroupPosition(ConfiguredBaseModel):
|
||||
|
@ -414,6 +448,15 @@ class ClusterWaveforms(NWBDataInterface):
|
|||
}
|
||||
},
|
||||
)
|
||||
clustering_interface: Union[Clustering, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Clustering"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class Clustering(NWBDataInterface):
|
||||
|
|
|
@ -127,7 +127,12 @@ class TimeIntervals(DynamicTable):
|
|||
None,
|
||||
description="""Index for tags.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
timeseries: Optional[TimeIntervalsTimeseries] = Field(
|
||||
|
@ -137,7 +142,12 @@ class TimeIntervals(DynamicTable):
|
|||
None,
|
||||
description="""Index for timeseries.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
@ -184,7 +194,7 @@ class TimeIntervalsTimeseries(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
|
|
@ -7,7 +7,6 @@ import sys
|
|||
from typing import Any, ClassVar, List, Literal, Dict, Optional, Union
|
||||
from pydantic import BaseModel, ConfigDict, Field, RootModel, field_validator
|
||||
import numpy as np
|
||||
from ...core.v2_4_0.core_nwb_epoch import TimeIntervals
|
||||
from ...core.v2_4_0.core_nwb_misc import Units
|
||||
from ...core.v2_4_0.core_nwb_device import Device
|
||||
from ...core.v2_4_0.core_nwb_ogen import OptogeneticStimulusSite
|
||||
|
@ -24,6 +23,7 @@ from ...core.v2_4_0.core_nwb_icephys import (
|
|||
RepetitionsTable,
|
||||
ExperimentalConditionsTable,
|
||||
)
|
||||
from ...core.v2_4_0.core_nwb_epoch import TimeIntervals
|
||||
from ...core.v2_4_0.core_nwb_base import (
|
||||
NWBData,
|
||||
NWBContainer,
|
||||
|
@ -182,19 +182,9 @@ class NWBFile(NWBContainer):
|
|||
...,
|
||||
description="""Experimental metadata, including protocol, notes and description of hardware device(s). The metadata stored in this section should be used to describe the experiment. Metadata necessary for interpreting the data is stored with the data. General experimental metadata, including animal strain, experimental protocols, experimenter, devices, etc, are stored under 'general'. Core metadata (e.g., that required to interpret data fields) is stored with the data itself, and implicitly defined by the file specification (e.g., time is in seconds). The strategy used here for storing non-core metadata is to use free-form text fields, such as would appear in sentences or paragraphs from a Methods section. Metadata fields are text to enable them to be more general, for example to represent ranges instead of numerical values. Machine-readable metadata is stored as attributes to these free-form datasets. All entries in the below table are to be included when data is present. Unused groups (e.g., intracellular_ephys in an optophysiology experiment) should not be created unless there is data to store within them.""",
|
||||
)
|
||||
intervals: Optional[List[TimeIntervals]] = Field(
|
||||
intervals: Optional[NWBFileIntervals] = Field(
|
||||
None,
|
||||
description="""Experimental intervals, whether that be logically distinct sub-experiments having a particular scientific goal, trials (see trials subgroup) during an experiment, or epochs (see epochs subgroup) deriving from analysis of data.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"any_of": [
|
||||
{"range": "TimeIntervals"},
|
||||
{"range": "TimeIntervals"},
|
||||
{"range": "TimeIntervals"},
|
||||
{"range": "TimeIntervals"},
|
||||
]
|
||||
}
|
||||
},
|
||||
)
|
||||
units: Optional[Units] = Field(None, description="""Data about sorted spike units.""")
|
||||
|
||||
|
@ -548,6 +538,35 @@ class GeneralIntracellularEphys(ConfiguredBaseModel):
|
|||
)
|
||||
|
||||
|
||||
class NWBFileIntervals(ConfiguredBaseModel):
|
||||
"""
|
||||
Experimental intervals, whether that be logically distinct sub-experiments having a particular scientific goal, trials (see trials subgroup) during an experiment, or epochs (see epochs subgroup) deriving from analysis of data.
|
||||
"""
|
||||
|
||||
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "core.nwb.file"})
|
||||
|
||||
name: Literal["intervals"] = Field(
|
||||
"intervals",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"equals_string": "intervals", "ifabsent": "string(intervals)"}
|
||||
},
|
||||
)
|
||||
epochs: Optional[TimeIntervals] = Field(
|
||||
None,
|
||||
description="""Divisions in time marking experimental stages or sub-divisions of a single recording session.""",
|
||||
)
|
||||
trials: Optional[TimeIntervals] = Field(
|
||||
None, description="""Repeated experimental events that have a logical grouping."""
|
||||
)
|
||||
invalid_times: Optional[TimeIntervals] = Field(
|
||||
None, description="""Time intervals that should be removed from analysis."""
|
||||
)
|
||||
time_intervals: Optional[List[TimeIntervals]] = Field(
|
||||
None,
|
||||
description="""Optional additional table(s) for describing other experimental time intervals.""",
|
||||
)
|
||||
|
||||
|
||||
class LabMetaData(NWBContainer):
|
||||
"""
|
||||
Lab-specific meta-data.
|
||||
|
@ -606,5 +625,6 @@ GeneralSourceScript.model_rebuild()
|
|||
GeneralExtracellularEphys.model_rebuild()
|
||||
ExtracellularEphysElectrodes.model_rebuild()
|
||||
GeneralIntracellularEphys.model_rebuild()
|
||||
NWBFileIntervals.model_rebuild()
|
||||
LabMetaData.model_rebuild()
|
||||
Subject.model_rebuild()
|
||||
|
|
|
@ -5,6 +5,7 @@ from enum import Enum
|
|||
import re
|
||||
import sys
|
||||
import numpy as np
|
||||
from ...core.v2_4_0.core_nwb_device import Device
|
||||
from ...core.v2_4_0.core_nwb_base import (
|
||||
TimeSeries,
|
||||
TimeSeriesStartingTime,
|
||||
|
@ -124,6 +125,15 @@ class PatchClampSeries(TimeSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -171,7 +181,7 @@ class PatchClampSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion'.""",
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_times"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_times"], float]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_times"}]}}}
|
||||
)
|
||||
|
||||
|
@ -202,6 +212,15 @@ class CurrentClampSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -279,6 +298,15 @@ class IZeroClampSeries(CurrentClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -332,6 +360,15 @@ class CurrentClampStimulusSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -424,6 +461,15 @@ class VoltageClampSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -656,6 +702,15 @@ class VoltageClampStimulusSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -732,6 +787,15 @@ class IntracellularElectrode(NWBContainer):
|
|||
slice: Optional[str] = Field(
|
||||
None, description="""Information about slice used for recording."""
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class SweepTable(DynamicTable):
|
||||
|
@ -760,7 +824,12 @@ class SweepTable(DynamicTable):
|
|||
...,
|
||||
description="""Index for series.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
@ -827,7 +896,12 @@ class IntracellularStimuliTable(DynamicTable):
|
|||
...,
|
||||
description="""Column storing the reference to the recorded stimulus for the recording (rows).""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
@ -861,7 +935,12 @@ class IntracellularResponsesTable(DynamicTable):
|
|||
...,
|
||||
description="""Column storing the reference to the recorded response for the recording (rows)""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
@ -909,7 +988,7 @@ class IntracellularRecordingsTable(AlignedDynamicTable):
|
|||
responses: IntracellularResponsesTable = Field(
|
||||
..., description="""Table for storing intracellular response related metadata."""
|
||||
)
|
||||
children: Optional[List[DynamicTable]] = Field(
|
||||
value: Optional[List[DynamicTable]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "DynamicTable"}]}}
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
@ -952,7 +1031,12 @@ class SimultaneousRecordingsTable(DynamicTable):
|
|||
...,
|
||||
description="""Index dataset for the recordings column.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
@ -992,7 +1076,7 @@ class SimultaneousRecordingsTableRecordings(DynamicTableRegion):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what this table region points to."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
@ -1028,7 +1112,12 @@ class SequentialRecordingsTable(DynamicTable):
|
|||
...,
|
||||
description="""Index dataset for the simultaneous_recordings column.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
stimulus_type: NDArray[Any, str] = Field(
|
||||
|
@ -1080,7 +1169,7 @@ class SequentialRecordingsTableSimultaneousRecordings(DynamicTableRegion):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what this table region points to."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
@ -1113,7 +1202,12 @@ class RepetitionsTable(DynamicTable):
|
|||
...,
|
||||
description="""Index dataset for the sequential_recordings column.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
@ -1156,7 +1250,7 @@ class RepetitionsTableSequentialRecordings(DynamicTableRegion):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what this table region points to."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
@ -1191,7 +1285,12 @@ class ExperimentalConditionsTable(DynamicTable):
|
|||
...,
|
||||
description="""Index dataset for the repetitions column.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
@ -1231,7 +1330,7 @@ class ExperimentalConditionsTableRepetitions(DynamicTableRegion):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what this table region points to."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
|
|
@ -7,6 +7,7 @@ import sys
|
|||
from typing import Any, ClassVar, List, Literal, Dict, Optional, Union
|
||||
from pydantic import BaseModel, ConfigDict, Field, RootModel, field_validator
|
||||
import numpy as np
|
||||
from ...core.v2_4_0.core_nwb_device import Device
|
||||
from numpydantic import NDArray, Shape
|
||||
from ...core.v2_4_0.core_nwb_base import Image, TimeSeries, TimeSeriesStartingTime, TimeSeriesSync
|
||||
|
||||
|
@ -75,7 +76,7 @@ class GrayscaleImage(Image):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -98,7 +99,7 @@ class RGBImage(Image):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -121,7 +122,7 @@ class RGBAImage(Image):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -159,6 +160,15 @@ class ImageSeries(TimeSeries):
|
|||
None,
|
||||
description="""Format of image. If this is 'external', then the attribute 'external_file' contains the path information to the image files. If this is 'raw', then the raw (single-channel) binary data is stored in the 'data' dataset. If this attribute is not present, then the default format='raw' case is assumed.""",
|
||||
)
|
||||
device: Optional[Union[Device, str]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -208,7 +218,7 @@ class ImageSeriesExternalFile(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Each external image may contain one or more consecutive frames of the full ImageSeries. This attribute serves as an index to indicate which frames each file contains, to faciliate random access. The 'starting_frame' attribute, hence, contains a list of frame numbers within the full ImageSeries of the first frame of each file listed in the parent 'external_file' dataset. Zero-based indexing is used (hence, the first element will always be zero). For example, if the 'external_file' dataset has three paths to files and the first file has 5 frames, the second file has 10 frames, and the third file has 20 frames, then this attribute will have values [0, 5, 15]. If there is a single external file that holds all of the frames of the ImageSeries (and so there is a single element in the 'external_file' dataset), then this attribute should have value [0].""",
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_files"], str]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_files"], str]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_files"}]}}}
|
||||
)
|
||||
|
||||
|
@ -223,6 +233,15 @@ class ImageMaskSeries(ImageSeries):
|
|||
)
|
||||
|
||||
name: str = Field(...)
|
||||
masked_imageseries: Union[ImageSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImageSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
data: Union[
|
||||
NDArray[Shape["* frame, * x, * y"], float], NDArray[Shape["* frame, * x, * y, * z"], float]
|
||||
] = Field(
|
||||
|
@ -242,6 +261,15 @@ class ImageMaskSeries(ImageSeries):
|
|||
None,
|
||||
description="""Format of image. If this is 'external', then the attribute 'external_file' contains the path information to the image files. If this is 'raw', then the raw (single-channel) binary data is stored in the 'data' dataset. If this attribute is not present, then the default format='raw' case is assumed.""",
|
||||
)
|
||||
device: Optional[Union[Device, str]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -313,6 +341,15 @@ class OpticalSeries(ImageSeries):
|
|||
None,
|
||||
description="""Format of image. If this is 'external', then the attribute 'external_file' contains the path information to the image files. If this is 'raw', then the raw (single-channel) binary data is stored in the 'data' dataset. If this attribute is not present, then the default format='raw' case is assumed.""",
|
||||
)
|
||||
device: Optional[Union[Device, str]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -360,6 +397,15 @@ class IndexSeries(TimeSeries):
|
|||
description="""Index of the frame in the referenced ImageSeries.""",
|
||||
json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_times"}]}}},
|
||||
)
|
||||
indexed_timeseries: Union[ImageSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImageSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
|
|
@ -167,7 +167,7 @@ class AbstractFeatureSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Since there can be different units for different features, store the units in 'feature_units'. The default value for this attribute is \"see 'feature_units'\".""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* num_times"], float],
|
||||
NDArray[Shape["* num_times, * num_features"], float],
|
||||
|
@ -287,13 +287,27 @@ class DecompositionSeries(TimeSeries):
|
|||
None,
|
||||
description="""DynamicTableRegion pointer to the channels that this decomposition series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
bands: DecompositionSeriesBands = Field(
|
||||
...,
|
||||
description="""Table for describing the bands that this series was generated from. There should be one row in this table for each band.""",
|
||||
)
|
||||
source_timeseries: Optional[Union[TimeSeries, str]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "TimeSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -341,7 +355,7 @@ class DecompositionSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion'.""",
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_times, * num_channels, * num_bands"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_times, * num_channels, * num_bands"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
|
@ -432,7 +446,12 @@ class Units(DynamicTable):
|
|||
None,
|
||||
description="""Index into the spike_times dataset.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
spike_times: Optional[UnitsSpikeTimes] = Field(
|
||||
|
@ -442,7 +461,12 @@ class Units(DynamicTable):
|
|||
None,
|
||||
description="""Index into the obs_intervals dataset.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
obs_intervals: Optional[NDArray[Shape["* num_intervals, 2 start_end"], float]] = Field(
|
||||
|
@ -463,14 +487,24 @@ class Units(DynamicTable):
|
|||
None,
|
||||
description="""Index into electrodes.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
electrodes: Named[Optional[DynamicTableRegion]] = Field(
|
||||
None,
|
||||
description="""Electrode that each spike unit came from, specified using a DynamicTableRegion.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
electrode_group: Optional[List[ElectrodeGroup]] = Field(
|
||||
|
@ -501,14 +535,24 @@ class Units(DynamicTable):
|
|||
None,
|
||||
description="""Index into the waveforms dataset. One value for every spike event. See 'waveforms' for more detail.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
waveforms_index_index: Named[Optional[VectorIndex]] = Field(
|
||||
None,
|
||||
description="""Index into the waveforms_index dataset. One value for every unit (row in the table). See 'waveforms' for more detail.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
@ -548,7 +592,7 @@ class UnitsSpikeTimes(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
|
|
@ -14,6 +14,7 @@ from ...core.v2_4_0.core_nwb_base import (
|
|||
TimeSeriesSync,
|
||||
NWBContainer,
|
||||
)
|
||||
from ...core.v2_4_0.core_nwb_device import Device
|
||||
|
||||
metamodel_version = "None"
|
||||
version = "2.4.0"
|
||||
|
@ -81,6 +82,15 @@ class OptogeneticSeries(TimeSeries):
|
|||
description="""Applied power for optogenetic stimulus, in watts.""",
|
||||
json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_times"}]}}},
|
||||
)
|
||||
site: Union[OptogeneticStimulusSite, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "OptogeneticStimulusSite"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -129,6 +139,15 @@ class OptogeneticStimulusSite(NWBContainer):
|
|||
...,
|
||||
description="""Location of the stimulation site. Specify the area, layer, comments on estimation of area/layer, stereotaxic coordinates if in vivo, etc. Use standard atlas names for anatomical regions when possible.""",
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
# Model rebuild
|
||||
|
|
|
@ -21,8 +21,8 @@ from ...hdmf_common.v1_5_0.hdmf_common_table import (
|
|||
VectorIndex,
|
||||
VectorData,
|
||||
)
|
||||
from ...core.v2_4_0.core_nwb_device import Device
|
||||
from numpydantic import NDArray, Shape
|
||||
from ...core.v2_4_0.core_nwb_image import ImageSeries, ImageSeriesExternalFile
|
||||
from ...core.v2_4_0.core_nwb_base import (
|
||||
TimeSeriesStartingTime,
|
||||
TimeSeriesSync,
|
||||
|
@ -30,6 +30,7 @@ from ...core.v2_4_0.core_nwb_base import (
|
|||
NWBDataInterface,
|
||||
NWBContainer,
|
||||
)
|
||||
from ...core.v2_4_0.core_nwb_image import ImageSeries, ImageSeriesExternalFile
|
||||
|
||||
metamodel_version = "None"
|
||||
version = "2.4.0"
|
||||
|
@ -124,6 +125,15 @@ class TwoPhotonSeries(ImageSeries):
|
|||
NDArray[Shape["2 width_height"], float], NDArray[Shape["3 width_height_depth"], float]
|
||||
]
|
||||
] = Field(None, description="""Width, height and depth of image, or imaged area, in meters.""")
|
||||
imaging_plane: Union[ImagingPlane, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImagingPlane"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
data: Union[
|
||||
NDArray[Shape["* frame, * x, * y"], float], NDArray[Shape["* frame, * x, * y, * z"], float]
|
||||
] = Field(
|
||||
|
@ -143,6 +153,15 @@ class TwoPhotonSeries(ImageSeries):
|
|||
None,
|
||||
description="""Format of image. If this is 'external', then the attribute 'external_file' contains the path information to the image files. If this is 'raw', then the raw (single-channel) binary data is stored in the 'data' dataset. If this attribute is not present, then the default format='raw' case is assumed.""",
|
||||
)
|
||||
device: Optional[Union[Device, str]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -192,7 +211,12 @@ class RoiResponseSeries(TimeSeries):
|
|||
...,
|
||||
description="""DynamicTableRegion referencing into an ROITable containing information on the ROIs stored in this timeseries.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
|
@ -236,7 +260,7 @@ class DfOverF(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[RoiResponseSeries]] = Field(
|
||||
value: Optional[List[RoiResponseSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "RoiResponseSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -251,7 +275,7 @@ class Fluorescence(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[RoiResponseSeries]] = Field(
|
||||
value: Optional[List[RoiResponseSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "RoiResponseSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -266,7 +290,7 @@ class ImageSegmentation(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[PlaneSegmentation]] = Field(
|
||||
value: Optional[List[PlaneSegmentation]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "PlaneSegmentation"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -290,7 +314,12 @@ class PlaneSegmentation(DynamicTable):
|
|||
None,
|
||||
description="""Index into pixel_mask.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
pixel_mask: Optional[PlaneSegmentationPixelMask] = Field(
|
||||
|
@ -301,7 +330,12 @@ class PlaneSegmentation(DynamicTable):
|
|||
None,
|
||||
description="""Index into voxel_mask.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
voxel_mask: Optional[PlaneSegmentationVoxelMask] = Field(
|
||||
|
@ -313,6 +347,15 @@ class PlaneSegmentation(DynamicTable):
|
|||
description="""Image stacks that the segmentation masks apply to.""",
|
||||
json_schema_extra={"linkml_meta": {"any_of": [{"range": "ImageSeries"}]}},
|
||||
)
|
||||
imaging_plane: Union[ImagingPlane, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImagingPlane"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
None,
|
||||
description="""The names of the columns in this table. This should be used to specify an order to the columns.""",
|
||||
|
@ -346,7 +389,7 @@ class PlaneSegmentationImageMask(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
@ -375,7 +418,7 @@ class PlaneSegmentationPixelMask(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
@ -405,7 +448,7 @@ class PlaneSegmentationVoxelMask(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
@ -424,10 +467,117 @@ class ImagingPlane(NWBContainer):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[OpticalChannel]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "OpticalChannel"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
description: Optional[str] = Field(None, description="""Description of the imaging plane.""")
|
||||
excitation_lambda: float = Field(..., description="""Excitation wavelength, in nm.""")
|
||||
imaging_rate: Optional[float] = Field(
|
||||
None,
|
||||
description="""Rate that images are acquired, in Hz. If the corresponding TimeSeries is present, the rate should be stored there instead.""",
|
||||
)
|
||||
indicator: str = Field(..., description="""Calcium indicator.""")
|
||||
location: str = Field(
|
||||
...,
|
||||
description="""Location of the imaging plane. Specify the area, layer, comments on estimation of area/layer, stereotaxic coordinates if in vivo, etc. Use standard atlas names for anatomical regions when possible.""",
|
||||
)
|
||||
manifold: Optional[ImagingPlaneManifold] = Field(
|
||||
None,
|
||||
description="""DEPRECATED Physical position of each pixel. 'xyz' represents the position of the pixel relative to the defined coordinate space. Deprecated in favor of origin_coords and grid_spacing.""",
|
||||
)
|
||||
origin_coords: Optional[ImagingPlaneOriginCoords] = Field(
|
||||
None,
|
||||
description="""Physical location of the first element of the imaging plane (0, 0) for 2-D data or (0, 0, 0) for 3-D data. See also reference_frame for what the physical location is relative to (e.g., bregma).""",
|
||||
)
|
||||
grid_spacing: Optional[ImagingPlaneGridSpacing] = Field(
|
||||
None,
|
||||
description="""Space between pixels in (x, y) or voxels in (x, y, z) directions, in the specified unit. Assumes imaging plane is a regular grid. See also reference_frame to interpret the grid.""",
|
||||
)
|
||||
reference_frame: Optional[str] = Field(
|
||||
None,
|
||||
description="""Describes reference frame of origin_coords and grid_spacing. For example, this can be a text description of the anatomical location and orientation of the grid defined by origin_coords and grid_spacing or the vectors needed to transform or rotate the grid to a common anatomical axis (e.g., AP/DV/ML). This field is necessary to interpret origin_coords and grid_spacing. If origin_coords and grid_spacing are not present, then this field is not required. For example, if the microscope takes 10 x 10 x 2 images, where the first value of the data matrix (index (0, 0, 0)) corresponds to (-1.2, -0.6, -2) mm relative to bregma, the spacing between pixels is 0.2 mm in x, 0.2 mm in y and 0.5 mm in z, and larger numbers in x means more anterior, larger numbers in y means more rightward, and larger numbers in z means more ventral, then enter the following -- origin_coords = (-1.2, -0.6, -2) grid_spacing = (0.2, 0.2, 0.5) reference_frame = \"Origin coordinates are relative to bregma. First dimension corresponds to anterior-posterior axis (larger index = more anterior). Second dimension corresponds to medial-lateral axis (larger index = more rightward). Third dimension corresponds to dorsal-ventral axis (larger index = more ventral).\"""",
|
||||
)
|
||||
optical_channel: List[OpticalChannel] = Field(
|
||||
..., description="""An optical channel used to record from an imaging plane."""
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class ImagingPlaneManifold(ConfiguredBaseModel):
|
||||
"""
|
||||
DEPRECATED Physical position of each pixel. 'xyz' represents the position of the pixel relative to the defined coordinate space. Deprecated in favor of origin_coords and grid_spacing.
|
||||
"""
|
||||
|
||||
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "core.nwb.ophys"})
|
||||
|
||||
name: Literal["manifold"] = Field(
|
||||
"manifold",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"equals_string": "manifold", "ifabsent": "string(manifold)"}
|
||||
},
|
||||
)
|
||||
conversion: Optional[float] = Field(
|
||||
None,
|
||||
description="""Scalar to multiply each element in data to convert it to the specified 'unit'. If the data are stored in acquisition system units or other units that require a conversion to be interpretable, multiply the data by 'conversion' to convert the data to the specified 'unit'. e.g. if the data acquisition system stores values in this object as pixels from x = -500 to 499, y = -500 to 499 that correspond to a 2 m x 2 m range, then the 'conversion' multiplier to get from raw data acquisition pixel units to meters is 2/1000.""",
|
||||
)
|
||||
unit: Optional[str] = Field(
|
||||
None,
|
||||
description="""Base unit of measurement for working with the data. The default value is 'meters'.""",
|
||||
)
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* height, * width, 3 x_y_z"], float],
|
||||
NDArray[Shape["* height, * width, * depth, 3 x_y_z"], float],
|
||||
]
|
||||
] = Field(None)
|
||||
|
||||
|
||||
class ImagingPlaneOriginCoords(ConfiguredBaseModel):
|
||||
"""
|
||||
Physical location of the first element of the imaging plane (0, 0) for 2-D data or (0, 0, 0) for 3-D data. See also reference_frame for what the physical location is relative to (e.g., bregma).
|
||||
"""
|
||||
|
||||
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "core.nwb.ophys"})
|
||||
|
||||
name: Literal["origin_coords"] = Field(
|
||||
"origin_coords",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"equals_string": "origin_coords", "ifabsent": "string(origin_coords)"}
|
||||
},
|
||||
)
|
||||
unit: Optional[str] = Field(
|
||||
None, description="""Measurement units for origin_coords. The default value is 'meters'."""
|
||||
)
|
||||
value: Optional[Union[NDArray[Shape["2 x_y"], float], NDArray[Shape["3 x_y_z"], float]]] = (
|
||||
Field(None)
|
||||
)
|
||||
|
||||
|
||||
class ImagingPlaneGridSpacing(ConfiguredBaseModel):
|
||||
"""
|
||||
Space between pixels in (x, y) or voxels in (x, y, z) directions, in the specified unit. Assumes imaging plane is a regular grid. See also reference_frame to interpret the grid.
|
||||
"""
|
||||
|
||||
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "core.nwb.ophys"})
|
||||
|
||||
name: Literal["grid_spacing"] = Field(
|
||||
"grid_spacing",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"equals_string": "grid_spacing", "ifabsent": "string(grid_spacing)"}
|
||||
},
|
||||
)
|
||||
unit: Optional[str] = Field(
|
||||
None, description="""Measurement units for grid_spacing. The default value is 'meters'."""
|
||||
)
|
||||
value: Optional[Union[NDArray[Shape["2 x_y"], float], NDArray[Shape["3 x_y_z"], float]]] = (
|
||||
Field(None)
|
||||
)
|
||||
|
||||
|
||||
class OpticalChannel(NWBContainer):
|
||||
|
@ -453,7 +603,7 @@ class MotionCorrection(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[CorrectedImageStack]] = Field(
|
||||
value: Optional[List[CorrectedImageStack]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "CorrectedImageStack"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -476,6 +626,15 @@ class CorrectedImageStack(NWBDataInterface):
|
|||
...,
|
||||
description="""Stores the x,y delta necessary to align each frame to the common coordinates, for example, to align each frame to a reference image.""",
|
||||
)
|
||||
original: Union[ImageSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImageSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
# Model rebuild
|
||||
|
@ -490,6 +649,9 @@ PlaneSegmentationImageMask.model_rebuild()
|
|||
PlaneSegmentationPixelMask.model_rebuild()
|
||||
PlaneSegmentationVoxelMask.model_rebuild()
|
||||
ImagingPlane.model_rebuild()
|
||||
ImagingPlaneManifold.model_rebuild()
|
||||
ImagingPlaneOriginCoords.model_rebuild()
|
||||
ImagingPlaneGridSpacing.model_rebuild()
|
||||
OpticalChannel.model_rebuild()
|
||||
MotionCorrection.model_rebuild()
|
||||
CorrectedImageStack.model_rebuild()
|
||||
|
|
|
@ -135,7 +135,7 @@ class ImagingRetinotopyAxis1PhaseMap(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Unit that axis data is stored in (e.g., degrees)."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -167,7 +167,7 @@ class ImagingRetinotopyAxis1PowerMap(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Unit that axis data is stored in (e.g., degrees)."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -199,7 +199,7 @@ class ImagingRetinotopyAxis2PhaseMap(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Unit that axis data is stored in (e.g., degrees)."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -231,7 +231,7 @@ class ImagingRetinotopyAxis2PowerMap(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Unit that axis data is stored in (e.g., degrees)."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -268,7 +268,7 @@ class ImagingRetinotopyFocalDepthImage(ConfiguredBaseModel):
|
|||
format: Optional[str] = Field(
|
||||
None, description="""Format of image. Right now only 'raw' is supported."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], int]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], int]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -294,7 +294,7 @@ class ImagingRetinotopySignMap(ConfiguredBaseModel):
|
|||
description="""Number of rows and columns in the image. NOTE: row, column representation is equivalent to height, width.""",
|
||||
)
|
||||
field_of_view: Optional[float] = Field(None, description="""Size of viewing area, in meters.""")
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -330,7 +330,7 @@ class ImagingRetinotopyVasculatureImage(ConfiguredBaseModel):
|
|||
format: Optional[str] = Field(
|
||||
None, description="""Format of image. Right now only 'raw' is supported."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], int]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], int]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
|
|
@ -60,6 +60,9 @@ from ...core.v2_4_0.core_nwb_ophys import (
|
|||
PlaneSegmentationPixelMask,
|
||||
PlaneSegmentationVoxelMask,
|
||||
ImagingPlane,
|
||||
ImagingPlaneManifold,
|
||||
ImagingPlaneOriginCoords,
|
||||
ImagingPlaneGridSpacing,
|
||||
OpticalChannel,
|
||||
MotionCorrection,
|
||||
CorrectedImageStack,
|
||||
|
@ -154,6 +157,7 @@ from ...core.v2_4_0.core_nwb_file import (
|
|||
GeneralExtracellularEphys,
|
||||
ExtracellularEphysElectrodes,
|
||||
GeneralIntracellularEphys,
|
||||
NWBFileIntervals,
|
||||
LabMetaData,
|
||||
Subject,
|
||||
)
|
||||
|
|
|
@ -126,7 +126,7 @@ class TimeSeriesReferenceVectorData(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
@ -150,7 +150,7 @@ class Image(NWBData):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -169,8 +169,14 @@ class ImageReferences(NWBData):
|
|||
)
|
||||
|
||||
name: str = Field(...)
|
||||
image: List[Image] = Field(
|
||||
..., description="""Ordered dataset of references to Image objects."""
|
||||
value: List[Image] = Field(
|
||||
...,
|
||||
description="""Ordered dataset of references to Image objects.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "reference"}}
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
|
@ -275,7 +281,7 @@ class TimeSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Optionally describe the continuity of the data. Can be \"continuous\", \"instantaneous\", or \"step\". For example, a voltage trace would be \"continuous\", because samples are recorded from a continuous process. An array of lick times would be \"instantaneous\", because the data represents distinct moments in time. Times of image presentations would be \"step\" because the picture remains the same until the next timepoint. This field is optional, but is useful in providing information about the underlying data. It may inform the way this data is interpreted, the way it is visualized, and what analysis methods are applicable.""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* num_times"], Any],
|
||||
NDArray[Shape["* num_times, * num_dim2"], Any],
|
||||
|
@ -327,7 +333,7 @@ class ProcessingModule(NWBContainer):
|
|||
{"from_schema": "core.nwb.base", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[Union[DynamicTable, NWBDataInterface]]] = Field(
|
||||
value: Optional[List[Union[DynamicTable, NWBDataInterface]]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"any_of": [{"range": "NWBDataInterface"}, {"range": "DynamicTable"}]}
|
||||
|
@ -354,7 +360,12 @@ class Images(NWBDataInterface):
|
|||
None,
|
||||
description="""Ordered dataset of references to Image objects stored in the parent group. Each Image object in the Images group should be stored once and only once, so the dataset should have the same length as the number of images.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
|
|
@ -131,7 +131,7 @@ class SpatialSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. The default value is 'meters'. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion' and add 'offset'.""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* num_times"], float],
|
||||
NDArray[Shape["* num_times, 1 x"], float],
|
||||
|
@ -150,7 +150,7 @@ class BehavioralEpochs(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[IntervalSeries]] = Field(
|
||||
value: Optional[List[IntervalSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "IntervalSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -165,7 +165,7 @@ class BehavioralEvents(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[TimeSeries]] = Field(
|
||||
value: Optional[List[TimeSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "TimeSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -180,7 +180,7 @@ class BehavioralTimeSeries(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[TimeSeries]] = Field(
|
||||
value: Optional[List[TimeSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "TimeSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -195,7 +195,7 @@ class PupilTracking(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[TimeSeries]] = Field(
|
||||
value: Optional[List[TimeSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "TimeSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -210,7 +210,7 @@ class EyeTracking(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpatialSeries]] = Field(
|
||||
value: Optional[List[SpatialSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpatialSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -225,7 +225,7 @@ class CompassDirection(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpatialSeries]] = Field(
|
||||
value: Optional[List[SpatialSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpatialSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -240,7 +240,7 @@ class Position(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpatialSeries]] = Field(
|
||||
value: Optional[List[SpatialSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpatialSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
|
|
@ -16,6 +16,7 @@ from pydantic import (
|
|||
ValidationInfo,
|
||||
BeforeValidator,
|
||||
)
|
||||
from ...core.v2_5_0.core_nwb_device import Device
|
||||
from ...core.v2_5_0.core_nwb_base import (
|
||||
TimeSeries,
|
||||
TimeSeriesStartingTime,
|
||||
|
@ -120,7 +121,12 @@ class ElectricalSeries(TimeSeries):
|
|||
...,
|
||||
description="""DynamicTableRegion pointer to the electrodes that this time series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
channel_conversion: Optional[NDArray[Shape["* num_channels"], float]] = Field(
|
||||
|
@ -187,7 +193,12 @@ class SpikeEventSeries(ElectricalSeries):
|
|||
...,
|
||||
description="""DynamicTableRegion pointer to the electrodes that this time series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
channel_conversion: Optional[NDArray[Shape["* num_channels"], float]] = Field(
|
||||
|
@ -264,7 +275,12 @@ class FeatureExtraction(NWBDataInterface):
|
|||
...,
|
||||
description="""DynamicTableRegion pointer to the electrodes that this time series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
@ -295,6 +311,15 @@ class EventDetection(NWBDataInterface):
|
|||
description="""Timestamps of events, in seconds.""",
|
||||
json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_events"}]}}},
|
||||
)
|
||||
source_electricalseries: Union[ElectricalSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ElectricalSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class EventWaveform(NWBDataInterface):
|
||||
|
@ -306,7 +331,7 @@ class EventWaveform(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ecephys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpikeEventSeries]] = Field(
|
||||
value: Optional[List[SpikeEventSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpikeEventSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -321,7 +346,7 @@ class FilteredEphys(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ecephys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[ElectricalSeries]] = Field(
|
||||
value: Optional[List[ElectricalSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "ElectricalSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -336,7 +361,7 @@ class LFP(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ecephys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[ElectricalSeries]] = Field(
|
||||
value: Optional[List[ElectricalSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "ElectricalSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -360,6 +385,15 @@ class ElectrodeGroup(NWBContainer):
|
|||
position: Optional[ElectrodeGroupPosition] = Field(
|
||||
None, description="""stereotaxic or common framework coordinates"""
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class ElectrodeGroupPosition(ConfiguredBaseModel):
|
||||
|
@ -414,6 +448,15 @@ class ClusterWaveforms(NWBDataInterface):
|
|||
}
|
||||
},
|
||||
)
|
||||
clustering_interface: Union[Clustering, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Clustering"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class Clustering(NWBDataInterface):
|
||||
|
|
|
@ -127,21 +127,36 @@ class TimeIntervals(DynamicTable):
|
|||
None,
|
||||
description="""Index for tags.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
timeseries: Named[Optional[TimeSeriesReferenceVectorData]] = Field(
|
||||
None,
|
||||
description="""An index into a TimeSeries object.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
timeseries_index: Named[Optional[VectorIndex]] = Field(
|
||||
None,
|
||||
description="""Index for timeseries.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
|
|
@ -7,7 +7,6 @@ import sys
|
|||
from typing import Any, ClassVar, List, Literal, Dict, Optional, Union
|
||||
from pydantic import BaseModel, ConfigDict, Field, RootModel, field_validator
|
||||
import numpy as np
|
||||
from ...core.v2_5_0.core_nwb_epoch import TimeIntervals
|
||||
from ...core.v2_5_0.core_nwb_misc import Units
|
||||
from ...core.v2_5_0.core_nwb_device import Device
|
||||
from ...core.v2_5_0.core_nwb_ogen import OptogeneticStimulusSite
|
||||
|
@ -24,6 +23,7 @@ from ...core.v2_5_0.core_nwb_icephys import (
|
|||
RepetitionsTable,
|
||||
ExperimentalConditionsTable,
|
||||
)
|
||||
from ...core.v2_5_0.core_nwb_epoch import TimeIntervals
|
||||
from ...core.v2_5_0.core_nwb_base import (
|
||||
NWBData,
|
||||
NWBContainer,
|
||||
|
@ -183,19 +183,9 @@ class NWBFile(NWBContainer):
|
|||
...,
|
||||
description="""Experimental metadata, including protocol, notes and description of hardware device(s). The metadata stored in this section should be used to describe the experiment. Metadata necessary for interpreting the data is stored with the data. General experimental metadata, including animal strain, experimental protocols, experimenter, devices, etc, are stored under 'general'. Core metadata (e.g., that required to interpret data fields) is stored with the data itself, and implicitly defined by the file specification (e.g., time is in seconds). The strategy used here for storing non-core metadata is to use free-form text fields, such as would appear in sentences or paragraphs from a Methods section. Metadata fields are text to enable them to be more general, for example to represent ranges instead of numerical values. Machine-readable metadata is stored as attributes to these free-form datasets. All entries in the below table are to be included when data is present. Unused groups (e.g., intracellular_ephys in an optophysiology experiment) should not be created unless there is data to store within them.""",
|
||||
)
|
||||
intervals: Optional[List[TimeIntervals]] = Field(
|
||||
intervals: Optional[NWBFileIntervals] = Field(
|
||||
None,
|
||||
description="""Experimental intervals, whether that be logically distinct sub-experiments having a particular scientific goal, trials (see trials subgroup) during an experiment, or epochs (see epochs subgroup) deriving from analysis of data.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"any_of": [
|
||||
{"range": "TimeIntervals"},
|
||||
{"range": "TimeIntervals"},
|
||||
{"range": "TimeIntervals"},
|
||||
{"range": "TimeIntervals"},
|
||||
]
|
||||
}
|
||||
},
|
||||
)
|
||||
units: Optional[Units] = Field(None, description="""Data about sorted spike units.""")
|
||||
|
||||
|
@ -551,6 +541,35 @@ class GeneralIntracellularEphys(ConfiguredBaseModel):
|
|||
)
|
||||
|
||||
|
||||
class NWBFileIntervals(ConfiguredBaseModel):
|
||||
"""
|
||||
Experimental intervals, whether that be logically distinct sub-experiments having a particular scientific goal, trials (see trials subgroup) during an experiment, or epochs (see epochs subgroup) deriving from analysis of data.
|
||||
"""
|
||||
|
||||
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "core.nwb.file"})
|
||||
|
||||
name: Literal["intervals"] = Field(
|
||||
"intervals",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"equals_string": "intervals", "ifabsent": "string(intervals)"}
|
||||
},
|
||||
)
|
||||
epochs: Optional[TimeIntervals] = Field(
|
||||
None,
|
||||
description="""Divisions in time marking experimental stages or sub-divisions of a single recording session.""",
|
||||
)
|
||||
trials: Optional[TimeIntervals] = Field(
|
||||
None, description="""Repeated experimental events that have a logical grouping."""
|
||||
)
|
||||
invalid_times: Optional[TimeIntervals] = Field(
|
||||
None, description="""Time intervals that should be removed from analysis."""
|
||||
)
|
||||
time_intervals: Optional[List[TimeIntervals]] = Field(
|
||||
None,
|
||||
description="""Optional additional table(s) for describing other experimental time intervals.""",
|
||||
)
|
||||
|
||||
|
||||
class LabMetaData(NWBContainer):
|
||||
"""
|
||||
Lab-specific meta-data.
|
||||
|
@ -609,5 +628,6 @@ GeneralSourceScript.model_rebuild()
|
|||
GeneralExtracellularEphys.model_rebuild()
|
||||
ExtracellularEphysElectrodes.model_rebuild()
|
||||
GeneralIntracellularEphys.model_rebuild()
|
||||
NWBFileIntervals.model_rebuild()
|
||||
LabMetaData.model_rebuild()
|
||||
Subject.model_rebuild()
|
||||
|
|
|
@ -5,6 +5,7 @@ from enum import Enum
|
|||
import re
|
||||
import sys
|
||||
import numpy as np
|
||||
from ...core.v2_5_0.core_nwb_device import Device
|
||||
from ...core.v2_5_0.core_nwb_base import (
|
||||
TimeSeries,
|
||||
TimeSeriesStartingTime,
|
||||
|
@ -124,6 +125,15 @@ class PatchClampSeries(TimeSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -171,7 +181,7 @@ class PatchClampSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion' and add 'offset'.""",
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_times"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_times"], float]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_times"}]}}}
|
||||
)
|
||||
|
||||
|
@ -202,6 +212,15 @@ class CurrentClampSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -279,6 +298,15 @@ class IZeroClampSeries(CurrentClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -332,6 +360,15 @@ class CurrentClampStimulusSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -424,6 +461,15 @@ class VoltageClampSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -656,6 +702,15 @@ class VoltageClampStimulusSeries(PatchClampSeries):
|
|||
None,
|
||||
description="""Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).""",
|
||||
)
|
||||
electrode: Union[IntracellularElectrode, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "IntracellularElectrode"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -733,6 +788,15 @@ class IntracellularElectrode(NWBContainer):
|
|||
slice: Optional[str] = Field(
|
||||
None, description="""Information about slice used for recording."""
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class SweepTable(DynamicTable):
|
||||
|
@ -761,7 +825,12 @@ class SweepTable(DynamicTable):
|
|||
...,
|
||||
description="""Index for series.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
@ -828,7 +897,12 @@ class IntracellularStimuliTable(DynamicTable):
|
|||
...,
|
||||
description="""Column storing the reference to the recorded stimulus for the recording (rows).""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
@ -862,7 +936,12 @@ class IntracellularResponsesTable(DynamicTable):
|
|||
...,
|
||||
description="""Column storing the reference to the recorded response for the recording (rows)""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
@ -910,7 +989,7 @@ class IntracellularRecordingsTable(AlignedDynamicTable):
|
|||
responses: IntracellularResponsesTable = Field(
|
||||
..., description="""Table for storing intracellular response related metadata."""
|
||||
)
|
||||
children: Optional[List[DynamicTable]] = Field(
|
||||
value: Optional[List[DynamicTable]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "DynamicTable"}]}}
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
@ -953,7 +1032,12 @@ class SimultaneousRecordingsTable(DynamicTable):
|
|||
...,
|
||||
description="""Index dataset for the recordings column.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
@ -993,7 +1077,7 @@ class SimultaneousRecordingsTableRecordings(DynamicTableRegion):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what this table region points to."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
@ -1029,7 +1113,12 @@ class SequentialRecordingsTable(DynamicTable):
|
|||
...,
|
||||
description="""Index dataset for the simultaneous_recordings column.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
stimulus_type: NDArray[Any, str] = Field(
|
||||
|
@ -1081,7 +1170,7 @@ class SequentialRecordingsTableSimultaneousRecordings(DynamicTableRegion):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what this table region points to."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
@ -1114,7 +1203,12 @@ class RepetitionsTable(DynamicTable):
|
|||
...,
|
||||
description="""Index dataset for the sequential_recordings column.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
@ -1157,7 +1251,7 @@ class RepetitionsTableSequentialRecordings(DynamicTableRegion):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what this table region points to."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
@ -1192,7 +1286,12 @@ class ExperimentalConditionsTable(DynamicTable):
|
|||
...,
|
||||
description="""Index dataset for the repetitions column.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
@ -1232,7 +1331,7 @@ class ExperimentalConditionsTableRepetitions(DynamicTableRegion):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what this table region points to."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
|
|
@ -7,8 +7,15 @@ import sys
|
|||
from typing import Any, ClassVar, List, Literal, Dict, Optional, Union
|
||||
from pydantic import BaseModel, ConfigDict, Field, RootModel, field_validator
|
||||
import numpy as np
|
||||
from ...core.v2_5_0.core_nwb_device import Device
|
||||
from numpydantic import NDArray, Shape
|
||||
from ...core.v2_5_0.core_nwb_base import Image, TimeSeries, TimeSeriesStartingTime, TimeSeriesSync
|
||||
from ...core.v2_5_0.core_nwb_base import (
|
||||
Image,
|
||||
TimeSeries,
|
||||
TimeSeriesStartingTime,
|
||||
TimeSeriesSync,
|
||||
Images,
|
||||
)
|
||||
|
||||
metamodel_version = "None"
|
||||
version = "2.5.0"
|
||||
|
@ -75,7 +82,7 @@ class GrayscaleImage(Image):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -98,7 +105,7 @@ class RGBImage(Image):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -121,7 +128,7 @@ class RGBAImage(Image):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -159,6 +166,15 @@ class ImageSeries(TimeSeries):
|
|||
None,
|
||||
description="""Format of image. If this is 'external', then the attribute 'external_file' contains the path information to the image files. If this is 'raw', then the raw (single-channel) binary data is stored in the 'data' dataset. If this attribute is not present, then the default format='raw' case is assumed.""",
|
||||
)
|
||||
device: Optional[Union[Device, str]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -208,7 +224,7 @@ class ImageSeriesExternalFile(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Each external image may contain one or more consecutive frames of the full ImageSeries. This attribute serves as an index to indicate which frames each file contains, to faciliate random access. The 'starting_frame' attribute, hence, contains a list of frame numbers within the full ImageSeries of the first frame of each file listed in the parent 'external_file' dataset. Zero-based indexing is used (hence, the first element will always be zero). For example, if the 'external_file' dataset has three paths to files and the first file has 5 frames, the second file has 10 frames, and the third file has 20 frames, then this attribute will have values [0, 5, 15]. If there is a single external file that holds all of the frames of the ImageSeries (and so there is a single element in the 'external_file' dataset), then this attribute should have value [0].""",
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_files"], str]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_files"], str]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_files"}]}}}
|
||||
)
|
||||
|
||||
|
@ -223,6 +239,15 @@ class ImageMaskSeries(ImageSeries):
|
|||
)
|
||||
|
||||
name: str = Field(...)
|
||||
masked_imageseries: Union[ImageSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImageSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
data: Union[
|
||||
NDArray[Shape["* frame, * x, * y"], float], NDArray[Shape["* frame, * x, * y, * z"], float]
|
||||
] = Field(
|
||||
|
@ -242,6 +267,15 @@ class ImageMaskSeries(ImageSeries):
|
|||
None,
|
||||
description="""Format of image. If this is 'external', then the attribute 'external_file' contains the path information to the image files. If this is 'raw', then the raw (single-channel) binary data is stored in the 'data' dataset. If this attribute is not present, then the default format='raw' case is assumed.""",
|
||||
)
|
||||
device: Optional[Union[Device, str]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -313,6 +347,15 @@ class OpticalSeries(ImageSeries):
|
|||
None,
|
||||
description="""Format of image. If this is 'external', then the attribute 'external_file' contains the path information to the image files. If this is 'raw', then the raw (single-channel) binary data is stored in the 'data' dataset. If this attribute is not present, then the default format='raw' case is assumed.""",
|
||||
)
|
||||
device: Optional[Union[Device, str]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -360,6 +403,24 @@ class IndexSeries(TimeSeries):
|
|||
description="""Index of the image (using zero-indexing) in the linked Images object.""",
|
||||
json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_times"}]}}},
|
||||
)
|
||||
indexed_timeseries: Optional[Union[ImageSeries, str]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImageSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
indexed_images: Optional[Union[Images, str]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Images"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
|
|
@ -167,7 +167,7 @@ class AbstractFeatureSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Since there can be different units for different features, store the units in 'feature_units'. The default value for this attribute is \"see 'feature_units'\".""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* num_times"], float],
|
||||
NDArray[Shape["* num_times, * num_features"], float],
|
||||
|
@ -287,13 +287,27 @@ class DecompositionSeries(TimeSeries):
|
|||
None,
|
||||
description="""DynamicTableRegion pointer to the channels that this decomposition series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
bands: DecompositionSeriesBands = Field(
|
||||
...,
|
||||
description="""Table for describing the bands that this series was generated from. There should be one row in this table for each band.""",
|
||||
)
|
||||
source_timeseries: Optional[Union[TimeSeries, str]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "TimeSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -341,7 +355,7 @@ class DecompositionSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion'.""",
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_times, * num_channels, * num_bands"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_times, * num_channels, * num_bands"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
|
@ -432,7 +446,12 @@ class Units(DynamicTable):
|
|||
None,
|
||||
description="""Index into the spike_times dataset.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
spike_times: Optional[UnitsSpikeTimes] = Field(
|
||||
|
@ -442,7 +461,12 @@ class Units(DynamicTable):
|
|||
None,
|
||||
description="""Index into the obs_intervals dataset.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
obs_intervals: Optional[NDArray[Shape["* num_intervals, 2 start_end"], float]] = Field(
|
||||
|
@ -463,14 +487,24 @@ class Units(DynamicTable):
|
|||
None,
|
||||
description="""Index into electrodes.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
electrodes: Named[Optional[DynamicTableRegion]] = Field(
|
||||
None,
|
||||
description="""Electrode that each spike unit came from, specified using a DynamicTableRegion.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
electrode_group: Optional[List[ElectrodeGroup]] = Field(
|
||||
|
@ -501,14 +535,24 @@ class Units(DynamicTable):
|
|||
None,
|
||||
description="""Index into the waveforms dataset. One value for every spike event. See 'waveforms' for more detail.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
waveforms_index_index: Named[Optional[VectorIndex]] = Field(
|
||||
None,
|
||||
description="""Index into the waveforms_index dataset. One value for every unit (row in the table). See 'waveforms' for more detail.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
@ -548,7 +592,7 @@ class UnitsSpikeTimes(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
|
|
@ -14,6 +14,7 @@ from ...core.v2_5_0.core_nwb_base import (
|
|||
TimeSeriesSync,
|
||||
NWBContainer,
|
||||
)
|
||||
from ...core.v2_5_0.core_nwb_device import Device
|
||||
|
||||
metamodel_version = "None"
|
||||
version = "2.5.0"
|
||||
|
@ -81,6 +82,15 @@ class OptogeneticSeries(TimeSeries):
|
|||
description="""Applied power for optogenetic stimulus, in watts.""",
|
||||
json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_times"}]}}},
|
||||
)
|
||||
site: Union[OptogeneticStimulusSite, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "OptogeneticStimulusSite"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -129,6 +139,15 @@ class OptogeneticStimulusSite(NWBContainer):
|
|||
...,
|
||||
description="""Location of the stimulation site. Specify the area, layer, comments on estimation of area/layer, stereotaxic coordinates if in vivo, etc. Use standard atlas names for anatomical regions when possible.""",
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
# Model rebuild
|
||||
|
|
|
@ -21,8 +21,8 @@ from ...hdmf_common.v1_5_0.hdmf_common_table import (
|
|||
VectorIndex,
|
||||
VectorData,
|
||||
)
|
||||
from ...core.v2_5_0.core_nwb_device import Device
|
||||
from numpydantic import NDArray, Shape
|
||||
from ...core.v2_5_0.core_nwb_image import ImageSeries, ImageSeriesExternalFile
|
||||
from ...core.v2_5_0.core_nwb_base import (
|
||||
TimeSeriesStartingTime,
|
||||
TimeSeriesSync,
|
||||
|
@ -30,6 +30,7 @@ from ...core.v2_5_0.core_nwb_base import (
|
|||
NWBDataInterface,
|
||||
NWBContainer,
|
||||
)
|
||||
from ...core.v2_5_0.core_nwb_image import ImageSeries, ImageSeriesExternalFile
|
||||
|
||||
metamodel_version = "None"
|
||||
version = "2.5.0"
|
||||
|
@ -124,6 +125,15 @@ class TwoPhotonSeries(ImageSeries):
|
|||
NDArray[Shape["2 width_height"], float], NDArray[Shape["3 width_height_depth"], float]
|
||||
]
|
||||
] = Field(None, description="""Width, height and depth of image, or imaged area, in meters.""")
|
||||
imaging_plane: Union[ImagingPlane, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImagingPlane"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
data: Union[
|
||||
NDArray[Shape["* frame, * x, * y"], float], NDArray[Shape["* frame, * x, * y, * z"], float]
|
||||
] = Field(
|
||||
|
@ -143,6 +153,15 @@ class TwoPhotonSeries(ImageSeries):
|
|||
None,
|
||||
description="""Format of image. If this is 'external', then the attribute 'external_file' contains the path information to the image files. If this is 'raw', then the raw (single-channel) binary data is stored in the 'data' dataset. If this attribute is not present, then the default format='raw' case is assumed.""",
|
||||
)
|
||||
device: Optional[Union[Device, str]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
comments: Optional[str] = Field(
|
||||
None,
|
||||
|
@ -192,7 +211,12 @@ class RoiResponseSeries(TimeSeries):
|
|||
...,
|
||||
description="""DynamicTableRegion referencing into an ROITable containing information on the ROIs stored in this timeseries.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the time series.""")
|
||||
|
@ -236,7 +260,7 @@ class DfOverF(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[RoiResponseSeries]] = Field(
|
||||
value: Optional[List[RoiResponseSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "RoiResponseSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -251,7 +275,7 @@ class Fluorescence(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[RoiResponseSeries]] = Field(
|
||||
value: Optional[List[RoiResponseSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "RoiResponseSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -266,7 +290,7 @@ class ImageSegmentation(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[PlaneSegmentation]] = Field(
|
||||
value: Optional[List[PlaneSegmentation]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "PlaneSegmentation"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -290,7 +314,12 @@ class PlaneSegmentation(DynamicTable):
|
|||
None,
|
||||
description="""Index into pixel_mask.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
pixel_mask: Optional[PlaneSegmentationPixelMask] = Field(
|
||||
|
@ -301,7 +330,12 @@ class PlaneSegmentation(DynamicTable):
|
|||
None,
|
||||
description="""Index into voxel_mask.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
voxel_mask: Optional[PlaneSegmentationVoxelMask] = Field(
|
||||
|
@ -313,6 +347,15 @@ class PlaneSegmentation(DynamicTable):
|
|||
description="""Image stacks that the segmentation masks apply to.""",
|
||||
json_schema_extra={"linkml_meta": {"any_of": [{"range": "ImageSeries"}]}},
|
||||
)
|
||||
imaging_plane: Union[ImagingPlane, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImagingPlane"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
None,
|
||||
description="""The names of the columns in this table. This should be used to specify an order to the columns.""",
|
||||
|
@ -346,7 +389,7 @@ class PlaneSegmentationImageMask(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
@ -375,7 +418,7 @@ class PlaneSegmentationPixelMask(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
@ -405,7 +448,7 @@ class PlaneSegmentationVoxelMask(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
@ -424,10 +467,117 @@ class ImagingPlane(NWBContainer):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[OpticalChannel]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "OpticalChannel"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
description: Optional[str] = Field(None, description="""Description of the imaging plane.""")
|
||||
excitation_lambda: float = Field(..., description="""Excitation wavelength, in nm.""")
|
||||
imaging_rate: Optional[float] = Field(
|
||||
None,
|
||||
description="""Rate that images are acquired, in Hz. If the corresponding TimeSeries is present, the rate should be stored there instead.""",
|
||||
)
|
||||
indicator: str = Field(..., description="""Calcium indicator.""")
|
||||
location: str = Field(
|
||||
...,
|
||||
description="""Location of the imaging plane. Specify the area, layer, comments on estimation of area/layer, stereotaxic coordinates if in vivo, etc. Use standard atlas names for anatomical regions when possible.""",
|
||||
)
|
||||
manifold: Optional[ImagingPlaneManifold] = Field(
|
||||
None,
|
||||
description="""DEPRECATED Physical position of each pixel. 'xyz' represents the position of the pixel relative to the defined coordinate space. Deprecated in favor of origin_coords and grid_spacing.""",
|
||||
)
|
||||
origin_coords: Optional[ImagingPlaneOriginCoords] = Field(
|
||||
None,
|
||||
description="""Physical location of the first element of the imaging plane (0, 0) for 2-D data or (0, 0, 0) for 3-D data. See also reference_frame for what the physical location is relative to (e.g., bregma).""",
|
||||
)
|
||||
grid_spacing: Optional[ImagingPlaneGridSpacing] = Field(
|
||||
None,
|
||||
description="""Space between pixels in (x, y) or voxels in (x, y, z) directions, in the specified unit. Assumes imaging plane is a regular grid. See also reference_frame to interpret the grid.""",
|
||||
)
|
||||
reference_frame: Optional[str] = Field(
|
||||
None,
|
||||
description="""Describes reference frame of origin_coords and grid_spacing. For example, this can be a text description of the anatomical location and orientation of the grid defined by origin_coords and grid_spacing or the vectors needed to transform or rotate the grid to a common anatomical axis (e.g., AP/DV/ML). This field is necessary to interpret origin_coords and grid_spacing. If origin_coords and grid_spacing are not present, then this field is not required. For example, if the microscope takes 10 x 10 x 2 images, where the first value of the data matrix (index (0, 0, 0)) corresponds to (-1.2, -0.6, -2) mm relative to bregma, the spacing between pixels is 0.2 mm in x, 0.2 mm in y and 0.5 mm in z, and larger numbers in x means more anterior, larger numbers in y means more rightward, and larger numbers in z means more ventral, then enter the following -- origin_coords = (-1.2, -0.6, -2) grid_spacing = (0.2, 0.2, 0.5) reference_frame = \"Origin coordinates are relative to bregma. First dimension corresponds to anterior-posterior axis (larger index = more anterior). Second dimension corresponds to medial-lateral axis (larger index = more rightward). Third dimension corresponds to dorsal-ventral axis (larger index = more ventral).\"""",
|
||||
)
|
||||
optical_channel: List[OpticalChannel] = Field(
|
||||
..., description="""An optical channel used to record from an imaging plane."""
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class ImagingPlaneManifold(ConfiguredBaseModel):
|
||||
"""
|
||||
DEPRECATED Physical position of each pixel. 'xyz' represents the position of the pixel relative to the defined coordinate space. Deprecated in favor of origin_coords and grid_spacing.
|
||||
"""
|
||||
|
||||
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "core.nwb.ophys"})
|
||||
|
||||
name: Literal["manifold"] = Field(
|
||||
"manifold",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"equals_string": "manifold", "ifabsent": "string(manifold)"}
|
||||
},
|
||||
)
|
||||
conversion: Optional[float] = Field(
|
||||
None,
|
||||
description="""Scalar to multiply each element in data to convert it to the specified 'unit'. If the data are stored in acquisition system units or other units that require a conversion to be interpretable, multiply the data by 'conversion' to convert the data to the specified 'unit'. e.g. if the data acquisition system stores values in this object as pixels from x = -500 to 499, y = -500 to 499 that correspond to a 2 m x 2 m range, then the 'conversion' multiplier to get from raw data acquisition pixel units to meters is 2/1000.""",
|
||||
)
|
||||
unit: Optional[str] = Field(
|
||||
None,
|
||||
description="""Base unit of measurement for working with the data. The default value is 'meters'.""",
|
||||
)
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* height, * width, 3 x_y_z"], float],
|
||||
NDArray[Shape["* height, * width, * depth, 3 x_y_z"], float],
|
||||
]
|
||||
] = Field(None)
|
||||
|
||||
|
||||
class ImagingPlaneOriginCoords(ConfiguredBaseModel):
|
||||
"""
|
||||
Physical location of the first element of the imaging plane (0, 0) for 2-D data or (0, 0, 0) for 3-D data. See also reference_frame for what the physical location is relative to (e.g., bregma).
|
||||
"""
|
||||
|
||||
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "core.nwb.ophys"})
|
||||
|
||||
name: Literal["origin_coords"] = Field(
|
||||
"origin_coords",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"equals_string": "origin_coords", "ifabsent": "string(origin_coords)"}
|
||||
},
|
||||
)
|
||||
unit: Optional[str] = Field(
|
||||
None, description="""Measurement units for origin_coords. The default value is 'meters'."""
|
||||
)
|
||||
value: Optional[Union[NDArray[Shape["2 x_y"], float], NDArray[Shape["3 x_y_z"], float]]] = (
|
||||
Field(None)
|
||||
)
|
||||
|
||||
|
||||
class ImagingPlaneGridSpacing(ConfiguredBaseModel):
|
||||
"""
|
||||
Space between pixels in (x, y) or voxels in (x, y, z) directions, in the specified unit. Assumes imaging plane is a regular grid. See also reference_frame to interpret the grid.
|
||||
"""
|
||||
|
||||
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "core.nwb.ophys"})
|
||||
|
||||
name: Literal["grid_spacing"] = Field(
|
||||
"grid_spacing",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"equals_string": "grid_spacing", "ifabsent": "string(grid_spacing)"}
|
||||
},
|
||||
)
|
||||
unit: Optional[str] = Field(
|
||||
None, description="""Measurement units for grid_spacing. The default value is 'meters'."""
|
||||
)
|
||||
value: Optional[Union[NDArray[Shape["2 x_y"], float], NDArray[Shape["3 x_y_z"], float]]] = (
|
||||
Field(None)
|
||||
)
|
||||
|
||||
|
||||
class OpticalChannel(NWBContainer):
|
||||
|
@ -453,7 +603,7 @@ class MotionCorrection(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ophys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[CorrectedImageStack]] = Field(
|
||||
value: Optional[List[CorrectedImageStack]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "CorrectedImageStack"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -476,6 +626,15 @@ class CorrectedImageStack(NWBDataInterface):
|
|||
...,
|
||||
description="""Stores the x,y delta necessary to align each frame to the common coordinates, for example, to align each frame to a reference image.""",
|
||||
)
|
||||
original: Union[ImageSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ImageSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
# Model rebuild
|
||||
|
@ -490,6 +649,9 @@ PlaneSegmentationImageMask.model_rebuild()
|
|||
PlaneSegmentationPixelMask.model_rebuild()
|
||||
PlaneSegmentationVoxelMask.model_rebuild()
|
||||
ImagingPlane.model_rebuild()
|
||||
ImagingPlaneManifold.model_rebuild()
|
||||
ImagingPlaneOriginCoords.model_rebuild()
|
||||
ImagingPlaneGridSpacing.model_rebuild()
|
||||
OpticalChannel.model_rebuild()
|
||||
MotionCorrection.model_rebuild()
|
||||
CorrectedImageStack.model_rebuild()
|
||||
|
|
|
@ -135,7 +135,7 @@ class ImagingRetinotopyAxis1PhaseMap(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Unit that axis data is stored in (e.g., degrees)."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -167,7 +167,7 @@ class ImagingRetinotopyAxis1PowerMap(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Unit that axis data is stored in (e.g., degrees)."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -199,7 +199,7 @@ class ImagingRetinotopyAxis2PhaseMap(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Unit that axis data is stored in (e.g., degrees)."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -231,7 +231,7 @@ class ImagingRetinotopyAxis2PowerMap(ConfiguredBaseModel):
|
|||
unit: Optional[str] = Field(
|
||||
None, description="""Unit that axis data is stored in (e.g., degrees)."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -268,7 +268,7 @@ class ImagingRetinotopyFocalDepthImage(ConfiguredBaseModel):
|
|||
format: Optional[str] = Field(
|
||||
None, description="""Format of image. Right now only 'raw' is supported."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], int]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], int]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -294,7 +294,7 @@ class ImagingRetinotopySignMap(ConfiguredBaseModel):
|
|||
description="""Number of rows and columns in the image. NOTE: row, column representation is equivalent to height, width.""",
|
||||
)
|
||||
field_of_view: Optional[float] = Field(None, description="""Size of viewing area, in meters.""")
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], float]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
@ -330,7 +330,7 @@ class ImagingRetinotopyVasculatureImage(ConfiguredBaseModel):
|
|||
format: Optional[str] = Field(
|
||||
None, description="""Format of image. Right now only 'raw' is supported."""
|
||||
)
|
||||
array: Optional[NDArray[Shape["* num_rows, * num_cols"], int]] = Field(
|
||||
value: Optional[NDArray[Shape["* num_rows, * num_cols"], int]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"array": {"dimensions": [{"alias": "num_rows"}, {"alias": "num_cols"}]}}
|
||||
|
|
|
@ -61,6 +61,9 @@ from ...core.v2_5_0.core_nwb_ophys import (
|
|||
PlaneSegmentationPixelMask,
|
||||
PlaneSegmentationVoxelMask,
|
||||
ImagingPlane,
|
||||
ImagingPlaneManifold,
|
||||
ImagingPlaneOriginCoords,
|
||||
ImagingPlaneGridSpacing,
|
||||
OpticalChannel,
|
||||
MotionCorrection,
|
||||
CorrectedImageStack,
|
||||
|
@ -155,6 +158,7 @@ from ...core.v2_5_0.core_nwb_file import (
|
|||
GeneralExtracellularEphys,
|
||||
ExtracellularEphysElectrodes,
|
||||
GeneralIntracellularEphys,
|
||||
NWBFileIntervals,
|
||||
LabMetaData,
|
||||
Subject,
|
||||
)
|
||||
|
|
|
@ -126,7 +126,7 @@ class TimeSeriesReferenceVectorData(VectorData):
|
|||
description: Optional[str] = Field(
|
||||
None, description="""Description of what these vectors represent."""
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* dim0"], Any],
|
||||
NDArray[Shape["* dim0, * dim1"], Any],
|
||||
|
@ -150,7 +150,7 @@ class Image(NWBData):
|
|||
None, description="""Pixel resolution of the image, in pixels per centimeter."""
|
||||
)
|
||||
description: Optional[str] = Field(None, description="""Description of the image.""")
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* x, * y"], float],
|
||||
NDArray[Shape["* x, * y, 3 r_g_b"], float],
|
||||
|
@ -169,8 +169,14 @@ class ImageReferences(NWBData):
|
|||
)
|
||||
|
||||
name: str = Field(...)
|
||||
image: List[Image] = Field(
|
||||
..., description="""Ordered dataset of references to Image objects."""
|
||||
value: List[Image] = Field(
|
||||
...,
|
||||
description="""Ordered dataset of references to Image objects.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "reference"}}
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
|
@ -275,7 +281,7 @@ class TimeSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Optionally describe the continuity of the data. Can be \"continuous\", \"instantaneous\", or \"step\". For example, a voltage trace would be \"continuous\", because samples are recorded from a continuous process. An array of lick times would be \"instantaneous\", because the data represents distinct moments in time. Times of image presentations would be \"step\" because the picture remains the same until the next timepoint. This field is optional, but is useful in providing information about the underlying data. It may inform the way this data is interpreted, the way it is visualized, and what analysis methods are applicable.""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* num_times"], Any],
|
||||
NDArray[Shape["* num_times, * num_dim2"], Any],
|
||||
|
@ -327,7 +333,7 @@ class ProcessingModule(NWBContainer):
|
|||
{"from_schema": "core.nwb.base", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[Union[DynamicTable, NWBDataInterface]]] = Field(
|
||||
value: Optional[List[Union[DynamicTable, NWBDataInterface]]] = Field(
|
||||
None,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"any_of": [{"range": "NWBDataInterface"}, {"range": "DynamicTable"}]}
|
||||
|
@ -354,7 +360,12 @@ class Images(NWBDataInterface):
|
|||
None,
|
||||
description="""Ordered dataset of references to Image objects stored in the parent group. Each Image object in the Images group should be stored once and only once, so the dataset should have the same length as the number of images.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
|
|
@ -131,7 +131,7 @@ class SpatialSeriesData(ConfiguredBaseModel):
|
|||
None,
|
||||
description="""Base unit of measurement for working with the data. The default value is 'meters'. Actual stored values are not necessarily stored in these units. To access the data in these units, multiply 'data' by 'conversion' and add 'offset'.""",
|
||||
)
|
||||
array: Optional[
|
||||
value: Optional[
|
||||
Union[
|
||||
NDArray[Shape["* num_times"], float],
|
||||
NDArray[Shape["* num_times, 1 x"], float],
|
||||
|
@ -150,7 +150,7 @@ class BehavioralEpochs(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[IntervalSeries]] = Field(
|
||||
value: Optional[List[IntervalSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "IntervalSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -165,7 +165,7 @@ class BehavioralEvents(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[TimeSeries]] = Field(
|
||||
value: Optional[List[TimeSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "TimeSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -180,7 +180,7 @@ class BehavioralTimeSeries(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[TimeSeries]] = Field(
|
||||
value: Optional[List[TimeSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "TimeSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -195,7 +195,7 @@ class PupilTracking(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[TimeSeries]] = Field(
|
||||
value: Optional[List[TimeSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "TimeSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -210,7 +210,7 @@ class EyeTracking(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpatialSeries]] = Field(
|
||||
value: Optional[List[SpatialSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpatialSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -225,7 +225,7 @@ class CompassDirection(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpatialSeries]] = Field(
|
||||
value: Optional[List[SpatialSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpatialSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -240,7 +240,7 @@ class Position(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.behavior", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpatialSeries]] = Field(
|
||||
value: Optional[List[SpatialSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpatialSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
|
|
@ -16,6 +16,7 @@ from pydantic import (
|
|||
ValidationInfo,
|
||||
BeforeValidator,
|
||||
)
|
||||
from ...core.v2_6_0_alpha.core_nwb_device import Device
|
||||
from ...core.v2_6_0_alpha.core_nwb_base import (
|
||||
TimeSeries,
|
||||
TimeSeriesStartingTime,
|
||||
|
@ -120,7 +121,12 @@ class ElectricalSeries(TimeSeries):
|
|||
...,
|
||||
description="""DynamicTableRegion pointer to the electrodes that this time series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
channel_conversion: Optional[NDArray[Shape["* num_channels"], float]] = Field(
|
||||
|
@ -187,7 +193,12 @@ class SpikeEventSeries(ElectricalSeries):
|
|||
...,
|
||||
description="""DynamicTableRegion pointer to the electrodes that this time series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
channel_conversion: Optional[NDArray[Shape["* num_channels"], float]] = Field(
|
||||
|
@ -264,7 +275,12 @@ class FeatureExtraction(NWBDataInterface):
|
|||
...,
|
||||
description="""DynamicTableRegion pointer to the electrodes that this time series was generated from.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
@ -295,6 +311,15 @@ class EventDetection(NWBDataInterface):
|
|||
description="""Timestamps of events, in seconds.""",
|
||||
json_schema_extra={"linkml_meta": {"array": {"dimensions": [{"alias": "num_events"}]}}},
|
||||
)
|
||||
source_electricalseries: Union[ElectricalSeries, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "ElectricalSeries"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class EventWaveform(NWBDataInterface):
|
||||
|
@ -306,7 +331,7 @@ class EventWaveform(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ecephys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[SpikeEventSeries]] = Field(
|
||||
value: Optional[List[SpikeEventSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "SpikeEventSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -321,7 +346,7 @@ class FilteredEphys(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ecephys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[ElectricalSeries]] = Field(
|
||||
value: Optional[List[ElectricalSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "ElectricalSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -336,7 +361,7 @@ class LFP(NWBDataInterface):
|
|||
{"from_schema": "core.nwb.ecephys", "tree_root": True}
|
||||
)
|
||||
|
||||
children: Optional[List[ElectricalSeries]] = Field(
|
||||
value: Optional[List[ElectricalSeries]] = Field(
|
||||
None, json_schema_extra={"linkml_meta": {"any_of": [{"range": "ElectricalSeries"}]}}
|
||||
)
|
||||
name: str = Field(...)
|
||||
|
@ -360,6 +385,15 @@ class ElectrodeGroup(NWBContainer):
|
|||
position: Optional[ElectrodeGroupPosition] = Field(
|
||||
None, description="""stereotaxic or common framework coordinates"""
|
||||
)
|
||||
device: Union[Device, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Device"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class ElectrodeGroupPosition(ConfiguredBaseModel):
|
||||
|
@ -414,6 +448,15 @@ class ClusterWaveforms(NWBDataInterface):
|
|||
}
|
||||
},
|
||||
)
|
||||
clustering_interface: Union[Clustering, str] = Field(
|
||||
...,
|
||||
json_schema_extra={
|
||||
"linkml_meta": {
|
||||
"annotations": {"source_type": {"tag": "source_type", "value": "link"}},
|
||||
"any_of": [{"range": "Clustering"}, {"range": "string"}],
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class Clustering(NWBDataInterface):
|
||||
|
|
|
@ -127,21 +127,36 @@ class TimeIntervals(DynamicTable):
|
|||
None,
|
||||
description="""Index for tags.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
timeseries: Named[Optional[TimeSeriesReferenceVectorData]] = Field(
|
||||
None,
|
||||
description="""An index into a TimeSeries object.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
timeseries_index: Named[Optional[VectorIndex]] = Field(
|
||||
None,
|
||||
description="""Index for timeseries.""",
|
||||
json_schema_extra={
|
||||
"linkml_meta": {"annotations": {"named": {"tag": "named", "value": True}}}
|
||||
"linkml_meta": {
|
||||
"annotations": {
|
||||
"named": {"tag": "named", "value": True},
|
||||
"source_type": {"tag": "source_type", "value": "neurodata_type_inc"},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
colnames: Optional[str] = Field(
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue