Beauchamp:TMS



Computer control of TMS machines
[[Media:BeauchampTMSSystemOverview.doc|Click here for the document describing Nafi's TMS system]]

Both machines (MagStim and Nafi's) use a National Instrument USB Data acquisition card (referred to here as NIDAQ). However the Presentation Library for these two machines are different. Here is the one for Magstim: and here is the one for Nafi's:

The NIDAQ needs to be defined in Presentation (under Settings --> Port) as 3 output ports. For each port, "USB-6501" should be selected. For the first port choose "Data source: port0", for the second one choose "Data source: port1", and for the third one choose "Data source: port2". For Nafi's nothing else needs to be changed. For MagStim the "Inversion mask" of the seond port needs to be changed to 255 (because they have used inverse logic for their trigger circuit).

These 3 lines need to be put in the header part of Presentation scenario file (before the SDL begin): pulse_width = indefinite_port_code; write_codes = true; response_port_output = false;

The appropriate library also need to be included at the beginning of the PCL section: include "USBTMS_library.pcl"; or include "nafi's_TMS_library.pcl";

These are the self explanatory commands used in the PCL section to control each system:

MagStim: set_TMS_strength(integer between 0 and 100) enable_TMS disable_TMS trigger_TMS

Nafi's: set_TMS_strength(integer between 0 and 100) arm_TMS disarm_TMS trigger_TMS connect_coil disconnect_coil

An alternative to trigger_TMS that can be used in the SDL section (inside trial definition) is this: nothing{};	time = $TMS_time;  port_code = 1;   port = 2; nothing{};	time = '$TMS_time + 1';  port_code = 0;   port = 2;

The port_code commands could also be used with any other event (instead of nothing{ }).

When timing of TMS pulse can be defined in terms of the time after the beginning of trial, the above mentioned method is used. On the other hand, when the timing of TMS pulse is defined in terms of a video frame of a video file, then the trigger_TMS in PCL is used.

Here is an example of delivering a TMS pulse at a specific time during trial: trial { trial_duration = $trial_dur; picture some_picture;	time = 0; sound some_sound; time = $touch_time; nothing{};	time = $TMS_time;  port_code = 1;   port = 2; nothing{};	time = '$TMS_time + 1';  port_code = 0;   port = 2; }sample_TMS_trial;

Here is an example of delivering a TMS pulse at a specific video frame: int movienum = 0; int curfr = 0; bool startedplaying = false; video_report whatson; int TMS_frame = 35; int end_frame = 50; test_video.set_end_frame(end_frame); test_video.prepare; video_player.play( test_video, "test_video" ); loop until curfr > end_frame begin if ( !startedplaying && video_player.report_count > movienum) then startedplaying = true; movienum = movienum + 1; whatson = video_player.last_report; end; if ( startedplaying ) then if (whatson.frame_data_count > curfr) then curfr = whatson.frame_data_count; if curfr == TMS_frame then trigger_TMS; end; end; end; end;

Simultaneous TMS and EMG
Rogue Research is supposed to soon offer an EMG setup that is compatible with BrainSight. Cambridge Electronic Design produces some amplifiers that are designed to eliminate the TMS artifact, as well as software called Signal for recording the EMGs. Here are some PDFs from them that have information on controlling MagStims through the serial port. [[Media:MagstimcontrolSignalv4.pdf]] [[Media:SignalEvokedResponse.pdf]] [[Media:Beauchamp1902.pdf]]

USB control of TMS
http://openwetware.org/wiki/Beauchamp:Software_Installation#Presentation

Parallel port control of Magstim Rapid TMS (OLD)
This is our TMS (Transcranial Magnetic Stimulation) machine from Magstim company, UK. The front panel controls are:
 * 1.Standby
 * 2.Run (arm, bring out of standby)
 * 3.Stimulus intensity control
 * 4.Trigger

Alternatively to trigger the device, a TTL pulse can be sent to the "Trigger In" port in the back of the device with a BNC connector.

The machine can also be controlled externally via the 36pin Centronics connector in the back panel. A Parallel printer cable can be used/made with a DB25 male connector on one end to connect to PC Parallel Port and a Centronics 36pin male connector on the other end to connect to Magstim Rapid.

NOTE: ECP/EPP needs to be selected for the Parallel Port in BIOS.

A 5V input should be connected to Pin 1 of the Centronics connector to gain external control (either from an external source or by downstepping the available 12V at pin 15 of the Centronics connector.

A 7 bit binary code through pins 2-8 can set the stimulus intensity (only values between 10% and 100% should be used, for example 0110010 for 50%)

Pin 9 is used for triggering by applying a 0.

Magstim instruction manual advises NOT to use the BNC trigger input when using this trigger instead.

Pins 14 and 31 of the Centronics connector can be used to arm and standby the device respectively. Magstim instruction manual advises NOT to use these features because of possible safety issues. However we noticed that when the TMS coil is in the magnet, many a time the inducted signal by the scanner puts the TMS device on standby. Therefore it needs to be armed again to deliver TMS pulses during the gap between scans. So it seems using pin 14 to arm the device is inevitable.

A number of digital and analog output signals are also available at the port including coil temperature and capacitor voltage. See Magstim instruction manual.

Transferring MRI Data To The Brainsight System
The BrainSight controls for adjusting and viewing MRI data are not very flexible. Therefore, preprocessing must be done in AFNI.

Anatomical MRIs: Brainsight can directly load NIFTI files. The highest quality T1s are the average anatomicals collected for creating cortical surface models (ibid.). Use the 3dcopy command to create a NIFTI version. 3dcopy EKanatavg+orig EKanatavg_forTMS.nii

In some cases, the image may be too dark or too bright (even after using BrainSight's built-in contrast tools). If this is the case, adjust the image intensity with 3dcalc.

Functional MRIs: First, decide what combination of sub-briks and what thresholds you would like to visualize. Then create a BRIK: 3dcalc -prefix ThumbVsIndexForBrainSight -a0 EIalldec+orig -b35 EIalldec+orig -expr "step(a-4.94)*step(abs(b)-2)*b"

Next, it must resampled to be the same resolution as the anatomical 3dresample -inset ThumbVsIndexForBrainSight+orig -master EIanatavg_forTMS.nii -prefix ThumbVsIndexForBrainSight_nifti.nii

BrainSight requires a substantial amount of post-processing for the T1 anatomicals, such as the curvilinear brain surface reconstruction, markers, etc. If the fMRI data is from a different day, then we want to resample (and realign) the fMRI data to the other-day T1 used for BrainSight post-processing. This requires two steps. First, align the old and new anatomies. Second, apply the same transformation that aligns the old and new anatomies to the (new) fMRI data. Following these two steps, the new fMRI data will be in alignment with the old T1. An important detail is that it is better to perform thresholding AFTER alignment (or any other kind of resampling) so this is actually a three step process.

If the old and new anatomies have different number of slices, the alignment can be performed with 3dAllineate. 3dAllineate -1Dparam_save DBtoBG -1Dmatrix_save DBtoBG -twopass -warp shr \ -base /Volumes/data9/surfaces/beauchamp_michael/afni/T1/BG_avg+orig \ -prefix DBanatavg_regtoBG DBanatavg+orig Step 2: 3dAllineate -float -input DBt2v1dec+orig'[23]'  -1Dmatrix_apply DBtoBG.aff12.1D \ -master /Volumes/data9/surfaces/beauchamp_michael/afni/T1/BG_avg+orig \ -prefix DBt2v1sb23_AlndToBG Step 3: 3dcalc -prefix DBregtoBG_MSB_SSct.nii -a DBt2v1sb23_AlndToBG+orig -expr "step(a-4.2)*a"

If the old and new anatomies have the same number of slices, it may be easiest to do this with 3dvolreg (these steps have not been tested): 3dvolreg -twopass -twodup \ -base /Volumes/data9/surfaces/beauchamp_michael/afni/T1/BG_avg+orig \ -prefix DBanatavg_regtoBG DBanatavg+orig Step 2: 3drotate -rotparent /Volumes/data9/surfaces/beauchamp_michael/afni/T1/DBanatavg_regtoBG+orig \ -gridparent /Volumes/data9/surfaces/beauchamp_michael/afni/T1/BG_avg+orig \ -prefix DB_MSB_SSctx_AlndToBG DB_MSB_SSctx+orig Step 3: Redo thresholding.

Simultaneous TMS and fMRI
The TMS coil is too small to fit in the standard SENSE head coil. The two options are to use the 2-element surface coil (TMJ coil) for local coverage or the whole-head birdcage transmit/receive (TR) coil. If using the TR coil, the placement of the TMS coil relative to the TR coil is critical. If it is too close to the bars of the TR coil, the scanner will give an error message such as: "TR head coil requires 2149 watts. Limit is 2000 watts." This might be due to inductive coupling between the headcoil and the TMS coil, so the scanner cannot drive the coil to generate RF.

experiment notes for 10/07/2009

TMS coil placed on right side of face first goal was to map out auditory/somatosensory stimulation (indirect effect of TMS) started with coil far away from face for just auditory response, but this created error message described above. therefore, moved closer creating both auditory stimulation and face stimulation from TMS (no magnetic stimulation) so used 10% TMS with block design experiment 6 TR ON/6 TR OFF * 10 blocks = 120 TRs total each TR was 2.75 sec, with 5 TMS pulses in each TR at 10 Hz idea is that should result in a nice block design auditory/SS cortex response used Philips RT to look at map

run 1: program crashed after 3 - 4 blocks

run 2: couldn't figure out problem, increased total_scans variable to 1200 watch more closely crashed after 6 - 7 blocks TMS pulses seemed to be coming too early within each TR, then program crashed. in the last TR or two before the crash, the relays opened but there was no pulse.

1/12/2010 Problems fault lights come on, must restart machine NIDAQ card crashing extra scanner pulses contactor fusing shut--worse at 90%?

double pulse problem (reduce contactor opening time)

contactor bouncing (distracting but not a serious problem)

display chip fried light malfunctioning

More testing notes 2/2/2010 Used double pulses and varied the interpulse interval (IPI) at 200 ms IPI, double pulses at 70% were the same amplitude for double pulses at 90%, second pulse was decreased in amplitude about 20% at 150 ms IPI at 70%, the second pulse was decreased in amplitude.

with the Magstim, at 70% 75 ms IPI was the minimum to prevent decrease amplitude at 90%, 115 ms was the minimum The Magstim will not trigger if the cap is not fully charged; Nafi's stimulator does not have that circuitry. On the scope, both waveforms looked similar, roughly triphasic: large sharp positive, medium negative, small third positive peak. Nafi's pulse was a little noisier and longer (400 us vs. 350 us).

Timing of TMS and multisensory stimuli in Presentation
Presentation can keep the record of stimulus presentation times. It is important to understand that these times are from the "input" side of stimulus presentation devices. For example for a visual stimulus, the logged time would show the time that the information was sent to the video card and does not take into account any processing time by the video card and the internal delay of the display. Similar argument holds for auditory stimuli and TMS or other devices controlled by the computer. Here is a report of some measurements of the stimuli timing both from the "input" and the "output" sides.

INPUT SIDE TIMINGS

Visual stimuli: It is important to understand that the start of a visual stimulus can only occur at integer multiples of the video refresh time after the start of trial. For a video card running at 60Hz that would be 0, 16.7, 33.4, etc. For example the following code:

trial { picture test_picture; time = 90; code = "visual_onset"; } test_trial;

will lead to presentation of test_picture at ~ 100ms after the start of trial as logged in the log file. By the same token the end of a visual stimulus (which is basically the beginning of another visual stimulus, i.e. blank or default) can only occur at said times and the minimum length of a visual stimulus will be equal to one refresh (16.7ms in this case).

Theoretically if you schedule a visual stimulus right at the time of an integer multiple of the refresh time, it should play at the requested time. But because of the preparation and processing times and perhaps other reasons, the visual stimulus needs to be scheduled slightly prior to that, for example by 5ms.

So far I am recommending the following code for showing the visual stimulus for 16.7 ms starting at time = 100ms:

trial { picture test_picture; time = 95; code = "visual_onset"; picture {}; time = 112; code = "visual_end"; } test_trial;

Presenting the above trial many times theoretically should lead to presentation of the visual stimulus at time = 100ms lasting for one refresh or 16.7ms. In reality there are other factors that could affect this time including the processor load at the time. Presentation keeps a record of "uncertainty" of the recorded time. One can always go back to the log files and throw out trials for which the uncertainty or timings are not acceptable. The results may vary according to the hardware used. In my experience with a MacBook running Windows XP using Parallel, and no load other than Presentation, >90% of trials had variations < 1ms (much worse results with a Lenovo T61).

Auditory stimuli: The logged time of the auditory stimuli are generally the exact requested time.

trial { sound test_sound; time = 90; code = "audio_onset"; } test_trial;

will lead to presentation of test_audio at 90ms after the start of trial as logged in the log file. Timing variations on the tested MacBook were pretty minimal (>95% of trials had variations <1ms)

This is with "DirectX Software" audio setting in Presentation. Other settings either didn't work at all with this setup or caused frequent crashing of the program.

TMS: We use a National Instruments USB DAQ (NI USB-6501) to control our Magstim Rapid TMS mainly due to lack of parallel port in newer laptops. TMS is triggered by changing a port for a short time (1ms or less):

trial { nothing {}; time = 90; port_code = 1; port = 2; code = "TMS"; nothing {}; time = 91; port_code = 0; port = 2; } test_trial;

This will lead to triggering of TMS at 90ms after the start of trial as logged in the log file. Timing variations on the tested MacBook were pretty minimal (>95% of trials had variations <1ms)

Simultaneous Audio, video, and TMS: Here is a code to present Audio, video, and TMS simultaneously:

trial { picture test_picture; time = 95; code = "visual_onset"; picture {}; time = 112; code = "visual_end"; sound test_sound; time = 100; code = "audio_onset"; nothing {}; time = 100; port_code = 1; port = 2; code = "TMS"; nothing {}; time = 101; port_code = 0; port = 2; } test_trial;

Presentation log file will show that all three stimuli were delivered at time 100-101ms.

OUTPUT SIDE TIMINGS

So far all these timings were related to the "input side". To measure the actual time (the time the illumination of the appropriate pixels change) I attached a photo diode to the LCD monitor at a location where a small white dot would be displayed using Presentation and connected it to the oscilloscope. The audio (from computer audio jack) and TMS (from the NIDAQ) were directly connected to the oscilloscope.



[Photodiode circuit picture modified from: ]

I only had access to a two channel oscilloscope so I had to look at two of the three signals at a time. Here is the "actual" timing of audio (Yellow) and video (Blue):



This shows that even though the log files showed that the audio and visual stimuli started at the same time, here we see that in reality audio was lagging the video by about 15ms.

Here is the TMS (from USB DAQ) and the video:



This shows that the video onset is lagging the TMS by about 10ms.

Now let's look at TMS and the Audio:



This shows that the audio is lagging the TMS by about 26ms.

So even though Presentation log file shows that all three stimuli were presented at the same time (time 100ms), in reality the first stimulus is the TMS, then 10 ms later the video starts, and it takes another 16ms for the audio to start. This is obviously not desired specially for a TMS experiment where 10-20 ms could make a big difference. [Note that these time are relative to the actual TMS (from USB DAQ). I have no means of measuring the times with respect to the start of trial]

The following code will cause the 3 stimuli to be delivered at the same time:

trial { sound test_sound; time = 85; code = "audio_onset"; picture test_picture; time = 95; code = "visual_onset"; picture {}; time = 112; code = "visual_end"; nothing {}; time = 110; port_code = 1; port = 2; code = "TMS"; nothing {}; time = 111; port_code = 0; port = 2; } test_trial;

This code adjust the timings of TMS and audio to match that of the video onset. Here are the results:

To present TMS 50ms after audio-video, add 50ms to the scheduled timings of TMS (160 and 161ms respectively). Similarly, to present TMS 50ms after audio-video, subtract 50ms from the scheduled timings of TMS (60 and 61ms respectively). Here are the actual results. Top row is TMS 50ms after, and bottom row is TMS 50ms before audio-video:

It is important to note that these timing will most likely be different with different hardware setups. I tested an external monitor (Philips Brilliance 190SW; cloned with the MacBook display) and the video lags were longer and more variable. With the Macbook display, video lags were pretty consistent at 10ms (plus/minus 2 seconds or so). With the Philips they ranged from 7 to 21 ms with a mean and median of ~14ms (std = 4.4ms). I'm not sure whether this is a problem of the Philips monitor or the cloning process (MacBook's NVIDIA GeForce 8600M GT). UPDATE: It is apparently because of cloning. I tested the same Philips monitor as the primary display with the same MacBook and the lags were once again right around 10ms.

Another source of potential delay could be the TMS machine itself and the audio amplifier. I tested the input-output delays of our Magstim Rapid and PylePro PCA1 amplifier and they were negligible. I used the trigger-out of TMS machine for this test. To rule out the possibility of any delay between this trigger-out signal and the actual TMS pulse at the coil, I attached a loop of wire to the hotspot of TMS coil and connected it to the oscilloscope. There were no delays between the trigger-out signal and the actual TMS-pulse:

Bottom-Line: Depending on the hardware used it is possible to achieve timings that are within a few milliseconds of the planned times. One needs to measure the delays and make appropriate adjustments for each setup/experimental condition. Log-files need to be looked at after the experiments and trials with unacceptable timings should be discarded.

Comparing strength of different TMS coils and machines
01-12-11

I used a loop of wire hooked up to the oscilloscope using a 100x probe (not sure if necessary, just to be safe) and measured the peak-to-peak voltage of the waveform generated by a TMS pulse for 3 setups:

- Magstim rapid machine with regular figure-of-eight coil - Magstim rapid machine with air-cooled figure-of-eight coil - Nafi's TMS machine with MRI compatible coil

Obviously, the voltages measured are a function of different parameters other than the actual TMS pulse strength (e.g. number of turns, wire thickness, material, etc). But the same loop of wire shown in this image was used for all three coils in the same orientation setup attached to the bottom of the coils at their hot-spots. So the relative measurements are meaningful. The measurements will also vary according to the placement of the loop of wire but I tried to be accurate in placing it the same way for the all three setups and the results below are consistent with the "feeling" one gets of the strength of these three setups.



Results:

- Magstim with regular figure-of-eight coil is ~14% stronger than Magstim with air-cooled coil - Magstim with regular figure-of-eight coil is ~35% stronger than Nafi's TMS with MRI compatible coil - Magstim with air-cooled coil is ~19% stronger than Nafi's TMS with MRI compatible coil - Programmed strength vs. measured strength relationship is reasonably linear - Pulse duration is slightly different across the setups (~330-430 microseconds)




 * data for this chart can be found on data1/TMS/TMS_coil_strength_comparison_chart.xlsx


 * In the bilateral STS-TMS experiment, we are using the magstim with regular coil and Nafi's with MRI coil and want the intensities to match. So for example if we decide on an intensity equivalent to 65% of Magstim's setup, we need to set Nafi's TMS intensity at 65*1.35 = ~88% Or if we want to have the maximum possible matching intensity, that would be 100% on Nafi's TMS and 100/1.35 = ~74% on Magstim machine.

Waveforms:



From left to right: Magstim with regular coil, Magstim with aircooled coil, Nafi's with MRI compatible coil. Time grid is 100 microseconds. Each images is from an 80% intensity TMS pulse in the corresponding setup.

Note: At the time of these measurements I was not able to use other setups, e.g. Nafi's TMS with regular or air-cooled coil or Magstim with the MRI compatible coil. These experiments were done WITHOUT the use of the relay boxes which may have allowed the mentioned setups to work.