Repository files navigation

MicroscopeControl.jl

DevBuild StatusCoverage

MicroscopeControl.jl is a Julia package for control of optical microscopy hardware, providing a flexible and high-performance solution for microscope developers.

MicroscopeControl.jl utilizes three layers of code: high-level, low-level, and user-level. High-level code is generic, providing interfaces for stages, light sources, cameras, etc. Low-level code handles hardware-specific implementations, defining functions for individual microscope components. This design heavily leverages Julia’s multiple dispatch, enabling different behaviors for the same function based on argument types. The user-level code integrates these layers to control the microscope system.


Module Structure Overview

MicroscopeControl.jl is organized to ensure scalability and easy integration of new hardware:

Abstract Interfaces

  • Defines basic functions and properties common across all device types (e.g., cameras, light sources, stages).
  • Each abstract interface (e.g., CameraInterface, LightSourceInterface, StageInterface) outlines the required methods, such as initialize, shutdown, and export_state.

Hardware Implementations

  • Provides concrete modules for each hardware device model (e.g., TCubeLaserControl, DCAM4Camera, MCLStage).
  • These modules implement the abstract interfaces and add device-specific functionality.

Common Features

  1. Constructor Methods
    Each hardware component has a constructor that takes relevant parameters (like serial numbers or device addresses). After constructing the device object, you can call initialize or other methods to start interacting with the hardware.

  2. Export State
    The function export_state gives you a structured overview of the device’s current settings:

    • Attributes: Key-value pairs with the device’s configuration.
    • Data: Measurement or imaging data.
    • Children: Nested hardware components or linked instruments.
  3. Graphical User Interface
    Many modules provide a simple GUI for controlling hardware, created using GLMakie. This interface often allows for easy on/off toggling, parameter changes, and live readouts.


Supported Hardware

Cameras

  • Hamamatsu DCAM4 compatible cameras
  • Thorlabs Scientific Cameras (CSC series)
  • Simulated camera for testing

Stages

  • Mad City Labs nanopositioning stages
  • Physik Instrumente (PI) stages
  • PI N-472 linear stage
  • Simulated stage for testing

Light Sources

  • Thorlabs TCube laser diode controller
  • CrystaLaser 561nm
  • Vortran 488nm laser
  • Simulated light source for testing

Other Hardware

  • National Instruments DAQ cards
  • Opal Kelly XEM FPGA boards
  • DAQ-based transmission light control

Installation Notes

Since this package is under active development and not yet registered, install it using:

using Pkg
Pkg.develop(url="https://github.com/LidkeLab/MicroscopeControl.jl.git")

Contributions

Contributions are welcome! We encourage pull requests that add support for new hardware or improve existing modules.

About

Control Microscopy Hardware with Julia

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

MicroscopeControl.jl

DevBuild StatusCoverage

MicroscopeControl.jl is a Julia package for control of optical microscopy hardware, providing a flexible and high-performance solution for microscope developers.

MicroscopeControl.jl utilizes three layers of code: high-level, low-level, and user-level. High-level code is generic, providing interfaces for stages, light sources, cameras, etc. Low-level code handles hardware-specific implementations, defining functions for individual microscope components. This design heavily leverages Julia’s multiple dispatch, enabling different behaviors for the same function based on argument types. The user-level code integrates these layers to control the microscope system.


Module Structure Overview

MicroscopeControl.jl is organized to ensure scalability and easy integration of new hardware:

Abstract Interfaces

  • Defines basic functions and properties common across all device types (e.g., cameras, light sources, stages).
  • Each abstract interface (e.g., CameraInterface, LightSourceInterface, StageInterface) outlines the required methods, such as initialize, shutdown, and export_state.

Hardware Implementations

  • Provides concrete modules for each hardware device model (e.g., TCubeLaserControl, DCAM4Camera, MCLStage).
  • These modules implement the abstract interfaces and add device-specific functionality.

Common Features

  1. Constructor Methods
    Each hardware component has a constructor that takes relevant parameters (like serial numbers or device addresses). After constructing the device object, you can call initialize or other methods to start interacting with the hardware.

  2. Export State
    The function export_state gives you a structured overview of the device’s current settings:

    • Attributes: Key-value pairs with the device’s configuration.
    • Data: Measurement or imaging data.
    • Children: Nested hardware components or linked instruments.
  3. Graphical User Interface
    Many modules provide a simple GUI for controlling hardware, created using GLMakie. This interface often allows for easy on/off toggling, parameter changes, and live readouts.


Supported Hardware

Cameras

  • Hamamatsu DCAM4 compatible cameras
  • Thorlabs Scientific Cameras (CSC series)
  • Simulated camera for testing

Stages

  • Mad City Labs nanopositioning stages
  • Physik Instrumente (PI) stages
  • PI N-472 linear stage
  • Simulated stage for testing

Light Sources

  • Thorlabs TCube laser diode controller
  • CrystaLaser 561nm
  • Vortran 488nm laser
  • Simulated light source for testing

Other Hardware

  • National Instruments DAQ cards
  • Opal Kelly XEM FPGA boards
  • DAQ-based transmission light control

Installation Notes

Since this package is under active development and not yet registered, install it using:

using Pkg
Pkg.develop(url="https://github.com/LidkeLab/MicroscopeControl.jl.git")

Contributions

Contributions are welcome! We encourage pull requests that add support for new hardware or improve existing modules.

About

Control Microscopy Hardware with Julia

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

MicroscopeControl.jl

DevBuild StatusCoverage

MicroscopeControl.jl is a Julia package for control of optical microscopy hardware, providing a flexible and high-performance solution for microscope developers.

MicroscopeControl.jl utilizes three layers of code: high-level, low-level, and user-level. High-level code is generic, providing interfaces for stages, light sources, cameras, etc. Low-level code handles hardware-specific implementations, defining functions for individual microscope components. This design heavily leverages Julia’s multiple dispatch, enabling different behaviors for the same function based on argument types. The user-level code integrates these layers to control the microscope system.


Module Structure Overview

MicroscopeControl.jl is organized to ensure scalability and easy integration of new hardware:

Abstract Interfaces

  • Defines basic functions and properties common across all device types (e.g., cameras, light sources, stages).
  • Each abstract interface (e.g., CameraInterface, LightSourceInterface, StageInterface) outlines the required methods, such as initialize, shutdown, and export_state.

Hardware Implementations

  • Provides concrete modules for each hardware device model (e.g., TCubeLaserControl, DCAM4Camera, MCLStage).
  • These modules implement the abstract interfaces and add device-specific functionality.

Common Features

  1. Constructor Methods
    Each hardware component has a constructor that takes relevant parameters (like serial numbers or device addresses). After constructing the device object, you can call initialize or other methods to start interacting with the hardware.

  2. Export State
    The function export_state gives you a structured overview of the device’s current settings:

    • Attributes: Key-value pairs with the device’s configuration.
    • Data: Measurement or imaging data.
    • Children: Nested hardware components or linked instruments.
  3. Graphical User Interface
    Many modules provide a simple GUI for controlling hardware, created using GLMakie. This interface often allows for easy on/off toggling, parameter changes, and live readouts.


Supported Hardware

Cameras

  • Hamamatsu DCAM4 compatible cameras
  • Thorlabs Scientific Cameras (CSC series)
  • Simulated camera for testing

Stages

  • Mad City Labs nanopositioning stages
  • Physik Instrumente (PI) stages
  • PI N-472 linear stage
  • Simulated stage for testing

Light Sources

  • Thorlabs TCube laser diode controller
  • CrystaLaser 561nm
  • Vortran 488nm laser
  • Simulated light source for testing

Other Hardware

  • National Instruments DAQ cards
  • Opal Kelly XEM FPGA boards
  • DAQ-based transmission light control

Installation Notes

Since this package is under active development and not yet registered, install it using:

using Pkg
Pkg.develop(url="https://github.com/LidkeLab/MicroscopeControl.jl.git")

Contributions

Contributions are welcome! We encourage pull requests that add support for new hardware or improve existing modules.

About

Control Microscopy Hardware with Julia

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

MicroscopeControl.jl

DevBuild StatusCoverage

MicroscopeControl.jl is a Julia package for control of optical microscopy hardware, providing a flexible and high-performance solution for microscope developers.

MicroscopeControl.jl utilizes three layers of code: high-level, low-level, and user-level. High-level code is generic, providing interfaces for stages, light sources, cameras, etc. Low-level code handles hardware-specific implementations, defining functions for individual microscope components. This design heavily leverages Julia’s multiple dispatch, enabling different behaviors for the same function based on argument types. The user-level code integrates these layers to control the microscope system.


Module Structure Overview

MicroscopeControl.jl is organized to ensure scalability and easy integration of new hardware:

Abstract Interfaces

  • Defines basic functions and properties common across all device types (e.g., cameras, light sources, stages).
  • Each abstract interface (e.g., CameraInterface, LightSourceInterface, StageInterface) outlines the required methods, such as initialize, shutdown, and export_state.

Hardware Implementations

  • Provides concrete modules for each hardware device model (e.g., TCubeLaserControl, DCAM4Camera, MCLStage).
  • These modules implement the abstract interfaces and add device-specific functionality.

Common Features

  1. Constructor Methods
    Each hardware component has a constructor that takes relevant parameters (like serial numbers or device addresses). After constructing the device object, you can call initialize or other methods to start interacting with the hardware.

  2. Export State
    The function export_state gives you a structured overview of the device’s current settings:

    • Attributes: Key-value pairs with the device’s configuration.
    • Data: Measurement or imaging data.
    • Children: Nested hardware components or linked instruments.
  3. Graphical User Interface
    Many modules provide a simple GUI for controlling hardware, created using GLMakie. This interface often allows for easy on/off toggling, parameter changes, and live readouts.


Supported Hardware

Cameras

  • Hamamatsu DCAM4 compatible cameras
  • Thorlabs Scientific Cameras (CSC series)
  • Simulated camera for testing

Stages

  • Mad City Labs nanopositioning stages
  • Physik Instrumente (PI) stages
  • PI N-472 linear stage
  • Simulated stage for testing

Light Sources

  • Thorlabs TCube laser diode controller
  • CrystaLaser 561nm
  • Vortran 488nm laser
  • Simulated light source for testing

Other Hardware

  • National Instruments DAQ cards
  • Opal Kelly XEM FPGA boards
  • DAQ-based transmission light control

Installation Notes

Since this package is under active development and not yet registered, install it using:

using Pkg
Pkg.develop(url="https://github.com/LidkeLab/MicroscopeControl.jl.git")

Contributions

Contributions are welcome! We encourage pull requests that add support for new hardware or improve existing modules.

About

Control Microscopy Hardware with Julia

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

MicroscopeControl.jl

DevBuild StatusCoverage

MicroscopeControl.jl is a Julia package for control of optical microscopy hardware, providing a flexible and high-performance solution for microscope developers.

MicroscopeControl.jl utilizes three layers of code: high-level, low-level, and user-level. High-level code is generic, providing interfaces for stages, light sources, cameras, etc. Low-level code handles hardware-specific implementations, defining functions for individual microscope components. This design heavily leverages Julia’s multiple dispatch, enabling different behaviors for the same function based on argument types. The user-level code integrates these layers to control the microscope system.


Module Structure Overview

MicroscopeControl.jl is organized to ensure scalability and easy integration of new hardware:

Abstract Interfaces

  • Defines basic functions and properties common across all device types (e.g., cameras, light sources, stages).
  • Each abstract interface (e.g., CameraInterface, LightSourceInterface, StageInterface) outlines the required methods, such as initialize, shutdown, and export_state.

Hardware Implementations

  • Provides concrete modules for each hardware device model (e.g., TCubeLaserControl, DCAM4Camera, MCLStage).
  • These modules implement the abstract interfaces and add device-specific functionality.

Common Features

  1. Constructor Methods
    Each hardware component has a constructor that takes relevant parameters (like serial numbers or device addresses). After constructing the device object, you can call initialize or other methods to start interacting with the hardware.

  2. Export State
    The function export_state gives you a structured overview of the device’s current settings:

    • Attributes: Key-value pairs with the device’s configuration.
    • Data: Measurement or imaging data.
    • Children: Nested hardware components or linked instruments.
  3. Graphical User Interface
    Many modules provide a simple GUI for controlling hardware, created using GLMakie. This interface often allows for easy on/off toggling, parameter changes, and live readouts.


Supported Hardware

Cameras

  • Hamamatsu DCAM4 compatible cameras
  • Thorlabs Scientific Cameras (CSC series)
  • Simulated camera for testing

Stages

  • Mad City Labs nanopositioning stages
  • Physik Instrumente (PI) stages
  • PI N-472 linear stage
  • Simulated stage for testing

Light Sources

  • Thorlabs TCube laser diode controller
  • CrystaLaser 561nm
  • Vortran 488nm laser
  • Simulated light source for testing

Other Hardware

  • National Instruments DAQ cards
  • Opal Kelly XEM FPGA boards
  • DAQ-based transmission light control

Installation Notes

Since this package is under active development and not yet registered, install it using:

using Pkg
Pkg.develop(url="https://github.com/LidkeLab/MicroscopeControl.jl.git")

Contributions

Contributions are welcome! We encourage pull requests that add support for new hardware or improve existing modules.

About

Control Microscopy Hardware with Julia

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

MicroscopeControl.jl

DevBuild StatusCoverage

MicroscopeControl.jl is a Julia package for control of optical microscopy hardware, providing a flexible and high-performance solution for microscope developers.

MicroscopeControl.jl utilizes three layers of code: high-level, low-level, and user-level. High-level code is generic, providing interfaces for stages, light sources, cameras, etc. Low-level code handles hardware-specific implementations, defining functions for individual microscope components. This design heavily leverages Julia’s multiple dispatch, enabling different behaviors for the same function based on argument types. The user-level code integrates these layers to control the microscope system.


Module Structure Overview

MicroscopeControl.jl is organized to ensure scalability and easy integration of new hardware:

Abstract Interfaces

  • Defines basic functions and properties common across all device types (e.g., cameras, light sources, stages).
  • Each abstract interface (e.g., CameraInterface, LightSourceInterface, StageInterface) outlines the required methods, such as initialize, shutdown, and export_state.

Hardware Implementations

  • Provides concrete modules for each hardware device model (e.g., TCubeLaserControl, DCAM4Camera, MCLStage).
  • These modules implement the abstract interfaces and add device-specific functionality.

Common Features

  1. Constructor Methods
    Each hardware component has a constructor that takes relevant parameters (like serial numbers or device addresses). After constructing the device object, you can call initialize or other methods to start interacting with the hardware.

  2. Export State
    The function export_state gives you a structured overview of the device’s current settings:

    • Attributes: Key-value pairs with the device’s configuration.
    • Data: Measurement or imaging data.
    • Children: Nested hardware components or linked instruments.
  3. Graphical User Interface
    Many modules provide a simple GUI for controlling hardware, created using GLMakie. This interface often allows for easy on/off toggling, parameter changes, and live readouts.


Supported Hardware

Cameras

  • Hamamatsu DCAM4 compatible cameras
  • Thorlabs Scientific Cameras (CSC series)
  • Simulated camera for testing

Stages

  • Mad City Labs nanopositioning stages
  • Physik Instrumente (PI) stages
  • PI N-472 linear stage
  • Simulated stage for testing

Light Sources

  • Thorlabs TCube laser diode controller
  • CrystaLaser 561nm
  • Vortran 488nm laser
  • Simulated light source for testing

Other Hardware

  • National Instruments DAQ cards
  • Opal Kelly XEM FPGA boards
  • DAQ-based transmission light control

Installation Notes

Since this package is under active development and not yet registered, install it using:

using Pkg
Pkg.develop(url="https://github.com/LidkeLab/MicroscopeControl.jl.git")

Contributions

Contributions are welcome! We encourage pull requests that add support for new hardware or improve existing modules.

About

Control Microscopy Hardware with Julia

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

MicroscopeControl.jl

DevBuild StatusCoverage

MicroscopeControl.jl is a Julia package for control of optical microscopy hardware, providing a flexible and high-performance solution for microscope developers.

MicroscopeControl.jl utilizes three layers of code: high-level, low-level, and user-level. High-level code is generic, providing interfaces for stages, light sources, cameras, etc. Low-level code handles hardware-specific implementations, defining functions for individual microscope components. This design heavily leverages Julia’s multiple dispatch, enabling different behaviors for the same function based on argument types. The user-level code integrates these layers to control the microscope system.


Module Structure Overview

MicroscopeControl.jl is organized to ensure scalability and easy integration of new hardware:

Abstract Interfaces

  • Defines basic functions and properties common across all device types (e.g., cameras, light sources, stages).
  • Each abstract interface (e.g., CameraInterface, LightSourceInterface, StageInterface) outlines the required methods, such as initialize, shutdown, and export_state.

Hardware Implementations

  • Provides concrete modules for each hardware device model (e.g., TCubeLaserControl, DCAM4Camera, MCLStage).
  • These modules implement the abstract interfaces and add device-specific functionality.

Common Features

  1. Constructor Methods
    Each hardware component has a constructor that takes relevant parameters (like serial numbers or device addresses). After constructing the device object, you can call initialize or other methods to start interacting with the hardware.

  2. Export State
    The function export_state gives you a structured overview of the device’s current settings:

    • Attributes: Key-value pairs with the device’s configuration.
    • Data: Measurement or imaging data.
    • Children: Nested hardware components or linked instruments.
  3. Graphical User Interface
    Many modules provide a simple GUI for controlling hardware, created using GLMakie. This interface often allows for easy on/off toggling, parameter changes, and live readouts.


Supported Hardware

Cameras

  • Hamamatsu DCAM4 compatible cameras
  • Thorlabs Scientific Cameras (CSC series)
  • Simulated camera for testing

Stages

  • Mad City Labs nanopositioning stages
  • Physik Instrumente (PI) stages
  • PI N-472 linear stage
  • Simulated stage for testing

Light Sources

  • Thorlabs TCube laser diode controller
  • CrystaLaser 561nm
  • Vortran 488nm laser
  • Simulated light source for testing

Other Hardware

  • National Instruments DAQ cards
  • Opal Kelly XEM FPGA boards
  • DAQ-based transmission light control

Installation Notes

Since this package is under active development and not yet registered, install it using:

using Pkg
Pkg.develop(url="https://github.com/LidkeLab/MicroscopeControl.jl.git")

Contributions

Contributions are welcome! We encourage pull requests that add support for new hardware or improve existing modules.

About

Control Microscopy Hardware with Julia

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

MicroscopeControl.jl

DevBuild StatusCoverage

MicroscopeControl.jl is a Julia package for control of optical microscopy hardware, providing a flexible and high-performance solution for microscope developers.

MicroscopeControl.jl utilizes three layers of code: high-level, low-level, and user-level. High-level code is generic, providing interfaces for stages, light sources, cameras, etc. Low-level code handles hardware-specific implementations, defining functions for individual microscope components. This design heavily leverages Julia’s multiple dispatch, enabling different behaviors for the same function based on argument types. The user-level code integrates these layers to control the microscope system.


Module Structure Overview

MicroscopeControl.jl is organized to ensure scalability and easy integration of new hardware:

Abstract Interfaces

  • Defines basic functions and properties common across all device types (e.g., cameras, light sources, stages).
  • Each abstract interface (e.g., CameraInterface, LightSourceInterface, StageInterface) outlines the required methods, such as initialize, shutdown, and export_state.

Hardware Implementations

  • Provides concrete modules for each hardware device model (e.g., TCubeLaserControl, DCAM4Camera, MCLStage).
  • These modules implement the abstract interfaces and add device-specific functionality.

Common Features

  1. Constructor Methods
    Each hardware component has a constructor that takes relevant parameters (like serial numbers or device addresses). After constructing the device object, you can call initialize or other methods to start interacting with the hardware.

  2. Export State
    The function export_state gives you a structured overview of the device’s current settings:

    • Attributes: Key-value pairs with the device’s configuration.
    • Data: Measurement or imaging data.
    • Children: Nested hardware components or linked instruments.
  3. Graphical User Interface
    Many modules provide a simple GUI for controlling hardware, created using GLMakie. This interface often allows for easy on/off toggling, parameter changes, and live readouts.


Supported Hardware

Cameras

  • Hamamatsu DCAM4 compatible cameras
  • Thorlabs Scientific Cameras (CSC series)
  • Simulated camera for testing

Stages

  • Mad City Labs nanopositioning stages
  • Physik Instrumente (PI) stages
  • PI N-472 linear stage
  • Simulated stage for testing

Light Sources

  • Thorlabs TCube laser diode controller
  • CrystaLaser 561nm
  • Vortran 488nm laser
  • Simulated light source for testing

Other Hardware

  • National Instruments DAQ cards
  • Opal Kelly XEM FPGA boards
  • DAQ-based transmission light control

Installation Notes

Since this package is under active development and not yet registered, install it using:

using Pkg
Pkg.develop(url="https://github.com/LidkeLab/MicroscopeControl.jl.git")

Contributions

Contributions are welcome! We encourage pull requests that add support for new hardware or improve existing modules.

About

Control Microscopy Hardware with Julia

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages