⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datastrm.m

📁 神经元信号处理软件
💻 M
📖 第 1 页 / 共 2 页
字号:
   endendif size(varargin,2)>=1			d.BitFlipRemoveFactor = 1/varargin{1}; %factor for removing spikes (bitflips) with peaks 									% more than BitFlipRemoveFactor higher than left/right valueelse	d.BitFlipRemoveFactor = 0;end;

%general
d.meatype='8x8';
d.version='2.4.9';
d.filesize=0;
d.id=0;
d.DataType='';
d.NChannels=0;
d.NChannels2=0;
d.ChannelNames = '';
d.ChannelNames2 = '';
d.HardwareChannelNames= '';
d.HardwareChannelNames2= '';
d.MicrovoltsPerAD=1;
d.MicrovoltsPerAD2=1;
d.MicrosecondsPerTick=40;
d.ZeroADValue=2048;
d.ZeroADValue2=2048;
d.ChannelID=0;
d.ChannelID2=0;
d.HardwareChannelID=0;
d.HardwareChannelID2=0;
d.sorterleft=[31,32,30,29,24,23,16,22,15,7,14,6,21,13,5,4,12,20,3,11,2,10,19,9,18,17,28,27,25,26,34,33,35,36,41,42,49,43,50,58,51,59,44,52,60,61,53,45,62,54,63,55,46,56,47,48,37,38,40,39,65,66,67,68,1,8,57,64,69:128];
d.sorterright=[65,21,19,16,15,12,10,66,24,22,20,17,14,11,9,7,26,25,23,18,13,8,6,5,29,30,28,27,4,3,1,2,32,31,33,34,57,58,60,59,35,36,38,43,48,53,55,56,37,39,41,44,47,50,52,54,67,40,42,45,46,49,51,68,61,62,63,64,69:128];
d.mea8x8ChannelNames={'11'  '12'  '13'  '14'  '15'  '16'  '17'  '18'  '21'  '22'  '23'  '24'  '25'  '26'  '27'  '28'  '31'  '32'  '33'  '34'  '35'  '36'  '37'  '38'  '41'  '42'  '43'  '44'  '45'  '46'  '47'  '48'  '51'  '52'  '53'  '54'  '55'  '56'  '57'  '58'  '61'  '62'  '63'  '64'  '65'  '66'  '67'  '68'  '71'  '72'  '73'  '74'  '75'  '76'  '77'  '78'  '81'  '82'  '83'  '84'  '85'  '86'  '87'  '88'};
% with following code you get you hardchannel ID translated 
% to MEA 8x8 layout independent of MCRack source type (works only with less than 61 channels!)
% streamnr=getstreamnumber(a,'Spikes 1');
% sorterleft=getfield(a,'sorterleft');
% mea8x8ChannelNames==getfield(a,'mea8x8ChannelNames');
% hwnamesall={mea8x8ChannelNames{sorterleft(1:60)}}; 
% hwstream=getfield(a,'HardwareChannelID2');
% hwnames= hwnamesall(hwstream{streamnr})
d.total_window_ticks=0;
d.offset_to_data = 0;
d.recordingdate = 0;
d.recordingStopDate = 0;
d.sweepStartTime = 0;	     %for spikes used as segment start time
d.sweepStartPointer = 0;	  %for spikes used as segment start pointer
d.windowTicksPos = 0;
d.triggerChannel = -1;
%spikes
d.spikeSize = 0;              %code optimizations assume this not to be changed within a file
d.ticks_pre_event = 0; 
d.maxSpkPerSegmPerChanl = 0;  %upper limit for memory needed per segment while reading spikes as spikes
d.nSpikesPerSegement = 0;     %upper limit for memory needed per segment while reading spikes as sparse
d.nSpkPerSegPerChanl = 0;     %number of spike per segment per channel in 4-bit code
d.HeaderVersion=-1;
d.fileaccess='file';
d.MillisamplesPerSecond=0;
d.MillisamplesPerSecond2=0;
d.StreamCount=0;
d.StreamNames={};
d.StreamInfo={};
d.SamplesPerSegment = 0;
d.TriggerStreamID=0;
d.TimeWindow.Choice=0;
d.TimeWindow.Time1=0;
d.TimeWindow.Time2=0;
d.TimeWindow.StartTrigger=0;
d.TimeWindow.StopTrigger=0;
d.softwareversion=0;
d.TotalChannels = 64;
d.sweepStopTime = 0;	     

if ~isempty(datastrmStruct)
   structFields=fieldnames(datastrmStruct);
   for idx=1:length(structFields)
      d=setfield(d,structFields{idx},getfield(datastrmStruct,structFields{idx}));
   end
end
d = class(d,'datastrm');

if ~strcmp(a,'not assigned')
	fseek(d.fid,0,1);
	d.filesize=ftell(d.fid);
   fseek(d.fid,0,-1);
	newd=rdrawhd(d);
	if(strcmp(class(newd),'char') & strcmp(newd,'invalid file'))	%not old mcrack version
		fclose(d.fid);
		tmp.function='OpenFile';
		tmp.Filename=d.filename;
		retStruct.HeaderVersion=1;
		retStruct=mcstreammex(tmp);
		d.fid=-1;
		d.HeaderVersion=retStruct.HeaderVersion;
		d.softwareversion=retStruct.SoftwareVersion;
		d.fileaccess='ole';
		d.MillisamplesPerSecond=retStruct.MillisamplesPerSecond;
		d.MillisamplesPerSecond2=retStruct.MillisamplesPerSecond2;
		d.MicrosecondsPerTick=1000000/(d.MillisamplesPerSecond/1000);
		d.ZeroADValue2=retStruct.ZeroADValue;
		for i=1:length(retStruct.UnitsPerAD)
			if(char(retStruct.UnitSign(i))=='V')
				d.MicrovoltsPerAD2(i)=retStruct.UnitsPerAD(i)*1000000;
			else
				warning('unknown UnitSign in OLE-read file, MicrovoltsPerAD set to default');
			end
		end
		d.StreamCount=retStruct.StreamCount;
		d.StreamNames=retStruct.StreamNames;
		d.StreamInfo=retStruct.StreamInfo;
		d.SamplesPerSegment=retStruct.SamplesPerSegment;
		d.NChannels2=retStruct.ChannelCount;
		d.HardwareChannelID2=cell(d.StreamCount,1);
		d.HardwareChannelNames2=cell(d.StreamCount,1);
		d.ChannelID2=cell(d.StreamCount,1);
		d.ChannelNames2=cell(d.StreamCount,1);
		d.sweepStartTime=retStruct.SweepStartTime;
      d.sweepStopTime=retStruct.SweepStopTime;
      if retStruct.TriggerStreamID(1)>-1
			tmp=d.StreamInfo{retStruct.TriggerStreamID(1)+1};
			if ~isempty(tmp)
				d.triggerChannel=tmp.Channel;
			end
		end
      d.TriggerStreamID=retStruct.TriggerStreamID;
      tmpTW=retStruct.TimeWindow;
      d.TimeWindow.Choice=tmpTW.Choice;
      d.TimeWindow.Time1=tmpTW.Time1;
      d.TimeWindow.Time2=tmpTW.Time2;
      d.TimeWindow.StartTrigger=tmpTW.StartTrigger;
      d.TimeWindow.StopTrigger=tmpTW.StopTrigger;
		d.total_window_ticks=d.TimeWindow.Time2*(d.MillisamplesPerSecond/1000000);
      %		d.TimeWindow=retStruct.TimeWindow;
      if retStruct.SourceType == 0
         d.meatype='nogrid'; 
      else
         d.meatype='8x8';
      end
      d.TotalChannels = retStruct.TotalChannels;
		for i=1:d.StreamCount
			validChannels=find(retStruct.ChannelID(:,i)+1)+(i-1)*max(d.NChannels2);
			d.HardwareChannelID2{i}=retStruct.ChannelID(validChannels)+1;
         d.HardwareChannelNames2{i}=retStruct.ChannelNames(validChannels);
         if strcmp(d.meatype,'nogrid') 
            tmpsort = d.HardwareChannelID2{i};
            tmpsortIdx = [1:length(d.HardwareChannelID2{i})];
         else
            [tmpsort,tmpsortIdx] = sort(d.HardwareChannelID2{i});
         end
         d.ChannelNames2{i}=d.HardwareChannelNames2{i}(tmpsortIdx); 
         d.ChannelID2{i}=d.sorterleft(tmpsort)';
         if(strcmp(d.StreamNames(i),'Electrode Raw Data') | ...
					strcmp(d.StreamNames{i}(1:5),'Analog Raw Data'))
				if length(d.sweepStartTime)>1
					d.DataType='raw triggered';
					% d.total_window_ticks=retStruct.SweepLength*(d.MillisamplesPerSecond/1000000);
				else
					d.DataType='raw continous';
				end
				if(strcmp(d.StreamNames(i),'Electrode Raw Data'))
					d.ZeroADValue=d.ZeroADValue2(i);
					d.MicrovoltsPerAD=d.MicrovoltsPerAD2(i);
					d.NChannels=d.NChannels2(i);
					d.ChannelID=d.ChannelID2{i};
					d.HardwareChannelID=d.HardwareChannelID2{i};
					d.HardwareChannelNames=d.HardwareChannelNames2{i};
					d.ChannelNames=d.ChannelNames2{i};
				end
			end
		end
		tmp=retStruct.RecordingDate;
      d.recordingdate=datenum(tmp(1),tmp(2),tmp(3),tmp(4),tmp(5),tmp(6));
		tmp=retStruct.RecordingStopDate;
      d.recordingStopDate=datenum(tmp(1),tmp(2),tmp(3),tmp(4),tmp(5),tmp(6));
	   disp(['Recording date:  ' datestr(d.recordingdate,0)]);		disp(['streams in OLE-opened file:' ])
		disp(d.StreamNames)
   else           % i.e. file recorded with old MCRack version
      d=newd;
		d.HardwareChannelID=d.ChannelID;
		d.triggerChannel=d.sorterleft(d.triggerChannel+1);                          % 31=#47 default!
      
      d=setpos(d,'sweep',1);
      d.ChannelID= d.sorterleft(d.HardwareChannelID); 		                      
      d.HardwareChannelNames=d.ChannelNames;
      d.triggerChannel=d.sorterleft(d.triggerChannel+1);                            % 31=#47 default!
      d.ChannelNames = d.HardwareChannelNames;
   end
end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -