Analysis of an Unknown Mixture via Gas Chromatrography

Al Fischer
January 2, 2020

Download a Template on GitHub:

  1. Go to the link using Chrome or Firefox (not Safari or Internet Explorer/Edge).
  2. Right click and choose Save As.
  3. Make sure the name says gowmac_template.ipynb and nothing else. If there is a .txt shown delete it.
  4. Save the file to the folder you are working from for this lab.
  5. Go to Jupyter Lab, browse for the file within Jupyter Lab, and double click it to open it.

Introduction

Insert your introduction here. Write a short paragraph about the purpose of the lab, the technique(s) you're using, the samples you're analyzing, and any additional background information you can think of that will help frame the purpose of the lab. At minimum you should include and overview (not detail) of:

  • What the sample is
  • The instrument you are using:
    • The separation technique
    • The detector type
    • The polarity of the column.
  • The purpose of the analysis (what you hope the instrument/data will tell you)

Note: The answers to these questions should be worked into a written narrative with additional detail for full credit. You should not just provide a list of answers to these questions!

Materials and Methods

Insert your materials and methods section here. Provide detailed information about all samples and standards used (when applicable) and detailed information about the technique and instrument being used. At minimum, you should include detailed information about:

  • The sample
    • Where did it come from?
    • What did you do to prepare it for analysis?
    • How was the sample introduced into the instrument?
    • How much sample did you use?
  • The instrument
    • What is the technique being used?
    • What is the make and model of the instrument being used?
    • What are the specific parameters (column type, carrier gas, etc.) of the instrument used.
    • Any other details you deem relevant/necessary to repeat the work exactly.
    • You may use the blank instrument table below as a template to include (replace 'XXXXX' with the values you look up).

Note: The answers to these questions should be worked into a written narrative with additional detail for full credit. You should not just provide a list of answers to these questions!

Note 2: Some of this may be prepared ahead of time, but some of it MUST BE COMPLETED IN LAB. For example, if you are weighing quantities of a substance or dispensing exact volumes they need to go in this notebook. This notebook should be an EXACT record of what you did in lab, just like a paper notebook!

Table 1: GC Parameters
Make and Model Gow-Mac XXXXX
Column Type 8' x 1/8", 20% DC-200 on 30/80 Chromosorp P (Gow-Mac)
Injector Temp (deg. C) XXXXX
Column Temp (deg. C) XXXXX
Detector Temp (deg. C) XXXXX
Detector Attenuation 1
Detector XXXXX
Carrier Gas Nitrogen
Carrier Flow Rate (ml/min) 50 ml/min
Data Acquisition (DAQ) Vernier Instrumentation Amplifier, $\pm$20 mV range
Software Vernier Logger Lite

Results & Data Analysis

Define Functions (obtained from Chem 370 Lab Manual)

This first section is used to define all functions that will be needed for data processing. These functions were copy and pasted from the Chem 370 Lab Manual.

For this analysis, the only function needed is peakArea() used to calculate the area under a curve.


In [1]:
#####   peakArea   #################################################################################

##      returns area under curve (integrates peak) for 2-column matrix X from x1 to x2
##      where X(:, 1) is x data and X(:, 2) is y data,
##      x1 is the lower limit, and x2 is the upper limit of integration.
##      Also plots result for inspection if p = true.
##      Usage:
##      peakArea([chromatogram(:, "TIME COLUMN"), chromatogram(:, "Signal Column")], 1.7, 2.05)
## 
##      (c) 2020 Al Fischer for Chem 370 Lab CC-BY-SA
#####################################################################################################

function a = peakArea(C, x1, x2, p = true)
    x = C((C(:,1) > x1 & C(:,1) < x2), 1);
    y = C((C(:,1) > x1 & C(:,1) < x2), 2);
    a = trapz(x, y);
    if p == true
        plot(C(:, 1), C(:, 2));
        hold on
        area(x,y);
        xlabel("Time");
        ylabel("Signal (arbitrary units)")
        hold off
        disp(["Peak Area = ", num2str(a)])
    end
end

Import the Data and Pre-process

The data were saved in CSV format with Time (min) in column 1 and Signal (mV) in column 2. The first step is to import the data to Octave from CSV:


In [84]:
##### import the data

chromatogram = csvread("data/gc-tcd_data.csv"); ## import the data
plot(chromatogram(:, 1), chromatogram(:, 2));   ## plot the data to see what it looks like
xlabel("Time (min)"); ylabel("Signal (mV)");    ## add axis labels


Note that there is a baseline offset in the data. This should be removed by subtrating the mean baseline value. I will use the mean value from 4-5 minutes as the "baseline" value. This baseline is just a result of the 0 setting on the GC, so it's OK to remove it after the fact.


In [85]:
##### correct the baseline offset

## Define the "baseline" as 4 minutes to end of chromatogram where there are no peaks
baseline = mean(chromatogram(481:end, 2));

## subtract the mean baseline value and store in second column of data set
chromatogram(:, 2) = chromatogram(:, 2) .- baseline;  

## replot data with baseline removed
plot(chromatogram(:, 1), chromatogram(:, 2));   ## plot the data to see what it looks like
xlabel("Time (min)"); ylabel("Signal (mV)");    ## add axis labels
ylim([-0.1 6]);


To get the percent composition, each peak in the chromatogram must be integrated. This will be done with the peakArea() function for both peaks in the chromatogram.


In [86]:
##### calculate the peak area for first peak

peak1_area = peakArea([chromatogram(:, 1), chromatogram(:, 2)], 0.87, 1.15, true);
ylim([-0.1 6]);


Peak Area = 0.62247

In [87]:
##### calculate the peak area for second peak

peak2_area = peakArea([chromatogram(:, 1), chromatogram(:, 2)], 1.25, 2.0, true);
ylim([-0.1 6]);


Peak Area = 0.28093

In [88]:
##### Calculate Percent Composition

peak1_percent = peak1_area / (peak1_area + peak2_area)*100
peak2_percent = peak2_area / (peak1_area + peak2_area)*100


peak1_percent =  68.903
peak2_percent =  31.097

Overall, the sample was found to be composed of 69% compound 1 (peak1_percent) and 31% compound 2 (peak2_percent).

Estimating S/N

I will estimate the signal-to-noise ratio for each point on the chromatogram by taking the standard deviation of the baseline as the noise.

There are many different definitions of S/N for a chromatgraphic system. I will use the following:

$$\frac{S}{N} = \frac{2H}{h}$$

where $H$ is the peak height and $h$ is the peak-to-peak baseline noise.


In [89]:
##### Determine H, the peak heights, and h, the noise

## find standard deviation of baseline, from 4 minutes to end where there are no peaks
h = 2 * (max(chromatogram(481:end, 2)) - min(chromatogram(481:end, 2)))
% H1 = max(chromatogram(:, 2)(chromatogram(:, 1) > 0 & < 1.3)); # H for tallest peak will be the maximum value in the chromatogram.
H1 = max(chromatogram(chromatogram(:, 1) < 1.3, 2)) # 1.3 represents dividing line between the two peaks in minutes.
H2 = max(chromatogram(chromatogram(:, 1) > 1.3, 2)) # 1.3 represents dividing line between the two peaks in minutes.


h =  0.027339
H1 =  5.1130
H2 =  1.6951

In [91]:
##### Calculate S/N for each peak

sn_peak1 = H1/h
sn_peak2 = H2/h


sn_peak1 =  187.02
sn_peak2 =  62.002

The signal-to-noise ratio for peak 1 was 187 and for peak 2 was 62.

Conclusion

Insert your conclusion here. You should state what you found and whether or not the results seem accurate. Be sure to include the percent composition of your sample in the conclusion. Also discuss the polarity the compounds relative to each other.