# Non-UDF/Custom Field Properties

The following table summarizes the non-UDF/custom field properties available for each entity type. Column headers are the types available. The bold row entries are the properties available.

| **Property**      | **Input Sample** | **Output Sample** | **Per Input Result File/Measurement** | **Submitted Sample** | **Container** | **Step** |
| ----------------- | ---------------- | ----------------- | ------------------------------------- | -------------------- | ------------- | -------- |
| name              | yes              | yes               | yes                                   | yes                  | yes           | yes      |
| container         | yes              | yes               | yes                                   | yes                  | no            | no       |
| workflowName      | yes              | yes               | no                                    | no                   | no            | no       |
| replicateCount    | yes              | no                | no                                    | no                   | no            | no       |
| pooledInputsCount | yes              | yes               | yes                                   | no                   | no            | no       |
| well              | yes              | yes               | yes                                   | yes                  | no            | no       |

{% hint style="info" %}
LIMSID is supported via Groovy node access. See [limsid](#limsid) section.
{% endhint %}

## name

The *name* read-only property makes the name of the entity available to the scripting engine.

**Example basic expression:**

{% code overflow="wrap" %}

```markup
-exp 'input.::Latest Step:: = step.name'
```

{% endcode %}

## workflowName

The *workflowName* read-only property makes the workflow name of input samples available to the scripting engine.

This property contains a string representing the current *IN\_PROGRESS* workflow names. The string is formatted as a comma-delimited list, with a space inserted before each new item.

**Example basic expressions:**

{% code overflow="wrap" %}

```markup
-exp 'submittedSample.::Current Workflow:: = input.workflowName'
-exp 'if(input.workflowName.contains(::TruSeq Nano DNA Sample Prep::)) { submittedSample.::Status:: = ::Prep:: }'
-exp 'output.::Active Workflow Count:: = input.workflowName.split(::, ::).size()'
```

{% endcode %}

{% hint style="info" %}
Workflows are not assigned to output samples until the step that creates those samples completes (this will always be the current step). For this reason, the workflow name should always be retrieved from the input entity.
{% endhint %}

## replicateCount

The *replicateCount* read-only property is available for input samples.

This property contains an integer value representing the number of output replicates (samples or result files / measurements or files / file placeholders) generated from the input sample in the current step.

**Example basic expressions:**

{% code overflow="wrap" %}

```markup
-exp 'input.::Replicate Count UDF:: = input.replicateCount'
-exp 'step.::Total Replicates:: = step.::Total Replicates:: + input.replicateCount'
```

{% endcode %}

{% hint style="info" %}
Because the *replicateCount* property is only available for input samples, its value for output samples will always be zero.
{% endhint %}

## pooledInputsCount

The number of input analytes/derived samples that contributed to this analyte / derived sample.

* For pooled analytes / derived samples, this is > 1.
* For non-pooled analytes this is 1.
* Replicated samples that are then pooled are still counted separately in *pooledInputsCount*.

**Example basic expression:**

{% code overflow="wrap" %}

```markup
-exp 'output.::Count:: = input.pooledInputsCount'
```

{% endcode %}

When working with the *pooledInputsCount* property, the script looks at the step that created the derived sample or result file / measurement, and doesnot look upstream for a pooling step.

**Example scenario:**

Step 1: Pooling step that creates pooled samples.

Step 2: Nonpooling step that takes in the pooled samples and creates new derived samples (that are themselves still pools).

Step 3: Nonpooling step with expression that calls *input.pooledInputsCount*.

The expression in step 3 returns '1' because it onlys look at the previous step (step 2)—the step that created the current derived samples.

## limsid

You can access the *limsid* field with some knowledge of Groovy and the LLTK. Use the following examples with any supported entity:

**Example basic expressions:**

{% code overflow="wrap" %}

```markup
input.node.@limsid
step.node.@limsid
output.container.node.@limsid
```

{% endcode %}

## well

The *well* read-only property makes the well location of *input*, *output*, or *submittedSample* available to dynamic expressions. Result file / measurement outputs are supported if they have placement information (eg, on QC steps).

**Example basic expression:**

{% code overflow="wrap" %}

```markup
-exp 'output.::Input well:: = input.well'
```

{% endcode %}
