Clarity LIMS
Illumina Connected Software
Clarity LIMS Software
Clarity LIMS Software
  • Announcements
  • Clarity LIMS
    • Clarity & LabLink
  • API and Database
    • API Portal
      • REST
        • REST General Concepts
        • REST Web Services
        • HTTP Response Codes and Errors
        • XML UTF-8 Character Encoding
        • Requesting API Version Information
        • Viewing Paginated List Resources
        • Filtering List Resources
        • Working with User-Defined Fields (UDF) and Types (UDT)
        • Traversing a Genealogy
        • Working with Batch Resources
      • Getting Started with API
        • Understanding API Terminology (LIMS v5 and later)
        • API-Based URIs (LIMS v4 and later)
        • Development Prerequisites
        • Structure of REST Resources
        • The Life Cycle of a Sample: Stages Versus Steps
        • Integrating Scripts
      • Automation
        • Automation Triggers and Command Line Calls
        • Automation Execution Environment
        • Supported Command Line Interpreters
        • Automation Channels
        • Error Handling
        • Automation Tokens
          • Derived Sample Automation Tokens
          • Step Automation Tokens
          • Project Automation Tokens
        • Automation Testing
        • Troubleshooting Automation
      • Tips and Tricks
        • Accessing Step UDFs from a different Step
        • Obfuscating Sensitive Data in Scripts
        • Integrating Clarity LIMS with Upstream Sample Accessioning Systems
        • Creating Samples and Projects via the API
        • Displaying Files From an Earlier Step
        • Transitioning Output Artifacts into the Next Step
        • Determining the Workflow(s) to Which a Sample is Assigned
        • Standardizing Sample Naming via the API
        • Copying UDF Values from Source to Destination
        • Updating Preset Value of a Step UDF through API
        • Automating BCL Conversion
        • Finding QC Flags in Aggregate QC (Library Validation) via REST API
        • Setting the Value of a QC Flag on an Artifact
        • Creating Notifications When Files are Added via LabLink
        • Remote HTTP Filestore Setup
      • Cookbook
        • Get Started with the Cookbook
          • Tips and Troubleshooting
          • Obtain and Use the REST API Utility Classes
        • Work with EPP/Automation and Files
          • Automation Trigger Configuration
          • Process Execution with EPP/Automation Support
        • Work with Submitted Samples
          • Adding Samples to the System
          • Renaming Samples
          • Assigning Samples to Workflows
          • Updating Sample Information
          • Show the Relationship Between Samples and Analyte Artifacts (Derived Samples)
        • Work with Containers
          • Add an Empty Container to the System
          • Find the Contents of a Well Location in a Container
          • Filter Containers by Name
        • Work with Derived Sample Automations
          • Remove Samples from Workflows
          • Requeue Samples
          • Rearray Samples
        • Work with Process/Step Outputs
          • Update UDF/Custom Field Values for a Derived Sample Output
          • Rename Derived Samples Using the API
          • Find the Container Location of a Derived Sample
          • Traverse a Pooled and Demultiplexed Sample History/Genealogy
          • View the Inputs and Outputs of a Process/Step
        • Work with Projects and Accounts
          • Remove Information from a Project
          • Add a New Project to the System with UDF/Custom Field Value
          • Get a Project Name
          • Find an Account Registered in the System
          • Update Contact (User and Client) Information
        • Work with Multiplexing
          • Find the Index Sequence for a Reagent Label
          • Demultiplexing
          • Pool Samples with Reagent Labels
          • Apply Reagent Labels with REST
          • Apply Reagent Labels When Samples are Imported
          • Apply Reagent Labels by Adding Reagents to Samples
        • Working with User Defined Fields/Custom Fields
          • About UDFs/Custom Fields and UDTs
          • Performing Post-Step Calculations with Custom Fields/UDFs
        • Work with Processes/Steps
          • Filter Processes by Date and Type
          • Find Terminal Processes/Steps
          • Run a Process/Step
          • Update UDF/Custom Field Information for a Process/Step
          • Work with the Steps Pooling Endpoint
        • Work with Batch Resources
          • Introduction to Batch Resources
          • Update UDF/Custom Field Information with Batch Operations
          • Retrieve Multiple Entities with a Single API Interaction
          • Select the Optimal Batch Size
        • Work with Files
          • Attach a File with REST and Python
          • Attach Files Located Outside the Default File Storage Repository
          • Attach a File to a File Placeholder with REST
        • Work with Controls
          • Automated Removal of Controls from a Workflow
      • Application Examples
        • Python API Library (glsapiutil.py) Location
        • Scripts That Help Automate Steps
          • Route Artifacts Based Off a Template File
          • Invoking bcl2fastq from BCL Conversion and Demultiplexing Step
          • Email Notifications
          • Finishing the Current Step and Starting the Next
          • Adding Downstream Samples to Additional Workflows
          • Advancing/Completing a Protocol Step via the API
          • Setting a Default Next Action
          • Automatic Placement of Samples Based on Input Plate Map (Multiple Plates)
          • Automatic Placement of Samples Based on Input Plate Map
          • Publishing Files to LabLink
          • Automatic Pooling Based on a Sample UDF/Custom Field
          • Completing a Step Programmatically
          • Automatic Sample Placement into Existing Containers
          • Routing Output Artifacts to Specific Workflows/Stages
          • Creating Multiple Containers / Types for Placement
          • Starting a Protocol Step via the API
          • Setting Quality Control Flags
          • Applying Indexing Patterns to Containers Automatically
          • Assignment of Sample Next Steps Based On a UDF
          • Parsing Metadata into UDFs (BCL Conversion and Demultiplexing)
        • Scripts That Validate Step Contents
          • Validating Process/Step Level UDFs
          • Checking That Containers Are Named Appropriately
          • Checking for Index Clashes Based on Index Sequence
          • Validating Illumina TruSeq Index Adapter Combinations
        • Scripts Triggered Outside of Workflows/Steps
          • Repurposing a Process to Upload Indexes
          • Adding Users in Bulk
          • Moving Reagent Kits & Lots to New Clarity LIMS Server
          • Programatically Importing the Sample Submission Excel File
          • Generating an MS Excel Sample Submission Spreadsheet
          • Assigning Samples to New Workflows
        • Miscellaneous Scripts
          • Illumina LIMS Integration
          • Generating a Hierarchical Sample History
          • Protocol-based Permissions
          • Self-Incremental Counters
          • Generic CSV Parser Template (Python)
          • Renaming Samples to Add an Internal ID
          • Creating Custom Sample Sheets
          • Copying Output UDFs to Submitted Samples
          • Parsing Sequencing Meta-Data into Clarity LIMS
          • Submit to a Compute Cluster via PBS
          • Downloading a File and PDF Image Extraction
        • Resources and References
          • Understanding LIMS ID Prefixes
          • Container States
          • Useful Tools
          • Unsupported Artifact Types
          • Unsupported Process Types
          • Suggested Reading
          • API Training Videos
  • Illumina Preset Protocols
    • IPP v2.10
      • Release Notes
      • Installation and User Configuration
      • Manual Upgrade
    • IPP v2.9
      • Release Notes
      • Installation and User Configuration
    • IPP v2.8
      • Release Notes
      • Installation and User Configuration
      • Manual Upgrade
    • IPP v2.7
      • Release Notes
      • Installation and User Configuration
    • IPP v2.6
      • Release Notes
      • Installation and User Configuration
      • Manual Upgrade
  • Sample Prep
    • QC and Sample Prep
      • DNA Initial QC 5.1.2
      • RNA Initial QC 5.1.2
      • Library Validation QC 5.1.2
  • Library Prep
    • AmpliSeq for Illumina
      • BRCA Panel
        • Library Preparation v1.1
        • Equalizer v1.1
        • Standard v1.1
      • Cancer HotSpot Panel v2
        • Library Preparation v1.1
        • Equalizer v1.1
        • Standard v1.1
      • Childhood Cancer Panel
        • DNA Library Prep v1.1
        • RNA Library Prep v1.1
        • Equalizer v1.1
        • Standard v1.1
      • Comprehensive Cancer Panel
        • Library Preparation v1.1
        • Equalizer v1.1
        • Standard v1.1
      • Comprehensive Panel v3
        • DNA Library Prep v1.1
        • RNA Library Prep v1.1
        • Equalizer v1.1
        • Standard v1.1
      • Custom DNA Panel
        • Library Preparation v1.1
        • Equalizer v1.1
        • Standard v1.1
      • Focus Panel
        • DNA Library Prep v1.1
        • RNA Library Prep v1.1
        • Equalizer v1.1
        • Standard v1.1
      • Immune Repertoire Panel
        • RNA Library Prep v1.1
        • Equalizer v1.1
        • Standard v1.1
      • Immune Response Panel
        • RNA Library Prep v1.1
        • Equalizer v1.1
        • Standard v1.1
      • Myeloid Panel
        • DNA Library Prep v1.1
        • RNA Library Prep v1.1
        • Equalizer v1.1
        • Standard v1.1
      • TCR beta-SR Panel
        • DNA Library Prep v1.1
        • RNA Library Prep v1.1
      • Transcriptome Human Gene Expression Panel
        • RNA Library Prep v1.1
        • Equalizer v1.1
        • Standard v1.1
    • Library Prep Validation
    • Nextera
      • Nextera Mate Pair v1.0
      • Nextera Rapid Capture Custom Enrichment v2.0
      • Nextera XT v2.0
    • Targeted Enrichment
      • Illumina DNA Prep with Enrichment (S) Tagmentation v1.2
      • Illumina RNA Prep with Enrichment (L) Tagmentation v1.1
    • TruSeq
      • TruSeq ChIP-Seq v1.0
      • TruSeq Custom Amplicon v1.0
      • TruSeq DNA Exome v2.0
      • TruSeq DNA PCR-Free v2.0
      • TruSeq Methyl Capture EPIC v2.0
      • TruSeq Nano DNA v1.0
      • TruSeq RNA Access v2.0
      • TruSeq RNA Exome v1.0
      • TruSeq Small RNA v1.0
      • TruSeq Stranded mRNA v2.0
    • TruSight
      • TruSight Oncology 500 ctDNA v1.1
      • TruSight Oncology 500 HT v1.1
      • TruSight Oncology 500 v1.1
      • TruSight Tumor 170 v2.0
    • Other DNA Protocols
      • Illumina DNA PCR-Free Library Prep Manual v1.1
      • Illumina DNA Prep (M) Tagmentation v1.0
    • Other RNA Protocols
      • Illumina Stranded mRNA Prep Ligation 1.1
      • Illumina Stranded Total RNA Prep Ligation with Ribo-Zero Plus v1.1
  • iLASS & Infinium Arrays
    • iLASS
      • iLASS Infinium Genotyping v1.1
        • iLASS Infinium Batch DNA v1.1
        • iLASS Infinium Genotyping Assay v1.1
        • iLASS Infinium Genotyping with PGx Assay v1.1
      • iLASS Infinium Genotyping v1.0
        • iLASS Infinium Genotyping Assay v1.0
        • iLASS Infinium Genotyping with PGx Assay v1.0
    • Infinium Arrays
      • Infinium HD Methylation Assay Manual v1.2
      • Infinium HTS Assay Manual v1.2
      • Infinium LCG Assay Manual v1.2
      • Infinium XT Assay Manual v1.2
      • GenomeStudio v1.0
  • Applications
    • IGA
      • IGA v2.1
        • IGA Library Prep Automated v2.1
        • IGA NovaSeq Sequencing v2.1
    • Viral Pathogen Protocols
      • CDC COVID-19 RT-PCR
        • Sort Specimens to Extraction v1.1
        • Qiagen QIAamp DSP Viral RNA Mini Kit v1.1
        • Qiagen EZ1 Advanced XL v1.1
        • Roche MagNA Pure LC v1.1
        • Roche MagNA Pure Compact v1.1
        • Roche MagNA Pure 96 v1.1
        • bioMerieux NucliSENS easyMAG Instrument v1.1
        • bioMerieux EMAG Instrument v1.1
        • Real-Time RT-PCR Prep v1.1
      • Illumina COVIDSeq v1.6
      • Respiratory Virus Panel v1.0
  • Instruments & Integrations
    • Compatibility
    • Integration Properties
      • Integration Properties Details
    • Clarity LIMS Product Analytics
      • Supported Workflows
      • Workflow Customization
      • Clarity LIMS Product Analytics v1.4.0
        • Configuration
      • Clarity LIMS Product Analytics v1.3.1
        • Configuration
      • Clarity LIMS Product Analytics v1.3.0
        • Configuration
      • Clarity LIMS Product Analytics v1.2.0
        • Configuration
    • Illumina Run Manager
      • Illumina Run Manager v1.0.0
        • Installation and User Interaction
    • iScan
      • iScan System
      • iScan v1.2.0
        • Release Notes
        • BeadChip Accessioning, Imaging, and Analysis
      • iScan v1.1.0
        • Release Notes
        • BeadChip Accessioning, Imaging, and Analysis
      • iScan System v1.0
    • iSeq 100 Run Setup v1.0
    • MiniSeq v1.0
    • MiSeq
      • MiSeq v8.3.0
        • Release Notes
        • Installation
        • Configuration
        • User Interaction, Validation and Troubleshooting
      • MiSeq v8.2.0
        • Release Notes
        • Installation
        • Configuration
        • User Interaction, Validation and Troubleshooting
        • Manual Upgrade
    • MiSeq i100 (On-Prem)
      • MiSeq i100 On-Prem v1.0.0
        • Release Notes
        • Installation
        • Configuration
        • User Interaction, Validation and Troubleshooting
    • MiSeq i100 (Hosted)
      • MiSeq i100 v1.0.0
        • Release Notes
        • Configuration
        • User Interaction, Validation and Troubleshooting
    • MiSeqDx
      • MiSeqDx Sample Sheet Generation (v1.11.0 and later)
      • MiSeqDx v1.11.0
        • Release Notes
        • Installation
        • Configuration
        • User Interaction, Validation and Troubleshooting
      • MiSeqDx v1.10.0
        • Release Notes
        • Installation
        • Configuration
        • User Interaction, Validation and Troubleshooting
        • Sample Sheet Generation
        • Manual Upgrade
    • Next Generation Sequencing Package
      • Release Notes
        • NGS Extensions v5.25.0
        • NGS Extensions v5.24.0
        • NGS Extensions v5.23.0
      • Accession Kit Lots
      • Auto-Placement of Reagent Indexes
      • Compute Replicate Average
      • Copy UDFs
      • Initialize Artifact UDFs
      • Label Non-Labeled Outputs
      • Linear Regression Calculation
      • Normalization Buffer Volumes
      • Process Summary Report
      • Routing Script
      • Set UDF
      • Validate Complete Plate
      • Validate Sample Count
      • Validate Unique Indexes
    • NextSeq 500/550
      • NextSeq 500/550 v2.5.0
        • Release Notes
        • Installation
        • Configuration
        • User Interaction, Validation and Troubleshooting
        • Manual Upgrade
      • NextSeq 500/550 v2.4.0
        • Release Notes
        • Installation
        • Configuration
        • User Interaction, Validation and Troubleshooting
      • NextSeq 500/550 v2.3.0
        • Release Notes
        • Installation
        • Configuration
        • User Interaction, Validation and Troubleshooting
    • NextSeq 1000/2000 (Hosted)
      • NextSeq 1000/2000 v2.5.1
        • Release Notes
      • NextSeq 1000/2000 v2.5.0
        • Release Notes
        • Configuration
        • User Interaction, Validation and Troubleshooting
        • Manual Upgrade
      • NextSeq 1000/2000 v2.4.0
        • Release Notes
        • Configuration
        • User Interaction, Validation and Troubleshooting
    • NextSeq 1000/2000 (On-Prem)
      • NextSeq 1000/2000 On-Prem v1.0.0
        • Release Notes
        • Installation
        • Configuration
        • User Interaction, Validation and Troubleshooting
    • NovaSeq 6000 (API-based)
      • NovaSeq 6000 API-based v3.7.0
        • Release Notes
        • Installation
        • Configuration
        • User Interaction, Validation and Troubleshooting
      • NovaSeq 6000 API-based v3.6.0
        • Release Notes
        • Installation
        • Configuration
        • User Interaction, Validation and Troubleshooting
        • Manual Upgrade
    • NovaSeq 6000 (File-based)
      • NovaSeq 6000 File-based v2.6.0
        • Release Notes
        • Installation
        • Configuration
        • User Interaction, Validation and Troubleshooting
      • NovaSeq 6000 File-based v2.5.0
        • Release Notes
        • Installation
        • Configuration
        • User Interaction, Validation and Troubleshooting
    • NovaSeq 6000Dx (API-based)
      • NovaSeq 6000Dx API-based v1.3.0
        • Release Notes
        • Installation
        • Configuration
        • User Interaction, Validation and Troubleshooting
      • NovaSeq 6000Dx API-based v1.2.0
        • Release Notes
        • Installation
        • Configuration
        • User Interaction, Validation and Troubleshooting
    • NovaSeq X Series (Hosted)
      • NovaSeq X Series v1.3.0
        • Release Notes
        • Configuration
        • Manual Upgrade
      • NovaSeq X Series v1.2.1
        • Release Notes
      • NovaSeq X Series v1.2.0
        • Release Notes
        • Configuration
        • User Interaction, Validation and Troubleshooting
        • Manual Upgrade
      • NovaSeq X Series v1.1.0
        • Release Notes
        • Configuration
        • User Interaction, Validation and Troubleshooting
    • NovaSeq X Series (On-Prem)
      • NovaSeq X Series On-Prem v1.0.0
        • Release Notes
        • Installation
        • Configuration
        • User Interaction, Validation and Troubleshooting
    • References
      • Configure Multiple Identical netPathPrefixSearch Values
      • Configure Support for Samples Having Duplicate Names with Different Indexes
      • Illumina Instrument Sample Sheets
      • Terminology
  • Integration Toolkits
    • Lab Instrument Toolkit
      • Template File Generator
        • Creating Template Files
        • Template File Contents
        • Template File Generator Troubleshooting
      • Add Blank Lines
      • Convert CSV to Excel
      • Parse CSV
      • Name Matching XML Parser
      • Sample Placement Helper
    • Lab Logic Toolkit
      • Working with Lab Logic Toolkit
        • Data Collection Entities
        • Failing a Script
        • Mapping Field Types
        • Non-UDF/Custom Field Properties
        • Setting QC Flags
        • Setting Next Actions
        • Specifying Custom Fields
        • Working with Submitted Samples
        • Working with Containers
      • Lab Logic Toolkit Script Examples
        • Comparing Stop/Start Dates and Times with LLTK
      • Lab Logic Toolkit FAQ
  • Known Issues
    • Integration
      • Sample Sheet Generation Issue and CLPA Issues When Samples Have Been Assigned QC Flag Prior to Entering Steps
  • Security Bulletin
    • Investigation of OpenSSH vulnerability with Clarity LIMS
  • Resources
    • Third Party Software Information
  • Others
    • Revision History
Powered by GitBook
On this page
  • Setting QC flags
  • Setting next actions
  • Create string from multiple UDFs and add additional characters
  • Determine total number of samples
  • Calculate concentration from a dilution factor
  • Calculate volume of buffer and source sample to dilute
  • Calculate the remaining amount of submitted sample left after the step
  • Calculate volumes of all components to add to master mix (e.g., PCR reaction)
  • Calculate nM from concentration and size
  • Determine dilution to populate robot file
  • Calculate average concentration
  • Check container name changed from default value
  • Calculate yield of sequenced samples using the submittedSamples entity
  • Concatenate strings
  • Regex example: Validate output container barcode mask
  • Regex example: Verify format of flow cell / reagent cartridge barcode
  • Regex example: Validate a scanned / manually entered container barcode
  • Populate a Timestamp (Single-line Text and Text) UDF / custom field
  • Populate a Timestamp (Date) UDF / custom field
  • Add values within a pool
  • Convert placement information to a numeric position
  • Set the error status bar message
  • Check for special characters
  • Resources

Was this helpful?

Export as PDF
  1. Integration Toolkits
  2. Lab Logic Toolkit

Lab Logic Toolkit Script Examples

PreviousWorking with ContainersNextComparing Stop/Start Dates and Times with LLTK

Last updated 10 months ago

Was this helpful?

BaseSpace Clarity LIMS Lab Logic Toolkit (LLTK) provides the evaluateDynamicExpression script, which allows for the evaluation of simple dynamic expressions.

This article provides examples that you can modify to suit the needs of your lab.

For details on script parameters and usage, and additional examples, see the article.

Setting QC flags

See the article.

Setting next actions

See the article.

Create string from multiple UDFs and add additional characters

-exp 'submittedSample.::Run Name:: = step.::Source:: + ::_:: + step.::Numeric ID::'

Determine total number of samples

This example assumes that the step UDF / custom field Total samples has a default numeric value of 0:

-exp '(step.::Total samples:: = step.::Total samples:: + 1)'

Without a default value, the expression must set the initial value before continuing to sum:

-exp 'if(step.hasValue(::Total samples::)) { step.::Total samples:: = step.::Total samples:: + 1 } 
else { step.::Total samples:: = 1 }'

Calculate concentration from a dilution factor

-exp 'output.::Concentration (nM):: = (input.::Concentration:: * step.::Dilution Factor::)'

Calculate volume of buffer and source sample to dilute

-exp 'output.::Diluent Needed:: = step.::Desired Volume:: - output.::Sample Volume::'

Calculate the remaining amount of submitted sample left after the step

-exp 'submittedSample.::Sample Volume:: = submittedSample.::Sample Volume:: - output.::VolumeUsed::'

Calculate volumes of all components to add to master mix (e.g., PCR reaction)

-exp ‘(step.::Component1:: = step.::NumberofSamples:: * 1.5) ; 
(step.::Component2:: = step.::NumberofSamples:: * 0.5) ; 
(step.::Component3:: = step.::NumberofSamples:: * 5)’ -log {compoundOutputFileLuid0}"

Calculate nM from concentration and size

-exp 'output.::Concentration (nM):: = (input.::Concentration:: / input.::Average length (bp)::)
* 1540.832'

Determine dilution to populate robot file

-exp 'output.::Sample Needed (uL):: = step.::Input Amount (ng):: / input.::Library Concentration:: ;
 if ( output.::Sample Needed (uL):: > step.::Final Volume (uL):: ) { output.::Sample Needed (uL):: =
 step.::Final Volume (uL):: } ; if (output.::Sample Needed (uL):: < 1.0 ) 
{ output.::Sample Needed (uL):: == 1.0 } ; output.::Diluent Volume (uL):: = 
step.::Final Volume (uL):: - output.::Sample Needed (uL):: ; output.::Final Amount (ng):: =
 output.::Sample Needed (uL):: * input.::Library Concentration::'

Calculate average concentration

This example demonstrates the use of step UDFs / custom fields to store temporary values in order to enable calculations between iteration.

-exp 'output.::Concentration::=input.Concentration ;
if(!step.hasValue(::No. of samples::)) { step.::No. of samples:: = 0 } else { step.::No. of samples:: += 1 }; 
if(!step.hasValue(::Total Conc.::)) { step.::Total Conc.:: = 0 } else { step.::Total Conc.:: += output.Concentration };
if(!step.hasValue(::Average Conc.::)) { step.::Average Conc.:: = 0 } 
else { step.::Average Conc.:: = step.::Total Conc.:: / step.::No. of samples:: };' 

Check container name changed from default value

This example checks that the container name has been changed from the default value (container LIMSID)

-exp 'if (output.container.name == output.container.node.@limsid) { fail(::Invalid Barcode. 
Please verify and try again.::) }'

Calculate yield of sequenced samples using the submittedSamples entity

submittedSamples.each { it.::Workflow Progress:: = ::Sequencing Finished:: }; 
if (!input.hasValue(::Lane Failed?::) || !input.::Lane Failed?::) { def acquiredYield = 0; 
if (input.hasValue(::Yield PF (Gb) R1::)) { acquiredYield += input.::Yield PF (Gb) R1:: }; 
if (input.hasValue(::Yield PF (Gb) R2::)) { acquiredYield += input.::Yield PF (Gb) R2:: }; 
acquiredYield = acquiredYield / submittedSamples.size(); submittedSamples.each { currentSample -> 
def currentSampleAcquiredYield = acquiredYield; 
if (currentSample.hasValue(::Acquired Yield (Gb)::)) { currentSampleAcquiredYield += 
currentSample.::Acquired Yield (Gb):: }; currentSample.::Acquired Yield (Gb):: =
currentSampleAcquiredYield; currentSample.::Missing Yield (Gb):: = 
currentSample.::Required Yield (Gb):: - currentSampleAcquiredYield }

Concatenate strings

submittedSample.::Lab Comments:: = output.::Sample Comment::.toString() + ::; :: 
+ submittedSample.::Lab Comments::.toString()

Regex example: Validate output container barcode mask

-exp 'if ( !output.container.name.matches( ::LP[0-9]{7}-QSTD:: )) 
{fail ( ::Invalid QSTD Plate Barcode. Please verify and try again.:: ) }'

Regex example: Verify format of flow cell / reagent cartridge barcode

Check the flow cell/reagent cartridge format (Illumina’s flow cell check) as follows:

-exp 'if(!output.container.name.matches(::^[Hh][0-9A-Za-z]{4}([Bb][Bb]|[Cc][Cc]|[Aa][Ll])[Xx][Xx]$::)) 
{ fail(::Invalid Patterned Flowcell Barcode. Please verify and try again.::) }'

Regex example: Validate a scanned / manually entered container barcode

-exp 'if ( !output.container.name.matches( ::LP[0-9]{7}-QNT:: ) &&
 !output.container.name.matches( ::LP[0-9]{7}-SQNT:: ) ) 
{fail ( ::Invalid QNT & SQNT Plate Barcodes. Please verify and try again.:: ) }'

Populate a Timestamp (Single-line Text and Text) UDF / custom field

The following expression results in the format: Wed Apr 03 21:28:38 EDT 2015

-exp 'step.::Timestamp:: = new Date().toString()'

Populate a Timestamp (Date) UDF / custom field

The following expression results in the format: 2015-04-03

-exp 'step.::Timestamp:: = new Date().format(::yyyy-MM-dd::)'

Add values within a pool

This example assumes that the analyte / derived sample UDF Pool Volume (uL) has a default numeric value of 0.

-exp 'output.::Pool Volume (uL):: = output.::Pool Volume (uL):: + input.::Volume (uL)::'

This can also be done without setting a default value for the UDF:

-exp 'if(output.hasValue(::Pool Volume (uL)::)) { output.::Pool Volume (uL):: = output.::Pool Volume (uL):: 
+ input.::Volume (uL):: } else { output.::Pool Volume (uL):: = input.::Volume (uL):: }'

Convert placement information to a numeric position

The example below assumes the following:

  • The placement is alphanumeric (e.g., A:1)

  • The offset for the alphabetical row is 0, and the offset for the numeric column is 1

  • The placement order desired is horizontal: A:1 maps to 1, A:2 maps to 2, etc.

  • The placement of interest is the output placement

  • Placement is configured for a specific, known container type, and the dimensions of this container type are also known. This example uses a 96 well container configuration (12 columns are available and this value is used directly in the expression below). This value can be replaced for other container types.

-exp 'output.::Position:: = (((output.well.split(:: : ::.trim())[0].toString().toUpperCase() as char) 
- (::A:: as char)) * (int) Math.pow(26, 0)*12) + output.well.split(:: : ::.trim())[1].toInteger()'

Note the following:

  • The call to split() here will return a list of row:column, so we use [0] and [1] to access these values, respectively.

  • :: : ::.trim() is used to obtain the result ':' - because :: is used as a reserved character, and thus ::::: directly results in '': and errors.

Set the error status bar message

Check for special characters

In some cases, special characters are not permitted in a field in the LIMS. To prevent users from entering special characters, the best practice is to include validation to check that the field contains only letters and/or numbers. Wherever possible, we recommend that you use this 'positive checking' method as it is much less error-prone. However, if this preferred method is not possible, you can use the Lab Logic Toolkit to check for the presence of special characters, and display an error message if one is found.

The following example use the Groovy matches command to check step output container names for the characters ? ( ) [ ] / \ and quotes or spaces.

-exp 'if (output.container.name.matches(::.*[\u0022\u0027?()\\[\\]/\\\\ ].*::)) 
{ fail(::The following characters are not allowed in the Container Name: ? ( ) [ ] / \ and quotes or spaces.::) }'

The matches command

The matches command takes a regular expression (regex) as its input. Call this command on the field you want to check.

In our example, the matches command is:

output.container.name.matches(::.*[\u0022\u0027?()\\[\\]/\\\\ ].*::)

If we isolate the regex, we have:

.*[\u0022\u0027?()\\[\\]/\\\\ ].*

Here, we're checking for any text that contains any one of the special characters listed. It's important to note that the way regex is supported in Java (and therefore Groovy) leads to some quirks, noted in the following table.

Entry

Standard regex representation

Character being checked for

\u0022 and \u0027

' and "

Single and double quotes

?

\?

Question mark

( and )

\( and \)

Brackets

[ and ]

\[ and \]

Square brackets

/

\/

Forward slash

\

\\

Backslash

(space)

\s

Spaces

Escaping characters Normally, in regex we would need to escape the following characters using a single backslash:

.^$*+?()[{|-]\

However, because of how matches works, not all of these characters need to be escaped - for example the '?' character. Characters that do still need to be escaped, need to be escaped with an additional backslash (e.g., \\).

Checking for quotes Because the command is run via Automated Informatics / Automation Worker, we also need to use a different approach for checking for quotes.

We cannot use them as we typically would when writing a regex expression (e.g., "), or escape them as we would in a call to matches (e.g., \"). Instead, we need to provide them as their unicode number, shown in our example as \u0022 and \u00.

Resources

This example includes , using both implicit variables (it) and explicit variable names (for example, currentSample).

See the article.

Working with Lab Logic Toolkit
Setting QC Flags
Setting Next Actions
Groovy Closures
Failing a Script
Unicode character table
Java Pattern documentation
Regex visual tool
Regex tester
Groovy dates and times