CODA (CEBAF Online Data Acquisition) user environment for experimental data acquisition, component orchestration, and configuration management.
This repository contains the complete CODA user environment including:
- Startup and control scripts for component orchestration
- Configuration files (base templates and auto-generated)
- Readout lists (ROLs) for hardware control
- CODA COOL database for run configuration
- Firmware images for FADC and VTP hardware
- Runtime logs and diagnostic outputs
coda-usr/
├── coda_scripts/ # Startup, control, and orchestration scripts
├── config/ # Configuration files (base + auto-generated)
├── coda_tmp_log/ # Runtime logs (auto-created)
├── db/ # CODA COOL database files
├── firmware/ # Hardware firmware images
└── rol/ # Readout lists (compiled to .so)
├── vme/ # VME ROC readout lists
├── vtp/ # VTP library source
└── vtp_rol/ # VTP ROC readout lists + binaries
Purpose: CODA component orchestration and system control scripts
Key Scripts:
startCoda- Main component launcher with file-based configurationkcoda- Component killer (cleanup script)- Pedestal generation helpers
- Configuration file generators
- Environment setup utilities
Responsibilities:
- Parse component definition files
- Launch CODA components (ROC, FPGA/VTP, PEB, ER, etc.) on remote hosts
- Generate per-host VME and VTP configuration files from base templates
- Run pedestal measurements and integrate results into configs
- Start CODA platform (rcPlatform) and run control GUI (rcGUI)
- Manage component lifecycle (startup sequencing, process monitoring)
Key Features:
- File-based component launching (
--file components.txt) - Automatic config generation mode (
--configflag) - Pedestal measurement integration
- Remote execution via
remote_vmeSSH wrapper - Xterm window management for interactive component shells
Documentation: See coda_scripts/README.md for detailed usage, examples, and troubleshooting.
Workflow Integration:
- Normal startup: Launches components using existing config files
- Config mode: Runs pedestal measurements → generates configs → launches components
Purpose: Configuration file storage (both user-edited and auto-generated)
File Types:
base.cnf- Master configuration template containing:- VME configuration (FADC parameters)
- VTP configuration (firmware, network, streaming)
- MAC/IP address mapping table for VTP hosts
run.cnf- Component definition file (hostname, type, name, options)
vme_<hostname>.cnf- Per-ROC VME configuration- VME section from
base.cnf - Appended pedestal data from
<hostname>.peds
- VME section from
vtp_<hostname>.cnf- Per-ROC VTP configuration- VTP section from
base.cnf - Host-specific MAC and IP addresses
- Computed
VTP_PAYLOAD_ENbased on FADC slots
- VTP section from
<hostname>.peds- FADC pedestal measurement output- Generated by
fadc250pedsduring config mode - Contains baseline offsets for ADC channels
- Used to compute VTP payload enable mask
- Generated by
Interaction:
- Config Generation:
startCoda --configreadsbase.cnf+ pedestal files → writesvme_*.cnfandvtp_*.cnf - Component Startup: ROL code reads
vme_<hostname>.cnforvtp_<hostname>.cnfduring Download/Prestart
Important: This directory is both:
- User-managed: Edit
base.cnfandrun.cnfto define system configuration - Auto-managed:
vme_*.cnf,vtp_*.cnf, and*.pedsare generated automatically
Purpose: Runtime log file storage (auto-created)
Contents:
<hostname>_<component>_lastsession.log- Component session logs- Captures stdout/stderr from remote component shells
- Example:
test2_ROC1_lastsession.log,test2vtp_FPGA1_lastsession.log
platform_output_*.log- Platform startup logs (realtime capture)- Pedestal measurement output
- Startup stage diagnostics
Lifecycle:
- Created: Automatically by
startCodaon first run - Updated: Each component launch overwrites previous session log
- Cleanup: May be deleted between runs (not version controlled)
Use Case: Troubleshooting component failures, verifying pedestal measurements, debugging startup issues
Purpose: CODA COOL database storage
Contents:
- CODA COOL database files
- Run type definitions
- Session configurations
- Run control document storage
Usage:
- Read/written by
rcPlatformandrcGUI - Stores run configuration metadata
- Manages session state and run types
Important:
- Do not manually edit database files unless performing database maintenance
- Database corruption can cause run control failures
- Backup before any manual modifications
Purpose: Hardware firmware image storage
Contents:
- FADC firmware images (
.binfiles) - VTP FPGA firmware images:
- Z7 (Zynq-7000) firmware files
- V7 (Virtex-7) firmware files
Usage:
- Referenced by VTP configuration (
VTP_FIRMWARE_Z7,VTP_FIRMWARE_V7in config files) - Loaded during VTP Download transition via
vtpZ7CfgLoad()andvtpV7CfgLoad() - Must match expected firmware versions defined in
vtp_<hostname>.cnf
Configuration:
- Firmware directory:
$CODA_FIRMWARE(or$CODA/firmwarefallback) - Filenames defined in config files (e.g.,
fe_vtp_z7_streamingv3_ejfat_v5.bin)
Versioning: Firmware files are typically specific to hardware revisions and experiment requirements.
Purpose: Readout List (ROL) source code and compiled shared objects
ROLs are C programs that control hardware during CODA transitions (Download, Prestart, Go, End). They are compiled into shared objects (.so) and loaded by CODA run control.
rol/vme/ - VME ROC Readout Lists
- Source code for VME-based readout controllers
- Controls FADC modules via VME bus
- Compiled to
.sofiles loaded during Download
rol/vtp/ - VTP Library Source (if present)
- VTP hardware library source code
- May contain libvtp.so and related utilities
- Typically compiled separately and linked by VTP ROLs
rol/vtp_rol/ - VTP ROC Readout Lists
vtp_sro_1udp.c- Main VTP streaming readout list (single UDP connection)VTP_source.h- VTP-specific CODA macrosMakefile- Build systemvtp_sro_1udp.so- Compiled shared object (loaded by CODA)
Configuration:
- VTP ROL reads
$CODA_CONFIG/vtp_<hostname>.cnfduring Download/Prestart - VME ROL reads
$CODA_CONFIG/vme_<hostname>.cnf
Build Process:
cd rol/vtp_rol
make clean
make vtp_sro_1udp.soDeployment:
- Shared objects (
.so) are loaded by CODA run control during Download transition - ROL functions (rocDownload, rocPrestart, rocGo, rocEnd, rocTrigger) control hardware lifecycle
Documentation: See rol/vtp_rol/README.md for VTP ROL configuration and build instructions.
startCoda --file config/run.cnf
Sequence:
startCodareadsconfig/run.cnf(component definitions)- Launches components on remote hosts via
remote_vme- ROC: Starts coda_roc (loads
rol/vtp_rol/vtp_sro_1udp.so) - FPGA: Starts VTP component
- PEB, ER, etc.: Start respective processes
- ROC: Starts coda_roc (loads
- Starts
rcPlatformin background - Waits for AFECS container registration
- Starts
rcGUI(final step)
Config Usage:
- ROL code reads existing
vme_<hostname>.cnfandvtp_<hostname>.cnffromconfig/ - No config generation occurs
Logs: Component sessions logged to coda_tmp_log/
startCoda --file config/run.cnf --config
Sequence:
startCodareadsconfig/run.cnf(component definitions)- Pedestal Measurement Phase:
- ROC components execute
fadc250pedson remote hosts - Pedestal data written to
$CODA_CONFIG/<hostname>.peds - Waits for file closure (3 consecutive identical size readings)
- ROC components execute
- Config Generation Phase:
- Reads
config/base.cnf(VME and VTP template sections) - Parses
<hostname>.pedsto extract FADC slot list - Generates
config/vme_<hostname>.cnf:- VME section from
base.cnf - Appended pedestal data from
<hostname>.peds
- VME section from
- Generates
config/vtp_<hostname>.cnf:- VTP section from
base.cnf - MAC/IP from
base.cnfmapping table - Computed
VTP_PAYLOAD_ENfrom FADC slots
- VTP section from
- Reads
- Component Startup Phase:
- ROC components start
coda_roc(using newly generated configs) - Other components start normally
- ROC components start
- Starts
rcPlatformin background - Waits for AFECS container registration
- Starts
rcGUI(final step)
Directory Interaction:
config/base.cnf ──┐
config/*.peds ────┼──> coda_scripts/startCoda ──> config/vme_*.cnf
│ └─> config/vtp_*.cnf
│
└──> firmware/*.bin (referenced by VTP config)
rol/vtp_rol/vtp_sro_1udp.so ──> Reads config/vtp_*.cnf at Download
Logs: Pedestal measurements and component sessions logged to coda_tmp_log/
Required environment variables (set in setupCODA3.bash or equivalent):
| Variable | Description | Example |
|---|---|---|
CODA |
CODA installation directory | /site/coda/3.10_devel |
CODA_SCRIPTS |
Path to coda_scripts/ directory |
/path/to/coda-usr/coda_scripts |
CODA_CONFIG |
Path to config/ directory |
/path/to/coda-usr/config |
CODA_FIRMWARE |
Path to firmware/ directory |
/path/to/coda-usr/firmware (or $CODA/firmware) |
SESSION |
CODA session name (optional) | session |
EXPID |
Experiment ID (optional) | hallb |
Note: CODA_COMPONENT_TABLE is set internally by startCoda from --file argument. Do not set manually.
source /path/to/setupCODA3.bashcd $CODA_SCRIPTS
./startCoda --file config/run.cnfcd $CODA_SCRIPTS
./startCoda --file config/run.cnf --configcd $CODA_SCRIPTS
./kcoda --file config/run.cnf- Startup Scripts:
coda_scripts/README.md- Detailed startCoda usage and troubleshooting - VTP ROL:
rol/vtp_rol/README.md- VTP configuration, firmware, and build instructions - Stage Documentation:
coda_scripts/*.md- Implementation notes for each development stage
- Check
coda_tmp_log/<hostname>_<component>_lastsession.log - Verify environment variables are set (
echo $CODA,echo $CODA_CONFIG) - Ensure config files exist:
ls -l config/vtp_*.cnf config/vme_*.cnf
- Verify
config/base.cnfexists and contains VME/VTP sections - Check pedestal files were generated:
ls -l $CODA_CONFIG/*.peds - Review config generation output in console
- Check MAC/IP mapping exists in
base.cnffor all ROC hosts
cd rol/vtp_rol
git pull
make clean
make vtp_sro_1udp.so- Check
coda_tmp_log/platform_output_*.log - Verify CODA database is intact:
ls -l db/ - Ensure port 20000 (or configured port) is available
- Check AFECS container registration in platform log
When modifying this repository:
- Scripts: Update
coda_scripts/README.mdif changing startup behavior - ROLs: Update
rol/vtp_rol/README.mdif changing VTP configuration - Config: Document config key changes in both READMEs
- Testing: Run test scripts in
coda_scripts/test_*.sh
Repository: https://github.com/JeffersonLab/coda-usr Author: Vardan Gyurjyan