sardana Logo
  • Installation
    • Installing with pip (platform-independent)
    • Linux (Debian-based)
    • Installing in a conda environment (platform-independent)
    • Working from Git source directly (in develop mode)
      • In a conda or python virtual environment
      • With pixi
      • With docker
    • Dependencies
  • Tutorials
    • First steps with Sardana
      • What is Sardana
      • The building blocks
      • A simplified architecture
      • Installing Sardana for the tutorials
        • The Tango database
      • Next steps
    • Set up a simulated beamline
      • Prerequisites
      • Start the Sardana server
      • Connect with Spock
      • Populate the demo environment
      • Look around
      • Next steps
    • Write your first macro
      • Macros live in macro libraries
      • Hello, world!
      • Load and run it
      • Adding parameters
      • Returning a result
      • Next steps
    • Write your first controller
      • The controller class
      • Tell the Pool where to find it
      • Create a controller and a motor
      • Move it!
      • Next steps
    • Run your first scan
      • The measurement group
      • Counting
      • Your first step scan
      • Where does the data go?
      • A teaser: continuous scans
      • Next steps
  • How-to Guides
    • Configuration
      • Configuration format and tools
        • dump
        • load
        • validate
        • diff
        • graph
        • update
      • Configuration points
        • Spock configuration
        • Server configuration
        • Running Pool and MacroServer separately
        • MacroServer configuration
        • Device Pool configuration
        • Adding real elements
    • Writing macros
      • General macro development
        • What is a macro
        • What should and should not be a macro
        • How to start writing a macro
        • Writing a macro function
        • Adding parameters to your macro
        • Returning a macro result
        • Macro context
        • Calling other macros from inside your macro
        • Accessing Macro Environment
        • Logging
        • Reports
        • Advanced macro calls
        • Accessing macro data
        • Writing a macro class
        • Handling macro stop and abort
        • Handling exceptions
        • Adding hooks support
        • Accessing Tango from your macros
        • Using external python libraries
        • Plotting
        • Asking for user input
        • Showing progress in long macros
        • Simultaneous actions
        • Adding your macros to Sardana
      • Scan macro development
        • A basic example on writing a step scan
        • A basic example on writing a continuous scan
        • Deterministic scans
        • Hooks support in scans
        • More examples
      • Macro hooks
        • General Hooks
      • Controlling macro sequences
        • Attaching the macros to execute
        • Conditional execution with cond
        • Selecting a branch with select
        • Retrying a procedure
        • Continuing after failed retries
        • Testing failures
      • Macro environment
        • Environment Variables Types
        • Environment Variables Scope
      • Macro logging and reports
      • Examples
        • Macro examples
        • Controller examples
    • Writing controllers
      • General controller writing
        • Controller - The basics
      • Controller testing
      • Motor controller
        • The basics
        • Advanced topics
      • Counter/timer controller
        • The basics
        • Advanced topics
      • 0D controller
        • Get 0D state
      • 1D controller
        • General guide
        • Differences with counter/timer controller
        • Advanced topics
      • 2D controller
        • General guide
        • Differences with counter/timer controller
        • Advanced topics
      • Trigger/gate controller
        • The basics
        • Advanced topics
      • IO register controller
        • The basics
      • Pseudo motor controller
        • Prerequisites
        • Rules
        • What to do when pseudo position can not be determined?
      • Pseudo counter controller
        • The basics
        • What to do when pseudo value can not be determined?
        • Changing default interface
        • Get pseudo counter shape
        • Including external variables in the calculation
    • Scans and data storage
      • Scan configuration and data storage
        • Configuration
        • Shutter
        • Data storage
        • Scan snapshots
        • Scan statistics
      • Writing recorders
        • Overview
        • What is a recorder?
        • Discovering available recorders
        • Writing a custom recorder
        • Configuration
      • Diffractometer
    • Environment variables
      • Managing environment variables
        • Getting and setting variables
        • Door and macro specific variables
        • Accessing the environment from macros
      • Environment storage backends
        • Shelve backend (default)
        • Redis backend
        • Tango DB backend
    • Spock and GUI tools
      • Spock
        • Starting spock from the command line
        • Starting spock with a custom profile
        • Spock IPython Primer
        • Executing macros
        • Stopping macros
        • Executing macro sequences
        • Exiting spock
        • Getting help
        • Moving motors
        • Counting
        • Scanning
        • Accessing macro data
        • Changing appearance with View Options
        • Editing macros
        • Debugging problems
        • Spock syntax
        • Using spock as a Python console
        • Using spock as a Tango console
      • Sardana-Taurus widgets
        • MacroExecutor
        • Sequencer
        • Experiment Configuration
        • Experiment Status
        • MacroButton
        • Sardana Editor
        • Showscan
        • PoolMotorTV
        • PoolChannelTV
        • QtSpock
    • Development
      • Coding guide
        • Overview
        • How to contribute to Sardana
        • General design
        • Software layers
        • Sardana kernel
        • Plugins
      • Testing
        • Overview
        • Install the test environment
        • Run the tests
        • Test categories and markers
        • Tango database isolation
        • Choose a fixture
        • Configure Tango fixtures
        • Write a device-server test
        • Test elements and parallel sessions
        • Macro and controller test helpers
        • Legacy device-server base classes
      • Test-driven development example
        • Test development
        • Macro development
      • Unit test examples
        • sardanavalue
        • parameter
      • Troubleshooting
        • How to call procedures (macros)?
        • How to write procedures (macros)?
        • How to write scan procedures?
        • How to adapt Sardana to your own hardware?
        • How to access Tango from within macros or controllers?
        • How to add your own file format?
        • How to access EPICS from Sardana?
        • Which controller type should I choose for hardware that does not fit any specific type?
  • Explanation
    • Architecture
      • What Sardana provides
      • Client-server architecture
        • Sardana server (SDS)
      • Why Tango
      • Symbolic sketch
    • The Device Pool
      • The element model
      • Controllers and elements
      • Instruments
    • Pool elements
      • Motor
      • Motor group
      • Pseudo motor
      • I/O register
      • Counter/timer
      • 0D channel
      • 1D channel
      • 2D channel
      • Pseudo counter
      • Measurement group
        • Configuration
      • Trigger/gate
    • Controllers
      • Controller-element relation
      • Controller types
      • Controllers as plug-ins
      • Plug-in discovery
    • Motion
      • Discrete Motion
    • Acquisition
      • Experimental channel acquisition
      • Measurement group acquisition
    • Scans
      • Step scans
      • Continuous scans
      • Configuration, data storage and snapshots
    • Synchronization
      • Synchronization domains
      • Software versus hardware synchronization
      • Synchronization types
      • Trigger/gate elements in continuous scans
    • The Macro Server
      • Door
      • Macro execution model
      • Hooks
      • Stop, abort and pause semantics
      • Environment
    • Environment storage backends
      • A modular manager
      • Backend selection
      • Trade-offs
        • Shelve (default)
        • Redis
        • Tango database
    • Performance and scalability
      • Events instead of polling
      • MacroServer startup
      • Large installations
  • Reference
    • Command line tools
      • Command line tools
        • Device servers
        • Command line client
        • The sardanactl command
        • Standalone Qt applications
        • Optional dependencies
    • Macros
      • Macro catalog
        • motion related macros
        • counting macros
        • diffractometer related macros
        • environment related macros
        • list related macros
        • experiment configuration macros
        • general hooks macros
        • advanced element manipulation macros
        • reload code macros
        • scan macros
        • scan related macros
        • input/output register macros
        • general macros
        • demo macros
      • Macro API
        • Macro class
        • Hookable class
        • iMacro class
        • macro decorator
        • imacro decorator
        • StopException
        • AbortException
        • InterruptException
    • Plugin APIs
      • Controller API
        • Data Type definition
        • Custom command definition
      • Recorder API
        • Base classes
        • Module documentation
    • Element APIs
      • Motor API
        • Motor state
        • Motor position
        • Motion
      • I/O register API
      • Counter/timer API
      • 0D experiment channel API
      • 1D experiment channel API
      • 2D experiment channel API
      • Trigger/gate API
        • Time domain
        • Position domain
        • Attributes
      • Pseudo motor API
        • drift correction
        • siblings
        • start move absolute
        • stop
        • abort
        • release
        • PseudoMotor position
        • Motion
      • Pseudo counter API
      • Measurement group API
      • MacroServer API
        • pool names
        • environment db
        • macro path
        • recorder path
        • python path
        • max parallel macros
        • log report file name
        • log report format
      • Pool API
        • pool path
        • python path
    • Python library
      • Python API overview
        • Extension APIs
        • Element APIs
        • Client integration APIs
        • Testing and implementation details
      • Python package reference
        • Core modules
        • Pool
        • MacroServer
        • Spock
        • Tango integration
        • Taurus integration
        • Choose a starting point
        • Implementation source
        • Indexes
        • The sardana package
        • Packages
      • Sardana-Taurus model API
        • pool
        • macroserver
        • macro
        • registerExtensions()
        • unregisterExtensions()
      • Sardana-Taurus Qt model API
        • pool
        • macroserver
        • registerExtensions()
      • Test API
        • Macro test API
        • Decorator
        • BaseMacroExecutor
        • MacroExecutorFactory
        • MacroTester
        • BaseMacroTestCase
        • RunMacroTestCase
        • RunStopMacroTestCase
        • SarDemoEnv
    • Tango interface
      • Tango objects
        • Introduction
        • Overall pool design
        • Sardana core hardware access
        • Extending pool features
        • Common task handled by the pool
        • The pool device Tango interface
        • Creating device
        • Some words on internal implementation
    • Configuration
      • Configuration
        • Sardana custom settings
      • Environment variable catalog
        • General Environment Variables
        • Diffractometer Environment Variables
        • Macro Logging Environment Variables
        • Motion Environment Variables
        • Scan Environment Variables
    • Project records
      • Migration guides
        • ids properties
        • v2 -> v3
        • v0 -> v1
      • SEPs
  • News and releases
    • What's New
      • What’s new in Sardana 3.8.0?
        • Added
        • Changed
        • Fixed
      • What’s new in Sardana 3.7.1?
        • Added
        • Fixed
      • What’s new in Sardana 3.7.0?
        • Added
        • Changed
        • Fixed
      • What’s new in Sardana 3.6.0?
        • Added
        • Fixed
        • Removed
      • What’s new in Sardana 3.5.2?
        • Fixed
      • What’s new in Sardana 3.5.1?
        • Fixed
      • What’s new in Sardana 3.5?
        • Added
        • Changed
        • Fixed
      • What’s new in Sardana 3.4.4?
        • Fixed
      • What’s new in Sardana 3.4.4?
        • Fixed
      • What’s new in Sardana 3.4.3?
        • Added
        • Fixed
      • What’s new in Sardana 3.4.2?
        • Fixed
      • What’s new in Sardana 3.4.1?
        • Added
        • Fixed
      • What’s new in Sardana 3.4?
        • Added
        • Changed
        • Deprecated
        • Fixed
      • What’s new in Sardana 3.3.8?
        • Fixed
      • What’s new in Sardana 3.3.7?
        • Fixed
      • What’s new in Sardana 3.3.6?
        • Fixed
      • What’s new in Sardana 3.3.5?
        • Fixed
      • What’s new in Sardana 3.3.4?
        • Fixed
      • What’s new in Sardana 3.3.3?
        • Added
        • Changed
        • Fixed
        • Removed
      • What’s new in Sardana 3.2.1?
        • Fixed
      • What’s new in Sardana 3.2?
        • Added
        • Changed
        • Fixed
      • What’s new in Sardana 3.1.3?
        • Fixed
      • What’s new in Sardana 3.1.2?
        • Fixed
      • What’s new in Sardana 3.1.1?
        • Fixed
      • What’s new in Sardana 3.1?
        • Added
        • Changed
        • Fixed
    • Other versions
  • Showcase
    • Shape-aware mapping
    • Continuous energy scans
    • Tomography beamline operation
    • From command line to beamline GUI
    • Where to go next
  • Glossary
sardana
  • Explanation
  • View page source

Explanation

This section contains conceptual material about how and why Sardana works: its architecture, the model behind its elements and controllers, the motion, acquisition and synchronization concepts, and the design rationale of the MacroServer internals. The pages here are meant to be read for understanding, not to be followed step by step — for task oriented documentation see the How-to guides and for technical descriptions see the Reference.

  • Architecture
    • What Sardana provides
    • Client-server architecture
    • Why Tango
    • Symbolic sketch
  • The Device Pool
    • The element model
    • Controllers and elements
    • Instruments
  • Pool elements
    • Motor
    • Motor group
    • Pseudo motor
    • I/O register
    • Counter/timer
    • 0D channel
    • 1D channel
    • 2D channel
    • Pseudo counter
    • Measurement group
    • Trigger/gate
  • Controllers
    • Controller-element relation
    • Controller types
    • Controllers as plug-ins
    • Plug-in discovery
  • Motion
    • Discrete Motion
  • Acquisition
    • Experimental channel acquisition
    • Measurement group acquisition
  • Scans
    • Step scans
    • Continuous scans
    • Configuration, data storage and snapshots
  • Synchronization
    • Synchronization domains
    • Software versus hardware synchronization
    • Synchronization types
    • Trigger/gate elements in continuous scans
  • The Macro Server
    • Door
    • Macro execution model
    • Hooks
    • Stop, abort and pause semantics
    • Environment
  • Environment storage backends
    • A modular manager
    • Backend selection
    • Trade-offs
  • Performance and scalability
    • Events instead of polling
    • MacroServer startup
    • Large installations
Previous Next

© Copyright Except where otherwise noted, content on this site is licensed under a Creative Commons Attribution 3.0 License.

Built with Sphinx using a theme provided by Read the Docs.