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

📄 rdrawhd.m

📁 神经元信号处理软件
💻 M
字号:
function a=rdrawhd(d)% rdrawhd - parses MCS data header (version 1) (datastream method)
% a=rdrawhd(d) parses MCS data header
% To use this function data-files must be open already 
% (fid is input parameter). ChannelID is incremented by 1 
% because the first channel sampled is 0, i.e. its index 
% in the sampling sequence is 0 matlab indices, however, 
% start with 1.%-------------------------	fseek(d.fid,0,-1);				% rewinds the data file%----- parseHeader -------------------------	d.offset_to_data = fread(d.fid,1,'unsigned long');  % offset to data. 1100%	disp(['data section should start at ' int2str(offset_to_data) ' byte']);	word  = fread(d.fid,1,'unsigned short');			% header class tag	word  = fread(d.fid,1,'unsigned short');			% schema of header class	word  = fread(d.fid,1,'unsigned short');			% header class name length   str   = '';
   if word>30
      a='invalid file';, return;
   end
	if ~isempty(word)
		str   = fread(d.fid, word, 'char');				str   = rot90(setstr(str));      	     	  	% header class name. "CMRawDataHeaderInfo"	end
	switch str
		case {'CMRawDataHeaderInfo'}, d.DataType = 'raw';
		case {'CMSpikeDataHeaderInfo'}, d.DataType = 'spike';
		otherwise, a='invalid file';, return;
	end
	dword = fread(d.fid,1,'unsigned long');			% header class version	str   = fread(d.fid,16,'char');						% header class GUID	dword = fread(d.fid,1,'unsigned long');   timeOfDay=((dword/3600/24) - floor(dword/3600/24));
   d.recordingdate = datenum(1970,1,1) + floor(dword/3600/24) + timeOfDay;	% Datum der Messung
   disp(['Recording date:  ' datestr(d.recordingdate,0)]);
	dword = fread(d.fid,1,'unsigned long');			% header class version	word  = fread(d.fid,1,'unsigned short');			% channel count	if(d.DataType(1:3) == 'raw')
		word  = fread(d.fid,1,'unsigned short');			% segment count
	end;%----- parseChannelFilter -------------------------	word  = fread(d.fid,1,'unsigned short');			% channel filter class tag. 0xFFFF	word  = fread(d.fid,1,'unsigned short');			% schema	word  = fread(d.fid,1,'unsigned short'); 	word  = fread(d.fid,1,'unsigned short');
	str  = fread(d.fid,word,'char');			% channel filter class name. "CChannelFilter"	str  = rot90(setstr(str));				% channel filter class name. "CChannelFilter"   if str ~='CChannelFilter' error('invalid file at CChannelFilter'), end;
%----- read in mapping from selected to original channel numbers --------------------	d.NChannels  = fread(d.fid,1,'unsigned short');		% no. of channels selected   d.ChannelID = zeros(1,d.NChannels);
	for i=1:d.NChannels,						d.ChannelID(i)  = 1+fread(d.fid,1,'int32');	% original channelpos. in sampling sequence  (!startpos. is 0!)	end;
%----- read in chosen names for the channels -------------------------	nChannelNames  = fread(d.fid,1,'unsigned short');	% no. of channels selected   if nChannelNames ~=d.NChannels error('can t handle #channels~=#channel names'), end;
   d.ChannelNames=cell(1,d.NChannels);	for i  =1:d.NChannels,      namelength = fread(d.fid,1,'int8');		% Laenge des Namens		str   = fread(d.fid,namelength,'char');% Name selbst, read in chosen names for the channels 		str   = rot90(setstr(str));    			% channel name		d.ChannelNames{i} = str;	end;
% ----- Anzeige der Kanalzuordnung, nur zur Information -------------------------%	plotmea(d)

%----- parseDispProperty -------------------------	word  = fread(d.fid,1,'unsigned short');	word  = fread(d.fid,1,'unsigned short');	word  = fread(d.fid,1,'unsigned short');	str   = fread(d.fid,word,'char');	str   = rot90(setstr(str));				%display property class name. "CMMEADispProperty"	if str ~='CMMEADispProperty' error('invalid file at CMMEADispProperty'), end;
	long  = fread(d.fid,1,'long');	long  = fread(d.fid,1,'long');	long  = fread(d.fid,1,'long');	long  = fread(d.fid,1,'long');	long  = fread(d.fid,1,'long');%----- parseUnitProperty -------------------------	word  = fread(d.fid,1,'unsigned short');	word  = fread(d.fid,1,'unsigned short');	word  = fread(d.fid,1,'unsigned short');	str   = fread(d.fid,word,'char');	str   = rot90(setstr(str));				% unit property class name. "CMMEAUnitProperty"	if str ~='CMMEAUnitProperty' error('invalid file at CMMEAUnitProperty'), end;
	d.MicrovoltsPerAD = fread(d.fid,1,'double');		% Microvolts per AD	d.MicrosecondsPerTick = fread(d.fid,1,'unsigned short');	% Microseconds per Tick	d.ZeroADValue = fread(d.fid,1,'unsigned short');		% AD value for zero Microvolts%------------------------- -------------------------	dword = fread(d.fid,1,'unsigned long');	dword = fread(d.fid,1,'unsigned long');	dword = fread(d.fid,1,'unsigned long');	dword = fread(d.fid,1,'unsigned long');	dword = fread(d.fid,1,'unsigned long');	word  = fread(d.fid,1,'unsigned short');%----- parseViewProperty -------------------------	word  = fread(d.fid,1,'unsigned short');	word  = fread(d.fid,1,'unsigned short');	word  = fread(d.fid,1,'unsigned short');	str   = fread(d.fid,word,'char');	str   = rot90(setstr(str));				%view property class name. "CViewProperty"	if str ~='CViewProperty' error('invalid file at CViewProperty'), end;
	word  = fread(d.fid,1,'unsigned short');	word  = fread(d.fid,1,'unsigned short');	word  = fread(d.fid,1,'unsigned short');	word  = fread(d.fid,1,'unsigned short');	dword = fread(d.fid,1,'unsigned long');	dword = fread(d.fid,1,'unsigned long');	dword = fread(d.fid,1,'unsigned long');%----- parseMEALayout -------------------------	word  = fread(d.fid,1,'unsigned short');	word  = fread(d.fid,1,'unsigned short');	word  = fread(d.fid,1,'unsigned short');	str   = fread(d.fid,word,'char');	str   = rot90(setstr(str));				% unit property class name. "CMCLayout"	if str ~='CMCLayout' error('invalid file at CMCLayout'), end;
%----- read in positions of electrodes -------------------------	word  = fread(d.fid,1,'unsigned short');	% electrode count. 64	for i = 1:word,		int  = fread(d.fid,1,'int');			% x coordinate of electrode point		int  = fread(d.fid,1,'int');			% y coordinate of electrode point	end;%----- read in names for the electrodes -------------------------	word  = fread(d.fid,1,'unsigned short');	ChannelNames_original = '';	for i = 1:word,		byte  = fread(d.fid,1,'int8');			% Laenge des Namens		str   = fread(d.fid,byte,'char');		str   = rot90(setstr(str));			% electrode name (original wie im MEA Layout)		ChannelNames_original = str2mat(ChannelNames_original, str);	end;%----- read in bounding rect of electrode layout -------------------------	int  = fread(d.fid,1,'int');	int  = fread(d.fid,1,'int');	int  = fread(d.fid,1,'int');	int  = fread(d.fid,1,'int');%----- parseTriggerProperty -------------------------	word  = fread(d.fid,1,'unsigned short');	word  = fread(d.fid,1,'unsigned short');	word  = fread(d.fid,1,'unsigned short');	str   = fread(d.fid,word,'char');	str   = rot90(setstr(str));				% unit property class name. "CMMEATriggerProperty"	if str ~='CMMEATriggerProperty' error('invalid file at CMMEATriggerProperty'), end;	int  = fread(d.fid,1,'int');				% Trigger? 1=Trig,0=	if int==1		d.DataType = [d.DataType,' triggered'];	elseif int == 0		d.DataType = [d.DataType,' continous'];
	else error('invalid file at triggered/continous switch')	end;	int  = fread(d.fid,1,'int');		% pre trigger extent in ticks, wrong its in ms	pretriggerticks = int;
	d.ticks_pre_event = pretriggerticks;   disp(['pretriggerticks = ' num2str(pretriggerticks)]);		d.windowTicksPos = ftell(d.fid);
	int  = fread(d.fid,1,'int');		% total window extent in ticks, wrong its in ms	if(strcmp(d.DataType,'raw continous'))
		d.total_window_ticks=1536*25;
	else	   disp(['total_window_ms = ' num2str(int)]);	   d.total_window_ticks = int/(d.MicrosecondsPerTick/1000);
	end;
   
   int  = fread(d.fid,1,'int');		%trigger level chosen in uV	triggerleveluV = int;	int  = fread(d.fid,1,'int');		% trigger level suggested in uV	int  = fread(d.fid,1,'int');		% slope? 0=positive 1=negative	d.triggerChannel = fread(d.fid,1,'int');		% hardware trigger channel 	int  = fread(d.fid,1,'int');		% level display: 0=Don't display, 1=Triangle only, 2=Triangle and line	int  = fread(d.fid,1,'int');		% trigger time display: 0=Don't display, 1=Triangle only, 2=Triangle and line		dword = fread(d.fid,1,'unsigned long');	% color level display	dword = fread(d.fid,1,'unsigned long');	% color trigger time display%	dword = fread(d.fid,1,'unsigned long');	% sweep time%----- parseFilter -------------------------	dword = fread(d.fid,1,'unsigned long');		% ?????	word  = fread(d.fid,1,'unsigned short');	word  = fread(d.fid,1,'unsigned short');	word  = fread(d.fid,1,'unsigned short');	str   = fread(d.fid,word,'char');	str   = rot90(setstr(str));			%unit property class name. "CMFilter"	if str ~='CMFilter' error('invalid file at CMFilter'), end;	word  = fread(d.fid,1,'unsigned short');		% window size (in ticks) = 2^word (Filterbreite in Tickmarks)	filter_width_us = d.MicrosecondsPerTick * word;	% window width in us%	disp(['filter window width = ' num2str(filter_width_us) ' us'])	word  = fread(d.fid,1,'unsigned short');	word  = fread(d.fid,1,'unsigned short');% -------- read rest of file header specific for analog data files ------------------------------	word  = fread(d.fid,1,'unsigned short');	word  = fread(d.fid,1,'unsigned short');		% evtl. fuer aeltere Daten auskommentieren ue 17.7.97	str   = fread(d.fid,word,'char');	str   = rot90(setstr(str));			%unit property class name. "CMRawDataStreamPointer"
	if (d.DataType(1:3) == 'raw')
		if str ~='CMRawDataStreamPointer' error('invalid file at CMRawDataStreamPointer'), end;
	else
		if str ~='CMSpikeStreamPointer' error('invalid file at CMSpikeStreamPointer'), end;
	end;   
  	if d.offset_to_data~=ftell(d.fid) error('invalid file: offset_to_data not correct'), end;
	disp(['this file contains ' d.DataType])   a=d;
	drawnow;

⌨️ 快捷键说明

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