Al Fischer
January 2, 2020
Download a Template on GitHub:
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:
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!
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:
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 |
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
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]);
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]);
In [88]:
##### Calculate Percent Composition
peak1_percent = peak1_area / (peak1_area + peak2_area)*100
peak2_percent = peak2_area / (peak1_area + peak2_area)*100
Overall, the sample was found to be composed of 69% compound 1 (peak1_percent
) and 31% compound 2 (peak2_percent
).
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.
In [91]:
##### Calculate S/N for each peak
sn_peak1 = H1/h
sn_peak2 = H2/h
The signal-to-noise ratio for peak 1 was 187 and for peak 2 was 62.