# 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: 1. **IPython Profile** - Contains multiple configuration files - Defines the beamline's startup behavior - Loads necessary modules and configurations 2. **Beamline Package** - Contains beamline-specific Python code - Implements custom device classes - Defines specialized scan plans - Provides startup routines 3. **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: 1. **nbs-core** - Provides common utilities - Defines base classes - Implements shared functionality 2. **nbs-gui** - Creates graphical interfaces - Provides real-time monitoring - Enables user interaction 3. **nbs-sim** - Simulates beamline hardware - Enables offline testing - Supports development 4. **nbs-pods** - Manages deployment - Handles container orchestration - Provides consistent environments ## Key Advantages 1. **Configuration-Driven Development** - Separates configuration from code - Makes changes easier and safer - Reduces need for code modifications - Improves maintainability 2. **Standardization** - Common device classes - Standard scan patterns - Consistent interfaces - Shared best practices 3. **Flexibility** - Supports customization - Allows for beamline-specific needs - Extensible architecture - Modular design 4. **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