Carbonates on Psi
Introduction
Psi is a Nu Prospective isotope ratio mass spectrometer coupled to a NuCarb automated carbonate digestion system. Psi's main purpose is to analyze carbonate samples for clumped isotope composition.
Safety
Risks associated with this method include acid burns, cryogenic burns, broken glass, and anxiety
We use hot 100% phosphoric acid to digest carbonate. Wear gloves when handling reacted sample vials and when filling up the NuCarb acid vessels.
Liquid nitrogen is -196 °C. It can cause frost bite (cryogenic burns) very quickly. NOTE, however, that a splash onto the skin is very unlikely to be a medical emergency, as suggested by the EH&S video, thanks to the Leidenfrost effect. Your skin is very hot relative to liquid nitrogen, and upon contact, an insulating layer of air forms between your skin and the liquid nitrogen. You still need to be careful; liquid nitrogen is very cold and it can cause frost bite. Wear protective clothing (close-toed shoes, pants, gloves, and safety glasses) when transferring liquid nitrogen from vessel to vessel.
Liquid nitrogen evaporates very quickly and can remove oxygen from the local area, making it a potential cause of asphyxiation. IsoLab has very high air turnover rates thanks to the many fume hoods, fume snorkels, and general high HVAC flow rates. Still, if you happen to be working with liquid nitrogen and power goes out or the air circulation is faulty, prop open the lab doors to the hallway.
Glass reaction vials will sometimes break either while cleaning them or while inside Psi. Glass ampoules containing reference gases are necessarily broken as part of the process. Wear protective gloves and eyewear when handling broken glass so as to avoid lacerations.
Terse Procedure
- weigh samples and standards
- dry out liquid nitrogen lines
- create batch file
- fill out daily log
- fill up liquid nitrogen dewar
- start psi
- monitor psi and check raw data frequently
- use R and python to assess data quality and calibrate
Exhaustive Protocol
Weigh your samples
- Find clean vials and a tray - look in drawer under polly prepline
- Find the Psi standards - look in or near desiccators towards office
- Clumped - Ideally you will have one complete set of standards analyzed each day (8 standards in total - ETH1, ETH2, ETH3, ETH4, IAEAC1, IAEAC2, Merck, GU1). Mix them up and randomize their order. This is two sets of standards per tray of 50 vials.
- Bulk - use ETH4, Coral, and IAEAC1
- Clumped - Weigh 500 µg (± 10 µg) of pure carbonate when you have very little sample material for analysis (cold finger mode). Otherwise, weigh 5.5 to 6.0 mg (bellows mode).
- Bulk - Weigh 50 µg (± 10 µg)
- Clumped - Prepare and include at least two equilibrated gases per tray of 50 carbonates.
Go Start Psi
- Check if the previous run has finished or if Psi has crashed
- Pull lines out of liquid nitrogen dewar and let them hang
- Run reset everything - Analysis > Sequence > Edit > __reset_everything.seq, the click Run
- if Psi Crashed, consider evacuating and baking traps - Analysis > Sequence > Edit > __bake_all_traps.seq, the click Run
- thaw and dry out liquid nitrogen lines - Analysis > Sequence > Edit > __dry_out_liquid_nitrogen_lines.seq, the click Run
- Create a batch file:
- Some prefer to use a text editor while others prefer to use the Nu Stable software interface to create / edit the batch files
- Open C:/Nu Stable/Batches/_Clumped_Batch_Template_ColdFinger.TXT or C:/Nu Stable/Batches/_Clumped_Batch_Template_Bellows.TXT
- save as with today's date and descriptive name (yymmdd_YourProject.txt) into the same directory the template was in
- enter sample and standard information into batch file template and save
- TYPE THE STANDARDS IN EXACTLY AS TYPED ABOVE
- Enter each replicate of a given sample identically throughout your session and between sessions if appropriate. For example, "sample_1" should be entered as "sample_1" every time it is analyzed. Do not enter "sample_1_rep1", "sample_1_rep2", etc. You will be able to differentiate individual replicates using a unique identifier (UID) provided by the instrument as well as the date and time of analysis. The purpose of entering all replicates identically is to leverage Daeron's (2021) error propagation python code called D47crunch, which we employ.
- look at the traps in the software; if any show red text, double click the trap, select "Heat CF", click "Switch Off", click "Close"
- run reset everything again - Analysis > Sequence > Edit > __reset_everything.seq, the click Run
- fill out daily log
- fill up the liquid nitrogen dewar
- place liquid nitrogen lines into the dewar and wrap the lines tightly first with the plastic bubble wrap and then with the fleece cozy securing with the bungee cord, all around the top of the dewar
- start - Analysis > Batch > Setup-Full > Open > select your batch file > Run
Acid
Periodically, you will need to simply top off the acid vessels inside the NuCarb. Acid is stored in the larger 60 *C drying oven in 303B. Don liquid protective gloves, unscrew caps, top-off vials. NOTE, the cap with the stainless steel tubing coming out of it must be left loose. If you tighten it, acid will stop flowing after a vacuum builds up.
If we are low or out of the Psi acid (1.90 g / mL), you need to dilute more from the more concentrated stock (~1.95 g / mL).
If we are low or out of all concentrated phosphoric acid, make more.
Do some dishes
- With liquid protective gloves on, remove vials from Psi and place in the #1 white tub. The vials can contain acid, sediment, carbonate, and bubble bursters. That is, just set them in the tub regardless of what is inside them. We use the acid to our advantage later.
- Fill tub half ish full with DI water.
- Remove all air from each and every single vial. YES ALL OF THE AIR. The vials must soak in this acidic environment. If you want to be certain that no carbonate is left inside any vial, this step is absolutely critical. Allow them to soak overnight.
- Remove each vial and shake all of the liquid out of the vial back into the tub, NOT THE SINK. Place each vial in the #2 white tub. Fill the #2 white tub half ish full with DI water and, again, jostle air from every single vial. Soak overnight.
- Add sodium bicarbonate (baking soda) to the #1 tub while the tub is in the sink. Use the wooden dowel to stir. Add more sodium bicarbonate and stir until it stops fizzing and you see a near neutral pH as measured with pH paper. Then, after you have achieved neutral pH, dump the contents of the #1 white tub down the drain. Left over baking soda is okay. Rinse the #1 tub with DI water and leave on the bench.
- Shake all of the DI water out of the vials that were soaking in the #2 white tub and place them into the #3 white tub. Fill the #3 white tub half full with DI water and shake all of the air out of each vial. Soak overnight.
- Dump the water remaining in the #2 tub down the drain.
- Shake all of the water out of each vial and place them into a clean glass beaker. Place this beaker into the 60*C drying oven near the hood. Make sure the drying oven door closes. You must move the handle to the side to open AND CLOSE this oven. Leave these vials at least overnight or until they are dry.
- Dump the water from #3 tub down the drain.
IMPORTANT - This process does not do a good job at removing leftover sediment or otherwise precipitated solids from the vial. It is important to note that the leftover material is NOT CARBONATE. See your bubbling observations from step 5. Yes we all like clean vials, but this unsightly dirtiness is not carbonate. Still, to remove this material, offending vials must be scrubbed with a pipe cleaner. My preference is to go through the above steps and then as I see the dirty vials, which could be while weighing, I separate them out and scrub them on a individual vial basis. Once you have these vials clean, rinse with DI, and dry them in the oven.
Data processing
- Workflow
- move data
- check raw data with R and python
- clean data with your wand
- calibrate your data with python
- Trust or Distrust, don't delete - All data are written into a sample log file. A column within this file, called trust, is used to indicate analysis validity. If an analysis is complete junk, don't delete it; change the trust value from 1 to 0. Alternatively, if you would like to trust an analysis that was previously distrusted, change the value from 0 to 1.
- Data quality metrics - While working through your data, here are some bits to pay attention to.
- Residual gas - Air left in the reaction space, from the vial to the first cold finger, after the reaction time is up, we call residual gas (Mariana referred to it as 'bad gas'). Residual gas is a measure of post-reaction gas pressure interpreted as incondensibles, leakiness, or a clogged path during the reaction. Currently, a "high residual gas" is any pressure above 0.01 mbar; RESIDUAL_GAS_THRESHOLD is the R script. While it does not seem to affect isotopic data quality or absolute amount of CO2 produced, residual gas may be informative for specific samples (incondensibles), may give you a warm fuzzy feeling knowing it is low (leakiness), or tell you it is time to clean the acid block and associated valves (clogged path). Still, residual gas is NOT, in and of itself, a reason to distrust data. If you observe "high residual gas" for many different samples and standards, it is probably time to clean the acid block. If you observe "high residual gas" for one or more specific samples, they probably contain incondensibles. The one case where "high residual gas" is reason to distrust is when the line between the acid reaction and first trap is clogged in which case you will also observe, low yield, low signal, and probably many other flags suggesting a problem. The sample log column, 'residual_gas' stores this value.
- Background - The background, in this case, is the faraday-cup signal (masses 44, 45, etc) when no CO2 is entering the source. It should be low but it will never be zero. The R script checks the measured background against a threshold (BACKGROUND_44_THRESHOLD = 4e-11). If the background is greater than 4e-11 Amps, the entire analysis is distrusted. The backgrounds for each faraday cup are in the sample log file with column headers like "bkgnd_44".
- Signal - For clumped isotope measurements, a low signal equals bad data (noisy and biased). Based on many many clumped cold finger analyses, if the m/z 44 signal falls below 2e-8 Amps, the analysis is distrusted. This threshold is in the R script as SIGNAL_44_MINIMUM_THRESHOLD. If your samples are necessarily going to have low signal, you will need to manually trust those samples after running the R script. Three different values are stored in the sample log file to describe the signal, sam_max44nA, sam_mean44nA, and sam_min44nA (you can also see similarly named parameters for 47). Note, at the moment, the column headers indicate nanoAmps (nA) but the values themselves are in Amps, sorry, I will add that to my list.
- Signal balance - The amount of CO2 entering the source must be as similar as possible with respect to the sample versus working gas. This is measured as the m/z 44 signal intensity. The software makes a concerted attempt at balancing these two signals. A poor balance can lead to increased noise as well as a bias in all of the isotope composition estimates. The signal balance is measured as a percent difference in four ways: (1) Nu's default, which seems to be a comparison of the first measurement of sample and working gas; (2) start_balance, the average of the first five data points of the sample versus working gas; (3) mean_balance, the average of all cycles for both sample and working gas; and (4) the end_balance, which is the average of the last five data points for sample and working gas. Currently, if the start_balance or end_balance exceed 10% (i.e., +/- 10% difference between sample and working gas), then the sample is distrusted. The threshold is in the R script as SIGNAL_MISBALANCE_THRESHOLD and in the sample log as 'nu_balance', 'start_balance', 'mean_balance', and 'end_balance'; 'nu_balance' is the value calculated by the Nu software.
- D47 internal standard deviation - A high Δ47 standard deviation that is not related to low signal intensity or poor balance, may be the result of a contaminant or a problem with the mass spectrometer. Currently, if the Δ47 internal standard deviation (i.e., within sample, cycle level variability) exceeds 0.15 permil, the analysis is distrusted. This threshold in the R script is D47_SD_THRESHOLD and in the sample log 'D47sd'.
- D48 internal standard deviation - A high Δ48 standard deviation that is not related to low signal intensity or poor balance, may be the result of a contaminant or a problem with the mass spectrometer. Currently, if the Δ48 internal standard deviation (i.e., within sample, cycle level variability) exceeds 0.50 permil, the analysis is distrusted. This threshold in the R script is D48_SD_THRESHOLD and in the sample log 'D48sd'.
- Yield - The amount of CO2 produced will vary normally with the amount of carbonate in the vial. If the measured CO2 pressure after going through the Porapak is greater than 100 mbar, the analysis will proceed as a bellows measurement, otherwise, it will be a cold finger measurement. We can't use CO2 pressure by itself as an indicator of data quality but if the specific carbonate being analyzed has a known percent carbonate (e.g., 100% for standards), then the amount of CO2 produced per unit carbonate (called "yield_mbar_ug" in the sample log) should fall within a relatively tight range. The current expected yield is 0.038 mbar of CO2 per µg of pure carbonate; this, of course, has error around it with a 3.3 sigma of 0.005; the acceptable range should be 0.033 to 0.043 mbar of CO2 per µg of pure carbonate but in practice, each session will be slightly different. This criteria can only be applied to samples of known percent carbonates (e.g., standards and characterized samples). As such, using yield as a quality control metric is done after the R script has been run. The python script 'psi_raw_data_report.py' provides a figure with Yield in mind.
- d13C, d18O, D47, and D48 residuals - The psi_calibration.py python script includes a residual analysis of the standards for calibrated d13C, d18O, D47, and D48. If any standard is outside a 3.3 sigma range, it is flagged and you are given the option to distrust it. This does NOT happen automatically.
- Get ready
- Move data - On the Psi computer, open a File Explorer instance. Double click on "C:\psi\_COPY_DATA_TO_S-DRIVE.bat". This will transfer all the new data to the data server.
- use your UWNetID to log into one of the zax computers
- make sure bob (S:) is mapped (click on map_bob.bat)
- Raw Mass Spec Data
- open R or RStudio
- make sure you are in S:/Data/projects/psi/R_Python_Code/ (in the console, type setwd('S:/Data/projects/psi/R_Python_Code/') and hit enter. You can set this in Tools > Global options... > Default working directory.
- Run the R script by typing source('psi.R') and hit enter.
- Enter the session your samples are in and then work your way through each sample, checking the data presented to you, looking over the figures, and entering any comments you wish to enter about particular analyses.
- If psi.R identified "outliers", they are removed from the summary statistics for that sample; that is, the within-sample outliers have been pitched.
- Once all of the new samples have been initially and individually screened, you are shown a series of figures comprised of all data in the session. Look through each figure and get a feel for recent performance compared with the rest of the session.
- If you ever want to look at these session-wide figures again or if the above figures did not appear, you can do so without going through R.
- open a cmd or power shell prompt; press the window key and type 'cmd' then hit enter.
- type S:
- type cd Data/projects/psi/R_Python_Code
- type python psi_raw_data_report.py session_yymmdd where yymmdd is the year month and date of your session
- if you want to run this code and end so you can make plots or interact with the data, type python -i psi_raw_data_report.py session_yymmdd
- Sample log cleaning - try such spells as publishificous-totalis or expely-outliermus.
- Calibration
- Open python and type py psi_calibrate.py and hit enter. Enter your session. If more than one *_samplelog.csv" file exists in your session folder, you will be asked to choose one.
- Look over the data and figures presented to you. If you found outliers you wish to exclude or sample IDs that are not entered correctly, repeat the above few steps and rerun py psi_calibrate.py
Troubleshooting
Suggested Reading
- Bernasconi et al. 2021. InterCarb: A Community Effort to Improve Interlaboratory Standardization of the Carbonate Clumped Isotope Thermometer Using Carbonate Standards. Geochemistry, Geophysics, Geosystems. DOI: 10.1029/2020GC009588
- Daeron. 2021. Full Propagation of Analytical Uncertainties in Δ47 Measurements. Geochemistry, Geophysics, Geosystems. DOI: 10.1029/2020GC009592.
- Fiebig et al. 2024. Carbonate clumped isotope values compromised by nitrate-derived NO2 interferent. Chemical Geology. DOI: 10.1016/j.chemgeo.2024.122382
- our carbonate github repository