# Transform¶

CADET-Match has many variable transforms available. The most common ones will be covered first. There are a few additional ones available in the code that are retained for backwards compatibility that will not be covered and their usage is not recomended.

Each parameter for parameter estimation or error modeling must be listed in the parameters list and a transform selected.

```
{
"parameters": [
{
},
{
}
],
}
```

## Indexing¶

An index is used when you want to directly index into the arrays to modify, this is very rarely used and mostly comes up with the MultiState SMA rates between states. All transforms use the same method for indexing.

You either need to specific component and bound or specify index. Indexing starts at 0. A value of -1 is used to indicate a value that is not component specific (i.e. a scalar).

Scalar value:index=-1 Index at position n: index=n

Component 0 Bound state 0 would be component=0 bound=0.

Component 1 but independent of bound state would be component=0 bound=-1.

Independent of component or bound state would be component=-1 bound=-1.

## Auto¶

Auto is the most common transform. This transform will convert from the upper and lower boundary to a range of 0 to 1 for the search algorithm. It will automatically switch between a linear and a log transform as needed for search performance.

Key |
Values |
Default |
Required |
Description |
---|---|---|---|---|

min |
Float |
None |
Yes |
minimum allowed value |

max |
Float |
None |
Yes |
maximum allowed value |

location |
String |
None |
Yes |
path inside the simulation to the variable |

maxFactor |
Float |
1000 |
No |
if max/min > maxFactor a log transform is used. |

component |
Integer |
None |
Yes* |
Index of the component used (starts at 0) |

bound |
Integer |
None |
Yes* |
Index of the bound state (starts at 0) |

index |
Integer |
None |
Yes* |
Index into the location (starts at 0) Either component + bound or index must be specificed not both. |

experiments |
String |
None |
No |
If provided this variable is only used for the named experiments |

```
{
"transform": "auto",
"component": 2,
"bound": 0,
"location": "/input/model/unit_001/adsorption/SMA_NU",
"min": 1,
"max": 50
}
```

## Auto Inverse¶

Auto-inverse works like auto except it transforms used 1/variable. This transform was designed to deal with coupling of film diffusion and pore diffusion and improves optimization.

Key |
Values |
Default |
Required |
Description |
---|---|---|---|---|

min |
Float |
None |
Yes |
minimum allowed value |

max |
Float |
None |
Yes |
maximum allowed value |

location |
String |
None |
Yes |
path inside the simulation to the variable |

maxFactor |
Float |
1000 |
No |
if max/min > maxFactor a log transform is used. |

component |
Integer |
None |
Yes* |
Index of the component used (starts at 0) |

bound |
Integer |
None |
Yes* |
Index of the bound state (starts at 0) |

index |
Integer |
None |
Yes* |
Index into the location (starts at 0) Either component + bound or index must be specificed not both. |

experiments |
String |
None |
No |
If provided this variable is only used for the named experiments |

```
{
"transform": "auto_inverse",
"component": -1,
"bound": -1,
"location": "/input/model/unit_001/FILM_DIFFUSION",
"min": 1e-9,
"max": 1e-5
}
```

## Auto kEQ¶

This transforms convert from kA and kD to kA and kEQ with all the other properties of auto. In reality kA and kD are coupled and this allows the search algorithm to see the coupling. There are also some fits where kA and kD are fast enough that a system is effectively in rapid equilibrium. Without this transform a large number of kA and kD values will be found with equally good results. With this transform kEQ will have a definite value and there will be a large range of kA values which provides more understanding for the problem.

Key |
Values |
Default |
Required |
Description |
---|---|---|---|---|

minKA |
Float |
None |
Yes |
minimum allowed value |

maxKA |
Float |
None |
Yes |
maximum allowed value |

minKEQ |
Float |
None |
Yes |
minimum allowed value |

maxKEQ |
Float |
None |
Yes |
maximum allowed value |

location |
String |
None |
Yes |
paths inside the simulation kA and kD |

maxFactor |
Float |
1000 |
No |
if max/min > maxFactor a log transform is used. |

component |
Integer |
None |
Yes* |
Index of the component used (starts at 0) |

bound |
Integer |
None |
Yes* |
Index of the bound state (starts at 0) |

index |
Integer |
None |
Yes* |
Index into the location (starts at 0) Either component + bound or index must be specificed not both. |

experiments |
String |
None |
No |
If provided this variable is only used for the named experiments |

```
{
"transform": "auto_keq",
"component": 0,
"bound": 0,
"location": [
"/input/model/unit_001/adsorption/LIN_KA",
"/input/model/unit_001/adsorption/LIN_KD"
],
"minKA": 1e-8,
"maxKA": 1e8,
"minKEQ": 1e-4,
"maxKEQ": 1e4
}
```

## Norm Add¶

This transform allows another parameter to be read and a fixed or variable value added to it and assigned to a second variable. For example if you are optimizing the charge nu for SMA with a few different charge variants you may not know all the charge variants but you know they are all close together and so you can estimate one and then use norm_add for the others to require they are close.

Key |
Values |
Default |
Required |
Description |
---|---|---|---|---|

min |
Float |
None |
Yes |
minimum allowed value |

max |
Float |
None |
Yes |
maximum allowed value |

locationFrom |
String |
None |
Yes |
paths inside the simulation kA and kD |

componentFrom |
Integer |
None |
Yes* |
Index of the component used (starts at 0) |

boundFrom |
Integer |
None |
Yes* |
Index of the bound state (starts at 0) |

indexFrom |
Integer |
None |
Yes* |
Index into the location (starts at 0) Either component + bound or index must be specificed not both. |

locationTo |
String |
None |
Yes |
paths inside the simulation kA and kD |

componentTo |
Integer |
None |
Yes* |
Index of the component used (starts at 0) |

boundTo |
Integer |
None |
Yes* |
Index of the bound state (starts at 0) |

indexTo |
Integer |
None |
Yes* |
Index into the location (starts at 0) Either component + bound or index must be specificed not both. |

experiments |
String |
None |
No |
If provided this variable is only used for the named experiments |

```
{
"transform": "norm_add",
"locationFrom": "/input/model/unit_001/COL_POROSITY",
"componentFrom": -1,
"boundFrom": -1,
"locationTo": "/input/model/unit_001/PAR_POROSITY",
"componentTo": -1,
"boundTo": -1,
"min": -0.1,
"max": 0.1
}
```

## Norm Mult¶

This transform allows another parameter to be read and a fixed or variable value multiplied to it and assigned to a second variable. For instance if you are estimating the shielding factor sigma for a monomer and also need to estimate it for a dimer you can estimated sigma for the monomer normally and then specify that the dimer is approximately twice as large.

Key |
Values |
Default |
Required |
Description |
---|---|---|---|---|

min |
Float |
None |
Yes |
minimum allowed value |

max |
Float |
None |
Yes |
maximum allowed value |

locationFrom |
String |
None |
Yes |
paths inside the simulation kA and kD |

componentFrom |
Integer |
None |
Yes* |
Index of the component used (starts at 0) |

boundFrom |
Integer |
None |
Yes* |
Index of the bound state (starts at 0) |

indexFrom |
Integer |
None |
Yes* |
Index into the location (starts at 0) Either component + bound or index must be specificed not both. |

locationTo |
String |
None |
Yes |
paths inside the simulation kA and kD |

componentTo |
Integer |
None |
Yes* |
Index of the component used (starts at 0) |

boundTo |
Integer |
None |
Yes* |
Index of the bound state (starts at 0) |

indexTo |
Integer |
None |
Yes* |
Index into the location (starts at 0) Either component + bound or index must be specificed not both. |

experiments |
String |
None |
No |
If provided this variable is only used for the named experiments |

```
{
"transform": "norm_add",
"locationFrom": "/input/model/unit_001/COL_POROSITY",
"componentFrom": -1,
"boundFrom": -1,
"locationTo": "/input/model/unit_001/PAR_POROSITY",
"componentTo": -1,
"boundTo": -1,
"min": 0.8,
"max": 1.5
}
```

## Set Value¶

This transform copies a value from another estimated value. One of the common usage cases is when estimating the axial dispersion of the tubing. It can be a good assumption that the axial dispersion is the same in the tubing leading to the column and the tubing leaving it so with this one of them is estimated and the value copied to the other one so fewer values need to be estimated.

Key |
Values |
Default |
Required |
Description |
---|---|---|---|---|

locationFrom |
String |
None |
Yes |
paths inside the simulation kA and kD |

componentFrom |
Integer |
None |
Yes* |
Index of the component used (starts at 0) |

boundFrom |
Integer |
None |
Yes* |
Index of the bound state (starts at 0) |

indexFrom |
Integer |
None |
Yes* |
Index into the location (starts at 0) Either component + bound or index must be specificed not both. |

locationTo |
String |
None |
Yes |
paths inside the simulation kA and kD |

componentTo |
Integer |
None |
Yes* |
Index of the component used (starts at 0) |

boundTo |
Integer |
None |
Yes* |
Index of the bound state (starts at 0) |

indexTo |
Integer |
None |
Yes* |
Index into the location (starts at 0) Either component + bound or index must be specificed not both. |

experiments |
String |
None |
No |
If provided this variable is only used for the named experiments |

```
{
"transform": "set_value",
"locationFrom": "/input/model/unit_000/sec_000/CONST_COEFF",
"componentFrom": 0,
"boundFrom": 0,
"locationTo": "/input/model/unit_000/sec_000/CONST_COEFF",
"componentTo": 1,
"boundTo": 0
}
```

## Sum¶

This transform reads two values and assigns it to a 3rd value. This was created for a situation where the volume of two CSTRs where estimated and a 3rd CSTR needed to have a volume equal to the sum of the first two.

Key |
Values |
Default |
Required |
Description |
---|---|---|---|---|

location1 |
String |
None |
Yes |
paths inside the simulation kA and kD |

component1 |
Integer |
None |
Yes* |
Index of the component used (starts at 0) |

bound1 |
Integer |
None |
Yes* |
Index of the bound state (starts at 0) |

index1 |
Integer |
None |
Yes* |
Index into the location (starts at 0) Either component + bound or index must be specificed not both. |

location2 |
String |
None |
Yes |
paths inside the simulation kA and kD |

component2 |
Integer |
None |
Yes* |
Index of the component used (starts at 0) |

bound2 |
Integer |
None |
Yes* |
Index of the bound state (starts at 0) |

index2 |
Integer |
None |
Yes* |
Index into the location (starts at 0) Either component + bound or index must be specificed not both. |

locationSum |
String |
None |
Yes |
paths inside the simulation kA and kD |

componentSum |
Integer |
None |
Yes* |
Index of the component used (starts at 0) |

boundSum |
Integer |
None |
Yes* |
Index of the bound state (starts at 0) |

indexSum |
Integer |
None |
Yes* |
Index into the location (starts at 0) Either component + bound or index must be specificed not both. |

experiments |
String |
None |
No |
If provided this variable is only used for the named experiments |

```
{
"transform": "sum",
"location1": "/input/model/unit_001/INIT_VOLUME",
"component1": -1,
"bound1": -1,
"location2": "/input/model/unit_003/INIT_VOLUME",
"component2": -1,
"bound2": -1,
"locationSum": "/input/model/unit_004/INIT_VOLUME",
"componentSum": -1,
"boundSum": -1
}
```

## Norm Diameter¶

CADET uses the cross sectional area of the column and tubing and measuring this precisely can be difficult. It is often much simpler to measure the diameter and provide a small search range and then allow this transform to convert that to the area. This assumes circular tubing and uses Area = pi*d^2/4.

Key |
Values |
Default |
Required |
Description |
---|---|---|---|---|

min |
Float |
None |
Yes |
minimum allowed value |

max |
Float |
None |
Yes |
maximum allowed value |

location |
String |
None |
Yes |
paths inside the simulation kA and kD |

component |
Integer |
None |
Yes* |
Index of the component used (starts at 0) |

bound |
Integer |
None |
Yes* |
Index of the bound state (starts at 0) |

index |
Integer |
None |
Yes* |
Index into the location (starts at 0) Either component + bound or index must be specificed not both. |

experiments |
String |
None |
No |
If provided this variable is only used for the named experiments |

```
{
"transform": "norm_diameter",
"location": "/input/model/unit_001/CROSS_SECTION_AREA",
"min": 0.001,
"max": 0.1,
"component": -1,
"bound": -1
}
```

## Norm Volume Length¶

When estimating the size of a Disperive Plug Flow Reactor needed to model a piece of tubing it is normal to estimate the dispersion, area and length. This works but can be problematic to estimate and get a realistic estimate due to the degrees of freedom. Finding the volume of the tube and the length of the tube is much easier to do accurately and this makes it a much better transform to work with.

Key |
Values |
Default |
Required |
Description |
---|---|---|---|---|

area_location |
String |
None |
Yes |
path to cross_section_area |

length_location |
String |
None |
Yes |
path to col_length |

component |
Integer |
None |
Yes* |
Index of the component used (starts at 0) |

bound |
Integer |
None |
Yes* |
Index of the bound state (starts at 0) |

index |
Integer |
None |
Yes* |
Index into the location (starts at 0) Either component + bound or index must be specificed not both. |

minVolume |
Float |
None |
Yes |
minimum allowed value |

maxVolume |
Float |
None |
Yes |
minimum allowed value |

minLength |
Float |
None |
Yes |
minimum allowed value |

maxLength |
Float |
None |
Yes |
minimum allowed value |

experiments |
String |
None |
No |
If provided this variable is only used for the named experiments |

```
{
"transform": "norm_volume_length",
"area_location": "/input/model/unit_001/CROSS_SECTION_AREA",
"length_location": "/input/model/unit_001/COL_LENGTH",
"minVolume": 1e-06,
"maxVolume": 0.0001,
"minLength": 0.1,
"maxLength": 0.3,
"component": -1,
"bound": -1
}
```

## Norm Volume Area¶

This transform works like the volume length transform except it uses volume an area and should only be used if it is easier to estimate the cross sectional area of the tubing than its length.

Key |
Values |
Default |
Required |
Description |
---|---|---|---|---|

area_location |
String |
None |
Yes |
path to cross_section_area |

length_location |
String |
None |
Yes |
path to col_length |

component |
Integer |
None |
Yes* |
Index of the component used (starts at 0) |

bound |
Integer |
None |
Yes* |
Index of the bound state (starts at 0) |

index |
Integer |
None |
Yes* |
Index into the location (starts at 0) Either component + bound or index must be specificed not both. |

minVolume |
Float |
None |
Yes |
minimum allowed value |

maxVolume |
Float |
None |
Yes |
minimum allowed value |

minArea |
Float |
None |
Yes |
minimum allowed value |

maxArea |
Float |
None |
Yes |
minimum allowed value |

experiments |
String |
None |
No |
If provided this variable is only used for the named experiments |

```
{
"transform": "norm_volume_area",
"area_location": "/input/model/unit_001/CROSS_SECTION_AREA",
"length_location": "/input/model/unit_001/COL_LENGTH",
"minVolume": 1e-06,
"maxVolume": 0.0001,
"minArea": 1e-05,
"maxArea": 0.001,
"component": -1,
"bound": -1
}
```