Skip to content

Commit 36e2d89

Browse files
Merge branch 'v0.3.x' into add-dimension-attribute-to-imagingspace
2 parents aabf91c + 043d140 commit 36e2d89

26 files changed

+1749
-970
lines changed

CHANGELOG.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
1-
# v0.3.0 (upcoming)
1+
# v0.3.0 (Jun 3, 2025)
22
## Bug Fixes
33

44
## Deprecations and Changes
5+
- Removed `ExcitationLightPath` and `EmissionLightPath` classes in favor of a more integrated approach with `MicroscopyRig`
56

67
## Features
78
### NWB TAB reviews Issue[#48](https://github.com/catalystneuro/ndx-microscopy/issues/48)
9+
- Added `MicroscopyChannel` object Sub-Issue[#49](https://github.com/catalystneuro/ndx-microscopy/issues/49)
10+
- Added `MicroscopyRig` object Sub-Issue[#51](https://github.com/catalystneuro/ndx-microscopy/issues/51)
11+
- Changed `Microscope` to inherit from `DeviceInstance` instead of `Device` Sub-Issue[#51](https://github.com/catalystneuro/ndx-microscopy/issues/51)
12+
- Added `MicroscopeModel` that inherit from `DeviceModel` Sub-Issue[#51](https://github.com/catalystneuro/ndx-microscopy/issues/51)
13+
- Updated `MicroscopySeries` to use `MicroscopyRig` instead of individual `microscope`, `excitation_light_path`, and `emission_light_path` references Sub-Issue[#51](https://github.com/catalystneuro/ndx-microscopy/issues/51)
814
- Added `dimensions_in_pixels` to `PlanarImagingSpace` and `dimensions_in_voxels` to `VolumetricImagingSpace` object Sub-Issue[#52](https://github.com/catalystneuro/ndx-microscopy/issues/52)
915

1016
# v0.2.1 (March 28, 2025)

README.md

Lines changed: 84 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,16 @@ A Neurodata Without Borders (NWB) extension for storing microscopy data and asso
66

77
**Comprehensive Neurodata Types**
88
- Microscope and optical component metadata (integration with [ndx-ophys-devices](https://github.com/catalystneuro/ndx-ophys-devices)):
9+
- `MicroscopeModel`
910
- `Microscope`
11+
- `MicroscopyRig`
1012
- `ExcitationSource` / `PulsedExcitationSource`
1113
- `BandOpticalFilter` / `EdgeOpticalFilter` /
1214
- `DichroicMirror`
1315
- `Photodetector`
1416
- `Indicator`
15-
- Advanced light path configurations:
16-
- `ExcitationLightPath`
17-
- `EmissionLightPath`
17+
- Microscopy channel configurations:
18+
- `MicroscopyChannel`
1819
- Imaging space definitions:
1920
- `PlanarImagingSpace`
2021
- `VolumetricImagingSpace`
@@ -37,65 +38,66 @@ A Neurodata Without Borders (NWB) extension for storing microscopy data and asso
3738

3839
## Entity Relationship Diagrams
3940

40-
#### Device and Light Path Components
41+
#### Device Components
4142

4243
```mermaid
4344
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#ffffff', 'primaryBorderColor': '#144E73', 'lineColor': '#D96F32'}}}%%
4445
4546
classDiagram
4647
direction TB
47-
48-
class DeviceModel {
48+
49+
class DeviceModel{
4950
<<Device>>
5051
--------------------------------------
5152
attributes
5253
--------------------------------------
53-
model : text, optional
54+
manufacturer : text
55+
model_number : text, optional
5456
}
55-
56-
class ExcitationLightPath {
57-
<<LabMetaData>>
57+
58+
class DeviceInstance{
59+
<<Device>>
5860
--------------------------------------
5961
attributes
6062
--------------------------------------
61-
**description** : text
63+
serial_number : text, optional
6264
--------------------------------------
6365
links
6466
--------------------------------------
65-
**excitation_source** : ExcitationSource
66-
excitation_filter : OpticalFilter, optional
67-
dichroic_mirror : DichroicMirror, optional
68-
--------------------------------------
69-
methods
70-
--------------------------------------
71-
get_excitation_wavelength()
67+
model : DeviceModel, optional
7268
}
7369
74-
class EmissionLightPath {
75-
<<LabMetaData>>
70+
class MicroscopeModel {
71+
<<DeviceModel>>
72+
}
73+
74+
class Microscope {
75+
<<DeviceInstance>>
7676
--------------------------------------
7777
attributes
7878
--------------------------------------
79-
**description** : text
79+
technique : text, optional
80+
}
81+
82+
class MicroscopyRig {
83+
<<NWBContainer>>
8084
--------------------------------------
81-
groups
85+
attributes
8286
--------------------------------------
83-
**indicator** : Indicator
87+
description : text
8488
--------------------------------------
8589
links
8690
--------------------------------------
87-
**photodetector** : Photodetector
88-
emission_filter : OpticalFilter, optional
91+
microscope : Microscope
92+
excitation_source : ExcitationSource, optional
93+
excitation_filter : OpticalFilter, optional
8994
dichroic_mirror : DichroicMirror, optional
90-
--------------------------------------
91-
methods
92-
--------------------------------------
93-
get_emission_wavelength()
94-
get_indicator_label()
95+
photodetector : Photodetector, optional
96+
emission_filter : OpticalFilter, optional
9597
}
9698
9799
class ExcitationSource {
98-
<<DeviceModel>>
100+
<<DeviceInstance>>
99101
--------------------------------------
100102
attributes
101103
--------------------------------------
@@ -118,7 +120,7 @@ classDiagram
118120
}
119121
120122
class OpticalFilter {
121-
<<DeviceModel>>
123+
<<DeviceInstance>>
122124
--------------------------------------
123125
attributes
124126
--------------------------------------
@@ -146,7 +148,7 @@ classDiagram
146148
}
147149
148150
class DichroicMirror {
149-
<<DeviceModel>>
151+
<<DeviceInstance>>
150152
--------------------------------------
151153
attributes
152154
--------------------------------------
@@ -158,7 +160,7 @@ classDiagram
158160
}
159161
160162
class Photodetector {
161-
<<DeviceModel>>
163+
<<DeviceInstance>>
162164
--------------------------------------
163165
attributes
164166
--------------------------------------
@@ -180,21 +182,15 @@ classDiagram
180182
injection_coordinates_in_mm : float[3], optional
181183
}
182184
183-
DeviceModel <|-- ExcitationSource : extends
184-
DeviceModel <|-- OpticalFilter : extends
185-
DeviceModel <|-- Photodetector : extends
186-
DeviceModel <|-- DichroicMirror : extends
187-
ExcitationSource <|-- PulsedExcitationSource : extends
188-
OpticalFilter <|-- BandOpticalFilter : extends
189-
OpticalFilter <|-- EdgeOpticalFilter : extends
190-
191-
ExcitationLightPath o--> ExcitationSource : links
192-
ExcitationLightPath o--> OpticalFilter : links
193-
ExcitationLightPath o--> DichroicMirror : links
194-
EmissionLightPath o--> Photodetector : links
195-
EmissionLightPath o--> OpticalFilter : links
196-
EmissionLightPath o--> DichroicMirror : links
197-
EmissionLightPath *-- Indicator : contains
185+
DeviceModel <|-- MicroscopeModel : extends
186+
DeviceInstance <|-- Microscope : extends
187+
188+
Microscope o--> MicroscopeModel : links
189+
MicroscopyRig o--> Microscope : links
190+
MicroscopyRig o--> ExcitationSource : links
191+
MicroscopyRig o--> OpticalFilter : links
192+
MicroscopyRig o--> DichroicMirror : links
193+
MicroscopyRig o--> Photodetector : links
198194
```
199195

200196
#### Illumination Pattern Components
@@ -228,7 +224,7 @@ classDiagram
228224
--------------------------------------
229225
attributes
230226
--------------------------------------
231-
plane_thickness_in_um : float64, optional
227+
point_spread_function_in_um : text, optional
232228
illumination_angle_in_degrees : float64, optional
233229
plane_rate_in_Hz : float64, optional
234230
}
@@ -277,14 +273,29 @@ classDiagram
277273
classDiagram
278274
direction TB
279275
276+
class MicroscopyChannel {
277+
<<NWBContainer>>
278+
--------------------------------------
279+
attributes
280+
--------------------------------------
281+
**name** : text
282+
description : text, optional
283+
**excitation_wavelength_in_nm** : float
284+
**emission_wavelength_in_nm** : float
285+
--------------------------------------
286+
groups
287+
--------------------------------------
288+
indicator
289+
}
290+
280291
class MicroscopySeries {
281292
<<TimeSeries>>
282293
--------------------------------------
283-
links
294+
groups
284295
--------------------------------------
285-
**microscope** : Microscope
286-
**excitation_light_path** : ExcitationLightPath
287-
**emission_light_path** : EmissionLightPath
296+
**microscopy_rig** : MicroscopyRig
297+
**microscopy_channel** : MicroscopyChannel
298+
288299
}
289300
290301
class PlanarMicroscopySeries {
@@ -357,13 +368,21 @@ classDiagram
357368
dimensions_in_voxels : float64[3], optional
358369
}
359370
360-
class Microscope {
361-
<<Device>>
371+
class MicroscopyRig {
372+
<<NWBContainer>>
362373
--------------------------------------
363374
attributes
364375
--------------------------------------
365-
model : text, optional
366-
technique : text, optional
376+
description : text
377+
--------------------------------------
378+
links
379+
--------------------------------------
380+
microscope : Microscope
381+
excitation_source : ExcitationSource, optional
382+
excitation_filter : OpticalFilter, optional
383+
dichroic_mirror : DichroicMirror, optional
384+
photodetector : Photodetector, optional
385+
emission_filter : OpticalFilter, optional
367386
}
368387
369388
MicroscopySeries <|-- PlanarMicroscopySeries : extends
@@ -374,9 +393,9 @@ classDiagram
374393
PlanarMicroscopySeries *-- PlanarImagingSpace : contains
375394
VolumetricMicroscopySeries *-- VolumetricImagingSpace : contains
376395
MultiPlaneMicroscopyContainer *-- PlanarMicroscopySeries : contains
377-
MicroscopySeries o--> Microscope : links
378-
MicroscopySeries o--> ExcitationLightPath : links
379-
MicroscopySeries o--> EmissionLightPath : links
396+
MicroscopySeries *-- MicroscopyRig : contains
397+
MicroscopyChannel *-- MicroscopySeries : contains
398+
MicroscopyChannel --* Indicator : contains
380399
```
381400

382401
#### Segmentation Components
@@ -509,7 +528,7 @@ For detailed documentation, including API reference and additional examples, ple
509528

510529
To help ensure a smooth Pull Request (PR) process, please always begin by raising an issue on the main repository so we can openly discuss any problems/additions before taking action.
511530

512-
The main branch of ndx-microscopy is protected; you cannot push to it directly. You must upload your changes by pushing a new branch, then submit your changes to the main branch via a Pull Request. This allows us to conduct automated testing of your contribution, and gives us a space for developers to discuss the contribution and request changes. If you decide to tackle an issue, please make yourself an assignee on the issue to communicate this to the team. Dont worry - this does not commit you to solving this issue. It just lets others know who they should talk to about it.
531+
The main branch of ndx-microscopy is protected; you cannot push to it directly. You must upload your changes by pushing a new branch, then submit your changes to the main branch via a Pull Request. This allows us to conduct automated testing of your contribution, and gives us a space for developers to discuss the contribution and request changes. If you decide to tackle an issue, please make yourself an assignee on the issue to communicate this to the team. Don't worry - this does not commit you to solving this issue. It just lets others know who they should talk to about it.
513532

514533
From your local copy directory, use the following commands.
515534

@@ -525,7 +544,7 @@ $ git checkout -b <new_branch>
525544

526545
Make your changes. Add new objects related to optical experiment or add more attributes on the existing ones. To speed up the process, you can write mock function (see _mock.py) that would be used to test the new neurodata type
527546

528-
We will automatically run tests to ensure that your contributions didnt break anything and that they follow our style guide. You can speed up the testing cycle by running these tests locally on your own computer by calling pytest from the top-level directory.
547+
We will automatically run tests to ensure that your contributions didn't break anything and that they follow our style guide. You can speed up the testing cycle by running these tests locally on your own computer by calling pytest from the top-level directory.
529548
Push your feature branch to origin (i.e. GitHub)
530549

531550
```bash
@@ -534,9 +553,9 @@ $ git push origin <new_branch>
534553

535554
Once you have tested and finalized your changes, create a pull request (PR) targeting dev as the base branch:
536555
Ensure the PR description clearly describes the problem and solution.
537-
Include the relevant issue number if applicable. TIP: Writing e.g. fix #613 will automatically close issue #613 when this PR is merged.
556+
Include the relevant issue number if applicable. TIP: Writing e.g. "fix #613" will automatically close issue #613 when this PR is merged.
538557
Before submitting, please ensure that the code follows the standard coding style of the respective repository.
539-
If you would like help with your contribution, or would like to communicate contributions that are not ready to merge, submit a PR where the title begins with [WIP].
558+
If you would like help with your contribution, or would like to communicate contributions that are not ready to merge, submit a PR where the title begins with "[WIP]."
540559

541560
Update the CHANGELOG.md regularly to document changes to the extension.
542561

docs/source/api.rst

Lines changed: 40 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,38 +9,64 @@ This section provides detailed documentation for all classes and methods in the
99
Device Components
1010
===========
1111

12+
MicroscopeModel
13+
---------------
14+
.. autoclass:: ndx_microscopy.MicroscopeModel
15+
:members:
16+
:undoc-members:
17+
:show-inheritance:
18+
1219
Microscope
1320
---------
1421
.. autoclass:: ndx_microscopy.Microscope
1522
:members:
1623
:undoc-members:
1724
:show-inheritance:
1825

19-
Light Path Components
20-
===================
26+
MicroscopyRig
27+
-------------
28+
.. autoclass:: ndx_microscopy.MicroscopyRig
29+
:members:
30+
:undoc-members:
31+
:show-inheritance:
2132

22-
ExcitationLightPath
23-
------------------
24-
.. autoclass:: ndx_microscopy.ExcitationLightPath
33+
MicroscopyChannel
34+
---------------
35+
.. autoclass:: ndx_microscopy.MicroscopyChannel
2536
:members:
2637
:undoc-members:
2738
:show-inheritance:
2839

29-
Methods
30-
^^^^^^^
31-
.. automethod:: ndx_microscopy.ExcitationLightPath.get_excitation_wavelength
40+
Illumination Pattern Components
41+
==========================
3242

33-
EmissionLightPath
43+
IlluminationPattern
3444
----------------
35-
.. autoclass:: ndx_microscopy.EmissionLightPath
45+
.. autoclass:: ndx_microscopy.IlluminationPattern
3646
:members:
3747
:undoc-members:
3848
:show-inheritance:
3949

40-
Methods
41-
^^^^^^^
42-
.. automethod:: ndx_microscopy.EmissionLightPath.get_emission_wavelength
43-
.. automethod:: ndx_microscopy.EmissionLightPath.get_indicator_label
50+
LineScan
51+
-------
52+
.. autoclass:: ndx_microscopy.LineScan
53+
:members:
54+
:undoc-members:
55+
:show-inheritance:
56+
57+
PlaneAcquisition
58+
--------------
59+
.. autoclass:: ndx_microscopy.PlaneAcquisition
60+
:members:
61+
:undoc-members:
62+
:show-inheritance:
63+
64+
RandomAccessScan
65+
--------------
66+
.. autoclass:: ndx_microscopy.RandomAccessScan
67+
:members:
68+
:undoc-members:
69+
:show-inheritance:
4470

4571
Imaging Space Components
4672
=====================

0 commit comments

Comments
 (0)