Overview of nbs-bl
What is nbs-bl?
nbs-bl is a toolkit for creating beamline control packages at NSLS-II. It provides a foundation of standard functionality while allowing for beamline-specific customization. The library emphasizes configuration-driven development, separating the definition of beamline components from their implementation.
Beamline Components
A working beamline consists of three main components:
IPython Profile
Contains multiple configuration files
Defines the beamline’s startup behavior
Loads necessary modules and configurations
Beamline Package
Contains beamline-specific Python code
Implements custom device classes
Defines specialized scan plans
Provides startup routines
EPICS Layer
Collection of Process Variables (PVs)
Can connect to real hardware
Can connect to simulated hardware
Provides the interface between software and hardware
Core Functionality
1. Configuration Management
nbs-bl provides a robust configuration system that:
Loads objects from TOML configuration files
Separates device definitions from implementation
Allows for easy modification without code changes
Supports environment-specific configurations
2. Plan Management
The library includes a plan loading system that:
Loads scan definitions from configuration files
Provides standard metadata handling
Enables consistent plan execution
Allows for plan customization
3. Device Organization
Devices are organized through:
Groups: Collections of related devices (e.g., motors, detectors)
Roles: Special labels that persist even when hardware changes
Flexible hierarchy for device management
Standard interfaces for device types
4. Built-in Features
The library provides built-in functionality for:
Sample metadata management
Sample movement and positioning
Common scan metadata handling
GUI communication methods
Standard device classes and plans
5. GUI Integration
nbs-bl includes:
Methods for GUI communication
Standard interfaces for device control
Support for real-time updates
Integration with nbs-gui framework
Ecosystem Integration
nbs-bl is part of a larger ecosystem:
nbs-core
Provides common utilities
Defines base classes
Implements shared functionality
nbs-gui
Creates graphical interfaces
Provides real-time monitoring
Enables user interaction
nbs-sim
Simulates beamline hardware
Enables offline testing
Supports development
nbs-pods
Manages deployment
Handles container orchestration
Provides consistent environments
Key Advantages
Configuration-Driven Development
Separates configuration from code
Makes changes easier and safer
Reduces need for code modifications
Improves maintainability
Standardization
Common device classes
Standard scan patterns
Consistent interfaces
Shared best practices
Flexibility
Supports customization
Allows for beamline-specific needs
Extensible architecture
Modular design
Integration
Works with existing tools
Supports GUI development
Enables simulation
Facilitates deployment
Use Cases
nbs-bl is ideal for:
Setting up new beamlines
Standardizing beamline control
Implementing common functionality
Creating maintainable systems
Developing user interfaces
Testing and simulation