SmartEM Agent CLI Reference#
The SmartEM Agent provides a comprehensive command-line interface for parsing, validating, and monitoring EPU (Electron Physical User) microscopy data. This reference documents all available commands, parameters, and usage patterns.
Command Overview#
python -m smartem_agent [COMMAND] [OPTIONS]
The CLI is organised into the following command groups:
Global Options#
All commands support the following verbosity options:
Option |
Short |
Type |
Default |
Description |
---|---|---|---|---|
|
|
count |
0 |
Increase verbosity (-v for INFO, -vv for DEBUG) |
Verbosity Levels:
0 (default): ERROR level - Only critical errors are shown
1 (-v): INFO level - General information and warnings
2 (-vv): DEBUG level - Detailed debugging information
Parse Commands#
Parse commands extract and process data from EPU files without persisting to the backend API. These are primarily used for development, debugging, and data validation purposes.
parse dir#
Parse an entire EPU output directory structure that may contain multiple grids.
python -m smartem_agent parse dir [OPTIONS] EPU_OUTPUT_DIR
Parameters:
Parameter |
Type |
Required |
Description |
---|---|---|---|
|
str |
Yes |
Path to EPU output directory containing multiple grid directories |
|
count |
No |
Verbosity level (see Global Options) |
Example:
python -m smartem_agent parse dir /data/microscopy/session_20240115 -v
Use Cases:
Batch processing of multiple grid datasets
Session-level data analysis and validation
Quality control across entire microscopy sessions
parse grid#
Parse a single grid data directory containing EPU acquisition files.
python -m smartem_agent parse grid [OPTIONS] GRID_DATA_DIR
Parameters:
Parameter |
Type |
Required |
Description |
---|---|---|---|
|
str |
Yes |
Path to individual grid data directory |
|
count |
No |
Verbosity level (see Global Options) |
Example:
python -m smartem_agent parse grid /data/microscopy/session_20240115/Grid_001 -vv
Use Cases:
Single grid analysis and debugging
Grid-specific data extraction
Verification of individual acquisition datasets
parse session#
Parse an EPU session manifest file (typically EpuSession.dm
).
python -m smartem_agent parse session [OPTIONS] PATH
Parameters:
Parameter |
Type |
Required |
Description |
---|---|---|---|
|
str |
Yes |
Path to EPU session manifest file |
|
count |
No |
Verbosity level (see Global Options) |
Example:
python -m smartem_agent parse session /data/microscopy/Grid_001/EpuSession.dm
Output: Session metadata including acquisition parameters, timestamps, and instrument configuration.
parse atlas#
Parse an atlas manifest file (typically Atlas/Atlas.dm
).
python -m smartem_agent parse atlas [OPTIONS] PATH
Parameters:
Parameter |
Type |
Required |
Description |
---|---|---|---|
|
str |
Yes |
Path to atlas manifest file |
|
count |
No |
Verbosity level (see Global Options) |
Example:
python -m smartem_agent parse atlas /data/microscopy/Grid_001/Sample*/Atlas/Atlas.dm
Output: Atlas information including grid square positions, tile arrangements, and overview image metadata.
parse gridsquare-metadata#
Parse grid square metadata files (typically Metadata/GridSquare_*.dm
).
python -m smartem_agent parse gridsquare-metadata [OPTIONS] PATH
Parameters:
Parameter |
Type |
Required |
Description |
---|---|---|---|
|
str |
Yes |
Path to grid square metadata file |
|
count |
No |
Verbosity level (see Global Options) |
Example:
python -m smartem_agent parse gridsquare-metadata /data/microscopy/Grid_001/Metadata/GridSquare_12345.dm
Output: Grid square-specific metadata including foil hole positions and targeting information.
parse gridsquare#
Parse grid square manifest files (typically Images-Disc*/GridSquare_*/GridSquare_*.xml
).
python -m smartem_agent parse gridsquare [OPTIONS] PATH
Parameters:
Parameter |
Type |
Required |
Description |
---|---|---|---|
|
str |
Yes |
Path to grid square manifest file |
|
count |
No |
Verbosity level (see Global Options) |
Example:
python -m smartem_agent parse gridsquare /data/microscopy/Grid_001/Images-Disc1/GridSquare_12345/GridSquare_20240115_143022.xml
Output: Grid square acquisition details and image collection parameters.
parse foilhole#
Parse foil hole manifest files (typically Images-Disc*/GridSquare_*/Data/FoilHole_*.xml
).
python -m smartem_agent parse foilhole [OPTIONS] PATH
Parameters:
Parameter |
Type |
Required |
Description |
---|---|---|---|
|
str |
Yes |
Path to foil hole manifest file |
|
count |
No |
Verbosity level (see Global Options) |
Example:
python -m smartem_agent parse foilhole /data/microscopy/Grid_001/Images-Disc1/GridSquare_12345/Data/FoilHole_1234567_Data_20240115_143045_fractions.xml
Output: Foil hole targeting information and acquisition metadata.
parse micrograph#
Parse micrograph manifest files (typically Images-Disc*/GridSquare_*/FoilHoles/FoilHole_*.xml
).
python -m smartem_agent parse micrograph [OPTIONS] PATH
Parameters:
Parameter |
Type |
Required |
Description |
---|---|---|---|
|
str |
Yes |
Path to micrograph manifest file |
|
count |
No |
Verbosity level (see Global Options) |
Example:
python -m smartem_agent parse micrograph /data/microscopy/Grid_001/Images-Disc1/GridSquare_12345/FoilHoles/FoilHole_1234567_20240115_143045.xml
Output: Individual micrograph metadata including exposure parameters and image quality metrics.
Validate Command#
The validate command checks EPU project directory structure for completeness and compliance with expected formats.
python -m smartem_agent validate [OPTIONS] PATH
Parameters:
Parameter |
Type |
Required |
Default |
Description |
---|---|---|---|---|
|
str |
Yes |
- |
Path to EPU project directory to validate |
|
count |
No |
0 |
Verbosity level (see Global Options) |
Exit Codes:
0: Directory structure is valid
1: Directory structure is invalid (validation errors found)
Example:
python -m smartem_agent validate /data/microscopy/Grid_001 -v
Validation Checks:
Presence of required EPU session files
Directory structure compliance
File naming convention adherence
Metadata file accessibility
Output:
Valid structure: Confirmation message with no errors
Invalid structure: Detailed list of structural issues and missing components
Watch Command#
The watch command provides real-time monitoring of EPU data directories, automatically processing new files and communicating with the SmartEM backend.
python -m smartem_agent watch [OPTIONS] PATH
Parameters#
Parameter |
Type |
Required |
Default |
Description |
---|---|---|---|---|
|
Path |
Yes |
- |
Directory to monitor for file changes |
|
bool |
No |
False |
Run without making API calls to backend |
|
str |
No |
|
Backend API endpoint URL |
|
str |
No |
|
Log file path for change events |
|
float |
No |
10.0 |
Logging interval in seconds |
|
str |
No |
None |
Agent identifier for SSE connection |
|
str |
No |
None |
Session identifier for SSE connection |
|
int |
No |
30 |
SSE connection timeout in seconds |
|
int |
No |
60 |
Agent heartbeat interval in seconds (0 to disable) |
|
count |
No |
0 |
Verbosity level (see Global Options) |
Core Parameters#
path#
Type: Path (required) Description: The root directory to monitor for EPU data files. Must be an existing directory containing or expected to contain EPU acquisition data.
Example:
python -m smartem_agent watch /data/microscopy/active_session
–dry-run#
Type: Boolean flag Default: False Description: Run the agent in simulation mode without making API calls to the backend. Useful for testing file monitoring and parsing without affecting production systems.
Example:
python -m smartem_agent watch /data/test --dry-run
Behaviour:
File monitoring and parsing operate normally
No data is sent to the backend API
Uses in-memory data storage only
Ideal for development and testing scenarios
API Integration Parameters#
–api-url#
Type: String
Default: http://127.0.0.1:8000
Description: URL of the SmartEM backend API endpoint. The agent will attempt to connect to this URL for data persistence and real-time communication.
Examples:
# Local development
python -m smartem_agent watch /data --api-url http://localhost:8000
# Production deployment
python -m smartem_agent watch /data --api-url https://smartem.facility.ac.uk/api
Connection Validation: The agent validates API connectivity at startup and exits with error code 1 if the API is unreachable (unless using --dry-run
).
–agent-id#
Type: String (optional) Description: Unique identifier for this agent instance. Required for real-time communication with the backend via Server-Sent Events (SSE).
Format Recommendations:
Use descriptive names:
microscope-01
,titan-krios-lab2
Include facility/location information for multi-site deployments
Ensure uniqueness across all agent instances
–session-id#
Type: String (optional) Description: Session identifier linking this agent to a specific microscopy session. Required for real-time communication with the backend.
Usage: Typically generated by the backend or provided by the acquisition software. Used to group related data and instructions.
Real-Time Communication Parameters#
–sse-timeout#
Type: Integer Default: 30 seconds Description: Timeout for Server-Sent Events (SSE) connections to the backend. Controls how long the agent waits for backend responses.
Recommendations:
Local networks: 10-30 seconds
Remote/unstable connections: 60-120 seconds
High-latency networks: 120+ seconds
–heartbeat-interval#
Type: Integer Default: 60 seconds Description: Interval between heartbeat messages sent to the backend to maintain connection health monitoring. Set to 0 to disable heartbeats.
Connection Health: The backend considers connections stale after 2 minutes without heartbeats, so values should be well below 120 seconds.
Examples:
# Standard monitoring (every minute)
python -m smartem_agent watch /data --agent-id agent-01 --session-id session-123
# Frequent monitoring (every 30 seconds)
python -m smartem_agent watch /data --agent-id agent-01 --session-id session-123 --heartbeat-interval 30
# Disable heartbeats (not recommended for production)
python -m smartem_agent watch /data --agent-id agent-01 --session-id session-123 --heartbeat-interval 0
Logging Parameters#
–log-file#
Type: String
Default: fs_changes.log
Description: Path to log file for filesystem change events. The agent writes structured JSON logs of all detected file changes to this file.
Log Content: File creation, modification events, timestamps, file sizes, and processing status.
–log-interval#
Type: Float Default: 10.0 seconds Description: Batching interval for filesystem change logging. Events are collected and written to the log file at this interval to improve performance.
Performance Impact:
Lower values (1-5s): More responsive logging, higher I/O overhead
Higher values (30-60s): Better performance, less frequent updates
Very high values (>60s): Risk of log loss on unexpected shutdown
Usage Examples#
Basic Monitoring#
# Monitor directory with default settings
python -m smartem_agent watch /data/microscopy/Grid_001
Production Deployment with Real-Time Communication#
python -m smartem_agent watch /data/microscopy/active_session \
--api-url https://smartem-backend.facility.ac.uk \
--agent-id microscope-titan-01 \
--session-id session-20240115-001 \
--heartbeat-interval 45 \
--verbose
Development and Testing#
# Dry run with debug logging
python -m smartem_agent watch /data/test_data \
--dry-run \
--log-interval 5.0 \
--verbose --verbose
High-Performance Production Setup#
python -m smartem_agent watch /data/high_throughput \
--api-url http://backend:8000 \
--agent-id facility-workstation-03 \
--session-id batch-processing-session \
--log-interval 30.0 \
--sse-timeout 120 \
--heartbeat-interval 30
File Pattern Matching#
All commands that process EPU data use consistent file pattern matching to identify relevant files:
Supported Patterns:
EpuSession.dm
- EPU session filesMetadata/GridSquare_*.dm
- Grid square metadataImages-Disc*/GridSquare_*/GridSquare_*_*.xml
- Grid square manifestsImages-Disc*/GridSquare_*/Data/FoilHole_*_Data_*_*_*_*.xml
- Foil hole dataImages-Disc*/GridSquare_*/FoilHoles/FoilHole_*_*_*.xml
- Foil hole positionsSample*/Atlas/Atlas.dm
- Atlas files
Pattern Matching Rules:
Recursive directory traversal for nested structures
Case-sensitive matching
Wildcards support standard shell globbing patterns
Both Windows and Linux path separators are supported
Exit Codes#
Code |
Condition |
Description |
---|---|---|
0 |
Success |
Command completed successfully |
1 |
Validation Error |
Directory validation failed (validate command) |
1 |
API Connection Error |
Unable to connect to backend API |
1 |
Directory Not Found |
Specified directory does not exist |
1 |
Permission Error |
Insufficient permissions to access directory or files |
2 |
Keyboard Interrupt |
User terminated command with Ctrl+C |
Integration Notes#
Backend API Requirements#
The watch command requires a compatible SmartEM backend API with the following endpoints:
Status endpoint:
GET /status
- For connectivity validationData persistence: Various endpoints for storing parsed EPU data
SSE endpoint:
GET /agent/{agent_id}/session/{session_id}/instructions/stream
- For real-time communicationHeartbeat endpoint:
POST /agent/{agent_id}/session/{session_id}/heartbeat
- For connection health
Environment Considerations#
File System Permissions:
Read access to EPU data directories
Write access to log file location
Appropriate permissions for recursive directory traversal
Network Requirements:
HTTP/HTTPS connectivity to backend API
Stable connection for SSE streaming (when using real-time features)
Consideration of firewall and proxy configurations
Resource Requirements:
Memory usage scales with directory size and file count
CPU usage depends on file processing frequency
Network bandwidth for real-time data transmission
Performance Considerations#
Large Directory Structures:
Initial directory parsing can be resource-intensive
Consider using
--log-interval
tuning for high-frequency file changesMonitor memory usage with very large datasets
Network Latency:
Adjust
--sse-timeout
for high-latency connectionsConsider
--heartbeat-interval
tuning based on network stabilityUse
--dry-run
for local testing and development
This CLI reference provides comprehensive coverage of all SmartEM Agent command-line functionality. For additional help with specific use cases or troubleshooting, refer to the CLI Troubleshooting Guide.