sardana
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
Reference
Python package reference
tango
macroserver
View page source
macroserver
Modules
MacroSever
Door
MacroExecutor
Version
Versions
develop
3.7.1
3.7.0
3.6.0
3.5.2
3.5.1
3.5.0
3.4.4
3.4.3
3.4.2
3.4.1
3.4.0
Other