Neuroscan Compumedics FAQ
Acquire
What bandpass window should I use?
How should I manually insert markers?
Epoching with an event file (automatically insert events)
I got a "data read error" soon after I started recording, but nothing had changed. What happened?
I can't see sleep spindling or K-complexes. Why?
Edit
I have a valid License Key but it's not accepted!
Can Edit track the steps used to create a certain file?
My *.cnt file is huge. When should I decimate?
Matlab and EEGlab can read *.cnt files but my home software can't. Can I "Save As" something else?
Can Edit read 16- or 32-bit files?
Partway through a batch file execution it quit. How do I get Edit to work again?
How can I display group averages?
3D Space
I can't Record, I think my digitizer isn't communicating. How do I check?
My 3DSpace reconstruction looks inaccurate. Why?
Stim^2
This is how we import our TTL pulse from the MRI scanner.
Can I run Stim^2 from my laptop, like E-Prime?
Stimulus Events or Responses are not reaching the Scan PC
I hear loud white noise instead of my stimulus
Basic ABR acquisition parameters
Can I be certain that "rare" stimuli are not presented back-to-back?
Caps and other hardware
I got a "data read error" soon after I started recording, but nothing had changed. What happened?
Acquire
Edit
"Scan was unable to detect a valid software license on this computer. The application has been halted until it is activated. You will need to contact support in order to Update your software lock." I have a valid License Key but it's not accepted! (1) Unplug your license key and close all local instances of Scan. Log in to your local machine as admin (can't be done on a networked machine right now.) (2) Download the hotfix for Scan 4.3.3 here and the Sentinel License Key Reader upgrade here. (3) Run the executables (as admin!), then reboot the machine. (4) Plug in your license key. (5) Open Scan. IF IT STILL DOESN'T WORK, contact tech support.
Can Edit track the steps used to create a certain file? Beyond the information contained in the history bar (which can be scrolled through, or expanded, during a session of Edit though if you close the program it disappears, no. Unfortunately. However, filenames can be very long, and so our lab tracks processing by appending suffixes to each output filename to prevent overwrite, and recall what was done.
When should I decimate? fMRI gradient reduction --> advanced options has a dropdown to let you decimate the data during the gradient reduction step, to get the best anti-aliasing possible. We used to decimate before reducing gradient, and ran into trouble. Beware your Nyquist limits.
Gradient Reduction
The Neuroscan Recommended technique for performing fMRI artifact reduction goes as follows, not to say that other techniques are invalid; as long as a given technique has both scientific and mathematical validity, it can be classified as a viable method for artifact reduction. Thus, my goal is to explain not only our technique, but the logic behind the procedure. This should help to clarify whether any differences exist between what we recommend, and what you have been implementing.
Essentially, the artifact introduced into an EEG signal from the MR from a given slice can be broken down into particular components (i.e. from rapidly-changing gradients), where each component is relative to a particular action taken by the MR in the process of performing the slice measurement. These components remain rather consistent from trial to trial. If you were to take the artifact signal produced from a single slice, or even those inside an entire TR block, and performed a FFT you would see that there is no distinct range of frequencies that comprise this artifact. In fact, you would notice that the Fourier distribution would contain several very narrow-band spikes. Thus, it is difficult to identify a cutoff frequency, or a filter in general, that would be ideal in assisting with removal of the scanner artifact.
Note that the artifact signals are separate and distinct from the EEG. Therefore we have the ultimate goal of how to eliminate one, and keep the other intact. This is another reason why filtering the data beforehand is not recommended, because several of the aforementioned "artifact spikes" shown in the Fourier transformation can be found inside EEG bands of interest. That alone causes difficulty in determining an appropriate cutoff. Also, filtering the signal beforehand can affect the morphology of the signal produced by the artifact, making further removal of the artifact problematic.
This latter point is the most important. In the fMRI artifact reduction used by Scan, the user enters in necessary parameters that enable Scan to know the onset of TRs, along with the duration of TRs and the number of slices within each TR. The user can also indicate the number of TRs/slices to be used in the construction of an averaged artifact template. For example, you may have TRs 2 seconds in duration, and decide to select 9 TRs to be used in the calculation of the artifact template. The act of averaging 9 TRs together enables a twofold accomplishment:
1.) It averages to zero the underlying EEG;
2.) It also averages out any noise, thus leaving a "pure" artifact signal.
This averaged artifact template is most accurate when the original signal is sampled at a very fast rate, typically 10 or 20 kHz. The filter parameters set during acquisition should be as wide open as possible, enabling a pure recreation of the artifact from the gradients. If the artifact is filtered beforehand, the windowing affects of the filter may cause the average template to become smeared, thus preventing maximal removal of the artifact. This is the main reason why we do not recommend filtering the signal before applying the artifact reduction.
The artifact reduction in this version of Scan also encapsulates two follow-up steps: filtering of the artifact-removed signal, and decimation of data. These two steps are actually related; in order to decimate the data, the data must also be filtered to prevent aliasing.
This filter step also removes any components of artifact, and noise at higher frequencies, not completely removed by the artifact template subtraction. This last step may be problematic in attempting to measure ABRs during a continuous, simultaneous EEG-fMRI acquisition, because some artifact parameters still remain even after the subtraction takes place. I will be bluntly honest: I have not performed a subsequent analysis on the data post-correction, but pre-filtering, to see if the remainder artifact/noise has a more narrow distribution, which would allow for a bandpass filter. Normally people using the Maglink are looking at ERPs whose frequency distribution is much lower than that of remainder noise/artifact; thus a filter with a cutoff of 70 Hz, or even 40 Hz, is typically sufficient.
What are *.ev2 files about? Basically, an event file is a text format list of events that Scan can use for epoching in lieu of actual events within the file itself. In your case, I'll assume that you have a CNT file with zero events, i.e. there are no event markers at the bottom of the data window. While you could use a batch (.TCL) file to insert events, an EV2 file simply contains a list of events that can be used across multiple data files for epoching.
Essentially, Scan reads the location of an event from this EV2 file; Scan then goes to that exact location within the CNT file, and uses this as the zero point for an epoch. The epoch is then made based on your X-min/X-max criteria. It's basically the same as if you had specified "internal/port" as the mode for epoching, except that in this case Scan is not reading for the events in the CNT file itself; it's using the event file as the list of events.
For example, let's say you have a CNT file sampled at 1000 Hz. In your case, you want to parse the entire file into sweeps of 1024 data points each, with 25% overlap (an overlap of 256 points). Thus, you can dictate in the event file that the 1st event occurs exactly at the end of your 1st sweep (1024 points). Then, you set your X-min to -1024 and your X-max to 0. Your first sweep then is the first 1024 milliseconds (time 0 to time 1024). Now, in the event file, you would set the onset of your 2nd event as 1792 (garnered by adding 768 to 1024). When you epoch that data point using -1000 to 0, your 2nd epoch starts at time 768 and ends at 1792. Thus, you have a 25% overlap of the 2nd sweep to the 1st sweep. Your 3rd event would then be indicated with an offset of 2560 (1792 + 768). Each succeeding event would have an incremental offset of 768.
The event file contains 5 columns: first: ordinal number of the event (1st event =1, 2nd event =2, etc.)
2nd: actual event code. Thus you can specify multiple codes in the file, although in this case we only need 1 code.
3rd: The next 3 columns can be used to associate response information with the event; this column is the code of the response itself.
4th: This column is the accuracy of the response (1=correct response; 0=incorrect response; -1=incorrect rejection to respond)
5th: This indicates the latency of said response to the stimulus, in seconds.
6th: The most important - this lists the actual location of the event. This can be in either seconds or data points, and indicates the EXACT onset of the event from the beginning of the data. if you sampled at 500 Hz, an event with an offset of 5000 data points would be read at the 10-second mark within the CNT file.
With this format, you can easily make a file in Excel, save it as a text tab-delimited file with an .EV2 extension. Column headers are not necessary. Attached to this email is a full event file made with the parameters described above; it can then be adjusted for use on CNT files with a different sampling rate.
Another nice feature of using EV2 files for this purpose is that it lets you only specify a certain section of a CNT file for analysis. Using the above example, if we only wanted to epoch within a time block starting at 10 seconds and ending at 4 minutes (inside a 10 minute file) then the first event offset would be 10240 instead of 1024. Also, if the event file lists event onsets not possible within a CNT file (e.g. an onset of 10240 in a file only 5 seconds long), those extra events are simply ignored.
The linked file here took about 60 seconds to make in Excel, and will enable epoching of a file with 25% sweep overlap, up to 12 minutes. The file can be a lot longer, and the same EV2 file can be used to epoch multiple CNT files as long as the CNT files have the same sampling rate.
Epoching using an EV2 file is detailed in the Edit manual, in case you have any questions about it. However if you have further questions, feel free to contact tech support.
Partway through a batch file execution it quit. How do I get Edit to work again? Close all Scan programs. Search for a file called Acquire43.ini (usually in a C:\Windows or C:\WinNT folder). Once found, delete the file. Restart Scan and Edit.
All about event triggers There are actually a couple of different options that will let you insert events so you can make epochs and average. I think it will help if I describe the difference between epoching using "Port/Internal" as the mode, and using "Event File" as the mode.
Basically the event markers you see at the bottom of a CNT file are actually stored in an "event table," and this table is located in a footer after the continuous data. If you were to open a .CNT file using custom code), you would notice that a CNT file essentially has three parts:
1.) Header, which contains basic file information such as number of channels, filter and A/D settings, subject information, etc.
2.) Data, which is the actually numbers/time series data;
3.) Footer, which contains the event table.
When Scan opens a CNT file, it reads all three; when it reads the event table, it knows where to place the event markers within the CNT file. Essentially, "Port/Internal" epoching tells Scan to use information in the event table for epoching the file.
The "Event File" transform essentially outputs the information in the event table into an ASCII file (the .EV2 file), and this ASCII file can be read in a multitude of programs, e.g. Excel, Notepad, etc. This EV2 file is then used (or any EV2 file, actually) when you select "Event File" as the epoching mode. What the latter tells Scan to do is to ignore any information in the event table, for that particular CNT file, and to use the event information listed in the EV2 file itself. This was highly useful in situations where there were NO event markers in the CNT file (i.e. the event table was empty).
The above was highly useful before Scan 4.2. Before 4.2, there was no way of modifying the event table directly within Scan; you needed to be a skilled programmer, and write a custom script that could read the CNT file and change this information. Thus, if you were a pre-4.2 user and wanted to modify the event information easily, for epoching purposes, the best way to do this was to create an event file, modify it, and epoch using that modified event file.
It is important to note that when this is performed, it does not actually change the event table itself. For example, let's say you open a CNT file that shows an event marker every exact 2000 milliseconds, and the code of that marker is always a 1. Let's say for whatever reason, you wanted to change every OTHER marker to a code of 2, and change the latency of that marker by 500 ms (thus if the 2nd marker had a latency of 4000 ms from the onset of the file, you would change it to 4500). Thus you would create an event file, change the information for those markers within Excel, save it as a new event file, and then epoch the CNT file using that modified event file. When you finish, you close Scan. The next time you open that same CNT file, it will still have a "1" every 2000 ms, because we did not change any information in the event table itself.
Note that the above is still possible for just about any version of Scan, up through 4.4.
In 4.4 however, we implemented a new transform called "Import Event File." What this enables you to do is to output an event file, modify it, and then import it back into a CNT file...thus, you actually overwrite that CNT file's original "event table" with the information in the new EV2 file. So the next time that CNT was opened, the event markers displayed would reflect the changes you made in the EV2 file. Thus you could then epoch the file, and use "Port/Internal" as the mode. Note that 4.4 can be downloaded from http://www.neuroscan.com , is free to all Scan 4.x users, and will install directly over top of Scan 4.3.1, 4.3.2 and 4.3.3 (the latter three versions are necessary in order to install and run 4.4).
Anyway, now that I have gone through all that, I DO realize I have yet to answer your question. In each row of the EV2 file, it lists information for a single stimulus/event marker. The first column is simply a line number (irrelevant in this case); the 2nd column shows the stimulus event marker code; the 3rd column is the code of any response associated with that stimulus; the 4th column is the accuracy of that response (1 is a correct response/rejection, 0 if an incorrect response, -1 if subject fails to respond when required to); the 5th columns is the latency of that response, relative to the stimulus; and the final column is the offset of that stimulus, either in data points or time, from the beginning of the data (in your example, it looks like sampled data points). If you are inserting rows into the EV2 file it would be something like this, let's say I want an event between your 1st and your 2nd event:
1 1 0 0 0 714
2 1 0 0 0 1675
So I would put in (in red):
1 1 0 0 0 714
1 2 0 0 0 1250
2 1 0 0 0 1675
I am also setting the stimulus code to a "2" so I can distinguish it as my inserted events (not necessary, just for purposes of this example). I would then re-save the EV2 file. Then, when you epoch (using the "Epoch File" transform), select "Event File" as the mode, and point to the modified EV2 file. Then, set "Type" as your Sort Criteria, and put in a 2. You would not need to select anything else. It should then go to the 1100th data point in your file, and create an epoch based on your parameters, and assign it a type code of 2.
Right now, my question would be if you are setting the offsets of the new events correctly. If you are outputting them as data points, you would need to divide that offset by your sampling rate in order to get the actual timestamp of that event. So, if you know you want to insert an event at 2500 milliseconds, and the sampling rate of the CNT file was 500 Hz, then you would need to divide the time by 1000 to convert into seconds, and then multiply that by the sampling rate: (2500/1000*500=1250).
You can also manually insert an individual stimulus event by typing CTRL-V , and giving it a stimulus code. Be careful not to overlap different kinds of events with the SAME stim code.
A third way to insert events is through Transforms-->Voltage Treshold-->Add Events.
Matlab and EEGlab can read *.cnt files but my home software can't. Can I "Save As" something else? The main issue with ASCII export is that it is HUGE. I think the size of an ASCII-exported file is about 2.5-3 times the size of the original CNT. The only thing that may limit whether Scan can then re-import this file is if the ASCII is too large (I have no empirical evidence to note that is valid, but if you are getting an "out of memory" message when trying to import, then that is likely the issue); or if some extra "marks" have been written into the file. An example of the latter is that some programs will write out positive values with a "+" sign in front, and this can cause Scan to not be able to read the export.
16 or 32-bit format? Scan 4.3.1 and up can read both. Anything earlier than 4.3.1 (this would include 4.3) cannot read 32-bit files. Also, anything Scan 4.3.1 reads in or produces is automatically converted into 32-bit. Any Synamp2 file is stored in 32-bit format.
There is no flag in the output file that notates whether a file is 16 or 32-bit, either.
How can I display group averages? At the bottom of the Transforms list, go to Group/Individual Avg. You can then select the AVG files to include in a group average. For the "weighting" process, you can select either "Group" or "Individual." Group means that each AVG file is treated the same way in the averaging process, i.e. the waveforms (within each channel) are added together, and divided by the number of files. Thus, each file contributes equally to the resultant average. With Individual weighting, the number of accepted sweeps in each file are summed; then, a scaling factor is determined by dividing the number of sweeps in each file by the total sweeps. That scaling factor is then multipled by that AVG file, and the sum is calculated, giving the average. So let's say you have three files:
File1: 50 accepted sweeps
File2: 30 accepted sweeps
File3: 20 accepted sweeps
so that is 100 total sweeps. Individually weighted, File1 would have a scaling factor of 50/100 = 0.5; File2 = 30/100 = 0.3; and File3 = 20/100 = 0.2. Thus, your resultant average would equal:
group AVG = (File1*0.5)+(File2*0.3)+(File3*0.2)
and File1 would contribute more strongly than the others to the group's average. Which method to use? Depends on your rationale.
3DSpace
Stim^2
Quikcaps