Demultiplexing

Demultiplexing is the last step in an indexed sequencing workflow. While the specifics depend on the sequencing instrument and analysis software used, taking pooled samples through sequencing and analysis produces result files/metrics per lane/identifier tag.

These results will likely be in the form of multiple files that you can import back into Clarity LIMS. To do this, you need to set up a configured process that generates process outputs that apply to inputs per reagent label, usually in the form of ResultFile artifacts.

Prerequisites

Before you follow the example, make sure you have the following items:

  • Configured reagent types named Index 1 through Index 6 in Clarity LIMS.

  • Reagents of type Index 1 through Index 6 in Clarity LIMS.

  • A compatible version of API (v2 r14 to v2 r24).

Code Example

Create a Demultiplexing Process in the Clarity LIMS Operations Interface

Configure a process that generates ResultFile with process outputs that apply to inputs per reagent label. It is recommended to name your outputs in a way that clearly identifies the samples to which they correspond (eg, Results for {SubmittedSampleName}-{AppliedReagentLabels}).

Demultiplexing in the User Interface

Running the demultiplexing process on a labeled pooled input produces a process run in the Operations Interface, similar to the one illustrated below.

Note the following:

  • There were three reagent labels in the input analyte (sample) artifact. As a result, three outputs were generated (the process was configured to produce one output result file per label per input).

  • The names of the outputs of the demultiplexing process expose the original sample name and label.

  • The Operations Interface shows details of the genealogy from the downstream result file all the way back to the original sample.

While reagent labels are not explicitly exposed in the Clarity LIMS client user interface, genealogy views in the Operations Interface are aware of reagent labels and will show the true sample inheritance. As noted above, you can use the {AppliedReagentLabels} output naming variable to show the reagent labels applied to each artifact in the user interface.

Demultiplexing in the API with a Process POST

Executing a demultiplexing process by issuing a process POST via the REST API is similar to the typical process execution found in Run a Process/Step.

The key difference is that when executing a demultiplexing process through the REST API, outputs per reagent label are automatically generated from the inputs provided. You do not need to explicitly specify them.

For example, when running the demultiplexing process configured against a single (pooled) sample, you could post a process execution representation like this:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<prx:process xmlns:prx="http://genologics.com/ri/processexecution">
    <type>Demultiplex</type>
    <technician uri="http://yourIPaddress/api/v2/researchers/4"/>
    <input-output-map>
        <input uri="http://yourIPaddress/api/v2/artifacts/2-424"/>
    </input-output-map>
</prx:process>

The input-output-map only refers to inputs, not outputs, because the demultiplexing process is configured to exclusively produce outputs per reagent label.

If your process produces other outputs, such as shared or per-input outputs, you must explicitly specify input-output-maps for them.

Verify with the REST API

Irrespective of whether you use the user interface or the REST API to run the demultiplexing process, the REST API representation for the process looks something like this:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<prc:process xmlns:udf="http://genologics.com/ri/userdefined"
    xmlns:file="http://genologics.com/ri/file" xmlns:prc="http://genologics.com/ri/process"
    uri="http://yourIPaddress/api/v2/processes/DMX-RCX-110816-24-95"
    limsid="DMX-RCX-110816-24-95">
    <type uri="http://yourIPaddress/api/v2/processtypes/38">Demultiplex</type>
    <date-run>2011-08-12</date-run>
    <technician uri="http://yourIPaddress/api/v2/researchers/4">
        <first-name>RC</first-name>
        <last-name>RC</last-name>
    </technician>
    <input-output-map>
        <input post-process-uri="http://yourIPaddress/api/v2/artifacts/2-424?state=335"
            uri="http://yourIPaddress/api/v2/artifacts/2-424?state=324" limsid="2-424">
            <parent-process
                uri="http://yourIPaddress/api/v2/processes/PSA-RCX-110812-122-221"
                limsid="PSA-RCX-110812-122-221" />
        </input>
        <output uri="http://yourIPaddress/api/v2/artifacts/92-163?state=339"
            output-generation-type="PerReagentLabel" output-type="ResultFile"
            limsid="92-163" />
    </input-output-map>
    <input-output-map>
        <input post-process-uri="http://yourIPaddress/api/v2/artifacts/2-424?state=335"
            uri="http://yourIPaddress/api/v2/artifacts/2-424?state=324" limsid="2-424">
            <parent-process
                uri="http://yourIPaddress/api/v2/processes/PSA-RCX-110812-122-221"
                limsid="PSA-RCX-110812-122-221" />
        </input>
        <output uri="http://yourIPaddress/api/v2/artifacts/92-164?state=336"
            output-generation-type="PerReagentLabel" output-type="ResultFile"
            limsid="92-164" />
    </input-output-map>
    <input-output-map>
        <input post-process-uri="http://yourIPaddress/api/v2/artifacts/2-424?state=335"
            uri="http://yourIPaddres/api/v2/artifacts/2-424?state=324" limsid="2-424">
            <parent-process
                uri="http://yourIPaddress/api/v2/processes/PSA-RCX-110812-122-221"
                limsid="PSA-RCX-110812-122-221" />
        </input>
        <output uri="http://yourIPaddress/api/v2/artifacts/92-162?state=338"
            output-generation-type="PerReagentLabel" output-type="ResultFile"
            limsid="92-162" />
    </input-output-map>
</prc:process> 

For each input with reagent labels, one output was created per reagent label.

In the example, the process ran on one pooled input, and produced three outputs (the pooled input included three reagent labels). The following example shows one of the demultiplexed result file outputs:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<art:artifact xmlns:udf="http://genologics.com/ri/userdefined"
    xmlns:file="http://genologics.com/ri/file" xmlns:art="http://genologics.com/ri/artifact"
    uri="http://yourIPaddress/api/v2/artifacts/92-163?state=339" limsid="92-163">
    <name>Results for SAM-3 - Index 3</name>
    <type>ResultFile</type>
    <output-type>ResultFile</output-type>
    <parent-process
        uri="http://yourIPaddress/api/v2/processes/DMX-RCX-110816-24-95"
        limsid="DMX-RCX-110816-24-95" />
    <qc-flag>UNKNOWN</qc-flag>
    <sample uri="http://yourIPaddress/api/v2/samples/RCY1A104"
        limsid="RCY1A104" />
    <reagent-label name="Index 3" />
</art:artifact> 

The output contains only one reagent label, and relates only to the sample that was tagged with the same reagent label. Compare this to the case of a pooled artifact, which has several labels and relates to several samples. This level of traceability (from a demultiplexed output back to its specific original sample) is only possible because the artifacts were labeled before they were pooled.

The artifact name generated by the demultiplexing process output name pattern is ("Results for SAM-3 - Index 3"). You can use the {SubmittedSampleName} naming variable to show true ancestors, and the {AppliedReagentLabels} to show any reagent labels applied to an output.

Last updated