Friday, January 24, 2014

Iolite Workshop 2014
7th and 8th of June

(Photo Credit: John Creech)

We will be holding an Iolite workshop this year in conjunction with the Goldschmidt conference in Sacramento, California. It will have a very similar format to last year's workshop, but will include all the new features that will come with Iolite v3. We will also include sessions on our upcoming U-Pb DRS, our new 3D imaging module, as well as any other features developed before then. We start from the very basics, but by the end of the workshop, you should be able to write your own data reduction schemes, and know how Iolite stores all your data, and propagates errors.

So if you're a new Iolite user, or an experienced Ioliter but would like to get the latest on Iolite's ongoing development, come along and check it out. It's also a great chance to speak with the Iolite team to get specific answers, or to discuss possible features in upcoming releases.

Seats will be limited to 50 participants, so get in early to make sure you don't miss out! (Last year we were at capacity).

So, the details are:
Place: Sacramento Convention Center, 1400 J Street, Sacramento
Dates: 7 and 8th of June, 2014, 9am to 5pm (or earlier on Sunday to allow attendees to make it to the Goldschmidt icebreaker)
Cost: $300 for both days. $200 for students
What to bring: A laptop with a screen resolution greater than 1200 * 800, a power cable and mouse, IgorPro already installed (a trial version can be used for the workshop as long as it has not expired). Pens and paper.

Themes to be covered will include the following:
  • An introduction to the new Iolite 3 interface and data reduction flow
  • How to install and use Iolite
  • Loading and checking mass spec data in Iolite
  • Various data reduction examples (including trace elements and U-Pb geochronology)
  • How to use Iolite for solution analyses
  • Creating laser ablation images in Iolite
  • Error propagation and estimation
  • Creating and editing reference material files (i.e. how to use your own values for reference materials like NIST SRM 612 etc)
  • Creating and editing your own Data Reduction Schemes
Last year, we had everyone writing Iolite code by the end of the second day! If there's anything you'd like covered, or would like more information about the topics outlined above, head over to the forum and ask away!

To register your spot in the workshop, please register via the TryBooking website.

Please note that this is an Iolite v3 workshop. Iolite v3 is a commercial version of Iolite. Workshop participants with be given a free, time-limited copy of Iolite v3 to work with during the course for those that do not already have a fully licensed version. The time-limited version will expire 1 month after the workshop.

We will send out more details regarding payment methods etc closer to the workshop date.


The Iolite Team

Tuesday, October 1, 2013

What Iolite does so far...

As noted in the last post we're all buzzing after Goldschmidt (of course from the workshop, but also from a whole week of stimulating discussions), and we're now busy working on Iolite 3 among other things. But in the midst of all of this looking forward it occurred to us that this might be a good time to look back at what's been achieved so far. So here's a (probably incomplete) list of ways in which Iolite has been used by the community to date:

Laser ablation
Sr-isotope ratios (REE correction, e.g. perovskite)
Sr-isotope ratios (CaAr correction, e.g. carbonate)
Hf-isotope ratios
Nd-isotope ratios
Pb-isotope ratios
Trace element analysis (semi-quantitative normalisation)
Trace element analysis (internal standard normalisation)
Trace element analysis (varying internal standard normalisation)
Conventional laser mapping
Coordinate-based laser mapping (Cellspace)
Mineral-dependent laser mapping (MinMapping)
U-(Th)-Pb geochronology

Solution mode
Trace element analysis (semi-quantitative)
Al-Mg elemental ratios (mixed spike)
Relative Mg-isotope ratios
Absolute Mg-isotope ratios (double spike)
Fe-isotope ratios (double spike)
Mo-isotope ratios (double spike)
Si-isotope ratios
Hf-isotope ratios
Pt-isotope ratios (double spike)
Ni-isotope ratios
Cr-isotope ratios
U-isotope ratios (double spike)
W-isotope ratios
Cu-isotope ratios
Ca-isotope ratios

TIMS
Ba-isotope ratios
Ca-isotope ratios
Sr-isotope ratios
Cr-isotope ratios

If you have used Iolite for some other purpose, feel free to comment, and we'll add it to the list!

Friday, September 13, 2013

Last word from the Iolite Workshop 2013





To all those who attended our Iolite Workshop 2013 in conjunction with the V.M. Goldschmidt conference, thank you for coming!
It was great to see some really interested users from a range of backgrounds and with a variety of exposure to Iolite. The feedback we received was fantastic and we're loaded with new ideas. We're working towards getting some of these things ready for the next release (like the ability to synchronise data from two mass spectrometers), while other bigger changes will be incorporated into Iolite 3. We haven't mentioned much yet on the blog about Iolite 3, but as the name suggests it will be a major upgrade – mainly to the user interface and workflow of Iolite – and more details will follow in future blog posts as development progresses.

Despite the heat (the aircon wasn't working from the start of the workshop) and the timestamp issues (we've spoken to the relevant mass spec company), participants were enthusiastic and engaged. We also gained a lot from the discussion of open data and increasing data half-lives.

We have lots of big things planned for Iolite, and we also appreciate that if researchers are investing time in learning to use our software we have to ensure Iolite sticks around and remains relevant, so we're working hard on keeping Iolite moving forward.

So a big thank you to all the participants, and to those who couldn't make it this time, there will be more.

The Iolite Team

Friday, June 7, 2013

Customising Iolite, Part II

In our previous post, we discussed some basic ways to customise Iolite. Continuing on from there, we'll look at how to set up the Traces Window so that it displays your favourite channels, with your preferred zoom levels, each time you crunch your data.



It's quite common that if you're analysing similar samples regularly, such as zircons, you might use the same channels over and over to select your baselines, reference materials and unknowns. Every time you'll have to choose your favourite channels from the list and set up the axis limits. However, if you use one of the more common DRS, you may have noticed these buttons in the top left of the Traces Window:



By default, if you're using the Trace_Elements DRS and click on the View Baselines button, it will automatically try to show the Ca43, Sr88, Ba138 and a bunch of other channels. Ca43 will be the Primary Channel, and the axis will be set to display between 0 and 15000 CPS. The View Intermediates button does something similar, but with intermediate channels. You can change what channels are displayed, what order they are displayed in, and what zoom levels to use.

The setup for these buttons is stored in the DRS. A lot of the DRS we distribute with Iolite don't have the code in there by default. But you can easily add it by copying and pasting the code below into the bottom of your DRS beneath all the other code, and customise it to suit your needs. Here's what the codes looks like:

Function AutoBaselines(buttonstructure) //Setup Auto Baselines button --- This is based off a button, so has button structure for the next few lines
STRUCT WMButtonAction&buttonstructure
if( buttonstructure.eventCode != 2 )
return 0  // we only want to handle mouse up (i.e. a released click), so exit if this wasn't what caused it
endif  //otherwise, respond to the popup click
ClearAllTraces()

 AutoTrace(0, "Ca43", 0, 15000, extraflag = "Primary")
AutoTrace(1, "Sr88", 0, 5000)
AutoTrace(2, "Ba138", 0, 4000)
AutoTrace(3, "Pb208", 0, 5000)
AutoTrace(4, "Th232", 0, 2000)
AutoTrace(5, "U238", 0, 800, extraflag = "Right")
AutoTrace(6, "Ce140", 0, 500, extraflag = "Hidden")

End           //end of code


You can ignore all the code up to where it first says "AutoTrace(.......)". This is where you can customise it. Let's look at what the stuff between the brackets means:

AutoTrace(TraceNumber, "ChannelName", AxisMinimum, AxisMaximum)

TraceNumber is just the order of the traces, and should be a number, as in the example.
"ChannelName" is the name of the channel you want to display. Don't forget the quotation marks!
AxisMinimum and AxisMaximum are the minimum and maximum values for the axis this trace will be plotted on.

There are also a few extra flags you can add between the brackets (see the Ca43, U238, and Ce140 traces in the example above). If you're going to use them, make sure you include the "extraflag = " part too!

Setting up the View Intermediates button is exactly the same. The only difference is in the Function name. Here's an example:

Function AutoIntermediates(buttonstructure) //Setup the View Intermediates button --- This is based off a button, so has button structure for the next few lines
STRUCT WMButtonAction&buttonstructure
if( buttonstructure.eventCode != 2 )
return 0  // we only want to handle mouse up (i.e. a released click), so exit if this wasn't what caused it
endif  //otherwise, respond to the popup click
ClearAllTraces()

AutoTrace(0, "Ca43_CPS", 0, 0)
AutoTrace(1, "Sr88_v_Ca43", 0, 0)
AutoTrace(2, "Ba138_v_Ca43", 0, 0)
AutoTrace(3, "Pb208_v_Ca43", 0, 0, extraflag = "Primary")
AutoTrace(4, "Th232_v_Ca43", 0, 0)
AutoTrace(5, "U238_v_Ca43", 0, 0, extraflag = "Right")
AutoTrace(6, "Ce140_v_Ca43", 0, 0, extraflag = "Hidden")

End      //End setup function

Notice the different function name (this time it's "AutoIntermediates") and that the channel names are intermediate channels, but they don't have to be! You can use input or intermediate channels in whatever combination you like. The setup for the AutoTrace lines is exactly the same, but you'll notice that in this example, AxisMinimum and AxisMaximum all set to 0. If they're both set to 0, Iolite will automatically set the zoom levels.

After you've pasted the code into your DRS, make sure you save the DRS file by going to File -> Save Procedure. And then whenever you click on the View Baselines or View Intermediates buttons in the Traces Window, it will automatically set up the Traces Window with your favourite settings.

If you have any troubles with setting up these buttons, feel free to create a new topic on the Iolite forum, or add a comment to this post.


The Iolite Team





Thursday, May 23, 2013

Customising Iolite - Part 1


There are plenty of ways to customise Iolite. We're going to break them up into three main categories: basics, viewing, and DRS specific. So let's start with the basics.


If you haven't already noticed, in the Iolite menu at the top, there's an item called "Modify Iolite's default settings". Selecting this item opens a panel showing the basic settings that you can change. Note that any changes you make here will usually take effect for the next experiment you start, not the current one.


Lets go through what each of these mean.

Show info panel on main control window: If this option is checked, a small info panel will appear at the bottom of the Main Control Window. This panel shows information about any cursors currently placed in the window. By default, you won't have any cursors in the window, so this is usually left unchecked.

Show sample labels: Checking this option will show the filename from which the data was loaded at the first point of the data. This will be printed in blue and be vertically aligned. This is the same as checking the box in top left of the Main Control Window, and chooses whether this box is checked by default.

Show integration labels: Each integration can have its own "annotation" or label. This can be entered manually or automatically if you have a laser log file or use one of the other automatic integration methods. Checking this box makes these labels appear by default.

Use native GUI appearance: Igor Pro allows programmers to set whether the buttons and other user interface items, like drop-down menus etc, will take the default Igor appears (rather square looking with flat colours) or use the system OS appearance. For example, if you're using Igor Pro on a Mac running OS 10.7, the buttons will appear more 3D and have rounded corners etc. This option may sound rather aesthetic but if you're experiencing slow performance while using Iolite, try unchecking this option.

Stats method to use for baselines: You can select the default outlier rejection to be used for calculating mean of each baseline integration using this option. Open the drop-down menu to see all of the choices. The default is currently "mean with 2 S.D. outlier reject" but as this will reject the outside ~3% of points even if they're normally distributed, I would suggest setting the default to "mean with 3 S.D. outlier reject". Remember, this the default that will be used when you start a new experiment. You can change the stats method for individual experiments by clicking on the "Edit Settings" button in the Main Control Window.

Stats method for normal integrations: This is the same as for baselines but will select the method for all other integration types, i.e. reference materials and unknowns. 

Import file type: Use this option to select the file type you most often import. For example, if you mostly reduce Agilent data using Iolite, set this option to Agilent.csv. For all new experiments, Agilent.csv will be the default file type in the import options window that appears when you click the Import Data button.

Import single file or folder: Similar to the above option, this selects whether you want to open individual files, or entire folders, by default.

Colour scheme to use in images: when you first create an image, Iolite will look for your default colour scheme and use that to colour your images. You can set this default colour scheme here.

Preferred import folder: Use this option to select the folder you most often import files from. For example, if you have a folder you store all your raw data in called "My Mass Spec Data", use this option to select that folder and when you next import data, Iolite will automatically go to your "My Mass Spec Data" folder to allow you to select your raw data file.

Overwrite existing integrations: This option comes into play when you use one of the automatic integrations methods, such as a laser log file. If you have already selected integrations in an integration type (e.g. G_NIST612), when you try to automatically add integrations to the same integration type, Iolite asks you whether you want to delete the existing integrations and replace them with the new ones you've just defined, or whether you want to keep them and add the new ones as well. If you're adding a lot of integrations automatically, you can be asked this question quite a few times, so use this option to set whichever you'd like to be the default action. You will still be asked to confirm, but your preferred option will be the default.



This is how to change some of the basic settings in Iolite. In the next blog post, we'll show you how to set the Traces Window up so that it shows your favourite channels, with your preferred zoom settings too.

If you have any suggestions for default settings that you wish you could change, please let us know in the comments, or feel free to start a new topic on the forum.


The Iolite Team







Saturday, May 4, 2013

Determining the start time of spot analyses for downhole fractionation correction in the UPb DRS

As with the last post, this is a follow-up to a question posted on the Iolite forum, this time by Jiri Slama (the forum thread can be found here). To summarise, he has previously used a raster pattern when measuring U-Pb ages in zircons, and wanted to know whether there is a best practice when using spot analyses. In particular, he asked how the start time of each analysis (i.e., when the laser shutter opens and ablation commences) is determined, and whether it is necessary to strictly maintain the same timing for baselines and analyses within a session in order for this "time=0" to be consistent between each spot analysis.


First of all, I think this is a great question, as the correct determination of time=0 is critical to properly treating the downhole fractionation in each analysis, regardless of the method used. If a spot analysis is corrected based on a start time that is inaccurate this will introduce a bias in calculated ages that may well be significant.

The way we do this in Iolite is quite different from many other data reduction strategies, so I think it's worth clarifying those differences first. The most common approaches are using a linear fit, or regressing the data to the y-intercept (both assume that downhole fractionation is linear). In both cases a line is fit through the data (either from each spot analysis individually, or by assuming that all analyses are identical, and thus share the same slope). This is then either used to subtract the effects of downhole fractionation to produce a "flattened" analysis, or to infer what the ratio would have been at the time the laser shutter opened (because there was no hole at this point it is assumed that downhole fractionation was zero). The former produces corrected ratios for each timeslice of data, whereas the latter yields a single value and associated uncertainty on the regression. Obviously for these methods to work it is essential that the time=0 used is consistent between analyses to avoid either over- or undercorrecting ratios. In many cases the easiest way to achieve this consistency is by structuring analyses within a session so that the duration of the different components of each analysis (i.e., baselines, spot analysis, and washout) are always the same. It is then always straightforward to select and compare equivalent timeslices from each analysis.

In Iolite there are a couple of differences from the above - the first is that there are methods of correcting downhole fractionation (e.g., an exponential curve) that do not correct the data back to time=0 in the same way as when using a linear fit. This can have an influence on the apparent ages at intermediate steps of data reduction (there's a blog post about that here), but does not have an impact on final ages. And most relevant to this post, the consistent selecting of time=0 is still every bit as important as when using linear fits. Although having said that, it doesn't matter if time=0 perfectly coincides with the moment that ablation commenced, provided that it is the same for every single analysis (this is also true for linear fitting where all analyses are assumed to have identical slope).

The second difference is the big one - in Iolite there are different options available for the way in which time=0 is determined. These different methods have pros and cons, and it's important to confirm that the method used is producing the correct outcome. The big advantage of this flexibility of approach is that it allows for freedom in how data are both acquired and reduced. For example, if analytical conditions are stable it may be preferable to acquire longer baselines every 5 analyses, instead of a short baseline prior to every spot analysis. Likewise, if during data reduction it becomes obvious that the early portion of an analysis is rubbish there is no problem with only selecting the latter range of data.

Regardless of what method is used to determine time=0, there is a specific channel in Iolite that stores information about how long the laser shutter has been open for. It is called "Beam_Seconds" and can be found in the intermediate channels list once it has been calculated (if you make changes it will be recalculated when you crunch data). Below is an image showing Beam_Seconds versus (red) overlaid on 238U signal intensity (grey), plotted against time on the x axis.


I realise that at first glance this may look a bit strange, but you can see that it shows the time that has elapsed since the laser began ablating steadily increasing until the beginning of the next analysis, at which point it is reset back to zero. It probably makes a lot more sense once it is converted into an x-y plot of Beam_Seconds (x-axis) versus 238U intensity (y-axis):


Now you can more clearly see each analysis and its subsequent washout down to the baseline. It is hopefully also obvious that by using Beam_Seconds it is easy to compare different analyses in relation to the time since the laser started firing (which we assume directly relates to how deep the laser pit is).

So that's how we keep track of Beam_Seconds in Iolite, now the next thing is how it is determined. There are three different methods, with a 4th one in the pipeline:

"Cutoff Threshold" - This is the easiest one to explain: every time the intensity of the index channel increases over the threshold set using "BeamSeconds Sensitivity" the Beam_Seconds channel is reset to zero. This works really well in cases where there is not a sharp wash-in of the signal. But it should be noted that the value selected should be as low as possible (different thresholds can be tested until the Beam_Seconds wave produced the correct result), otherwise there may be a significant difference in the trip point between grains with high and low abundances of the index isotope.

"Gaps in data" - In the vast majority of cases this will work off the time since the beginning of each data file. Thus, in cases where each analysis is acquired in a separate file this will allow you to set a specific elapsed time (in seconds, set using the "BeamSeconds Sensitivity" variable) since the start of each file as the trip point for resetting Beam_Seconds.

"Rate of change" - This is the clever one, it uses a snappy little algorithm based on the rate of change of the signal to determine the time at which the laser starts firing (this is where the logarithm of the signal increases most rapidly). It does the best job of consistently finding the same point in each analysis, despite differences in signal intensity, but unfortunately it is also quite susceptible to noisy or spiky analyses, and is thus quite prone to failure. So, as usual, careful checking of results is important.

"Laser log file" - This one is still in the pipeline, but as the name suggests, it will use the laser shutter open events stored in the laser log file to determine when to reset Beam_Seconds.

One thing that is important to clarify is that (regardless of which of the above methods is used) the determination of Beam_Seconds is entirely independent of the masking of low signals. So even if the signal is masked up to the point at which the laser began to fire this does not necessarily mean that the Beam_Seconds wave will coincide. Similarly, the integration periods selected for each analysis are also entirely independent of Beam_Seconds. As such, editing an integration period to exclude the beginning of an analysis will have no impact on the calculation of time=0 and how downhole fractionation correction is performed).

Hopefully this provides some more detail to those not entirely sure of how these calculations are performed in Iolite, and as always if you have any questions feel free to post on the forum. Also, if you want to know more about making sure that Beam_Seconds is calculated correctly there is a blog post about that here.