# trace_combinator
**Reliability status**: `development`
```{eval-rst}
.. argparse::
:ref: traceratops.trace_combinator.parse_arguments
:prog: trace_combinator
```
## Invoke
`trace_combinator` can be run from the command line in two manners:
- Provide input parameters in a `folders2Load.json` dictionary (see example below) at execution folder or at a `rootFolder` provided as argument. The script will read ALL the `Trace` files in the paths provided in `folders2Load.json` and will combine them into a unique `Trace_` files.
The output of `trace_combinator` will be generated at the `rootFolder` in the directory `combined_traces` that will contain a new `Trace` file with the combined traces.
*warning*: `trace_combinator` will combine **ALL** traces found in the `buildPWDmatrix` folders within `folders2load.json`. If you want to filter which *Trace* files are used, we recommend you to use the second method described below. Alternatively, you can use the `--method` command-line argument to filter which `Trace` files are used. In that case, make sure to verify the terminal output to ensure the right `Trace` files have been used.
- An alternative way to use `trace_combinator` is to use pipes. In this case, a list of `Trace` files to process is piped into `trace_combinator` and the `--pipe` argument is invoked. Piping can be either done using a command or by sending a list in a file. See examples below.
Example 1: using `ls`
```sh
# use ls to select which files you want to combine
$ ls folder1/Trace*3D*6.ecsv
folder1/Trace_3D_barcode_KDtree_ROI:6.ecsv folder1/Trace_3D_barcode_mask:DAPI_ROI:6.ecsv folder1/Trace_3D_barcode_mask:mask0_ROI:6.ecsv
# then pipe these files into trace_combinator
$ ls folder1/Trace*3D*6.ecsv | trace_combinator --pipe
```
this will process the three `Trace` files listed using `ls`.
Example 2: using cat
```sh
# first make list of files to process and write it in a file
$ cat files_to_combine
folder1/Trace_3D_barcode_KDtree_ROI:15.ecsv
folder2/Trace_3D_barcode_KDtree_ROI:6.ecsv
# then pipe these files into trace_combinator
$ cat files_to_combine | trace_combinator --pipe
```
this will process the files within `files_to_combine`.
**Use `trace_combinator` to select traces with specific *labels***
`trace_combinator` can also be used to combine traces with specific, user-provided `labels`, which can be attributed using `trace_selector` (see above). These can be indicated by using the `--label` command-line argument. In addition, you need to indicate whether you want to use only the traces that contain the label (`labeled`), the traces that do not contain the label (`unlabeled`), or all the traces (`all`) irrespective of whether they contain or not the label. It is good practice to verify the `label` column of your output `Trace_` file to check that you selected the expected traces.
## Inputs
|Name shape|Quantity|Mandatory|Description|
|---|---|---|---|
|parameters.json|1|Yes|Parameter file.|
## Outputs
|Name shape|Quantity|Description|
|---|---|---|
||||
## **folders2Load.json template**
```json
{
"dataset_name": {
"Folders": [
"/user_disk/data/Experiment_4/0_Embryo/buildsPWDmatrix",
"/user_disk/data/Experiment_4/1_Embryo/buildsPWDmatrix",
"/user_disk/data/Experiment_4/2_Embryo/buildsPWDmatrix",
"/user_disk/data/Experiment_4/4_Embryo/buildsPWDmatrix",
"/user_disk/data/Experiment_4/5_Embryo/buildsPWDmatrix"
],
"PWD_clim": 1.4,
"PWD_mode": "median",
"iPWD_clim": 6,
"iPWD_mode": "median",
"ContactProbability_scale": 15,
"ContactProbability_cmin": 0.0,
"ContactProbability_distanceThreshold": 0.25
}
}
```