<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/250049</link>
    <title>MATLAB Central Newsreader - Import Tucker Davis Technology (TDT) Data</title>
    <description>Feed for thread: Import Tucker Davis Technology (TDT) Data</description>
    <language>en-us</language>
    <copyright>&amp;copy;1994-2012 by MathWorks, Inc.</copyright>
    <webmaster>webmaster@mathworks.com</webmaster>
    <generator>MATLAB Central Newsreader</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <ttl>60</ttl>
    <image>
      <title>MathWorks</title>
      <url>http://www.mathworks.com/images/membrane_icon.gif</url>
    </image>
    <item>
      <pubDate>Tue, 28 Apr 2009 00:42:02 -0400</pubDate>
      <title>Import Tucker Davis Technology (TDT) Data</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/250049#645771</link>
      <author>Weimin</author>
      <description>Does anyone know any or can nayone write MatLab scripts to import data from TDT Tank to sigTOOL or other data analysis programs?</description>
    </item>
    <item>
      <pubDate>Tue, 12 May 2009 12:28:01 -0400</pubDate>
      <title>Re: Import Tucker Davis Technology (TDT) Data</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/250049#649173</link>
      <author>Malcolm Lidierth</author>
      <description>This should be possible using the TDT tank and neuroshare compliant dll provided by Tucker Davis.</description>
    </item>
    <item>
      <pubDate>Tue, 12 May 2009 18:07:02 -0400</pubDate>
      <title>Re: Import Tucker Davis Technology (TDT) Data</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/250049#649320</link>
      <author>Weimin</author>
      <description>Thanks, Malcolm. I will give a try by using neuroshare.&lt;br&gt;
&quot;Malcolm Lidierth&quot; &amp;lt;ku.ca.lck@htreidil.mloclam&amp;gt; wrote in message &amp;lt;gubq0h$1h6$1@fred.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; This should be possible using the TDT tank and neuroshare compliant dll provided by Tucker Davis.</description>
    </item>
    <item>
      <pubDate>Sat, 02 Apr 2011 04:54:04 -0400</pubDate>
      <title>Re: Import Tucker Davis Technology (TDT) Data</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/250049#828888</link>
      <author>kai yu</author>
      <description>&quot;Weimin&quot; &amp;lt;zheng@nsi.edu&amp;gt; wrote in message &amp;lt;gt5jcq$ri3$1@fred.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; Does anyone know any or can nayone write MatLab scripts to import data from TDT Tank to sigTOOL or other data analysis programs?&lt;br&gt;
&lt;br&gt;
i found this code, hope it is useful to you!&lt;br&gt;
function sampFreq = ecogTDTData2Matlab(rawDataPath,blockName,chans2Convert,dataTag,outputPath,outputPrefix)&lt;br&gt;
% sampFreq = ecogTDTData2Matlab(rawDataPath,blockName,chans2Convert,dataTag,outputPath,outputPrefix) Covert a set of channels recorded with a TDT sytem to matlab  &lt;br&gt;
%&lt;br&gt;
% PURPOSE:  Transform raw TDT data to matlab files&lt;br&gt;
%           Each channel is written into a separate mat-file&lt;br&gt;
%           Precision is single. &lt;br&gt;
%&lt;br&gt;
% INPUT:&lt;br&gt;
% rawDataPath:      Where the raw data live &lt;br&gt;
%                   e.g. D:\Data\Ecog\bp21FingerMov090127\GP21_B12&lt;br&gt;
% blockName:        The data block of interest e.g. GP21_B12. Typically&lt;br&gt;
%                   this is the last part of the pathname and is included in &lt;br&gt;
%                   the name of the raw files. An error is thron and the&lt;br&gt;
%                   availabe blocks are listed if the requested block does &lt;br&gt;
%                   not exist in the tank.&lt;br&gt;
% chans2Convert:    A list of channel to convert.&lt;br&gt;
%                   1:64 will convert the first 64 channels. Currently ther&lt;br&gt;
%                   is no checking if the channels exist. You will just&lt;br&gt;
%                   find very small files.&lt;br&gt;
% dataTag:          A case sensitive four letter tag defining what we read &lt;br&gt;
%                   Most likely 'ECOG' or 'Wave' if you want to convert ecog&lt;br&gt;
%                   channels.&lt;br&gt;
%                   Most likely 'ANIN' if you want to convert analogue&lt;br&gt;
%                   channels.&lt;br&gt;
%                   Check 'ecogTDTGetDataTags()' if you are not sure&lt;br&gt;
% outputPath:       The path where the exported dat are written.&lt;br&gt;
%                   Typically the same as rawDataPath&lt;br&gt;
% outputPrefix:     The prefix for the output files. Helps to discrimintae&lt;br&gt;
%                   the contents.&lt;br&gt;
%                   For ECoG use 'gdat_'&lt;br&gt;
%                   For analogue channels use 'analog_'&lt;br&gt;
%                   &lt;br&gt;
% OUTPUT:           The data are written to mat-files. The file contains&lt;br&gt;
%                   data: A vector containing the time series&lt;br&gt;
%                   params: A structure holding descriptive information&lt;br&gt;
%                           tagName: The tag name of the channel&lt;br&gt;
%                           chanNum: The number of the current channel&lt;br&gt;
%                           sampFreq: The sampling frequency&lt;br&gt;
%                           nChannels: The total number of channels with&lt;br&gt;
%                                      that tag&lt;br&gt;
% sampFreq:         The sampling frequency used to collect the data&lt;br&gt;
%&lt;br&gt;
% REQUIREMENTS:     This function requires Microsoft Windows, the &lt;br&gt;
%                   TDT drivers, and OpenDeveloper (the latter requires openEx)&lt;br&gt;
%                   installed&lt;br&gt;
%                   Get the software from www.tdt.com. OpenEX and OpenDeveloper &lt;br&gt;
%                   are password protected. &lt;br&gt;
%&lt;br&gt;
% EXAMPLE:&lt;br&gt;
% ecogTDTData2Matlab('D:\Data\Berkeley\Ecog\bp22090323\resultsFile\GP22_B28','GP22_B28',1:80,'HECG','D:\Data\Berkeley\Ecog\bp22090323\resultsFile\GP22_B28','gdat_')&lt;br&gt;
% reads 80 channels of ECoG-data from tag 'HECG' and writes each of them to&lt;br&gt;
% a file starting with name 'gdat_[1:80]'. Returns the sampling frequency&lt;br&gt;
% Use &lt;br&gt;
&lt;br&gt;
% 090130 got the original code from LS&lt;br&gt;
% 090130 JR included comments, OS-check, try catch, removed repeated calls  and modified path handling  &lt;br&gt;
% 090324 JR rewritten to read only data associated with one tag&lt;br&gt;
%           tag is passed as an argument&lt;br&gt;
%           fileprefix is passed as an argument&lt;br&gt;
%           channels are passed as an argument&lt;br&gt;
% 090324 JR The time series is now named 'data' and a params structure is&lt;br&gt;
%           written together with the timeseries.&lt;br&gt;
% 090321 JR Tank name is now found in the directory. No more assumptions&lt;br&gt;
%           about specific prefixes are made&lt;br&gt;
%           If a block name is not available, all available names are listed before throwing an error &lt;br&gt;
% 090812 JR Use dataTag as outputprefix if non was passed instead of chrashing &lt;br&gt;
&lt;br&gt;
switch computer&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case 'PCWIN'&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case 'PCWIN64'&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;otherwise&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;error('Requires Microsoft Windows. Uses ActiveX controls.')&lt;br&gt;
end    &lt;br&gt;
&lt;br&gt;
TT = actxcontrol('TTank.X');&lt;br&gt;
e=invoke(TT,'ConnectServer','Local','Me');&lt;br&gt;
if (e==0)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;error('Cannot connect to server');&lt;br&gt;
end&lt;br&gt;
&lt;br&gt;
try&lt;br&gt;
pause(1)&lt;br&gt;
%e=invoke(TT,'OpenTank',[rawDataPath '\Ecog2_' blockName],'R');%PLACE PATH OF TANK TO COLLECT DATA FROM&lt;br&gt;
%   % the sumption here is that there is only one tank in a directory and&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;% that the extension is tev&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmp=ls('*.tev');&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[p,tankName,e]=fileparts(tmp);&lt;br&gt;
&amp;nbsp;e=invoke(TT,'OpenTank',[rawDataPath filesep tankName],'R');%PLACE PATH OF TANK TO COLLECT DATA FROM&lt;br&gt;
&amp;nbsp;if (e==0)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;%error(['Cannot open data tank: ' rawDataPath '\Ecog2_' blockName]);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;error(['Cannot open data tank: ' rawDataPath filesep blockName ' No *.tev file there']);&lt;br&gt;
end&lt;br&gt;
pause(1)&lt;br&gt;
e=invoke(TT,'SelectBlock',blockName);%PLACE NAME OF BLOCK&lt;br&gt;
if e==0&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;display('Available block names are:')&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;count=1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while (~isempty(TT.QueryBlockName(count)))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;display(TT.QueryBlockName(count));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;count=count+1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;error(['Cannot find block name: ' blockName]);&lt;br&gt;
end&lt;br&gt;
totaltime = floor(invoke(TT,'CurBlockStopTime')- invoke(TT,'CurBlockStartTime'));%Gets total tank duration.&lt;br&gt;
display(['Found ' num2str(totaltime) ' second of data']);&lt;br&gt;
&lt;br&gt;
%oldPath=pwd;&lt;br&gt;
%cd(outputPath);&lt;br&gt;
&lt;br&gt;
params.tagName=dataTag;&lt;br&gt;
TT.GetCodeSpecs(TT.StringToEvCode(dataTag));&lt;br&gt;
sampFreq=TT.EvSampFreq(1);&lt;br&gt;
params.sampFreq=sampFreq;&lt;br&gt;
params.nChannels=length(chans2Convert);&lt;br&gt;
&lt;br&gt;
for k=1:length(chans2Convert)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;params.chanNum=chans2Convert(k);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e=invoke (TT,'SetGlobals', ['Options = ALL; WavesMemLimit = 134217728;Channel=' num2str(chans2Convert(k)) '; T1=0; T2=' num2str(totaltime)]);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data=invoke(TT, 'ReadWavesV', dataTag)';%read data&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ~isempty(data)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ~exist('outputPrefix','var') || isempty(outputPrefix)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;outputPrefix=params.tagName;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;disp(['saving ' outputPrefix num2str(chans2Convert(k)) ' of ' num2str(chans2Convert(end))]);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;%eval([outputPrefix num2str(chans2Convert(k)) ' = data;']);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;%eval(['save ' outputPrefix num2str(chans2Convert(k)) ' ' outputPrefix num2str(chans2Convert(k)) 'params;']);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;save([rawDataPath filesep outputPrefix num2str(chans2Convert(k))],'data','params');&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;disp(['No data found for channeL: ' num2str(chans2Convert(k)) '. Skipping!']); &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&lt;br&gt;
end&lt;br&gt;
&lt;br&gt;
%clear gdat*&lt;br&gt;
if 0&lt;br&gt;
% anin channels&lt;br&gt;
for ch = nchans_anin&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e=invoke (TT,'SetGlobals', ['Options = ALL; WavesMemLimit = 134217728; Channel=' num2str(ch) '; T1=0; T2=' num2str(totaltime)]);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gdat=invoke(TT, 'ReadWavesV', 'ANIN')';%grabs the file&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;disp(['saving analog ' num2str(ch) ' of ' num2str(nchans_anin(end))]);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;eval(['analog_' num2str(ch) ' = gdat;']);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;eval(['save analog_' num2str(ch) ' analog_' num2str(ch) ';']);&lt;br&gt;
end&lt;br&gt;
end&lt;br&gt;
&lt;br&gt;
invoke(TT,'CloseTank')%closes the server.&lt;br&gt;
% got to where we started &lt;br&gt;
%cd(oldPath)&lt;br&gt;
&lt;br&gt;
catch %Make sure the server is closed if anything chrashes&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;invoke(TT,'CloseTank')%closes the server.&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;display(lasterr) %Tell the user the problem&lt;br&gt;
%    cd(oldPath)&lt;br&gt;
end     &lt;br&gt;
&lt;br&gt;
&amp;lt;html xmlns=&quot;&lt;a href=&quot;http://www.w3.org/1999/xhtml&quot;&gt;http://www.w3.org/1999/xhtml&lt;/a&gt;&quot;&amp;gt;&amp;lt;body xmlns=&quot;&lt;a href=&quot;http://www.w3.org/1999/xhtml&quot;&gt;http://www.w3.org/1999/xhtml&lt;/a&gt;&quot;&amp;gt;&amp;lt;div xmlns=&quot;&lt;a href=&quot;http://www.w3.org/1999/xhtml&quot;&gt;http://www.w3.org/1999/xhtml&lt;/a&gt;&quot;&amp;gt;&amp;lt;img width='77' height='5' src='chrome://livemargins/skin/monitor-background-horizontal.png' style='position: absolute;left:-77px;top:-5px'/&amp;gt; &amp;lt;img src='chrome://livemargins/skin/monitor-background-vertical.png' style='position: absolute;left:0;top:-5px;'/&amp;gt; &amp;lt;img id='monitor-play-button' src='chrome://livemargins/skin/monitor-play-button.png' onmouseover='this.style.opacity=1' onmouseout='this.style.opacity=0.5' style='position: absolute;left:1px;top:0;opacity:0.5;cursor:pointer'/&amp;gt;</description>
    </item>
  </channel>
</rss>

