Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create specs #1

Merged
merged 25 commits into from
Aug 27, 2024
Merged
Show file tree
Hide file tree
Changes from 15 commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
0a1cb88
create specs
alessandratrapani May 25, 2024
00158e1
add test
alessandratrapani May 25, 2024
97270d4
minor fix
alessandratrapani May 25, 2024
7ae8983
fix typos
alessandratrapani May 25, 2024
d70ab9e
restructure testing
alessandratrapani May 25, 2024
c5eb8a1
minor fix
alessandratrapani May 25, 2024
f5f3846
Merge branch 'main' into create_specs
CodyCBakerPhD May 25, 2024
6014db6
create DeviceModel
alessandratrapani May 27, 2024
d1c59a7
add OpticalFilter as base calss for BandOpticalFilter and EdgeOptical…
alessandratrapani May 27, 2024
273cee0
add a example for magnification field
alessandratrapani May 27, 2024
6296281
minor fixes
alessandratrapani May 27, 2024
c5791ed
add mermaid entity relationship diagram
alessandratrapani May 27, 2024
fd9b78c
add pulsed excitation source
alessandratrapani May 27, 2024
1339c62
add tests for DeviceModel, OpticalFilter and PulsedExcitationSource
alessandratrapani May 27, 2024
486c0a5
update Entity relationship diagram
alessandratrapani May 27, 2024
5122ae8
Update spec/ndx-ophys-devices.extensions.yaml
alessandratrapani May 28, 2024
fadb936
separate diagrams
alessandratrapani May 28, 2024
7c2f36f
fix illumination_type doc
alessandratrapani May 28, 2024
f30c6fb
define indicator and effector as nwbcontainer
alessandratrapani May 28, 2024
1bb58da
minor fix
alessandratrapani May 28, 2024
a426f08
remove Microscope object
alessandratrapani Aug 20, 2024
76d02c7
remove Microscope object
alessandratrapani Aug 20, 2024
1122c78
remmove tetrode series from example.ipynb
alessandratrapani Aug 20, 2024
c5d99e5
minor fixes
alessandratrapani Aug 20, 2024
385bdcc
change dichroic mirror attribute from bandwidth to band
alessandratrapani Aug 27, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
136 changes: 136 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,139 @@ This is an NWB extension for storing metadata of devices used in optical experim

---
This extension was created using [ndx-template](https://github.com/nwb-extensions/ndx-template).

## Entity relationship diagram

```mermaid
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#ffffff', "primaryBorderColor': '#144E73', 'lineColor': '#D96F32'}}}%%
classDiagram
direction BT
class DeviceModel{
<<Device>>
--------------------------------------
attributes
--------------------------------------
model : text, optional
}
class Indicator{
<<Device>>
--------------------------------------
attributes
--------------------------------------
label : text
injection_location : text, optional
injection_coordinates_in_mm : numeric, length 3, optional
CodyCBakerPhD marked this conversation as resolved.
Show resolved Hide resolved
}
class Effector{
<<Device>>
--------------------------------------
attributes
--------------------------------------
label : text
injection_location : text, optional
injection_coordinates_in_mm : numeric, length 3, optional
}
class OpticalFiber{
<<DeviceModel>>
--------------------------------------
attributes
--------------------------------------
numerical_aperture : numeric, optional
core_diameter_in_um : numeric, optional
}
class ExcitationSource{
<<DeviceModel>>
--------------------------------------
attributes
--------------------------------------
illumination_type : text, optional
excitation_wavelength_in_nm : numeric, optional
power_in_W : numeric, optional
intensity_in_W_per_m2 : numeric, optional
exposure_time_in_s : numeric, optional
}
class PulsedExcitationSource{
alessandratrapani marked this conversation as resolved.
Show resolved Hide resolved
<<DeviceModel>>
--------------------------------------
attributes
--------------------------------------
peak_power_in_W : numeric, optional
peak_pulse_energy_in_J : numeric, optional
pulse_rate_in_Hz : numeric, optional
}
class Photodetector{
<<DeviceModel>>
--------------------------------------
attributes
--------------------------------------
detector_type : text, optional
detected_wavelength_in_nm : numeric, optional
gain : numeric, optional
CodyCBakerPhD marked this conversation as resolved.
Show resolved Hide resolved
alessandratrapani marked this conversation as resolved.
Show resolved Hide resolved
}
class DichroicMirror{
<<DeviceModel>>
--------------------------------------
attributes
--------------------------------------
cut_on_wavelength_in_nm : numeric, optional
cut_off_wavelength_in_nm : numeric, optional
reflection_bandwidth_in_nm : numeric, optional
transmission_bandwidth_in_nm : numeric, optional
angle_of_incidence_in_degrees : numeric, optional
}
class OpticalFilter{
<<DeviceModel>>
--------------------------------------
attributes
--------------------------------------
filter_type : text, optional
}
class BandOpticalFilter{
CodyCBakerPhD marked this conversation as resolved.
Show resolved Hide resolved
<<OpticalFilter>>
--------------------------------------
attributes
--------------------------------------
center_wavelength_in_nm : numeric
bandwidth_in_nm : numeric
}
class EdgeOpticalFilter{
<<OpticalFilter>>
--------------------------------------
attributes
--------------------------------------
cut_wavelength_in_nm : numeric
slope_in_percent_cut_wavelength : numeric, optional
slope_starting_transmission_in_percent : numeric, optional
slope_ending_transmission_in_percent : numeric, optional
}
class ObjectiveLens{
<<DeviceModel>>
--------------------------------------
attributes
--------------------------------------
numerical_aperture : numeric, optional
magnification : numeric, optional
}
class Microscope{
<<DeviceModel>>
--------------------------------------
attributes
--------------------------------------
microscopy_type : text, optional
alessandratrapani marked this conversation as resolved.
Show resolved Hide resolved
doi : text, optional
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All microscopes have a DOI? I don't think I've ever seen that in the methods/supplemental section

How would I look it up for a particular microscope?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It was meant to be there just for custom microscopes. I remember we discussed this a while ago, but I am also not totally convinced that this is something needed.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would a home-built microscope have a manufacturer or model number?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

probably not 😑, I need to change this 😅

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where are we at on this? Does the base PyNWB device has the manufacturer then you add the model to the new BaseModel?

}
OpticalFiber *-- DeviceModel : extends
ExcitationSource *-- DeviceModel : extends
PulsedExcitationSource *-- ExcitationSource : extends
Photodetector *-- DeviceModel : extends
DichroicMirror *-- DeviceModel : extends
Microscope *-- DeviceModel : extends
ObjectiveLens *-- DeviceModel : extends
OpticalFilter *-- DeviceModel : extends
BandOpticalFilter *-- OpticalFilter : extends
EdgeOpticalFilter *-- OpticalFilter : extends
alessandratrapani marked this conversation as resolved.
Show resolved Hide resolved
```

## Contributing

Add a comment on how to contribute to this extension
163 changes: 162 additions & 1 deletion notebooks/example.ipynb
Original file line number Diff line number Diff line change
@@ -1,5 +1,166 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 4,
"id": "4e3c7e61",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<img src=\"https://mermaid.ink/img/CiUle2luaXQ6IHsndGhlbWUnOiAnYmFzZScsICd0aGVtZVZhcmlhYmxlcyc6IHsncHJpbWFyeUNvbG9yJzogJyNmZmZmZmYnLCAicHJpbWFyeUJvcmRlckNvbG9yJzogJyMxNDRFNzMnLCAnbGluZUNvbG9yJzogJyNEOTZGMzInfX19JSUKY2xhc3NEaWFncmFtCiAgICBkaXJlY3Rpb24gQlQKICAgIGNsYXNzIERldmljZU1vZGVsewogICAgICAgIDw8RGV2aWNlPj4KICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGF0dHJpYnV0ZXMKICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIG1vZGVsIDogdGV4dCwgb3B0aW9uYWwKICAgIH0KICAgIGNsYXNzIEluZGljYXRvcnsKICAgICAgICA8PERldmljZT4+CiAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBhdHRyaWJ1dGVzCiAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBsYWJlbCA6IHRleHQKICAgICAgICBpbmplY3Rpb25fbG9jYXRpb24gOiB0ZXh0LCBvcHRpb25hbAogICAgICAgIGluamVjdGlvbl9jb29yZGluYXRlc19pbl9tbSA6IG51bWVyaWMsIGxlbmd0aCAzLCBvcHRpb25hbAogICAgfQogICAgY2xhc3MgRWZmZWN0b3J7CiAgICAgICAgPDxEZXZpY2U+PgogICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgYXR0cmlidXRlcwogICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgbGFiZWwgOiB0ZXh0CiAgICAgICAgaW5qZWN0aW9uX2xvY2F0aW9uIDogdGV4dCwgb3B0aW9uYWwKICAgICAgICBpbmplY3Rpb25fY29vcmRpbmF0ZXNfaW5fbW0gOiBudW1lcmljLCBsZW5ndGggMywgb3B0aW9uYWwKICAgIH0KICAgIGNsYXNzIE9wdGljYWxGaWJlcnsKICAgICAgICA8PERldmljZU1vZGVsPj4KICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGF0dHJpYnV0ZXMKICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIG51bWVyaWNhbF9hcGVydHVyZSA6IG51bWVyaWMsIG9wdGlvbmFsCiAgICAgICAgY29yZV9kaWFtZXRlcl9pbl91bSA6IG51bWVyaWMsIG9wdGlvbmFsCiAgICB9CiAgICBjbGFzcyBFeGNpdGF0aW9uU291cmNlewogICAgICAgIDw8RGV2aWNlTW9kZWw+PgogICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgYXR0cmlidXRlcwogICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgaWxsdW1pbmF0aW9uX3R5cGUgOiB0ZXh0LCBvcHRpb25hbAogICAgICAgIGV4Y2l0YXRpb25fd2F2ZWxlbmd0aF9pbl9ubSA6IG51bWVyaWMsIG9wdGlvbmFsCiAgICAgICAgcG93ZXJfaW5fVyA6IG51bWVyaWMsIG9wdGlvbmFsCiAgICAgICAgaW50ZW5zaXR5X2luX1dfcGVyX20yIDogbnVtZXJpYywgb3B0aW9uYWwKICAgICAgICBleHBvc3VyZV90aW1lX2luX3MgOiBudW1lcmljLCBvcHRpb25hbAogICAgfQogICAgY2xhc3MgUHVsc2VkRXhjaXRhdGlvblNvdXJjZXsKICAgICAgICA8PERldmljZU1vZGVsPj4KICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGF0dHJpYnV0ZXMKICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIHBlYWtfcG93ZXJfaW5fVyA6IG51bWVyaWMsIG9wdGlvbmFsCiAgICAgICAgcGVha19wdWxzZV9lbmVyZ3lfaW5fSiA6IG51bWVyaWMsIG9wdGlvbmFsCiAgICAgICAgcHVsc2VfcmF0ZV9pbl9IeiA6IG51bWVyaWMsIG9wdGlvbmFsCiAgICB9CiAgICBjbGFzcyBQaG90b2RldGVjdG9yewogICAgICAgIDw8RGV2aWNlTW9kZWw+PgogICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgYXR0cmlidXRlcwogICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgZGV0ZWN0b3JfdHlwZSA6IHRleHQsIG9wdGlvbmFsCiAgICAgICAgZGV0ZWN0ZWRfd2F2ZWxlbmd0aF9pbl9ubSA6IG51bWVyaWMsIG9wdGlvbmFsCiAgICAgICAgZ2FpbiA6IG51bWVyaWMsIG9wdGlvbmFsCiAgICB9CiAgICBjbGFzcyBEaWNocm9pY01pcnJvcnsKICAgICAgICA8PERldmljZU1vZGVsPj4KICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGF0dHJpYnV0ZXMKICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGN1dF9vbl93YXZlbGVuZ3RoX2luX25tIDogbnVtZXJpYywgb3B0aW9uYWwKICAgICAgICBjdXRfb2ZmX3dhdmVsZW5ndGhfaW5fbm0gOiBudW1lcmljLCBvcHRpb25hbAogICAgICAgIHJlZmxlY3Rpb25fYmFuZHdpZHRoX2luX25tIDogbnVtZXJpYywgb3B0aW9uYWwKICAgICAgICB0cmFuc21pc3Npb25fYmFuZHdpZHRoX2luX25tIDogbnVtZXJpYywgb3B0aW9uYWwKICAgICAgICBhbmdsZV9vZl9pbmNpZGVuY2VfaW5fZGVncmVlcyA6IG51bWVyaWMsIG9wdGlvbmFsCiAgICB9CiAgICBjbGFzcyBPcHRpY2FsRmlsdGVyewogICAgICAgIDw8RGV2aWNlTW9kZWw+PgogICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgYXR0cmlidXRlcwogICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgZmlsdGVyX3R5cGUgOiB0ZXh0LCBvcHRpb25hbAogICAgfQogICAgY2xhc3MgQmFuZE9wdGljYWxGaWx0ZXJ7CiAgICAgICAgPDxPcHRpY2FsRmlsdGVyPj4KICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGF0dHJpYnV0ZXMKICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGNlbnRlcl93YXZlbGVuZ3RoX2luX25tIDogbnVtZXJpYwogICAgICAgIGJhbmR3aWR0aF9pbl9ubSA6IG51bWVyaWMKICAgIH0KICAgIGNsYXNzIEVkZ2VPcHRpY2FsRmlsdGVyewogICAgICAgIDw8T3B0aWNhbEZpbHRlcj4+CiAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBhdHRyaWJ1dGVzCiAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBjdXRfd2F2ZWxlbmd0aF9pbl9ubSA6IG51bWVyaWMKICAgICAgICBzbG9wZV9pbl9wZXJjZW50X2N1dF93YXZlbGVuZ3RoIDogbnVtZXJpYywgb3B0aW9uYWwKICAgICAgICBzbG9wZV9zdGFydGluZ190cmFuc21pc3Npb25faW5fcGVyY2VudCA6IG51bWVyaWMsIG9wdGlvbmFsCiAgICAgICAgc2xvcGVfZW5kaW5nX3RyYW5zbWlzc2lvbl9pbl9wZXJjZW50IDogbnVtZXJpYywgb3B0aW9uYWwKICAgIH0KICAgIGNsYXNzIE9iamVjdGl2ZUxlbnN7CiAgICAgICAgPDxEZXZpY2VNb2RlbD4+CiAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBhdHRyaWJ1dGVzCiAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBudW1lcmljYWxfYXBlcnR1cmUgOiBudW1lcmljLCBvcHRpb25hbAogICAgICAgIG1hZ25pZmljYXRpb24gOiBudW1lcmljLCBvcHRpb25hbAogICAgfQogICAgY2xhc3MgTWljcm9zY29wZXsKICAgICAgICA8PERldmljZU1vZGVsPj4KICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGF0dHJpYnV0ZXMKICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIG1pY3Jvc2NvcHlfdHlwZSA6IHRleHQsIG9wdGlvbmFsCiAgICAgICAgZG9pIDogdGV4dCwgb3B0aW9uYWwKICAgIH0KICAgIE9wdGljYWxGaWJlciAqLS0gRGV2aWNlTW9kZWwgOiBleHRlbmRzCiAgICBFeGNpdGF0aW9uU291cmNlICotLSBEZXZpY2VNb2RlbCA6IGV4dGVuZHMKICAgIFB1bHNlZEV4Y2l0YXRpb25Tb3VyY2UgKi0tIEV4Y2l0YXRpb25Tb3VyY2UgOiBleHRlbmRzCiAgICBQaG90b2RldGVjdG9yICotLSBEZXZpY2VNb2RlbCA6IGV4dGVuZHMKICAgIERpY2hyb2ljTWlycm9yICotLSBEZXZpY2VNb2RlbCA6IGV4dGVuZHMKICAgIE1pY3Jvc2NvcGUgKi0tIERldmljZU1vZGVsIDogZXh0ZW5kcwogICAgT2JqZWN0aXZlTGVucyAqLS0gRGV2aWNlTW9kZWwgOiBleHRlbmRzCiAgICBPcHRpY2FsRmlsdGVyICotLSBEZXZpY2VNb2RlbCA6IGV4dGVuZHMKICAgIEJhbmRPcHRpY2FsRmlsdGVyICotLSBPcHRpY2FsRmlsdGVyIDogZXh0ZW5kcwogICAgRWRnZU9wdGljYWxGaWx0ZXIgKi0tIE9wdGljYWxGaWx0ZXIgOiBleHRlbmRzCg==\"/>"
],
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import base64\n",
"from IPython.display import Image, display\n",
"import matplotlib.pyplot as plt\n",
"\n",
"def mm(graph):\n",
" graphbytes = graph.encode(\"utf8\")\n",
" base64_bytes = base64.b64encode(graphbytes)\n",
" base64_string = base64_bytes.decode(\"ascii\")\n",
" display(Image(url=\"https://mermaid.ink/img/\" + base64_string))\n",
"\n",
"mm(\"\"\"\n",
"%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#ffffff', \"primaryBorderColor': '#144E73', 'lineColor': '#D96F32'}}}%%\n",
"classDiagram\n",
" direction BT\n",
" class DeviceModel{\n",
" <<Device>>\n",
" --------------------------------------\n",
" attributes\n",
" --------------------------------------\n",
" model : text, optional\n",
" }\n",
" class Indicator{\n",
" <<Device>>\n",
" --------------------------------------\n",
" attributes\n",
" --------------------------------------\n",
" label : text\n",
" injection_location : text, optional\n",
" injection_coordinates_in_mm : numeric, length 3, optional\n",
" }\n",
" class Effector{\n",
" <<Device>>\n",
" --------------------------------------\n",
" attributes\n",
" --------------------------------------\n",
" label : text\n",
" injection_location : text, optional\n",
" injection_coordinates_in_mm : numeric, length 3, optional\n",
" }\n",
" class OpticalFiber{\n",
" <<DeviceModel>>\n",
" --------------------------------------\n",
" attributes\n",
" --------------------------------------\n",
" numerical_aperture : numeric, optional\n",
" core_diameter_in_um : numeric, optional\n",
" }\n",
" class ExcitationSource{\n",
" <<DeviceModel>>\n",
" --------------------------------------\n",
" attributes\n",
" --------------------------------------\n",
" illumination_type : text, optional\n",
" excitation_wavelength_in_nm : numeric, optional\n",
" power_in_W : numeric, optional\n",
" intensity_in_W_per_m2 : numeric, optional\n",
" exposure_time_in_s : numeric, optional\n",
" }\n",
" class PulsedExcitationSource{\n",
" <<DeviceModel>>\n",
" --------------------------------------\n",
" attributes\n",
" --------------------------------------\n",
" peak_power_in_W : numeric, optional\n",
" peak_pulse_energy_in_J : numeric, optional\n",
" pulse_rate_in_Hz : numeric, optional\n",
" }\n",
" class Photodetector{\n",
" <<DeviceModel>>\n",
" --------------------------------------\n",
" attributes\n",
" --------------------------------------\n",
" detector_type : text, optional\n",
" detected_wavelength_in_nm : numeric, optional\n",
" gain : numeric, optional\n",
" }\n",
" class DichroicMirror{\n",
" <<DeviceModel>>\n",
" --------------------------------------\n",
" attributes\n",
" --------------------------------------\n",
" cut_on_wavelength_in_nm : numeric, optional\n",
" cut_off_wavelength_in_nm : numeric, optional\n",
" reflection_bandwidth_in_nm : numeric, optional\n",
" transmission_bandwidth_in_nm : numeric, optional\n",
" angle_of_incidence_in_degrees : numeric, optional\n",
" }\n",
" class OpticalFilter{\n",
" <<DeviceModel>>\n",
" --------------------------------------\n",
" attributes\n",
" --------------------------------------\n",
" filter_type : text, optional\n",
" }\n",
" class BandOpticalFilter{\n",
" <<OpticalFilter>>\n",
" --------------------------------------\n",
" attributes\n",
" --------------------------------------\n",
" center_wavelength_in_nm : numeric\n",
" bandwidth_in_nm : numeric\n",
" }\n",
" class EdgeOpticalFilter{\n",
" <<OpticalFilter>>\n",
" --------------------------------------\n",
" attributes\n",
" --------------------------------------\n",
" cut_wavelength_in_nm : numeric\n",
" slope_in_percent_cut_wavelength : numeric, optional\n",
" slope_starting_transmission_in_percent : numeric, optional\n",
" slope_ending_transmission_in_percent : numeric, optional\n",
" }\n",
" class ObjectiveLens{\n",
" <<DeviceModel>>\n",
" --------------------------------------\n",
" attributes\n",
" --------------------------------------\n",
" numerical_aperture : numeric, optional\n",
" magnification : numeric, optional\n",
" }\n",
" class Microscope{\n",
" <<DeviceModel>>\n",
" --------------------------------------\n",
" attributes\n",
" --------------------------------------\n",
" microscopy_type : text, optional\n",
" doi : text, optional\n",
" }\n",
" OpticalFiber *-- DeviceModel : extends\n",
" ExcitationSource *-- DeviceModel : extends\n",
" PulsedExcitationSource *-- ExcitationSource : extends\n",
" Photodetector *-- DeviceModel : extends\n",
" DichroicMirror *-- DeviceModel : extends\n",
" Microscope *-- DeviceModel : extends\n",
" ObjectiveLens *-- DeviceModel : extends\n",
" OpticalFilter *-- DeviceModel : extends\n",
" BandOpticalFilter *-- OpticalFilter : extends\n",
" EdgeOpticalFilter *-- OpticalFilter : extends\n",
"\"\"\")"
]
},
{
"cell_type": "markdown",
"id": "174c5018-1c0a-4f55-899d-049bb87f63d5",
Expand Down Expand Up @@ -157,7 +318,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.6"
"version": "3.12.3"
}
},
"nbformat": 4,
Expand Down
Loading
Loading