Jump to content

Chromatography Transition Analysis in Seeq


Joe Reckamp

Recommended Posts

  • Seeq Team

Chromatography Transition Analysis in Seeq

Many biopharmaceutical companies use Transition Analysis to monitor column integrity. Transition Analysis works by using a step change in the input conductivity signal and tracking the conductivity at the outlet of the column. The output conductivity transition can be analyzed via moment analysis to calculate the height of a theoretical plate (HETP) and the Asymmetry factor as described below.

image.png

image.png

Step 1: Load Data and Find Transition Periods

In order to perform this analysis in Seeq, we start by loading outlet conductivity and flow rate data for the column:

 

Note: Depending on the density of the conductivity data, many companies find that some filtering of the data needs to be performed to get consistent results when performing the above differential equations. The agilefilter operator in Formula can be helpful to perform this filtering if needed:

$cond.agileFilter(0.5min)

image.png

Once the data is loaded, the next step is to find the transition periods. The transition periods can be found using changes in the signal such as a delta or derivative with Value Searches have also been applied.  Combine the periods where the derivative is positive and the flow is low to identify the transitions. Alternative methods using the Profile Search tool can also be applied. 

image.png

image.png

 

Step 2: Calculate HETP

As the derivatives are a function of volume instead of time, the next step is to calculate the volume using the following formula:

Volume = $flow.integral($Trans)

The dC/dV function used in the moment formulas can then be calculated:

dCdV = runningDelta($Cond) / runningDelta($vol)

Using that function, the moments (M0 through M2) can be calculated:

M0 = ($dCdV*runningDelta($vol)).aggregate(sum(), $Trans, middleKey())
M1 = (($vol*$dCdV)*runningDelta($vol)).aggregate(sum(), $Trans, middleKey())
M2 = (($dCdV*($vol^2))*runningDelta($vol)).aggregate(sum(), $Trans, middleKey())

The moments are then used to calculate the variance:

Variance = ($M2/$M0) - ($M1/$M0)^2

Finally, the HETP can be calculated:

HETP = ((columnlength*$variance)/($M1/$M0)^2)

In this case, the column length value needs to be inserted in the units desired for HETP (e.g. 52mm). The final result should look like the following screenshot:

image.png

Alternatively, all of the calculations can be performed in a single Formula in Seeq as shown in the code below:

$vol = $flow.integral($Trans)
$dCdV = runningDelta($cond) / runningDelta($vol)
$M0 = ($dCdV*runningDelta($vol)).aggregate(sum(), $Trans, middleKey())
$VdCdV = $vol*$dCdV
$M1 = ($VdCdV*runningDelta($vol)).aggregate(sum(), $Trans, middleKey())
$V2dCdV = $dCdV*$vol^2
$M2 = ($V2dCdV*runningDelta($vol)).aggregate(sum(), $Trans, middleKey())
$variance = ($M2/$M0) - ($M1/$M0)^2 
(52mm*$variance)/(($M1/$M0)^2)   //where 52mm is the column length, L

 

Step 3: Calculate Asymmetry

Asymmetry is calculated by splitting the dC/dV peak by its max value into a right and left side and comparing the volume change over those sides. This section assumes you have done the calculations to get volume and dC/dV calculated already as performed for HETP in Step 2 above.

The first step for Asymmetry is to determine a minimum threshold for dC/dV to begin and end the peaks. This is often done by calculating a percentage of the difference between the maximum and minimum part of the transition period (e.g. 10%):

$min = $dCdV.aggregate(minValue(), $Trans, durationKey())  
$max = $dCdV.aggregate(maxValue(), $Trans, durationKey())
$min + 0.1*($max - $min)

The Deviation Search tool can then be used to identify the time when dC/dV is greater than the 10% value obtained above.

image.png

Next, the maximum point of the dC/dV peaks can be determined by calculating the derivative of dC/dV in the Formula tool:
 

$dCdV.derivative()

The derivative can then be searched for positive values (greater than 0) with the Value Search tool to identify the increasing part of the dC/dV curve.

Finally, a Composite Condition intersecting the positive dC/dV derivative and the transition values above 10% of the curve will result in the identification of the left side of the dC/dV curve:

image.png

The right side of the dC/dV curve can then be determined using Composite Condition with the A minus B operator to subtract the positive dC/dV derivative from the transition above 10%:

image.png

The change in volume can then be calculated by aggregating the delta in volume over each side of the peak using Formula:

$Vol.aggregate(delta(), $LeftSide, middleKey()).aggregate(maxValue(), $Trans, middleKey())

Finally, the Asymmetry ratio can be calculated by dividing the volume change of the right side of the peak divided by the volume change of the left side of the peak.

$VolRightSide/$VolLeftSide

The final view should look similar to the following:

image.png

Similar to HETP, all of the above formulas for Asymmetry may be calculated in a single formula with the code below:

$vol = $flow.integral($Trans)
$dCdV = (runningDelta($cond) / runningDelta($vol)).agileFilter(4sec)
 
//calculate 10%ile of dCdV
$min = $dCdV.aggregate(minValue(), $Trans, durationKey())  
$max = $dCdV.aggregate(maxValue(), $Trans, durationKey())
$dCdV10prc = $min + 0.1*($max - $min)
 
//Deviation search for when dCdV is above the 10%ile
$deviation1 = $dCdV - $dCdV10prc
$Above10 = valueSearch($deviation1, 1h, isGreaterThan(0), 0min, true, isLessThan(0), 0min, true)
 
//Calculate filtered derivative of dCdV
$dCdVderiv = $dCdV.derivative() 
 
//Value Search for Increasing dCdV (positive filtered derivative of dCdV)
$dCdVup = $dCdVderiv.validValues().valueSearch(40h, isGreaterThan(0), 30s, isLessThanOrEqualTo(0), 0min)
 
//Composite Conditions to find increasing left side above 10% and right side
$LeftSide = $Above10.intersect($dCdVup)
$RightSide = $Above10.minus($dCdVup)
 
//Find change in volume over left side and right sides, then divide b/a
$VolLeftSide = $Vol.aggregate(delta(), $LeftSide, middleKey()).aggregate(maxValue(), $Trans, middleKey())
$VolRightSide = $Vol.aggregate(delta(), $RightSide, middleKey()).aggregate(maxValue(), $Trans, middleKey())
 
$VolRightSide/$VolLeftSide

 

Optional Alteration: Multiple Columns

It should be noted that oftentimes the conductivity signals are associated to multiple columns in a chromatography system. The chromatography system may switch between two or three columns all reading on the same signal. In order to track changes in column integrity for each column individually, one must assign the transitions to each column prior to performing the Transition Analysis calculations.

Multiple methods exist for assigning transitions to each column. Most customers generally have another signal(s) that identify which column is used. This may be valve positions or differential pressure across each column. These signals enable a Value Search (e.g. “Open” or “High Differential Pressure”) to then perform a Composite Condition to automatically assign the columns in use with their transitions. Alternatively, if no signals are present to identify the columns, the columns can be assigned manually through the Custom Condition tool or assigned via a counting system if the order of the columns is constant.

An example of Asymmetry calculated for multiple columns is shown below:

image.png

Content Verified DEC2023

Edited by Rupesh Parbhoo
Updated visuals, change methodology to reference composite condition instead of profile search as its technically more robust.
  • Like 2
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...