1function [HDR] = getfiletype(arg1) 2% GETFILETYPE get file type 3% 4% HDR = getfiletype(Filename); 5% HDR = getfiletype(HDR.FileName); 6% 7% HDR is the Header struct and contains stuff used by SOPEN. 8% HDR.TYPE identifies the type of the file [1,2]. 9% 10% see also: SOPEN 11% 12% Reference(s): 13% [1] http://pub.ist.ac.at/~schloegl/matlab/eeg/ 14% [2] http://pub.ist.ac.at/~schloegl/biosig/TESTED 15 16 17% This program is free software; you can redistribute it and/or 18% modify it under the terms of the GNU General Public License 19% as published by the Free Software Foundation; either version 3 20% of the License, or (at your option) any later version. 21 22% Copyright (C) 2004-2008,2019,2020 by Alois Schloegl <alois.schloegl@gmail.com> 23% This is part of the BIOSIG-toolbox https://biosig.sourceforge.io/ 24 25 26if ischar(arg1), 27 HDR.FileName = arg1; 28elseif isfield(arg1,'name') 29 HDR.FileName = arg1.name; 30 HDR.FILE = arg1; 31elseif isfield(arg1,'FileName') 32 HDR = arg1; 33else 34 error('input argument not supported'); 35end; 36if ~isfield(HDR,'FILE') 37 HDR.FILE.PERMISSION='r'; 38end; 39if ~isfield(HDR.FILE,'PERMISSION') 40 HDR.FILE.PERMISSION='r'; 41end; 42 43HDR.TYPE = 'unknown'; 44HDR.FILE.OPEN = 0; 45HDR.FILE.FID = -1; 46HDR.ErrNum = 0; 47HDR.ErrMsg = ''; 48if ~isfield(HDR.FILE,'stderr'), 49 HDR.FILE.stderr = 2; 50end; 51if ~isfield(HDR.FILE,'stdout'), 52 HDR.FILE.stdout = 1; 53end; 54 55if exist(HDR.FileName,'dir') 56 [pfad,file,FileExt] = fileparts(HDR.FileName); 57 HDR.FILE.Name = file; 58 HDR.FILE.Path = pfad; 59 HDR.FILE.Ext = FileExt(2:end); 60 if strcmpi(FileExt,'.ds'), % .. & isdir(HDR.FileName) 61 f1 = fullfile(HDR.FileName,[file,'.meg4']); 62 f2 = fullfile(HDR.FileName,[file,'.res4']); 63 if (exist(f1,'file') && exist(f2,'file')), % && (exist(f3)==2) 64 HDR.FileName = f1; 65 % HDR.TYPE = 'MEG4'; % will be checked below 66 end; 67 elseif exist(fullfile(HDR.FileName,'alpha.alp'),'file') 68 HDR.FileName = fullfile(HDR.FileName,'rawhead'); 69 70 elseif exist(fullfile(HDR.FileName,'patient.txt'),'file') && exist(fullfile(HDR.FileName,'datafiles.txt'),'file') 71 % Freiburg Prediction Contest 72 % https://epilepsy.uni-freiburg.de/seizure-prediction-workshop-2007/prediction-contest/data-download 73 HDR.FILE.Path = HDR.FileName; 74 HDR.FILE.Name = 'patient.txt'; 75 HDR.FileName = fullfile(HDR.FILE.Path,'patient.txt'); 76 77 elseif exist(fullfile(HDR.FileName,'conf.json'),'file') && ~isempty(dir(fullfile(HDR.FileName,'series-*.bin'))) 78 HDR.FileName = fullfile(HDR.FileName,'conf.json') 79 80 else 81 HDR.TYPE = 'DIR'; 82 return; 83 end; 84end; 85 86%fid = fopen(HDR.FileName,PERMISSION,'ieee-le'); 87fid = fopen(HDR.FileName,HDR.FILE.PERMISSION); 88if fid < 0, 89 HDR.ErrNum = -1; 90 HDR.ErrMsg = sprintf('Error GETFILETYPE: file %s not found.\n',HDR.FileName); 91 return; 92else 93 [pfad,file,FileExt] = fileparts(HDR.FileName); 94 if ~isempty(pfad), 95 HDR.FILE.Path = pfad; 96 else 97 HDR.FILE.Path = pwd; 98 end; 99 HDR.FILE.Name = file; 100 HDR.FILE.Ext = char(FileExt(2:length(FileExt))); 101 102 if ~any(HDR.FILE.PERMISSION=='z') 103 fseek(fid,0,'eof'); 104 else 105 fseek(fid,2^32,'bof'); 106 end; 107 HDR.FILE.size = ftell(fid); 108 109 fseek(fid,0,'bof'); 110 [s,c] = fread(fid,min(HDR.FILE.size,1024),'uint8'); 111 if (c == 0), 112 return; 113 elseif (c < 1024), 114 s = [s', repmat(NaN,1,1024-c)]; 115 else 116 s = s'; 117 end; 118 119 if c, 120 ss = char(s(1:c)); 121 HDR.keycode = s(1:34); 122 123 %%%% file type check based on magic numbers %%% 124 tmp = 256.^[0:3]*reshape(s(1:20),4,5); 125 mat4.flag = (c>20) && (tmp(5)<256) && (tmp(5)>1) && (tmp(1)<4053) && any(s(13)==[0,1]) && any(tmp(4)==[0,1]); 126 if mat4.flag, 127 mat4.matrixname = lower(char(s(21:20+tmp(5)-1))); 128 mat4.type = sprintf('%04i',tmp(1))-48; 129 mat4.size = tmp(2:3); 130 mat4.imagf= tmp(4); 131 mat4.flag = mat4.flag && s(20+tmp(5)); 132 mat4.flag = all((mat4.matrixname>='0' && mat4.matrixname<='9') || (mat4.matrixname>='_' && mat4.matrixname<='z')); 133 mat4.flag = mat4.flag && all(any(mat4.type(ones(6,1),:)==[0,0:4;zeros(1,6);0:5;0:2,0,0,0]')); 134 end; 135 MAGIC.ePrime = 'ExperimentName Subject Session Clock.Information Display.RefreshRate Group RandomSeed SessionDate SessionTime Block Blocklist Blocklist.Cycle'; 136 137 pos1_ascii10 = min(find(s==10)); 138 FLAG.FS3 = any(s==10); 139 if FLAG.FS3, 140 FLAG.FS3=all((s(4:pos1_ascii10)>=32) & (s(4:pos1_ascii10)<128)); % FREESURVER TRIANGLE_FILE_MAGIC_NUMBER 141 end; 142 143 FLAG.IS_UFF = strncmp(ss,[' -1',repmat(' ',1,80-6)],80); 144 if FLAG.IS_UFF, 145 K = strfind(ss(81:161),' '); K = min(K); 146 FLAG.IS_UFF = (K<4) && any(s(81)==[10,13]) && any(s(79+K)==[10,13]); 147 end; 148 149 if 0, 150 elseif all(s([1:2,155:156])==[207,0,0,0]); 151 HDR.TYPE='BKR'; 152 elseif strncmp(ss,'Version 3.0',11); % Neuroscan 153 HDR.TYPE='CNT'; 154 elseif strncmp(ss,'NSI TFF',7); % Neuroscan 155 HDR.TYPE='AST'; 156 elseif strncmp(ss,'Brain Vision Data Exchange Header File',38); 157 HDR.TYPE = 'BrainVision'; 158 elseif strncmp(ss,'Brain Vision V-Amp Data Header File Version',38); 159 HDR.TYPE = 'BrainVisionVAmp'; 160 elseif strncmp(ss,[char([239,187,191]),'Brain Vision Data Exchange Header File'],38); 161 HDR.TYPE = 'BrainVision'; 162 elseif strncmp(ss,'Brain Vision Data Exchange Marker File',38); 163 HDR.TYPE = 'BrainVision_MarkerFile'; 164 elseif strncmp(ss,'[Header]',8); 165 HDR.TYPE='ET-MEG'; 166 elseif all(256.^[0:3]*reshape(s(1:80),[4,20])==[0,16,32,32,512,536,1,1,1048,412,1,1,1460,80,32,1,4020,76,128,128]); 167 HDR.TYPE='ET-MEG:SQD'; 168 HDR.Endianity = 'ieee-le'; 169 elseif all(s(1:4)==0) && strcmp(HDR.FILE.Ext,'raw') && exist(fullfile(HDR.FILE.Path,[HDR.FILE.Name,'.ainf']),'file'); 170 HDR.TYPE='AINF'; 171 elseif strncmp(ss,'[BioSig Header]',13); 172 HDR.TYPE='BioSig'; 173 elseif strncmp(ss,'#BIOSIG BINARY]',14); 174 HDR.TYPE='BIN'; 175 elseif strncmp(ss,'0 ',8); 176 HDR.TYPE='EDF'; 177 elseif all(s(1:8)==[255,abs('BIOSEMI')]); 178 HDR.TYPE='BDF'; 179 elseif strncmp(ss,'GDF',3); 180 HDR.TYPE='GDF'; 181 elseif strncmp(ss,'EBS',3); 182 HDR.TYPE='EBS'; 183 %elseif all(s(1:4) == [hex2dec(['5f';'09';'a7';'82'])]'); 184 %HDR.TYPE='ASN.1'; 185 elseif (c>31) && strncmp(ss,'CEN',3) && all(s(6:8)==hex2dec(['1A';'04';'84'])') && (all(s(4:5)==hex2dec(['13';'10'])') || all(s(4:5)==hex2dec(['0D';'0A'])')); 186 HDR.TYPE='FEF'; 187 HDR.VERSION = str2double(ss(9:16))/100; 188 HDR.Encoding = str2double(ss(17:24)); 189 if any(str2double(ss(25:32))), 190 HDR.Endianity = 'ieee-be'; 191 else 192 HDR.Endianity = 'ieee-le'; 193 end; 194 if any(s(4:5)~=[13,10]) 195 % fprintf(2,'Warning GETFILETYPE (FEF): incorrect preamble in file %s\n',HDR.FileName); 196 end; 197 198 elseif strncmp(ss,'CEDFILE"',8); 199 HDR.TYPE='CFS'; 200 elseif strncmp(ss,'MEG41CP',7); 201 HDR.TYPE='CTF'; 202 elseif strncmp(ss,'MEG41RS',7) || strncmp(ss,'MEG4RES',7); 203 HDR.TYPE='CTF'; 204 elseif strncmp(ss,'MEG4',4); 205 HDR.TYPE='CTF'; 206 elseif (c>21) && strncmp(ss,'CTF_MRI_FORMAT VER 2.2',22); 207 HDR.TYPE='CTF'; 208 elseif 0, strncmp(ss,'PATH OF DATASET:',16); 209 HDR.TYPE='CTF'; 210 211 elseif strcmp(ss(1:10),'EEG-1100C ') && strcmp(ss(16+(1:length(HDR.FILE.Name))),HDR.FILE.Name); % Nihon-Kohden 212 HDR.TYPE='EEG-1100'; 213 HDR.VERSION = ss(11:16); 214 elseif strcmp(ss(1:10),'EEG-1100C ') && strcmp(ss(32+(1:length(HDR.FILE.Name))),HDR.FILE.Name); % Nihon-Kohden 215 HDR.TYPE='EEG-1100+'; 216 HDR.VERSION = ss(11:16); 217 elseif strcmp(ss([1:8,10]),'EEG-1100 ') && any(ss(9)=='ABC') % Nihon-Kohden 218 HDR.TYPE='EEG-1100-'; 219 HDR.VERSION = ss(11:16); 220 elseif strcmp(ss(1:10),'QI-403A ') % Nihon-Kohden 221 HDR.TYPE='EEG-1100-'; 222 HDR.VERSION = ss(11:16); 223 elseif strcmp(ss(1:10),'EEG-2100 ') % Nihon-Kohden 224 HDR.TYPE='EEG-1100-'; 225 HDR.VERSION = ss(11:16); 226 elseif strcmp(ss(1:10),'DAE-2100D ') % Nihon-Kohden 227 HDR.TYPE='EEG-1100-'; 228 HDR.VERSION = ss(11:16); 229 230 elseif (c>278) && strncmp(ss,'Embla data file',15) && strcmp(HDR.FILE.Name,ss(279:278+length(HDR.FILE.Name))), 231 HDR.TYPE='EMBLA'; 232 elseif strcmp(ss(1:20),['Header',char(13),char(10),'File Version']) 233 HDR.TYPE='ETG4000'; 234 elseif strncmp(ss, MAGIC.ePrime, length(MAGIC.ePrime)) 235 HDR.TYPE='ePrime'; 236 237 elseif strncmp(ss,'GALILEO EEG TRACE FILE',22) % Galilea EEG (from ESAOTE, EBNeuro spa) 238 HDR.TYPE='GTF'; 239 elseif strcmp(ss(3:11),'COHERENCE') && strcmp(ss(43+[1:length(HDR.FILE.Name)]),HDR.FILE.Name); 240 HDR.TYPE='Delta'; 241 242 elseif strcmp(ss(1:8),'@ MFER '); 243 HDR.TYPE='MFER'; 244 elseif (c>27) && strcmp(ss(1:28),'FileFormat = BNI-1-BALTIMORE'); 245 HDR.TYPE='Nicolet'; %%% see also Nicolet 246 elseif strcmp(ss(1:6),'@ MFR '); 247 HDR.TYPE='MFER'; 248 elseif all(s([4:7,14:19])==[232,3,12,0,0,0,0,0,0,0]); 249 HDR.TYPE='PathFinder710_HighResolutionECG'; 250 251 %% general SCP 252 elseif (c>33) && all(s([9,10,12:14,17:24,26:34])==[0,0,0,0,0,abs('SCPECG'),0,0,0,0,0,7,0,0,0,1,0]) && (s(11)==s(25)); 253 HDR.TYPE = 'SCP'; 254 HDR.VERSION = s(15)/10; 255 elseif (c>33) && all(s([9,10,12:14,17:24,26:34])==[0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,7,0,0,0,1,0]) && (s(11)==s(25)); 256 HDR.TYPE = 'SCP'; 257 HDR.VERSION = s(15)/10; 258 259 %% special SCP 260 elseif (c>23) && all(s([9:23])==[0,0,136,0,0,0, 13,13, 6,abs('SCPECG')]); 261 HDR.TYPE = 'SCP'; 262 HDR.VERSION = -1; 263 elseif (c>33) && all(s([9:34])==[0,0,136,0,0,0, 10,205,205,205,205,205,205,205,0,0, 136,0,0,0,7,0,0,0,1,0]); 264 HDR.TYPE = 'SCP'; 265 HDR.VERSION = -2; 266 elseif (c>33) && all(s([9:34])==[0,0,136,0,0,0, 10,11, 0,0,0,0,0,0,0,0, 0,0,0,0, 0,0,0,0, 1,0]); 267 HDR.TYPE = 'SCP'; 268 HDR.VERSION = -3; 269 elseif (c>33) && all(s([9:34])==[0,0,136,0,0,0, 13,13, abs('SCPEGC'),0,0, 136,0,0,0, 7,0,0,0, 1,0]); 270 HDR.TYPE = 'SCP'; 271 HDR.VERSION = -4; 272 elseif (c>33) && all(s([9:34])==[0,0,136,0,0,0, 10,0, 144,128,0,0,120,128,0,0, 136,0,0,0, 7,0,0,0, 1,0]); 273 HDR.TYPE = 'SCP'; 274 HDR.VERSION = -5; 275 elseif (c>33) && all(s([9:34])==[0,0,136,0,0,0, 10,11, 37,1,153,1,231,73 ,0,0, 136,0,0,0, 7,0,0,0, 1,0]); 276 HDR.TYPE = 'SCP'; 277 HDR.VERSION = -6; 278 279 elseif strncmp(ss,'# EN1064 Lead Identification Table of the SCP-ECG format',6); 280 HDR.TYPE='EN1064:LeadId'; 281 tmp = fread(fid,[1,inf],'uint8'); 282 s = char([s(:);tmp(:)])'; 283 fclose(fid); 284 k = 0; 285 while ~isempty(s), 286 [t,s] = strtok(s,[10,13]); 287 if ~length(t) 288 elseif ~strncmp(t,'#',1) 289 ix3 = strfind(t,'MDC_ECG_LEAD_'); 290 [t1,t2] = strtok(t(1:ix3-1),[9,32]); 291 [t2,t3] = strtok(t2,[9,32]); 292 id = str2double(t2); 293 k = k+1; 294 HDR.EN1064.SCP_Name{k} = t1; 295 HDR.EN1064.Code(k) = id; 296 HDR.EN1064.Description{k} = deblank(t3); 297 HDR.EN1064.MDC_ECG_LEAD{k}= t(ix3+13:end); 298 end; 299 end; 300 return; 301 elseif (c>41) && strncmp(ss,'ATES MEDICA SOFT. EEG for Windows',32); % ATES MEDICA SOFTWARE, NeuroTravel 302 HDR.TYPE='ATES'; 303 HDR.VERSION = ss(35:42); 304 elseif (c>40) && strncmp(ss,'V3.0 ',16) && strncmp(ss(33:41),'[PatInfo]',9); 305 HDR.TYPE='Sigma'; %% SigmaPLpro 306 HDR.HeadLen = s(17:20)*(256.^[0:3]'); 307 elseif all(s([1:24,29:31])==[abs('POLY SAMPLE FILEversion '),13,10,26]) && (str2double(ss(25:28))==(s([32:33])*[1;256]/100)); % Poly5/TMS32 sample file format. 308 HDR.TYPE='TMS32'; 309 elseif strncmp(ss,['FileId=TMSi PortiLab sample log file'],36); % 310 HDR.TYPE='TMSiLOG'; 311 HDR.H1 = [ss(1:c),fread(fid,[1,inf],'uint8=>char')]; %% read whole file 312 elseif strncmp(ss,'"Snap-Master Data File"',23); % Snap-Master Data File . 313 HDR.TYPE='SMA'; 314 elseif 0, all(s([1:2,20])==[1,0,0]) && any(s(19)==[2,4]); 315 HDR.TYPE='TEAM'; % Nicolet TEAM file format 316 elseif strncmp(ss,HDR.FILE.Name,length(HDR.FILE.Name)) && strcmpi(HDR.FILE.Ext,'HEA'); 317 HDR.TYPE='MIT'; 318 elseif strncmp(ss,'DEMG',4); % www.Delsys.com 319 HDR.TYPE='DEMG'; 320 elseif (c>37) && strcmp(ss(35:38),'BLSC') % CeeGraph, Bio-Logic Systems Corp. 321 if strcmpi(ss(44+[0:length(HDR.FILE.Name)+length(HDR.FILE.Ext)]),[HDR.FILE.Name,'.',HDR.FILE.Ext]); 322 else 323 warning('BLSC: ????'); 324 end; 325 HDR.TYPE='BLSC1'; 326 327 elseif all(s([1:2,4:8])==[3,17,0,8,9,176,2]) && any(s(3)==[240:249]) % v2.40 - v2.49 328 HDR.TYPE='BLSC2'; 329 elseif (c>317) && all(ss(308:318)==['E',char(zeros(1,7)),'DAT']) % CeeGraph, Bio-Logic Systems Corp. 330 HDR.TYPE='BLSC2'; 331 elseif all(s([129,130,132:136])==[3,17,0,8,9,176,2]) && any(s(3)==[240:249]) % v2.40 - v2.49 332 HDR.TYPE='BLSC2-128'; 333 elseif (c>445) && strncmp(ss(436:446),[HDR.FILE.Name,char(0),HDR.FILE.Ext],length(HDR.FILE.Name)+length(HDR.FILE.Ext)+1) % CeeGraph, Bio-Logic Systems Corp. 334 HDR.TYPE='BLSC2'; 335 elseif (c>445) && strncmp(ss(436:446),[HDR.FILE.Name,char(0),HDR.FILE.Ext],length(HDR.FILE.Name)+length(HDR.FILE.Ext)+1) % CeeGraph, Bio-Logic Systems Corp. 336 HDR.TYPE='BLSC2'; 337 elseif (c>445) && strncmp(ss(436:446),[HDR.FILE.Name,char([0,0,0,0])],length(HDR.FILE.Name)+4) % CeeGraph, Bio-Logic Systems Corp. 338 HDR.TYPE='BLSC2'; 339 340 elseif any(s(1)==[100:103]) && all(s([2:8])==[0,0,0,176,1,0,0]) && strcmpi(HDR.FILE.Ext,'DDT'); 341 HDR.TYPE='DDT'; 342 elseif all(s([1:32])==[0,0,0,0,0,0,58,1,58,1,58,1,105,0,4,0,128,0,4,0,0,0,0,0,2,0,0,0,0,0,0,0]); 343 HDR.TYPE='LEXICORE'; 344 elseif all(s([1:4])==abs('NEX1')); 345 HDR.TYPE='NEX'; 346 elseif all(s([1:6])==abs('Neuron')); 347 HDR.TYPE='NEURON'; 348 elseif all(strcmp(ss([1:10]),'[FileInfo]')); 349 HDR.TYPE='Persyst'; 350 elseif all(s([1:4])==abs('SXDF')); 351 HDR.TYPE='OpenXDF'; 352 elseif all(s([1:4,6:132])==[abs('PLEX'),zeros(1,127)]); % http://WWW.PLEXONINC.COM 353 HDR.TYPE='PLEXON'; 354 355 elseif strcmp(ss([1:4]),'fLaC'); 356 HDR.TYPE='FLAC'; 357 elseif strcmp(ss([1:4]),'OggS'); 358 HDR.TYPE='OGG'; 359 elseif strcmp(ss([1:4]),'.RMF'); 360 HDR.TYPE='RMF'; 361 362 elseif strncmp(ss,'AON4',4); 363 HDR.TYPE='AON4'; 364 elseif all(s(3:7)==abs('-lh5-')); 365 HDR.TYPE='LHA'; 366 elseif (c>117) && strncmp(ss,'PSID',4); 367 HDR.TYPE='SID'; 368 HDR.Title = ss(23:54); 369 HDR.Author = ss(55:86); 370 HDR.Copyright = ss(87:118); 371 372 elseif strncmp(ss,'.snd',4); 373 HDR.TYPE='SND'; 374 HDR.Endianity = 'ieee-be'; 375 elseif strncmp(ss,'dns.',4); 376 HDR.TYPE='SND'; 377 HDR.Endianity = 'ieee-le'; 378 elseif (c>11) && strcmp(ss([1:4,9:12]),'RIFFWAVE'); 379 HDR.TYPE='WAV'; 380 HDR.Endianity = 'ieee-le'; 381 elseif (c>10) && strcmp(ss([1:4,9:11]),'FORMAIF'); 382 HDR.TYPE='AIF'; 383 HDR.Endianity = 'ieee-be'; 384 elseif (c>11) && strcmp(ss([1:4,9:12]),'RIFFAVI '); 385 HDR.TYPE='AVI'; 386 HDR.Endianity = 'ieee-le'; 387 elseif (c>20) && all(s([1:4,9:21])==[abs('RIFFRMIDMThd'),0,0,0,6,0]); 388 HDR.TYPE='RMID'; 389 HDR.Endianity = 'ieee-be'; 390 elseif all(s(1:9)==[abs('MThd'),0,0,0,6,0]) && any(s(10)==[0:2]); 391 HDR.TYPE='MIDI'; 392 HDR.Endianity = 'ieee-be'; 393 elseif (c>15) && ~isempty(strfind(ss(1:16),'8SVXVHDR')); 394 HDR.TYPE='8SVX'; 395 elseif strcmp(ss([1:4,9:12]),'RIFFILBM'); 396 HDR.TYPE='ILBM'; 397 elseif strcmp(ss([1:4]),'2BIT'); 398 HDR.TYPE='AVR'; 399 elseif all(s([1:4])==[26,106,0,0]); 400 HDR.TYPE='ESPS'; 401 HDR.Endianity = 'ieee-le'; 402 elseif all(s([1:4])==[0,0,106,26]); 403 HDR.TYPE='ESPS'; 404 HDR.Endianity = 'ieee-le'; 405 elseif strncmp(ss,'|CF,',4) 406 HDR.TYPE='FAMOS'; 407 elseif strcmp(ss([1:15]),'IMA_ADPCM_Sound'); 408 HDR.TYPE='IMA ADPCM'; 409 elseif all(s([1:8])==[abs('NIST_1A'),0]); 410 HDR.TYPE='NIST'; 411 elseif (c>77) && strcmp(ss(1:78),'HEADER RECORD*******LIBRARY HEADER RECORD!!!!!!!000000000000000000000000000000'); 412 HDR.TYPE='SAS_XPORT'; 413 elseif (c>22) && strncmp(ss(1:23),'$FL2@(#) SPSS DATA FILE',8); 414 HDR.TYPE='SPSS'; 415 if all(s(66:68)==0) HDR.Endianity = 'ieee-le'; 416 elseif all(s(65:67)==0) HDR.Endianity = 'ieee-be'; 417 end 418 elseif (c>15) && strcmp(ss(1:16),['SQLite format 3',char(0)]) && s(22)==64 && s(23)==32 && all(s(69:92)==0), 419 HDR.TYPE = 'SQLite'; 420 elseif all(s(3:4)==[1,0]) && any(s(1)==[113,114]) && any(s(2)==[1:2]), 421 HDR.TYPE = 'STATA'; 422 423 elseif all(s([1:7])==[abs('SOUND'),0,13]); 424 HDR.TYPE='SNDT'; 425 elseif (c>17) && strcmp(ss([1:18]),'SOUND SAMPLE DATA '); 426 HDR.TYPE='SMP'; 427 elseif (c>18) && strcmp(ss([1:19]),'Creative Voice File'); 428 HDR.TYPE='VOC'; 429 elseif strcmp(ss([5:8]),'moov'); % QuickTime movie 430 HDR.TYPE='QTFF'; 431 elseif strncmp(ss,'FWS',3) || strncmp(ss,'CWS',3); % Macromedia 432 HDR.TYPE='SWF'; 433 HDR.VERSION = s(4); 434 HDR.SWF.size = s(5:8)*256.^[0:3]'; 435 elseif all(s(1:16)==hex2dec(reshape('3026b2758e66cf11a6d900aa0062ce6c',2,16)')') 436 %'75B22630668e11cfa6d900aa0062ce6c' 437 HDR.TYPE='ASF'; 438 439 elseif strncmp(ss,'MPv4',4); 440 HDR.TYPE='MPv4'; 441 HDR.Date = ss(65:87); 442 elseif strncmp(ss,'RG64',4); 443 HDR.TYPE='RG64'; 444 elseif strncmp(ss,'DTDF',4); 445 HDR.TYPE='DDF'; 446 elseif strncmp(ss,'RSRC',4); 447 HDR.TYPE='LABVIEW'; 448 elseif strncmp(ss,'IAvSFo',6); 449 HDR.TYPE='SIGIF'; 450 elseif any(s(4)==(2:7)) && all(s([1:3,6:2:14,26])==0) ; % [int32] 2...7 451 %% high byte of month, day, hour, min, sec and bits must be zero. 452 HDR.TYPE='EGI'; 453 454 elseif (c>160) && FLAG.IS_UFF, 455 K = strfind(ss(81:161),' ')+80; K = K(1); 456 HDR.TYPE=['UFF',deblank(ss(K+[0:6]))]; 457 458 elseif all(s(1:4)==hex2dec(reshape('AFFEDADA',2,4)')'); % Walter Graphtek 459 HDR.TYPE='WG1'; 460 HDR.Endianity = 'ieee-le'; 461 elseif all(s(1:4)==hex2dec(reshape('DADAFEAF',2,4)')'); 462 HDR.TYPE='WG1'; 463 HDR.Endianity = 'ieee-le'; 464 elseif all(s(1:4)==hex2dec(reshape('5555FEAF',2,4)')'); 465 HDR.TYPE='WG1'; 466 HDR.Endianity = 'ieee-le'; 467 elseif all(s(1:4)==[14,15,23,0]); 468 HDR.TYPE='WINEEG'; 469 470 elseif strncmp(ss,'HeaderLen=',10); 471 HDR.TYPE = 'BCI2000'; 472 HDR.VERSION = 1; 473 elseif strncmp(ss,'BCI2000',7); 474 HDR.TYPE = 'BCI2000'; 475 HDR.VERSION = 1.1; 476 477 elseif (c>11) && strcmp(ss([1:4,9:12]),'RIFFCNT ') 478 HDR.TYPE='EEProbe-CNT'; % continuous EEG in EEProbe format, ANT Software (NL) and MPI Leipzig (DE) 479 elseif all(s(1:4)==[38 0 16 0]) 480 HDR.TYPE='EEProbe-AVR'; % averaged EEG in EEProbe format, ANT Software (NL) and MPI Leipzig (DE) 481 482 elseif strncmp(ss,'eerT',4); 483 HDR.TYPE='HEKA PatchMaster'; 484 elseif strncmp(ss,'IGOR',4); 485 HDR.TYPE='ITX'; 486 elseif strncmp(ss,'ISHNE1.0',8); % ISHNE Holter standard output file. 487 HDR.TYPE='ISHNE'; 488 elseif strncmp(ss,'rhdE',4); % Holter Excel 2 file, not supported yet. 489 HDR.TYPE='rhdE'; 490 491 elseif strncmp(ss,'RRI',3); % R-R interval format % Holter Excel 2 file, not supported yet. 492 HDR.TYPE='RRI'; 493 elseif strncmp(ss,'Repo',4); % Repo Holter Excel 2 file, not supported yet. 494 HDR.TYPE='REPO'; 495 elseif strncmp(ss,'Beat',4); % Beat file % Holter Excel 2 file, not supported yet. 496 HDR.TYPE='Beat'; 497 elseif strncmp(ss,'Evnt',4); % Event file % Holter Excel 2 file, not supported yet. 498 HDR.TYPE='EVNT'; 499 500 elseif strncmp(ss,'CFWB',4); % Chart For Windows Binary data, defined by ADInstruments. 501 HDR.TYPE='CFWB'; 502 elseif strncmp(ss,'FILE FORMAT=RigSys',18); % RigSys file format 503 HDR.TYPE='RigSys'; 504 505 elseif any(s(3:6)*(2.^[0;8;16;24]) == (30:42)) 506 HDR.VERSION = s(3:6)*(2.^[0;8;16;24]); 507 offset2 = s(7:10)*(2.^[0;8;16;24]); 508 509 if HDR.VERSION < 34, offset = 150; 510 elseif HDR.VERSION < 35, offset = 164; 511 elseif HDR.VERSION < 36, offset = 326; 512 elseif HDR.VERSION < 38, offset = 886; 513 elseif HDR.VERSION < 39, offset = 1894; 514 elseif HDR.VERSION < 41, offset = 1896; 515 elseif HDR.VERSION ==41, offset = 1944; 516 else offset = -1; 517 fprintf(2,'Warning: Version %i of ACQ format not supported (yet).\n',HDR.VERSION); 518 end; 519 if (offset==offset2), 520 HDR.TYPE = 'ACQ'; 521 end; 522 523 elseif (s(1) == 253) && (HDR.FILE.size==(s(6:7)*[1;256]+7)); 524 HDR.TYPE='AKO+'; 525 elseif all(s(1:4) == [253, 174, 45, 5]); 526 HDR.TYPE='AKO'; 527 elseif all(s(1:8) == [1,16,137,0,0,225,165,4]); 528 HDR.TYPE='ALICE4'; 529 530 elseif strfind(ss,'ALPHA-TRACE-MEDICAL'); 531 HDR.TYPE='alpha'; 532 533 elseif strncmp(ss,'SamplingRate=',13) && strcmp(HDR.FILE.Name,'patient'), 534 % Freiburg Prediction Contest 535 % https://epilepsy.uni-freiburg.de/seizure-prediction-workshop-2007/prediction-contest/data-download 536 HDR.FEPI.PatientFile = fullfile(HDR.FILE.Path,'patient.txt'); 537 fid2 = fopen(fullfile(HDR.FILE.Path,'datafiles.txt'),'r'); 538 if fid2>0, 539 HDR.TYPE = 'FEPI3'; 540 HDR.H1 = ss; 541 k = 0; 542 while ~feof(fid2) 543 tmp = fgetl(fid2); 544 k = k+1; 545 HDR.FEPI.ListOfDataFiles{k,1} = tmp; 546 end; 547 fclose(fid2); 548 end; 549 550 elseif all(s(5:18)==[40,0,4,1,44,1,102,2,146,3,44,0,190,3]) 551 %HDR.FILE.size == (s(37:40)*256.^[0:3]') 552 HDR.TYPE = 'unipro'; 553 tmp=repmat(',',1,19); 554 tmp([1:4,6:7,9:10,12:13,15:16,18:19])=s([153:160,162:167]); 555 HDR.T0 = biosig_str2double(char(tmp)); 556 tmp([1:4,6:7,9:10])=s([128:135]); 557 HDR.Patient.Birthday = biosig_str2double(char(tmp)); 558 frewind(fid); 559 HDR.s8=fread(fid,[1,inf],'uint8'); 560 frewind(fid); 561 HDR.s16=fread(fid,[1,inf],'uint16'); 562 563 elseif strfind(ss,'W1N10936.'); 564 ss(1:20), 565 566 elseif all(s(1:4) == [27,153,153,153]); 567 HDR.TYPE='???'; 568 %ss(1:20), 569 elseif all(s(1:4) == [28,153,153,153]); 570 HDR.TYPE='???'; 571 %ss(1:20), 572 573 elseif all(s(1:2)==[hex2dec('55'),hex2dec('AA')]); 574 HDR.TYPE='RDF'; % UCSD ERPSS aquisition system 575 elseif ( (c>107) && all(reshape(s(1:32),1,[])==[abs('Synergy'),0,abs('012.003.000.000'),0,28,0,0,0,2,0,0,0]) && strcmp(ss(64:78),'CRawDataElement') && strcmp(ss(86:99),'CRawDataBuffer') ), 576 HDR.TYPE='SYNERGY'; 577 HDR.SampleRate = 50000; 578 579 elseif strncmp(ss,'Stamp',5) 580 HDR.TYPE='XLTEK-EVENT'; 581 582 elseif all(s(1:2)==[hex2dec('55'),hex2dec('3A')]); % little endian 583 HDR.TYPE='SEG2'; 584 HDR.Endianity = 'ieee-le'; 585 elseif all(s(1:2)==[hex2dec('3A'),hex2dec('55')]); % big endian 586 HDR.TYPE='SEG2'; 587 HDR.Endianity = 'ieee-be'; 588 589 elseif strncmp(ss,'MATLAB Data Acquisition File.',29); % Matlab Data Acquisition File 590 HDR.TYPE='DAQ'; 591 elseif all(s(1:4)==[137,abs('HDF')]); 592 HDR.TYPE='HDF5'; 593 elseif strncmp(ss,'MATLAB 5.0 MAT-file',19); 594 HDR.TYPE='MAT5'; 595 if (s(127:128)==abs('MI')), 596 HDR.Endianity = 'ieee-le'; 597 elseif (s(127:128)==abs('IM')), 598 HDR.Endianity = 'ieee-be'; 599 end; 600 elseif strncmp(ss,'Model {',7); 601 HDR.TYPE='MDL'; 602 elseif all(s(85:92)==abs('SAS FILE')); % FREESURVER TRIANGLE_FILE_MAGIC_NUMBER 603 HDR.TYPE='SAS'; 604 605 elseif all(s(1:16)==[15 195 123 28 207 45 109 75 138 234 31 100 206 210 185 23]) 606 HDR.TYPE='no spec (nicolet?)'; 607 608 elseif any(s(1)==[49:51]) && all(s([2:4,6])==[0,50,0,0]) && any(s(5)==[49:50]), 609 HDR.TYPE = 'WFT'; % nicolet 610 611 elseif all(s(1:3)==[255,255,254]) && FLAG.FS3, 612 %any(s==10) && all((s(4:pos1_ascii10)>=32) & (s(4:pos1_ascii10)<128)); % FREESURVER TRIANGLE_FILE_MAGIC_NUMBER 613 HDR.TYPE='FS3'; 614 elseif all(s(1:3)==[255,255,255]); % FREESURVER QUAD_FILE_MAGIC_NUMBER or CURVATURE 615 HDR.TYPE='FS4'; 616 elseif all(s(2:6)==[134,1,0,2,0]) && any(s(1)==[162:164]); % SCAN *.TRI file 617 HDR.TYPE='TRI'; 618 619 elseif strncmp(ss,'3D Geometry File Format ',24); % Rhino Model file 620 HDR.TYPE='GEO:3DM'; 621 elseif strncmp(ss,'Iges ',5); 622 HDR.TYPE='GEO:IGES'; 623 elseif strncmp(ss,'solid',5); 624 HDR.TYPE='GEO:STL:ASCII'; 625 elseif strncmp(ss,'STL binary file',15) && (HDR.FILE.size==(s(81:84)*256.^[3:-1:0]')*50+84); 626 HDR.TYPE='GEO:STL:BIN'; 627 HDR.Endianity='ieee-be'; 628 elseif strncmp(ss,'STL binary file',15) && (HDR.FILE.size==(s(81:84)*256.^[0:3]')*50+84); 629 HDR.TYPE='GEO:STL:BIN'; 630 HDR.Endianity='ieee-le'; 631 elseif strncmp(ss,'PLY',3); % Polygon file format 632 % http://local.wasp.uwa.edu.au/~pbourke/dataformats/ply/ 633 % http://en.wikipedia.org/wiki/PLY_%28file_format%29 634 HDR.TYPE='GEO:PLY'; 635 636 elseif all(s(1:16)==[162 134 1 0 0 0 1 0 205 204 76 63 0 0 192 63]); 637 HDR.TYPE='GEO:3DD'; 638 639 elseif all((s(1:4)*(2.^[24;16;8;1]))==1229801286); % GE 5.X format image 640 HDR.TYPE='5.X'; 641 642 elseif all(s(1:2)==[105,102]); 643 HDR.TYPE='669'; 644 elseif all(s(1:2)==[234,96]); 645 HDR.TYPE='ARJ'; 646 elseif 0, s(1)==2; 647 HDR.TYPE='DB2'; 648 elseif 0, any(s(1)==[3,131]); 649 HDR.TYPE='DB3'; 650 elseif strncmp(ss,'DDMF',4); 651 HDR.TYPE='DMF'; 652 elseif strncmp(ss,'DMS',4); 653 HDR.TYPE='DMS'; 654 elseif strncmp(ss,'FAR',3); 655 HDR.TYPE='FAR'; 656 elseif all(ss(5:6)==[175,18]); 657 HDR.TYPE='FLC'; 658 elseif strncmp(ss,'GF1PATCH110',12); 659 HDR.TYPE='GF1'; 660 elseif strcmp(ss([1:6,12]),'(DWF V)'); 661 HDR.VERSION = biosig_str2double(ss(7:11)); 662 if ~isnan(HDR.VERSION), 663 HDR.TYPE='IMAGE:DWF'; % Design Web Format from Autodesk 664 end; 665 elseif strncmp(ss,'GIF87a',6); 666 HDR.TYPE='IMAGE:GIF'; 667 elseif strncmp(ss,'GIF89a',6); 668 HDR.TYPE='IMAGE:GIF'; 669 elseif strncmp(ss,'CPT9FILE',8); % Corel PhotoPaint Format 670 HDR.TYPE='CPT9'; 671 672 elseif all(s(21:28)==abs('ACR-NEMA')); 673 HDR.TYPE='ACR-NEMA'; 674 675 elseif all(s(129:132)==abs('DICM')); 676 HDR.TYPE='DICOM'; 677 elseif all(s([2,4,6:8])==0) && all(s([1,3,5])); % DICOM candidate 678 HDR.TYPE='DICOM'; 679 elseif all(s(1:18)==[8,0,5,0,10,0,0,0,abs('ISO_IR 100')]) % DICOM candidate 680 HDR.TYPE='DICOM'; 681 elseif all(s(12+[1:18])==[8,0,5,0,10,0,0,0,abs('ISO_IR 100')]) % DICOM candidate 682 HDR.TYPE='DICOM'; 683 elseif all(s([1:8,13:20])==[8,0,0,0,4,0,0,0,8,0,5,0,10,0,0,0]) % DICOM candidate 684 HDR.TYPE='DICOM'; 685 % more about the heuristics to identify DICOM files at 686 % http://groups.google.com/groups?hl=fr&lr=&frame=right&th=cb048de7b4459bd3&seekm=9h9jrs%247jf%40news.Informatik.Uni-Oldenburg.DE#link1 687 % http://fixunix.com/dicom/545185-dicom-file-without-file-meta-information-size-preamble.html 688 689 elseif strncmp(ss,'*3DSMAX_ASCIIEXPORT',19) 690 HDR.TYPE='ASE'; 691 elseif strncmp(ss,'999',3) 692 HDR.TYPE='DXF-Ascii'; 693 elseif all(s([1:4])==[32,32,48,10]) 694 HDR.TYPE='DXF?'; 695 elseif all(s([1:4])==[103,23,208,113]) 696 HDR.TYPE='DXF13'; 697 elseif strncmp(ss,'AutoCAD Binary DXF',18) 698 HDR.TYPE='DXF-Binary'; 699 700 elseif all(s(1:24)==[0,0,39,10,zeros(1,20)]) 701 HDR.TYPE='SHAPE'; 702 703 elseif strncmp(ss,'%!PS-Adobe',10) 704 HDR.TYPE='PS/EPS'; 705 elseif strncmp(ss,'HRCH: Softimage 4D Creative Environment',38) 706 HDR.TYPE='HRCH'; 707 elseif strncmp(ss,'#Inventor V2.0 ascii',11) 708 HDR.TYPE='IV2'; 709 HDR.VERSION = ss(12:14); 710 elseif strncmp(ss,'HRCH: Softimage 4D Creative Environment',38) 711 HDR.TYPE='HRCH'; 712 elseif all(s([1:2])==[1,218]) 713 HDR.TYPE='RGB'; 714 elseif strncmp(ss,'#$SMF',5) 715 HDR.TYPE='SMF'; 716 HDR.VERSION = str2double(ss(7:10)); 717 elseif strncmp(ss,'#SMF',4) 718 HDR.TYPE='SMF'; 719 HDR.VERSION = str2double(ss(5:8)); 720 721 elseif all(s([1:4])==[127,abs('ELF')]) 722 HDR.TYPE='ELF'; 723 elseif all(s([1:4])==[77,90,192,0]) 724 HDR.TYPE='EXE'; 725 elseif all(s([1:4])==[77,90,80,0]) 726 HDR.TYPE='EXE/DLL'; 727 elseif all(s([1:4])==[77,90,128,0]) 728 HDR.TYPE='DLL'; 729 elseif all(s([1:4])==[77,90,144,0]) 730 HDR.TYPE='DLL'; 731 elseif all(s(1:4)==hex2dec(['CA';'FE';'BA';'BE'])') 732 HDR.TYPE='JAVA'; 733 elseif all(s([1:8])==[254,237,250,206,0,0,0,18]) 734 HDR.TYPE='MEXMAC'; 735 736 elseif all(s(1:33)==[208 207 17 224 161 177 26 225 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 62 00 03 00 254 255 09 00 06]); 737 HDR.TYPE='MSI'; 738 elseif all(s(1:24)==[208,207,17,224,161,177,26,225,zeros(1,16)]); % MS-EXCEL candidate 739 HDR.TYPE='BIFF'; 740 741 elseif strncmp(lower(ss),'<?php',5) 742 HDR.TYPE='PHP'; 743 elseif ~isempty(strfind(ss,'<AnnotatedECG xmlns="urn:hl7-org:v3" xmlns:voc="urn:hl7-org:v3/voc"')) 744 HDR.TYPE='HL7aECG'; 745 elseif strncmp(ss,'<WORLD>',7) 746 HDR.TYPE='XML'; 747 elseif all(s(1:2)==[255,254]) && all(s(4:2:end)==0) 748 HDR.TYPE='XML-UTF16'; 749 elseif ~isempty(strfind(ss,'?xml version')) 750 HDR.TYPE='XML-UTF8'; 751 elseif ~isempty(strfind(ss,'Serial number')) 752 HDR.TYPE='ASCII:IBI'; 753 754 elseif strncmp(ss,'ABF',3) 755 HDR.TYPE = ss(1:4); 756 elseif strncmp(ss,'CLPX',3) 757 HDR.TYPE = 'ABF'; 758 elseif strncmp(ss,'FTCX',3) 759 HDR.TYPE = 'ABF'; 760 elseif all(s(1:4)==[0,0,128,63]) %float(1) 761 HDR.TYPE = 'ABF'; 762 elseif all(s(1:4)==[0,0,32,65]) %float(10) 763 HDR.TYPE = 'ABF'; 764 765 elseif all(s(1:4)==abs(['ATF',9])) 766 HDR.TYPE='ATF'; % axon text file 767 [tmp,t]=strtok(ss,[9,10,13,32]); 768 [tmp,t]=strtok(t,[9,10,13,32]); 769 HDR.Version = str2double(tmp); 770 771 elseif strncmp(ss,'binterr1.3',10) 772 HDR.TYPE='BT1.3'; 773 elseif all(s([1:2,7:10])==[abs('BM'),zeros(1,4)]) 774 HDR.TYPE='IMAGE:BMP'; 775 HDR.Endianity = 'ieee-le'; 776 elseif strncmp(ss,'#FIG',4) 777 HDR.TYPE='FIG'; 778 HDR.VERSION = strtok(ss(6:end),[10,13]); 779 elseif strncmp(ss,'SIMPLE = T / Standard FITS format',30) 780 HDR.TYPE='IMAGE:FITS'; 781 elseif all(s(1:40)==[137,abs('HDF'),13,10,26,10,0,0,0,0,0,8,8,0,4,0,16,0,3,zeros(1,11),repmat(255,1,8)]) && (HDR.FILE.size==s(41:44)*2.^[0:8:24]') 782 HDR.TYPE='HDF'; 783 elseif strncmp(ss,'CDF',3) 784 HDR.TYPE='NETCDF'; 785 elseif strncmp(ss,'%%MatrixMarket matrix coordinate',32) 786 HDR.TYPE='MatrixMarket'; 787 elseif s(1:4)*2.^[0:8:24]'==5965600, % Kodac ICC format 788 HDR.TYPE='ICC'; 789 HDR.HeadLen = s(5:8)*2.^[0:8:24]; 790 HDR.T0 = s([20,19,18,17,24,23]); 791 elseif strncmp(ss,'IFS',3) 792 HDR.TYPE='IMAGE:IFS'; 793 elseif strncmp(ss,'OFF',3) 794 HDR.TYPE='OFF'; 795 HDR.ND = 3; 796 elseif strncmp(ss,'4OFF',4) 797 HDR.TYPE='OFF'; 798 HDR.ND = 4; 799 elseif strncmp(ss,'.PBF',4) 800 HDR.TYPE='PBF'; 801 elseif all(s([1,3])==[10,1]) && any(s(2)==[0,2,3,5]) && any(s(4)==[1,4,8,24]) && any(s(59)==[4,3]) 802 HDR.TYPE='PCX'; 803 tmp = [2.5, 0, 2.8, 2.8, 0, 3]; 804 HDR.VERSION=tmp(s(2)+1); 805 HDR.Encoding = s(3); 806 HDR.BitsPerPixel = s(4); 807 HDR.NPlanes = s(65); 808 elseif all(s(1:20)==[ 99,253,45,1,3,0,1,0,1,zeros(1,11)]) 809 HDR.TYPE='PDP'; 810 HDR.T0 = [1,256]*reshape(s(21:32),2,6); 811 812 elseif all(s(1:8)==[139,74,78,71,13,10,26,10]) 813 HDR.TYPE='IMAGE:JNG'; 814 elseif all(s(1:8)==[137,80,78,71,13,10,26,10]) 815 HDR.TYPE='IMAGE:PNG'; 816 elseif (ss(1)=='P') && any(ss(2)=='123') % PBMA, PGMA, PPMA 817 HDR.TYPE='IMAGE:PBMA'; 818 id = 'BGP'; 819 HDR.TYPE(8)=id(s(2)-48); 820 821 elseif (ss(1)=='P') && any(ss(2)=='456') % PBMB, PGMB, PPMB 822 HDR.TYPE='IMAGE:PBMB'; 823 id = 'BGP'; 824 HDR.TYPE(8) = id(s(2)-abs('3')); 825 [t,ss] = strtok(ss,[10,13]); 826 lt = length(t) + 1; 827 [t,ss] = strtok(ss,[10,13]); 828 lt = lt + length(t) + 1; 829 while strncmp(t,'#',1) 830 [t,ss] = strtok(ss,[10,13]); 831 lt = lt + length(t) + 1; 832 end; 833 HDR.IMAGE.Size = biosig_str2double(t); 834 [t,ss] = strtok(ss,[10,13]); 835 lt = lt + length(t) + 1; 836 HDR.DigMax = biosig_str2double(t); 837 HDR.HeadLen = lt; 838 839 elseif strcmpi(HDR.FILE.Ext,'XBM') && ~isempty(strfind(ss,'bits[]')) && ~isempty(strfind(ss,'width')) && ~isempty(strfind(ss,'height')) 840 HDR.TYPE='IMAGE:XBM'; 841 elseif strncmp(ss,'/* XBM ',7) 842 HDR.TYPE='IMAGE:XBM'; 843 elseif strncmp(ss,'#define icon_width',7) 844 HDR.TYPE='IMAGE:XBM'; 845 846 elseif strncmp(ss,'/* XPM */',9) 847 HDR.TYPE='IMAGE:XPM'; 848 849 elseif strncmp(ss,['# ',HDR.FILE.Name,'.poly'],8+length(HDR.FILE.Name)) 850 HDR.TYPE='POLY'; 851 elseif all(s([1,3,7:12])==[255,255,abs('Exif'),0,0]) && any(s(2)==[216:217]) && any(s(4)==[224:225]); 852 HDR.TYPE='IMAGE:EXIF'; 853 HDR.Endianity = 'ieee-be'; 854 elseif all(s([1:4,7:12])==[255,216,255,225,abs('Exif'),0,0]); 855 HDR.TYPE='IMAGE:EXIF'; 856 HDR.Endianity = 'ieee-be'; 857 elseif all(s([1:3])==[255,216,255]) 858 HDR.TYPE='IMAGE:JPG-'; 859 HDR.Endianity = 'ieee-be'; 860 elseif all(s([1:4,7:11])==[255,217,255,224,abs('JFIF'),0]) 861 HDR.TYPE='IMAGE:JPG1'; 862 HDR.Endianity = 'ieee-be'; 863 elseif all(s([1:4,7:11])==[255,216,255,224,abs('JFIF'),0]) 864 HDR.TYPE='IMAGE:JPG2'; 865 HDR.Endianity = 'ieee-be'; 866 elseif all(s(1:4)==[216,255,224,255]) 867 HDR.TYPE='IMAGE:JPG3'; 868 HDR.Endianity = 'ieee-le'; 869 elseif all(s([1,3,65])==[10,1,0]) && any(s(2)==[0,2,3,4,5]) && any(s(4)==[1,2,4,8]) && any(s(66)==[1:4]) && any(s(69)==[1:2]) 870 HDR.TYPE='IMAGE:PCX'; 871 HDR.Endianity = 'ieee-le'; 872 elseif all(s(1:4)==[149, 106, 166, 89]) 873 HDR.TYPE='IMAGE:SunRasterfile'; 874 HDR.Endianity = 'ieee-be'; 875 elseif all(s(1:20)==['L',0,0,0,1,20,2,0,0,0,0,0,192,0,0,0,0,0,0,70]) 876 HDR.TYPE='LNK'; 877 tmp = fread(fid,inf,'uint8'); 878 HDR.LNK=[s,tmp']; 879 elseif all(s(1:111)==[0,0,1,186,68,0,4,0,4,1,1,137,195,248,0,0,1,187,0,18,128,196,225,0,225,127,185,224,232,184,192,32,189,224,58,191,224,2,0,0,1,191,7,212,80,0,0,0,0,84,47,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,64,16,0,0,0,0,74,86,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]); 880 HDR.TYPE='MOVIE:MOD'; 881 elseif all(s(1:3)==[0,0,1]) 882 HDR.TYPE='MOVIE:MPG2MOV'; 883 elseif strcmp(ss([3:5,7]),'-lh-'); 884 HDR.TYPE='LZH'; 885 elseif strcmp(ss([3:5,7]),'-lz-'); 886 HDR.TYPE='LZH'; 887 elseif strcmp(ss(1:3),'MMD'); 888 HDR.TYPE='MED'; 889 elseif 0, % conflict with some WFDB-data 890 %(s(1)==255) && any(s(2)>=224); 891 HDR.TYPE='MPEG'; 892 elseif strncmp(ss(5:8),'mdat',4); 893 HDR.TYPE='MOV'; 894 895 elseif all(s(1:2)==[26,63]); 896 HDR.TYPE='OPT'; 897 elseif strncmp(ss,'%PDF',4); 898 HDR.TYPE='PDF'; 899 elseif strncmp(ss,'QLIIFAX',7); 900 HDR.TYPE='QFX'; 901 elseif strncmp(ss,'.RMF',4); 902 HDR.TYPE='RMF'; 903 elseif strncmp(ss,'IREZ',4); 904 HDR.TYPE='RMF'; 905 elseif strncmp(ss,'{\rtf',5); 906 HDR.TYPE='RTF'; 907 elseif all(s(1:4)==[73,73,42,0]); 908 HDR.TYPE='IMAGE:TIFF'; 909 HDR.Endianity = 'ieee-le'; 910 HDR.FLAG.BigTIFF = 0; 911 elseif all(s(1:4)==[77,77,0,42]); 912 HDR.TYPE='IMAGE:TIFF'; 913 HDR.Endianity = 'ieee-be'; 914 HDR.FLAG.BigTIFF = 0; 915 elseif all(s(1:8)==[73,73,43,0,8,0,0,0]); 916 HDR.TYPE='IMAGE:TIFF'; 917 HDR.Endianity = 'ieee-le'; 918 HDR.FLAG.BigTIFF = 1; 919 elseif all(s(1:8)==[77,77,0,43,0,8,0,0]); 920 HDR.TYPE='IMAGE:TIFF'; 921 HDR.Endianity = 'ieee-be'; 922 HDR.FLAG.BigTIFF = 1; 923 elseif strncmp(ss,'StockChartX',11); 924 HDR.TYPE='STX'; 925 elseif all(ss(1:2)==[25,149]); 926 HDR.TYPE='TWE'; 927 elseif strncmp(ss,'TVF 1.1A',7); 928 HDR.TYPE = ss(1:8); 929 elseif all(s(1:12)==[abs('TVF 1.1B'),1,0,0,0]); 930 HDR.TYPE = ss(1:8); 931 HDR.Endianity = 'ieee-le'; 932 elseif all(s(1:12)==[abs('TVF 1.1B'),0,0,0,1]); 933 HDR.TYPE = ss(1:8); 934 HDR.Endianity = 'ieee-be'; 935 elseif strncmp(ss,'#VRML',5); 936 HDR.TYPE='VRML'; 937 elseif strncmp(ss,'# vtk DataFile Version ',23); 938 HDR.TYPE='VTK'; 939 HDR.VERSION = ss(24:26); 940 elseif all(ss(1:5)==[0,0,2,0,4]); 941 HDR.TYPE='WKS'; 942 elseif all(ss(1:5)==[0,0,2,0,abs('Q')]); 943 HDR.TYPE='WQ1'; 944 elseif all(s(1:8)==hex2dec(['30';'26';'B2';'75';'8E';'66';'CF';'11'])'); 945 HDR.TYPE='WMV'; 946 947 % compression formats 948 elseif strncmp(ss,'BZh91AH&SY',10); 949 HDR.TYPE='BZ2'; 950 elseif all(s(1:3)==[66,90,104]); 951 HDR.TYPE='BZ2'; 952 elseif strncmp(ss,'MSCF',4); 953 HDR.TYPE='CAB'; 954 elseif all(s(1:3)==[31,139,8]); 955 HDR.TYPE='gzip'; 956 if exist('OCTAVE_VERSION','builtin') 957 fclose(fid); 958 HDR.FILE.PERMISSION = [HDR.FILE.PERMISSION ,'z']; 959 HDR = getfiletype(HDR); 960 return; 961 end; 962 elseif all(s(1:3)==[31,157,144]); 963 HDR.TYPE='Z'; 964 elseif all(s([1:4])==[80,75,3,4]) && (c>=30) 965 HDR.TYPE='ZIP'; 966 HDR.VERSION = s(5:6)*[1;256]; 967 HDR.ZIP.FLAG = s(7:8); 968 HDR.ZIP.CompressionMethod = s(9:10); 969 970 % converting MS-Dos Date*Time format 971 tmp = s(11:14)*2.^[0:8:31]'; 972 HDR.T0(6) = rem(tmp,2^5)*2; tmp=floor(tmp/2^5); 973 HDR.T0(5) = rem(tmp,2^6); tmp=floor(tmp/2^6); 974 HDR.T0(4) = rem(tmp,2^5); tmp=floor(tmp/2^5); 975 HDR.T0(3) = rem(tmp,2^5); tmp=floor(tmp/2^5); 976 HDR.T0(2) = rem(tmp,2^4); tmp=floor(tmp/2^4); 977 HDR.T0(1) = 1980+tmp; 978 979 HDR.ZIP.CRC = s(15:18)*2.^[0:8:31]'; 980 HDR.ZIP.size2 = s(19:22)*2.^[0:8:31]'; 981 HDR.ZIP.size1 = s(23:26)*2.^[0:8:31]'; 982 HDR.ZIP.LengthFileName = s(27:28)*[1;256]; 983 HDR.ZIP.filename = char(s(31:min(c,30+HDR.ZIP.LengthFileName))); 984 HDR.ZIP.LengthExtra = s(29:30)*[1;256]; 985 HDR.HeadLen = 30 + HDR.ZIP.LengthFileName + HDR.ZIP.LengthExtra; 986 HDR.ZIP.tmp = char(s); 987 HDR.ZIP.Extra = s(31+HDR.ZIP.LengthFileName:min(c,HDR.HeadLen)); 988 if 1, 989 elseif strncmp(ss(31:end),'mimetypeapplication/vnd.sun.xml.writer',38) 990 HDR.TYPE='SWX'; 991 elseif strncmp(ss(31:end),'mimetypeapplication/vnd.oasis.opendocument.spreadsheet',38) 992 HDR.TYPE='ODS'; 993 end; 994 elseif strncmp(ss,'ZYXEL',5); 995 HDR.TYPE='ZYXEL'; 996 elseif strcmpi([HDR.FILE.Name,' '],ss(1:length(HDR.FILE.Name)+1)) && any(ss(length(HDR.FILE.Name)+2)==' 0123456789'); 997 HDR.TYPE='MIT'; 998 elseif strcmpi(HDR.FILE.Name,ss(1:length(HDR.FILE.Name))) 999 HDR.TYPE='TAR?'; 1000 elseif strncmp(ss,['# ',HDR.FILE.Name],length(HDR.FILE.Name)+2); 1001 HDR.TYPE='SMNI'; 1002 1003 elseif mat4.flag, 1004 %(c>20) && (s(1:4)*256.^[0:3]'<4053) && any(s(13)==[0,1]) && all(s(14:16)==0) && any(s(17:20)>0) && all(mat4.matrixname>='0' && mat4.matrixname<='z') && ~mat4.matrixname(20+mat4.matrixname_len) && all(any(mat4.type(ones(6,1),:)==[0,0:4;zeros(1,6);0:5;0:2,0,0,0]')), 1005 %& (type_mat4(1)==(0:4)) && (type_mat4(2)==0) && (type_mat4(3)==(0:5)) && (type_mat4(4)==(0:2)) 1006 % should be last, otherwise to many false detections 1007 HDR.TYPE = 'MAT4'; 1008 HDR.MAT4 = mat4; 1009 if mat4.type(1)=='0' 1010 HDR.MAT4.opentyp = 'ieee-le'; 1011 elseif mat4.type(1)=='1' 1012 HDR.MAT4.opentyp = 'ieee-be'; 1013 elseif mat4.type(1)=='2' 1014 HDR.MAT4.opentyp = 'vaxd'; 1015 elseif mat4.type(1)=='3' 1016 HDR.MAT4.opentyp = 'vaxg'; 1017 elseif mat4.type(1)=='4' 1018 HDR.MAT4.opentyp = 'cray'; 1019 end; 1020 1021 elseif ~isempty(strfind(ss,'### Table of event codes.')) 1022 fseek(fid,0,-1); 1023 line = fgetl(fid); 1024 N1 = 0; N2 = 0; 1025 while ~feof(fid),%length(line), 1026 if 0, 1027 elseif strncmp(line,'0x',2), 1028 N1 = N1 + 1; 1029 [ix,desc] = strtok(line,char([9,32,13,10])); 1030 ix = hex2dec(ix(3:end)); 1031 HDR.EVENT.CodeDesc{N1,1} = desc(2:end); 1032 HDR.EVENT.CodeIndex(N1,1) = ix; 1033 elseif strncmp(line,'### 0x',6) 1034 N2 = N2 + 1; 1035 HDR.EVENT.GroupDesc{N2,1} = line(12:end); 1036 tmp = line(7:10); 1037 HDR.EVENT.GroupIndex{N2,1} = tmp; 1038 tmp1 = tmp; tmp1(tmp~='_') = 'F'; tmp1(tmp=='_')='0'; 1039 HDR.EVENT.GroupMask(N2,1) = bitand(hex2dec(tmp1),hex2dec('7FFF')); 1040 tmp1 = tmp; tmp1(tmp=='_') = '0'; 1041 HDR.EVENT.GroupValue(N2,1) = hex2dec(tmp1); 1042 end; 1043 line = fgetl(fid); 1044 end; 1045 HDR.TYPE = 'EVENTCODES'; 1046 global BIOSIG_GLOBAL 1047 BIOSIG_GLOBAL.EVENT = HDR.EVENT; 1048 BIOSIG_GLOBAL.ISLOADED_EVENTCODES = 1; 1049 1050 elseif strcmp(HDR.FILE.Ext,'Markers') && strcmp(ss(1:14),'Sampling rate:'), 1051 HDR.EVENT.SampleRate = str2double(ss(15:strfind(ss,'Hz')-1)); 1052 [t,r]=strtok(ss,char([10,13])); 1053 [t,r]=strtok(r,char([10,13])); 1054 [t,r]=strtok(r,char([10,13])); 1055 k = 1; 1056 while sum(t==',')>3, 1057 [n,v,sa] = biosig_str2double(t,', '); 1058 Desc{k,1} = sa{2}; 1059 HDR.EVENT.POS(k,1) = n(3); 1060 HDR.EVENT.DUR(k,1) = n(4); 1061 if isnan(n(5)) 1062 HDR.EVENT.CHN(k,1) = 0; 1063 else 1064 HDR.EVENT.CHN(k,1) = n(5); 1065 end 1066 k = k+1; 1067 [t,r]=strtok(r,char([10,13])); 1068 end; 1069 [HDR.EVENT.CodeDesc,ix,HDR.EVENT.TYP]=unique(Desc); 1070 HDR.TYPE='EVENT'; 1071 1072 elseif ~strcmp(version,'3.5') %% exclude FreeMat v3.5 1073 HDR.TYPE='unknown'; 1074 1075 status = fseek(fid,3228,-1); 1076 [s0,c]=fread(fid,[1,4],'uint8'); 1077 if (status && (c==4)) 1078 if all((s0(1:4)*(2.^[24;16;8;1]))==1229801286); % GE LX2 format image 1079 HDR.TYPE='LX2'; 1080 end; 1081 end; 1082 1083 elseif (c>176) && any(s(176)==[0:4]) 1084 HDR.TYPE='MicroMed TRC'; 1085 1086 else 1087 HDR.TYPE='unknown'; 1088 1089 end; 1090 if strcmp(HDR.TYPE,'unknown') 1091 fseek(fid,0,'bof'); 1092 [s,len] = fread(fid,[1,min(1e5,HDR.FILE.size)],'uint8'); 1093 HDR.FLAG.ASCII = all((s>=32) | (s==9) | (s==10) | (s==13)); 1094 if HDR.FLAG.ASCII, 1095 HDR.s = char(s); 1096 s = HDR.s; 1097 end; 1098 1099 if all((s==32) | ((s>='0') & (s<='9'))) && strcmpi(HDR.FILE.Ext,'DCD') && (len>=3000); 1100 s = s(1:3000); 1101 HDR.HeadLen = 3000; 1102 HDR.TYPE = 'CSE-database'; 1103 end; 1104 end; 1105 1106 end; 1107 fclose(fid); 1108 1109 if strcmpi(HDR.TYPE,'unknown'), 1110 % alpha-TRACE Medical software 1111 if exist(fullfile(HDR.FILE.Path,'alpha.alp'),'file') 1112 %HDR.TYPE = 'alpha'; %alpha trace medical software 1113 HDR = getfiletype(fullfile(HDR.FILE.Path,'alpha.alp')); 1114 if strcmp(HDR.TYPE,'alpha') 1115 return; 1116 end; 1117 end; 1118 1119 %%% this is the file type check based on the file extionsion, only. 1120 if 0, 1121 1122 elseif exist(fullfile(HDR.FILE.Path,[HDR.FILE.Name,'.dm6']),'file') && exist(fullfile(HDR.FILE.Path,[HDR.FILE.Name,'.chn']),'file') && exist(fullfile(HDR.FILE.Path,[HDR.FILE.Name,'.log']),'file'), 1123 % Nakamura dataset from S. Bressler 1124 HDR.TYPE='nakamura'; 1125 1126 1127 elseif strcmpi(HDR.FILE.Ext,'HEA'), 1128 % MIT-ECG / Physiobank format 1129 HDR.TYPE='MIT'; 1130 1131 elseif length(HDR.FILE.Ext) && any(strcmp(HDR.FILE.Ext,{'16a','abp','al','apn','ari','atr','atr-','ecg','pap','ple','qrs','qrsc','sta','stb','stc'})), 1132 % Physiobank annotation files 1133 HDR.TYPE='MIT-ATR'; 1134 1135 elseif strcmpi(HDR.FILE.Ext,'DAT') 1136 if HDR.FLAG.ASCII, 1137 ix = find(HDR.s(1:120)==10); 1138 ix1 = strfind(HDR.s(1:120),'Andrews & Herzberg (1985)'); 1139 1140 if (length(ix1)>0) 1141 HDR.TYPE = 'AndrewsHerzberg1985'; 1142 elseif (length(ix) > 3) 1143 line = HDR.s(1:ix(1)-1); 1144 [n,v,sa] = biosig_str2double(line); 1145 HDR.SampleRate = 1000/n(1); 1146 %HDR.EVENT.POS = n([2,4])/1000*HDR.SampleRate; 1147 %HDR.EVENT.DUR = (n([3,5])-n([2,4]))/1000*HDR.SampleRate; 1148 %HDR.EVENT.TYP = [hex2dec('502');hex2dec('503');hex2dec('506')]; 1149 line = HDR.s(ix(1)+1:ix(2)-1); 1150 [n,v,sa] = biosig_str2double(line); 1151 HDR.Patient.Sex = strncmpi(sa{3},'M',1) + strncmpi(sa{3},'F',1)*2; 1152 HDR.Patient.Age = n(4); 1153 line = HDR.s(ix(2)+1:ix(3)-1); 1154 [n,v,sa] = biosig_str2double(line); 1155 line = HDR.s(ix(3)+1:ix(4)-1); 1156 1157 HDR.HeadLen = ix(4); 1158 fid = fopen(HDR.FileName,'r'); 1159 [HDR.data,len] = fread(fid,[1,1e7],'uint8'); 1160 fclose(fid); 1161 HDR.TYPE = 'CinC2007Challenge'; 1162 return; 1163 end 1164 end 1165 1166 tmp = dir(fullfile(HDR.FILE.Path,[HDR.FILE.Name,'.hea'])); 1167 if isempty(tmp), 1168 tmp = dir(fullfile(HDR.FILE.Path,[HDR.FILE.Name,'.HEA'])); 1169 end 1170 if ~isempty(tmp), 1171 HDR.TYPE='MIT'; 1172 [tmp,tmp1,tmp2] = fileparts(tmp.name); 1173 HDR.FILE.Ext = tmp2(2:end); 1174 end 1175 if isempty(tmp), 1176 tmp = dir(fullfile(HDR.FILE.Path,[HDR.FILE.Name,'.set'])); % EEGLAB file 1177 end 1178 if isempty(tmp), 1179 tmp = dir(fullfile(HDR.FILE.Path,[HDR.FILE.Name,'.vhdr'])); 1180 end 1181 if isempty(tmp), 1182 tmp = dir(fullfile(HDR.FILE.Path,[HDR.FILE.Name,'.VHDR'])); 1183 end 1184 if ~isempty(tmp), 1185 HDR = getfiletype(fullfile(HDR.FILE.Path,tmp.name)); 1186 end 1187 1188 elseif strcmpi(HDR.FILE.Ext,'flt') && exist([HDR.FileName,'.hdr'],'file'); 1189 HDR.TYPE = 'ET-MEG'; % ET-MEG format 1190 HDR.FileName = [HDR.FileName,'.hdr']; 1191 elseif strcmpi(HDR.FILE.Ext,'bin') && exist([HDR.FileName,'.hdr'],'file'); 1192 HDR.TYPE = 'ET-MEG'; % ET-MEG format 1193 HDR.FileName = [HDR.FileName,'.hdr']; 1194 elseif strcmpi(HDR.FILE.Ext,'int') && exist([HDR.FileName,'.hdr'],'file'); 1195 HDR.TYPE = 'ET-MEG'; % ET-MEG format 1196 HDR.FileName = [HDR.FileName,'.hdr']; 1197 elseif strcmpi(HDR.FILE.Ext,'hdr') && exist(fullfile(HDR.FILE.Path,HDR.FILE.Name),'file'); 1198 HDR.TYPE = 'ET-MEG'; % ET-MEG format 1199 %HDR.FileName = fullfile(HDR.FILE.Path,HDR.FILE.Name); 1200 1201 elseif strcmpi(HDR.FILE.Ext,'rhf'), 1202 HDR.FileName=fullfile(HDR.FILE.Path,[HDR.FILE.Name,'.',HDR.FILE.Ext]); 1203 HDR.TYPE = 'RG64'; 1204 elseif strcmp(HDR.FILE.Ext,'rdf'), 1205 HDR.FileName=fullfile(HDR.FILE.Path,[HDR.FILE.Name,'.',HDR.FILE.Ext(1),'h',HDR.FILE.Ext(3)]); 1206 HDR.TYPE = 'RG64'; 1207 elseif strcmp(HDR.FILE.Ext,'RDF'), 1208 HDR.FileName=fullfile(HDR.FILE.Path,[HDR.FILE.Name,'.',HDR.FILE.Ext(1),'H',HDR.FILE.Ext(3)]); 1209 HDR.TYPE = 'RG64'; 1210 1211 elseif strcmpi([HDR.FILE.Name,'.',HDR.FILE.Ext],'alldata.bin') 1212 if exist(fullfile(HDR.FILE.Path,'alldata.bin'),'file') 1213 if exist(fullfile(HDR.FILE.Path,'lefttrain.events'),'file') 1214 if exist(fullfile(HDR.FILE.Path,'righttrain.events'),'file') 1215 if exist(fullfile(HDR.FILE.Path,'test.events'),'file') 1216 HDR.TYPE = 'BCI2002b'; 1217 end;end;end;end; 1218 1219 elseif strcmpi(HDR.FILE.Ext,'txt') && (any(strfind(HDR.FILE.Path,'a34lkt')) || any(strfind(HDR.FILE.Path,'egl2ln'))) && any(strncmp(HDR.FILE.Name,{'Traindata_0','Traindata_1','Testdata'})) 1220 HDR.TYPE = 'BCI2003_Ia+b'; 1221 1222 elseif any(strcmp(HDR.FILE.Name,{'x_train','x_test'})) 1223 HDR.TYPE = 'BCI2003_III'; 1224 1225 elseif strcmpi(HDR.FILE.Ext,'hdm') 1226 1227 elseif strcmpi(HDR.FILE.Ext,'hc') 1228 1229 elseif strcmpi(HDR.FILE.Ext,'shape') 1230 1231 elseif strcmpi(HDR.FILE.Ext,'shape_info') 1232 1233 elseif strcmpi(HDR.FILE.Ext,'trg') && HDR.FLAG.ASCII 1234 HDR.TYPE = 'EEProbe-TRG'; 1235 1236 elseif strcmpi(HDR.FILE.Ext,'ainf') && HDR.FLAG.ASCII && exist(fullfile(HDR.FILE.Path,[HDR.FILE.Name,'.raw']),'file') 1237 HDR.TYPE = 'AINF'; 1238 1239 elseif strcmpi(HDR.FILE.Ext,'rej') 1240 1241 elseif strcmpi(HDR.FILE.Ext,'vol') 1242 1243 elseif strcmpi(HDR.FILE.Ext,'bnd') 1244 1245 elseif strcmpi(HDR.FILE.Ext,'msm') 1246 1247 elseif strcmpi(HDR.FILE.Ext,'msr') 1248 HDR.TYPE = 'ASA2'; % ASA version 2.x, see http://www.ant-software.nl 1249 1250 elseif strcmpi(HDR.FILE.Ext,'dip') 1251 1252 elseif strcmpi(HDR.FILE.Ext,'mri') 1253 1254 elseif strcmpi(HDR.FILE.Ext,'iso') 1255 1256 elseif strcmpi(HDR.FILE.Ext,'hdr') 1257 1258 elseif strcmpi(HDR.FILE.Ext,'img') 1259 1260 elseif strcmpi(HDR.FILE.Ext,'ddt') 1261% HDR.TYPE = 'DDT'; 1262 elseif strcmpi(HDR.FILE.Ext,'sx') 1263 HDR.TYPE = 'SXI'; 1264 elseif strcmpi(HDR.FILE.Ext,'sxi') 1265 HDR.TYPE = 'SXI'; 1266 elseif strcmpi(HDR.FILE.Ext,'nxa') 1267 HDR.TYPE = 'NXA'; 1268 elseif strcmpi(HDR.FILE.Ext,'nxe') 1269 HDR.TYPE = 'NXA'; 1270 1271 elseif strcmpi(HDR.FILE.Ext,'ent') 1272 HDR.TYPE = 'XLTEK-EVENT'; 1273 elseif strcmpi(HDR.FILE.Ext,'erd') 1274 HDR.TYPE = 'XLTEK'; 1275 1276 elseif strcmpi(HDR.FILE.Ext,'etc') 1277 HDR.TYPE = 'XLTEK-ETC'; 1278 fid = fopen(HDR.FileName,'r'); 1279 fseek(fid,355,'bof'); 1280 HDR.TIMESTAMP = fread(fid,1,'int32'); 1281 fclose(fid); 1282 1283 % the following are Brainvision format, see http://www.brainproducts.de 1284 elseif strcmpi(HDR.FILE.Ext,'seg') || strcmpi(HDR.FILE.Ext,'vmrk') 1285 % If this is really a BrainVision file, there should also be a 1286 % header with the same name and extension *.vhdr. 1287 tmp = fullfile(HDR.FILE.Path, [HDR.FILE.Name '.vhdr']); 1288 if exist(tmp, 'file') 1289 tmp = fullfile(HDR.FILE.Path, [HDR.FILE.Name '.VHDR']); 1290 end; 1291 if exist(tmp, 'file') 1292 HDR = getfiletype(tmp); 1293 end 1294 1295 elseif strcmpi(HDR.FILE.Ext,'vabs') 1296 1297 elseif strcmpi(HDR.FILE.Ext,'bni') %%% Nicolet files 1298 tmp = fullfile(HDR.FILE.Path,[HDR.FILE.Name,'.eeg']); % nicolet 1299 if exist(tmp,'file'), % Nicolet 1300 HDR = getfiletype(tmp); 1301 end 1302 1303 elseif strcmpi(HDR.FILE.Ext,'eeg') 1304 tmp = fullfile(HDR.FILE.Path,[HDR.FILE.Name,'.vhdr']); % brainvision header file 1305 if ~exist(tmp,'file'), % brain vision 1306 tmp = fullfile(HDR.FILE.Path, [HDR.FILE.Name '.bni']); % nicolet 1307 end 1308 if exist(tmp,'file') 1309 HDR = getfiletype(tmp); 1310 end; 1311 1312 elseif strcmpi(HDR.FILE.Ext,'fif') 1313 HDR.TYPE = 'FIF'; % Neuromag MEG data (company is now part of 4D Neuroimaging) 1314 1315 elseif strcmpi(HDR.FILE.Ext,'bdip') 1316 1317 elseif strcmpi(HDR.FILE.Ext,'json') && exist('loadjson','file'); 1318 X = loadjson(HDR.FileName); 1319 if isfield(X,'dtype') && isfield(X,'shape') && isnumeric(X.shape) && (numel(X.shape)==2) 1320 % https://www.janelia.org/lab/svoboda-lab/data 1321 HDR.TYPE = 'SvobodaLab'; 1322 HDR.NS = X.shape(1); 1323 HDR.SPR = X.shape(2); 1324 HDR.Svoboda = X; 1325 end 1326 1327 elseif strcmpi(HDR.FILE.Ext,'json') && ~exist('loadjson','file') 1328 fprintf(2,'Cannot load JSON file because function "loadjson(...)" is not available'); 1329 1330 elseif strcmpi(HDR.FILE.Ext,'ela') 1331 1332 elseif strcmpi(HDR.FILE.Ext,'trl') 1333 1334 elseif (length(HDR.FILE.Ext)>2) && all(s>31), 1335 if all(HDR.FILE.Ext(1:2)=='0') && any(abs(HDR.FILE.Ext(3))==abs([48:57])), % WSCORE scoring file 1336 x = load('-ascii',HDR.FileName); 1337 HDR.EVENT.POS = x(:,1); 1338 HDR.EVENT.WSCORETYP = x(:,2); 1339 HDR.TYPE = 'WCORE_EVENT'; 1340 end; 1341 1342 elseif strcmpi(HDR.FILE.Ext,'hgt') && (rem(sqrt(HDR.FILE.size/2),1)==0) 1343 HDR.TYPE = 'IMAGE:HGT'; 1344 1345 end; 1346 end; 1347 1348 if 0, strcmpi(HDR.TYPE,'unknown'), 1349 try 1350 [status, HDR.XLS.sheetNames] = xlsfinfo(HDR.FileName) 1351 if ~isempty(status) 1352 HDR.TYPE = 'EXCEL'; 1353 end; 1354 catch 1355 end; 1356 end; 1357end; 1358