You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The CMV workflows parse raw TPC data, buffer Common Mode Values per CRU on FLPs, then merge and aggregate them on a calibration node before serializing the CMVContainer in a TTree. The resulting object can be uploaded to the CCDB or written to the disk.
281
+
282
+
### Workflow components
283
+
284
+
| Executable | Output | Description |
285
+
|---|---|---|
286
+
| `o2-tpc-cmv-to-vector` | `TPC/CMVVECTOR` | Parses raw TPC data and creates vectors of CMVs per CRU |
287
+
| `o2-tpc-cmv-flp` | `TPC/CMVGROUP` | Buffers N TFs per CRU on the FLP and groups them for forwarding |
288
+
| `o2-tpc-cmv-distribute` | TTree / CCDB payload | Merges CRUs over N TFs on the calibration node, serializes the CMVContainer into a TTree, and either writes it to disk (`--dump-cmvs`) or forwards it as a CCDB object (`--enable-CCDB-output`) |
289
+
290
+
#### `o2-tpc-cmv-to-vector`
291
+
292
+
| Option | Default | Description |
293
+
|---|---|---|
294
+
| `--input-spec` | `A:TPC/RAWDATA` | DPL input spec for raw TPC data |
295
+
| `--crus` | `0-359` | CRU range to process, comma-separated ranges |
296
+
| `--write-debug` | false | Write a debug output tree every TF |
297
+
| `--write-debug-on-error` | false | Write a debug output tree only when decoding errors occur |
298
+
| `--debug-file-name` | `/tmp/cmv_vector_debug.{run}.root` | Name of the debug output ROOT file |
299
+
| `--write-raw-data-on-error` | false | Dump raw data to file when decoding errors occur |
300
+
| `--raw-file-name` | `/tmp/cmv_debug.{run}.{raw_type}` | Name of the raw debug output file |
301
+
| `--raw-data-type` | 0 | Raw data format to dump on error: 0 = full TPC with DPL header, 1 = full TPC with DPL header (skip empty), 2 = full TPC no DPL header, 3 = full TPC no DPL header (skip empty), 4 = IDC raw only, 5 = CMV raw only |
302
+
| `--check-incomplete-hbf` | false | Check and report incomplete HBFs in the raw parser |
303
+
304
+
#### `o2-tpc-cmv-flp`
305
+
306
+
| Option | Default | Description |
307
+
|---|---|---|
308
+
| `--crus` | `0-359` | CRU range handled by this FLP |
| `--n-TFs-buffer` | 1 | Number of TFs to buffer before forwarding |
312
+
| `--dump-cmvs-flp` | false | Dump raw CMV vectors per CRU to a ROOT file each TF (for debugging) |
313
+
314
+
#### `o2-tpc-cmv-distribute`
315
+
316
+
| Option | Default | Description |
317
+
|---|---|---|
318
+
| `--crus` | `0-359` | CRU range expected from upstream |
319
+
| `--timeframes` | 2000 | Number of TFs aggregated per calibration interval |
320
+
| `--firstTF` | -1 | First time frame index; -1 = auto-detect from first incoming TF; values < -1 set an offset of `\|firstTF\|+1` TFs before the first interval begins |
321
+
| `--lanes` | 1 | Number of parallel lanes (CRUs are split evenly across lanes) |
322
+
| `--n-TFs-buffer` | 1 | Number of TFs buffered per group in the upstream `o2-tpc-cmv-flp` (must match that workflow's setting) |
323
+
|`--enable-CCDB-output`|false| Forward the CMVContainer TTree as a CCDB object to `o2-calibration-ccdb-populator-workflow`|
324
+
|`--use-precise-timestamp`|false| Fetch orbit-reset and GRPECS from CCDB to compute a precise CCDB validity timestamp |
325
+
|`--dump-cmvs`|false| Write the CMVContainer TTree to a local ROOT file on disk |
326
+
|`--use-sparse`|false| Sparse encoding: skip zero time bins (raw uint16 values; combine with `--use-compression-varint` or `--use-compression-huffman`for compressed sparse output) |
327
+
|`--use-compression-varint`|false| Delta + zigzag + varint compression over all values; combined with `--use-sparse`: varint-encoded exact values at non-zero positions |
328
+
|`--use-compression-huffman`|false| Huffman encoding over all values; combined with `--use-sparse`: Huffman-encoded exact values at non-zero positions |
329
+
|`--cmv-zero-threshold`| 0 | Zero out CMV values whose magnitude is below this threshold (ADC) after optional rounding and before compression; 0 disables |
330
+
|`--cmv-round-integers-threshold`| 0 | Round values to nearest integer ADC for\|v\| ≤ N ADC before compression; 0 disables |
331
+
|`--cmv-dynamic-precision-mean`| 1.0 | Gaussian centre in\|CMV\| (ADC) where the strongest fractional-bit trimming is applied |
|`--drop-data-after-nTFs`| 0 | Drop data for a relative TF slot after this many TFs have passed without receiving all CRUs; 0 uses the default derived from `--check-data-every-n`|
334
+
|`--check-data-every-n`| 0 | Check for missing CRU data every N invocations of the run function; -1 disables checking, 0 uses the default (timeframes/2) |
335
+
|`--nFactorTFs`| 1000 | Number of TFs to skip before flushing the oldest incomplete aggregation interval |
Each FLP connects to the aggregator's pull socket on port `30453` and pushes `TPC/CMVGROUP` and `TPC/CMVORBITINFO` messages. The CRU range is automatically split evenly across `N_FLPs`.
The aggregator binds the ZeroMQ pull socket and waits for all FLPs to connect. Once `TPC/CMVGROUP` and `TPC/CMVORBITINFO` data arrive, `o2-tpc-cmv-distribute` merges them, applies compression, writes the object to the disk and uploads to the CCDB.
0 commit comments