PageRenderTime 33ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/ISCanalysis/memMapData.m

http://isc-toolbox.googlecode.com/
MATLAB | 901 lines | 712 code | 67 blank | 122 comment | 135 complexity | d147b5b82ab2900028e20447b82f7bd7 MD5 | raw file
Possible License(s): BSD-2-Clause
  1. function Params = memMapData(Params)
  2. % This function maps data into disk as blocks and
  3. % creates the corresponding memory pointer objects.
  4. %
  5. % inputs:
  6. % Params - analysis parameters from initParams.m
  7. %
  8. % See also: RUNANALYSIS, INITPARAMS, MEMMAPFILE
  9. % Last updated: 9.11.2010 by Jukka-Pekka Kauppi
  10. % Tampere University of Technology
  11. % Department of Signal Processing
  12. % e-mail: jukka-pekka.kauppi@tut.fi
  13. showTime(1);
  14. Pub = Params.PublicParams;
  15. Priv = Params.PrivateParams;
  16. % check/create paths:
  17. if exist(Pub.dataDestination) ~= 7
  18. mkdir(Pub.dataDestination)
  19. end
  20. if exist(Priv.subjectDestination) ~= 7
  21. mkdir(Priv.subjectDestination)
  22. end
  23. if exist(Priv.subjectFiltDestination) ~= 7
  24. mkdir(Priv.subjectFiltDestination)
  25. end
  26. if exist(Priv.resultsDestination) ~= 7
  27. mkdir(Priv.resultsDestination)
  28. end
  29. if exist(Priv.statsDestination) ~= 7
  30. mkdir(Priv.statsDestination)
  31. end
  32. if exist(Priv.PFDestination) ~= 7
  33. mkdir(Priv.PFDestination)
  34. end
  35. if exist(Priv.withinDestination) ~= 7
  36. mkdir(Priv.withinDestination)
  37. end
  38. if exist(Priv.phaseDifDestination) ~= 7
  39. mkdir(Priv.phaseDifDestination)
  40. end
  41. try
  42. % load pointers:
  43. % ParamsNew = Params;
  44. load([Pub.dataDestination 'memMaps'])
  45. load([Pub.dataDestination 'Tag'])
  46. load([Pub.dataDestination Tag])
  47. disp(['The project with name "' Pub.dataDescription '" already exists in the given directory.'])
  48. % ParamsNew = checkUpdates(Params,ParamsNew); % check parameter changes
  49. % Pub = ParamsNew.PublicParams;
  50. % Priv = ParamsNew.PrivateParams;
  51. % if Priv.filterUpdate
  52. % disp('No parameter changes specified -> skip memomy mapping')
  53. % return
  54. % end
  55. disp(['Updating existing project ' Pub.dataDescription '...'])
  56. catch
  57. % disp(lasterr)
  58. % if pointers do not exist, initialize pointer-struct:
  59. memMaps.(Priv.origMapName) = [];
  60. memMaps.(Priv.synchMapName) = [];
  61. memMaps.(Priv.phaseSynchMapName) = [];
  62. memMaps.(Priv.filtMapName) = [];
  63. memMaps.(Priv.withinMapName) = [];
  64. memMaps.(Priv.cormatMapName) = [];
  65. memMaps.(Priv.statMapName) = [];
  66. memMaps.(Priv.phaseMapName) = [];
  67. memMaps.(Priv.PFMapName) = [];
  68. memMaps.(Priv.PFmatMapName) = [];
  69. save([Pub.dataDestination 'memMaps'],'memMaps')
  70. disp(['Establishing a new project with name "' Pub.dataDescription '"...'])
  71. end
  72. if Pub.calcStandard
  73. % standard analysis
  74. if Priv.filterUpdate
  75. % map preprocessed data:
  76. mapData('subject',Pub,Priv);
  77. % map subband data:
  78. if Pub.nrFreqBands > 0
  79. mapData('subjectFilt',Pub,Priv);
  80. % map frequency comparison data:
  81. mapData('PF',Pub,Priv);
  82. mapData('PFmats',Pub,Priv);
  83. end
  84. end
  85. % map result-data:
  86. mapData('maps',Pub,Priv);
  87. % map time-varying curves:
  88. if Pub.useTemplate
  89. mapData('syncCurves',Pub,Priv);
  90. end
  91. end
  92. if Pub.calcCorMatrices
  93. % map correlation matrices:
  94. mapData('cormats',Pub,Priv);
  95. end
  96. if Pub.calcStats
  97. % median, quartile, t and variance ISC maps
  98. mapData('stats',Pub,Priv);
  99. end
  100. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  101. %% recent stuff:
  102. % map within-subject-data:
  103. %if Pub.useTemplate
  104. % mapData('within',Pub,Priv);
  105. %end
  106. % inter-subject phase synchronization data:
  107. if Pub.calcPhase
  108. mapData('phase',Pub,Priv);
  109. if Pub.useTemplate
  110. mapData('phaseSyncCurves',Pub,Priv);
  111. end
  112. end
  113. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  114. Params.PublicParams = Pub;
  115. Params.PrivateParams = Priv;
  116. % Return information about computer on which MATLAB is running:
  117. [str,maxsize,endian] = computer;
  118. Params.PrivateParams.computerInfo.endian = endian;
  119. Params.PrivateParams.computerInfo.platform = 'str';
  120. Params.PrivateParams.computerInfo.maxsize = maxsize;
  121. % Params.PrivateParams.filterUpdate
  122. save([Pub.dataDestination Pub.dataDescription],'Params')
  123. showTime(0);
  124. function mapData(typeOfData,Pub,Priv)
  125. % This function memory maps the necessary data.
  126. %
  127. % Inputs:
  128. % typeOfData - either 'subject','subjectfilt', 'maps' or
  129. % 'synch' depending which data is mapped. 'subject' refers to
  130. % original preprocessed data, 'subjectfilt' to wavelet filtered
  131. % data, 'maps' to similarity maps, and 'synch' to synchronization
  132. % curves.
  133. %
  134. % Pub and Priv - parameter structures obtained through
  135. % initParams.m.
  136. switch typeOfData
  137. case 'subject'
  138. disp('Mapping pre-processed data:')
  139. for m = 1:Priv.nrSessions
  140. for k = 1:Priv.nrSubjects
  141. disp(['Session ' num2str(m) ', Subject ' num2str(k) ':'])
  142. fullPath = [Priv.subjectDestination ...
  143. Priv.prefixSubject num2str(k) ...
  144. Priv.prefixSession num2str(m) ...
  145. '.bin'];
  146. if exist(fullPath) == 2
  147. disp('Data already exist, quit memory mapping...');return
  148. end
  149. flag = 1;
  150. while flag ~= 0
  151. try
  152. if flag == 20
  153. error
  154. return
  155. end
  156. if strcmp(Pub.fileFormatSubj,'nii')
  157. I = load_nii(Pub.subjectSource{m,k});
  158. I = single(I.img);
  159. elseif strcmp(Pub.fileFormatSubj,'mat')
  160. I = load(Pub.subjectSource{m,k});
  161. fiel = fields(I);
  162. I = I.(fiel{1});
  163. I = single(I);
  164. else
  165. error
  166. end
  167. if ~exist([fullPath])
  168. I = permute(I,[4 2 3 1]);
  169. fid = fopen(fullPath, 'w');
  170. % write data to a binary file:
  171. fwrite(fid, I, 'single');clear I;
  172. fclose(fid);clear fid;
  173. end
  174. % perform dynamic memory mapping:
  175. memMap.([Priv.prefixSession num2str(m)]).([...
  176. Priv.prefixSubject num2str(k)]) = memmapfile(...
  177. fullPath,'format',{'single',...
  178. [Priv.dataSize(m,4) Priv.dataSize(m,2:3)],...
  179. 'tyz'});
  180. % range check of the values:
  181. M = max(memMap.([Priv.prefixSession ...
  182. num2str(m)]).([Priv.prefixSubject ...
  183. num2str(k)]).Data(round(Priv.dataSize(1)/2)).tyz(:,...
  184. round(Priv.dataSize(2)/2),round(Priv.dataSize(3)/2)));
  185. disp(['Max value (x=' num2str(round(Priv.dataSize(1)/2)) ',y='...
  186. num2str(round(Priv.dataSize(2)/2)) ',z=' num2str(round(Priv.dataSize(3)/2)) '): ' num2str(M)])
  187. if M > 10e20
  188. error('Unexpected value found! Possible cause: processing distributed over different (32bit/64bit) memory architectures.')
  189. error
  190. end
  191. flag = 0;
  192. catch
  193. if flag == 20
  194. error('Problems with writing data, memory mapping quitted!!')
  195. return
  196. end
  197. disp(lasterr)
  198. flag = flag + 1;
  199. end
  200. end
  201. end
  202. end
  203. load([Pub.dataDestination 'memMaps'])
  204. memMaps = setfield(memMaps,Priv.origMapName,memMap);
  205. save([Pub.dataDestination 'memMaps'],'memMaps')
  206. disp(' ')
  207. case 'subjectFilt'
  208. disp('Mapping sub-band data:')
  209. for s = 1:Priv.nrSessions
  210. flg = 1;
  211. for k = 1:Priv.nrSubjects
  212. for m = 1:Priv.maxScale + 1
  213. fullPath = [Priv.subjectFiltDestination ...
  214. Priv.prefixSubjectFilt ...
  215. num2str(k) '_' Priv.prefixFreqBand ...
  216. num2str(m) '_' Priv.prefixSession ...
  217. num2str(s) '_' Priv.transformType ...
  218. '.bin'];
  219. if exist(fullPath) == 2
  220. disp('Data already exist, quit memory mapping...');return
  221. end
  222. if flg == 1
  223. I = single( zeros(Priv.dataSize(s,:)) );
  224. I = permute(I,[4 2 3 1]);
  225. flg = 0;
  226. end
  227. flag = 1;
  228. while flag ~= 0
  229. try
  230. if flag == 20
  231. error
  232. return
  233. end
  234. if exist(fullPath) == 0
  235. fid = fopen(fullPath, 'w');
  236. % write data to a binary file:
  237. fwrite(fid, I, 'single');
  238. fclose(fid);clear fid;
  239. end
  240. % perform dynamic memory mapping:
  241. memMap.([Priv.prefixSession ...
  242. num2str(s)]).([Priv.prefixSubjectFilt ...
  243. num2str(k)]).([Priv.prefixFreqBand ...
  244. num2str(m)]) = memmapfile(fullPath, ...
  245. 'format',{'single',[Priv.dataSize(...
  246. s,4) Priv.dataSize(s,2:3)]...
  247. ,'tyz'},'Writable',logical(1));
  248. disp(['Session ' num2str(s) ', Subject '...
  249. num2str(k) ', Frequency band ' num2str(m)])
  250. flag = 0;
  251. catch
  252. if flag == 20
  253. error('Problems when mapping data, memory mapping quitted!!')
  254. return
  255. end
  256. disp(lasterr)
  257. flag = flag + 1;
  258. end
  259. end
  260. end
  261. end
  262. end
  263. clear I;
  264. load([Pub.dataDestination 'memMaps'])
  265. memMaps = setfield(memMaps,Priv.filtMapName,memMap);
  266. save([Pub.dataDestination 'memMaps'],'memMaps')
  267. disp(' ')
  268. case 'maps'
  269. I = single( zeros(Priv.dataSize(1,1:3)) );
  270. disp('Mapping inter-subject synchronization maps:')
  271. for k = 1:length(Priv.simM)
  272. if ( ( Pub.ssiOn && strcmp(Priv.simM{k},'ssi') ) || ...
  273. ( Pub.nmiOn && strcmp(Priv.simM{k},'nmi') ) || ...
  274. ( Pub.corOn && strcmp(Priv.simM{k},'cor') ) || ...
  275. ( Pub.kenOn && strcmp(Priv.simM{k},'ken') ) )
  276. for s = 1:Priv.nrSessions
  277. Iw = single( zeros([Priv.dataSize(s,1:3)...
  278. Priv.nrTimeIntervals(s)]) );
  279. for m = 0:Priv.maxScale + 1
  280. disp(['Mapping sim.measure ' num2str(k) ...
  281. ', session ' num2str(s) ', band ' num2str(m)])
  282. fullPath = [Priv.resultsDestination ...
  283. Priv.prefixResults '_' ...
  284. Priv.simM{k} '_' Priv.prefixFreqBand ...
  285. num2str(m) '_' Priv.prefixSession ...
  286. num2str(s) '_' Priv.transformType];
  287. if Pub.winOn
  288. fullPath_win = [fullPath '_win' '.bin'];
  289. if exist(fullPath_win) == 2
  290. disp('Data already exist, quit memory mapping...');return
  291. end
  292. end
  293. fullPath = [fullPath '.bin'];
  294. if exist(fullPath) == 2
  295. disp('Data already exist, quit memory mapping...');return
  296. end
  297. flag = 1;
  298. while flag ~= 0
  299. try
  300. if flag == 20
  301. error
  302. return
  303. end
  304. % map whole session data:
  305. if ~exist([fullPath])
  306. fid = fopen(fullPath, 'w');
  307. fwrite(fid, I, 'single');
  308. fclose(fid);clear fid;
  309. end
  310. memMap.('whole').([Priv.prefixFreqBand ...
  311. num2str(m)]).([Priv.prefixSession ...
  312. num2str(s)]).(Priv.simM{k}) = ...
  313. memmapfile(fullPath,'format',...
  314. {'single',[Priv.dataSize(s,1:3)]...
  315. ,'xyz'},'Writable',logical(1));
  316. if Pub.winOn
  317. % map windowed data:
  318. if ~exist([fullPath_win])
  319. fid = fopen(fullPath_win, 'w');
  320. fwrite(fid, Iw, 'single');
  321. fclose(fid);clear fid;
  322. end
  323. if Priv.nrTimeIntervals(s) == 0
  324. memMap.('win') = [];
  325. else
  326. memMap.('win').([Priv.prefixFreqBand ...
  327. num2str(m)]).([Priv.prefixSession ...
  328. num2str(s)]).(Priv.simM{k}) = ...
  329. memmapfile(fullPath_win,'format',...
  330. {'single',[Priv.dataSize(s,1:3)]...
  331. ,'xyz'},'Writable',logical(1));
  332. end
  333. end
  334. flag = 0;
  335. catch
  336. if flag == 20
  337. error('Problems with writing data, memory mapping quitted!!')
  338. return
  339. end
  340. disp(lasterr)
  341. flag = flag + 1;
  342. end
  343. end
  344. end
  345. end
  346. end
  347. end
  348. clear I;clear Iw;
  349. load([Pub.dataDestination 'memMaps'])
  350. memMaps = setfield(memMaps,Priv.resultMapName,memMap);
  351. save([Pub.dataDestination 'memMaps'],'memMaps')
  352. disp(' ')
  353. case 'within'
  354. I = single( zeros([Priv.dataSize(1,1:3) Priv.nrSubjects length(Priv.brainRegions)-1 ]) );
  355. disp('Mapping within-subject maps:')
  356. for s = 1:Priv.nrSessions
  357. % Iw = single( zeros([Priv.dataSize(s,1:3)...
  358. % Priv.nrTimeIntervals(s)]) );
  359. for m = 0:Priv.maxScale + 1
  360. disp(['Mapping session ' num2str(s) ', band ' num2str(m)])
  361. fullPath = [Priv.withinDestination ...
  362. Priv.prefixWithin '_' ...
  363. Priv.simM{3} '_' Priv.prefixFreqBand ...
  364. num2str(m) '_' Priv.prefixSession ...
  365. num2str(s) '_' Priv.transformType];
  366. % fullPath_win = [fullPath '_win' '.bin'];
  367. fullPath = [fullPath '.bin'];
  368. if exist(fullPath) == 2
  369. disp('Data already exist, quit memory mapping...');return
  370. end
  371. flag = 1;
  372. while flag ~= 0
  373. try
  374. if flag == 20
  375. error
  376. return
  377. end
  378. % map whole session data:
  379. if ~exist([fullPath])
  380. fid = fopen(fullPath, 'w');
  381. fwrite(fid, I, 'single');
  382. fclose(fid);clear fid;
  383. end
  384. memMap.('whole').([Priv.prefixFreqBand ...
  385. num2str(m)]).([Priv.prefixSession ...
  386. num2str(s)]).(Priv.simM{3}) = ...
  387. memmapfile(fullPath,'format',...
  388. {'single',[Priv.dataSize(s,1:3) Priv.nrSubjects]...
  389. ,'xyzs'},'Writable',logical(1));
  390. % map windowed data:
  391. % if ~exist([fullPath_win])
  392. % fid = fopen(fullPath_win, 'w');
  393. % fwrite(fid, Iw, 'single');
  394. % fclose(fid);clear fid;
  395. % end
  396. % memMap.('win').([Priv.prefixFreqBand ...
  397. % num2str(m)]).([Priv.prefixSession ...
  398. % num2str(s)]).(Priv.simM{3}) = ...
  399. % memmapfile(fullPath_win,'format',...
  400. % {'single',[Priv.dataSize(s,1:3) Priv.nrSubjects]...
  401. % ,'xyzs'},'Writable',logical(1));
  402. flag = 0;
  403. catch
  404. if flag == 20
  405. error('Problems with writing data, memory mapping quitted!!')
  406. return
  407. end
  408. disp(lasterr)
  409. flag = flag + 1;
  410. end
  411. end
  412. end
  413. end
  414. clear I;
  415. load([Pub.dataDestination 'memMaps'])
  416. memMaps = setfield(memMaps,Priv.withinMapName,memMap);
  417. save([Pub.dataDestination 'memMaps'],'memMaps')
  418. disp(' ')
  419. case 'syncCurves'
  420. disp('Mapping synch. curves')
  421. for s = 1:Priv.nrSessions
  422. if Priv.nrTimeIntervals == 0
  423. memMap.([Priv.prefixSession num2str(s)]) = [];
  424. else
  425. I = zeros([Priv.nrTimeIntervals(s),length(Priv.th)+2+2*(Priv.maxScale+2),...
  426. length(Priv.simM),length(Priv.brainAtlases)/2,length(Priv.brainRegions)]);
  427. %size(I)
  428. for m = 0:Priv.maxScale + 1
  429. disp(['Mapping session ' num2str(s) ', band ' num2str(m)])
  430. % map into memory:
  431. fullPath = [Priv.resultsDestination Priv.prefixSyncResults Priv.prefixSession ...
  432. num2str(s) Priv.prefixFreqBand num2str(m) '.bin'];
  433. if exist(fullPath) == 2
  434. disp('Data already exist, quit memory mapping...');return
  435. end
  436. fid = fopen(fullPath, 'w');
  437. % write data to a binary file:
  438. fwrite(fid, I, 'single');
  439. fclose(fid);clear fid;
  440. DimsT = size(I)
  441. % perform dynamic memory mapping:
  442. memMap.([Priv.prefixSession num2str(s)]).([Priv.prefixFreqBand num2str(m)])= ...
  443. memmapfile(fullPath,'format',{'single',DimsT(1:end-1) ,'tcsa'},'Writable',logical(1));
  444. end
  445. end
  446. end
  447. clear I
  448. load([Pub.dataDestination 'memMaps'])
  449. memMaps = setfield(memMaps,Priv.synchMapName,memMap);
  450. save([Pub.dataDestination 'memMaps'],'memMaps')
  451. disp(' ')
  452. case 'phaseSyncCurves'
  453. disp('Mapping phase synch. curves')
  454. for s = 1:Priv.nrSessions
  455. I = zeros([Pub.dataSize(4),2+2*(Priv.maxScale+2),length(Priv.brainAtlases)/2,length(Priv.brainRegions)]);
  456. for m = 0:Priv.maxScale + 1
  457. disp(['Mapping session ' num2str(s) ', band ' num2str(m)])
  458. % map into memory:
  459. fullPath = [Priv.phaseDifDestination Priv.prefixPhaseSyncResults Priv.prefixSession ...
  460. num2str(s) Priv.prefixFreqBand num2str(m) '.bin'];
  461. if exist(fullPath) == 2
  462. disp('Data already exist, quit memory mapping...');return
  463. end
  464. fid = fopen(fullPath, 'w');
  465. % write data to a binary file:
  466. fwrite(fid, I, 'single');
  467. fclose(fid);clear fid;
  468. DimsT = size(I)
  469. % perform dynamic memory mapping:
  470. memMap.([Priv.prefixSession num2str(s)]).([Priv.prefixFreqBand num2str(m)])= ...
  471. memmapfile(fullPath,'format',{'single',DimsT(1:end-1) ,'tca'},'Writable',logical(1));
  472. end
  473. end
  474. clear I
  475. load([Pub.dataDestination 'memMaps'])
  476. memMaps = setfield(memMaps,Priv.phaseSynchMapName,memMap);
  477. save([Pub.dataDestination 'memMaps'],'memMaps')
  478. disp(' ')
  479. case 'PF'
  480. nrFreqComps = ((Priv.maxScale+2)^2-(Priv.maxScale+2))/2;
  481. disp('Mapping sum ZPF results:')
  482. I = single( zeros([Priv.dataSize(1,1:3),7]) );
  483. for k = 1:length(Priv.simM)
  484. if (Pub.corOn && strcmp(Priv.simM{k},'cor'))
  485. for s = 1:Priv.nrSessions
  486. % Iw = single( zeros([Priv.dataSize(1,1:3),8,Priv.nrTimeIntervals(s)]) );
  487. for m = 1:nrFreqComps
  488. fullPath = [Priv.PFDestination Priv.prefixPF '_' ...
  489. Priv.simM{k} '_' Priv.prefixSession num2str(s) '_' ...
  490. Priv.transformType Priv.prefixFreqComp num2str(m)];
  491. if exist([fullPath '.bin']) == 2
  492. disp('Data already exist, quit memory mapping...');return
  493. end
  494. flag = 1;
  495. while flag ~= 0
  496. try
  497. if flag == 20
  498. error
  499. return
  500. end
  501. if ~exist([fullPath '.bin'])
  502. % map whole session data:
  503. fid = fopen([fullPath '.bin'], 'w');
  504. fwrite(fid, I, 'single');
  505. fclose(fid);clear fid;
  506. end
  507. memMap.('whole').([Priv.prefixSession ...
  508. num2str(s)]).(Priv.simM{k}).([Priv.prefixFreqComp num2str(m)]) = ...
  509. memmapfile([fullPath '.bin'],'format',...
  510. {'single',[Priv.dataSize(s,1:3),7],'xyzc'},'Writable',logical(1));
  511. disp(['Session: ' num2str(s) ', freq.band comp: ' num2str(m)])
  512. % map windowed data:
  513. % disp(['Mapping Pearson-Filon matrices ' ...
  514. % ' session: ' num2str(s) ', freq.band comp: ' num2str(m)])
  515. % fullPath_win = [fullPath '_win'];
  516. % if ~exist([fullPath_win '.bin'])
  517. % fid = fopen([fullPath_win '.bin'], 'w');
  518. % fwrite(fid, Iw, 'single');
  519. % fclose(fid);clear fid;
  520. % end
  521. % memMap.('win').([Priv.prefixSession ...
  522. % num2str(s)]).(Priv.simM{k}).([Priv.prefixFreqComp ...
  523. % num2str(m)]) = ...
  524. % memmapfile([fullPath_win '.bin'],'format',...
  525. % {'single',[Priv.dataSize(s,1:3),8]...
  526. % ,'xyzc'},'Writable',logical(1));
  527. flag = 0;
  528. catch
  529. if flag == 20
  530. error('Problems with writing data, memory mapping quitted!!')
  531. return
  532. end
  533. disp(lasterr)
  534. flag = flag + 1;
  535. end
  536. end
  537. end
  538. end
  539. end
  540. end
  541. clear I;
  542. load([Pub.dataDestination 'memMaps'])
  543. memMaps = setfield(memMaps,Priv.PFMapName,memMap);
  544. save([Pub.dataDestination 'memMaps'],'memMaps')
  545. disp(' ')
  546. case 'PFmats'
  547. nrFreqComps = ((Priv.maxScale+2)^2-(Priv.maxScale+2))/2;
  548. disp('Mapping sum ZPF matrices:')
  549. I = single( zeros([Priv.dataSize(1,1:3),(Priv.nrSubjects^2-Priv.nrSubjects)/2]) );
  550. for k = 1:length(Priv.simM)
  551. if (Pub.corOn && strcmp(Priv.simM{k},'cor'))
  552. for s = 1:Priv.nrSessions
  553. % Iw = single( zeros([Priv.dataSize(1,1:3),2,Priv.nrTimeIntervals(s)]) );
  554. for m = 1:nrFreqComps
  555. fullPath = [Priv.PFDestination Priv.prefixPFMat '_' ...
  556. Priv.simM{k} '_' Priv.prefixSession num2str(s) '_' ...
  557. Priv.transformType Priv.prefixFreqComp num2str(m)];
  558. if exist([fullPath '.bin']) == 2
  559. disp('Data already exist, quit memory mapping...');return
  560. end
  561. flag = 1;
  562. while flag ~= 0
  563. try
  564. if flag == 20
  565. error
  566. return
  567. end
  568. if ~exist([fullPath '.bin'])
  569. % map whole session data:
  570. fid = fopen([fullPath '.bin'], 'w');
  571. fwrite(fid, I, 'single');
  572. fclose(fid);clear fid;
  573. end
  574. memMap.('whole').([Priv.prefixSession ...
  575. num2str(s)]).(Priv.simM{k}).([Priv.prefixFreqComp num2str(m)]) = ...
  576. memmapfile([fullPath '.bin'],'format',...
  577. {'single',[Priv.dataSize(s,1:3),(Priv.nrSubjects^2-Priv.nrSubjects)/2]...
  578. ,'xyzc'},'Writable',logical(1));
  579. disp(['Session: ' num2str(s) ', freq.band comp: ' num2str(m)])
  580. % map windowed data:
  581. % disp(['Mapping Pearson-Filon matrices ' ...
  582. % ' session: ' num2str(s) ', freq.band comp: ' num2str(m)])
  583. % fullPath_win = [fullPath '_win'];
  584. % if ~exist([fullPath_win '.bin'])
  585. % fid = fopen([fullPath_win '.bin'], 'w');
  586. % fwrite(fid, Iw, 'single');
  587. % fclose(fid);clear fid;
  588. % end
  589. % memMap.('win').([Priv.prefixSession ...
  590. % num2str(s)]).(Priv.simM{k}).([Priv.prefixFreqComp ...
  591. % num2str(m)]) = ...
  592. % memmapfile([fullPath_win '.bin'],'format',...
  593. % {'single',[Priv.dataSize(s,1:3),2]...
  594. % ,'xyzc'},'Writable',logical(1));
  595. flag = 0;
  596. catch
  597. if flag == 20
  598. error('Problems with writing data, memory mapping quitted!!')
  599. return
  600. end
  601. disp(lasterr)
  602. flag = flag + 1;
  603. end
  604. end
  605. end
  606. end
  607. end
  608. end
  609. clear I;
  610. load([Pub.dataDestination 'memMaps'])
  611. memMaps = setfield(memMaps,Priv.PFmatMapName,memMap);
  612. save([Pub.dataDestination 'memMaps'],'memMaps')
  613. disp(' ')
  614. case 'cormats'
  615. disp('Mapping ISC matrices:')
  616. I = single( zeros([Priv.dataSize(1,1:3),(Priv.nrSubjects^2-Priv.nrSubjects)/2]) );
  617. for k = 1:length(Priv.simM)
  618. if (Pub.corOn && strcmp(Priv.simM{k},'cor'))
  619. for s = 1:Priv.nrSessions
  620. for m = 0:Priv.maxScale + 1
  621. disp(['Mapping stats ' ...
  622. ' session ' num2str(s) ', band ' num2str(m)])
  623. fullPath = [Priv.statsDestination ...
  624. Priv.prefixCorMat '_' ...
  625. Priv.simM{k} '_' Priv.prefixFreqBand ...
  626. num2str(m) '_' Priv.prefixSession ...
  627. num2str(s) '_' Priv.transformType];
  628. if exist([fullPath '.bin']) == 2
  629. disp('Data already exist, quit memory mapping...');return
  630. end
  631. flag = 1;
  632. while flag ~= 0
  633. try
  634. if flag == 20
  635. error
  636. return
  637. end
  638. % map whole session data:
  639. if ~exist([fullPath '.bin'])
  640. fid = fopen([fullPath '.bin'], 'w');
  641. fwrite(fid, I, 'single');
  642. fclose(fid);clear fid;
  643. end
  644. memMap.('whole').([Priv.prefixFreqBand ...
  645. num2str(m)]).([Priv.prefixSession ...
  646. num2str(s)]).(Priv.simM{k}) = ...
  647. memmapfile([fullPath '.bin'],'format',...
  648. {'single',[Priv.dataSize(s,1:3),...
  649. (Priv.nrSubjects^2-Priv.nrSubjects)/2]...
  650. ,'xyzc'},'Writable',logical(1));
  651. % map windowed data:
  652. for tv = 1:Priv.nrTimeIntervals(s)
  653. fullPath_win = [fullPath '_win' num2str(tv)];
  654. if exist([fullPath_win '.bin']) == 2
  655. disp('Data already exist, quit memory mapping...');return
  656. end
  657. if ~exist([fullPath_win '.bin'])
  658. fid = fopen([fullPath_win '.bin'], 'w');
  659. fwrite(fid, I, 'single');
  660. fclose(fid);clear fid;
  661. end
  662. memMap.('win').([Priv.prefixFreqBand ...
  663. num2str(m)]).([Priv.prefixSession ...
  664. num2str(s)]).(Priv.simM{k}).([Priv.prefixTimeVal num2str(tv)]) = ...
  665. memmapfile([fullPath_win '.bin'],'format',...
  666. {'single',[Priv.dataSize(s,1:3),...
  667. (Priv.nrSubjects^2-Priv.nrSubjects)/2]...
  668. ,'xyzc'},'Writable',logical(1));
  669. flag = 0;
  670. end
  671. flag = 0;
  672. catch
  673. if flag == 20
  674. error('Problems with writing data, memory mapping quitted!!')
  675. return
  676. end
  677. disp(lasterr)
  678. flag = flag + 1;
  679. end
  680. end
  681. end
  682. end
  683. end
  684. end
  685. clear I;
  686. load([Pub.dataDestination 'memMaps'])
  687. memMaps = setfield(memMaps,Priv.cormatMapName,memMap);
  688. save([Pub.dataDestination 'memMaps'],'memMaps')
  689. disp(' ')
  690. case 'phase'
  691. disp('Mapping phase synchronization data:')
  692. for s = 1:Priv.nrSessions
  693. for m = 0:Priv.maxScale + 1
  694. fullPath = [Priv.phaseDifDestination ...
  695. Priv.prefixPhaseDif '_' Priv.prefixFreqBand ...
  696. num2str(m) '_' Priv.prefixSession ...
  697. num2str(s) '_' Priv.transformType '.bin'];
  698. if exist(fullPath) == 2
  699. disp('Data already exist, quit memory mapping...');return
  700. end
  701. I = single( zeros(Priv.dataSize(s,:)) );
  702. I = permute(I,[4 2 3 1]);
  703. flag = 1;
  704. while flag ~= 0
  705. try
  706. if flag == 20
  707. error
  708. return
  709. end
  710. if ~exist([fullPath '.bin'])
  711. fid = fopen(fullPath, 'w');
  712. % write data to a binary file:
  713. fwrite(fid, I, 'single');
  714. fclose(fid);clear fid;
  715. end
  716. % perform dynamic memory mapping:
  717. memMap.([Priv.prefixSession ...
  718. num2str(s)]).([Priv.prefixFreqBand ...
  719. num2str(m)]) = memmapfile(fullPath, ...
  720. 'format',{'single',[Priv.dataSize(...
  721. s,4) Priv.dataSize(s,2:3)]...
  722. ,'tyz'},'Writable',logical(1));
  723. disp(['Session ' num2str(s) ', Frequency band ' num2str(m)])
  724. flag = 0;
  725. catch
  726. if flag == 20
  727. error('Problems with writing data, memory mapping quitted!!')
  728. return
  729. end
  730. disp(lasterr)
  731. flag = flag + 1;
  732. end
  733. end
  734. end
  735. end
  736. clear I;
  737. load([Pub.dataDestination 'memMaps'])
  738. memMaps = setfield(memMaps,Priv.phaseMapName,memMap);
  739. save([Pub.dataDestination 'memMaps'],'memMaps')
  740. disp(' ')
  741. case 'stats'
  742. disp('Mapping ISC extra maps:')
  743. I = single( zeros([Priv.dataSize(1,1:3),5]) );
  744. for k = 1:length(Priv.simM)
  745. if (Pub.corOn && strcmp(Priv.simM{k},'cor'))
  746. for s = 1:Priv.nrSessions
  747. Iw = single( zeros([Priv.dataSize(1,1:3),5,Priv.nrTimeIntervals(s)]) );
  748. for m = 0:Priv.maxScale + 1
  749. disp(['Mapping stats ' ...
  750. ' session ' num2str(s) ', band ' num2str(m)])
  751. fullPath = [Priv.statsDestination ...
  752. Priv.prefixTMap '_' ...
  753. Priv.simM{k} '_' Priv.prefixFreqBand ...
  754. num2str(m) '_' Priv.prefixSession ...
  755. num2str(s) '_' Priv.transformType];
  756. if exist([fullPath '.bin']) == 2
  757. disp('Data already exist, quit memory mapping...');return
  758. end
  759. flag = 1;
  760. while flag ~= 0
  761. try
  762. if flag == 20
  763. error
  764. return
  765. end
  766. % map whole session data:
  767. if ~exist([fullPath '.bin'])
  768. fid = fopen([fullPath '.bin'], 'w');
  769. fwrite(fid, I, 'single');
  770. fclose(fid);clear fid;
  771. end
  772. memMap.('whole').([Priv.prefixFreqBand ...
  773. num2str(m)]).([Priv.prefixSession ...
  774. num2str(s)]).(Priv.simM{k}) = ...
  775. memmapfile([fullPath '.bin'],'format',...
  776. {'single',[Priv.dataSize(s,1:3),5]...
  777. ,'xyz'},'Writable',logical(1));
  778. % map windowed data:
  779. if Pub.winOn
  780. fullPath_win = [fullPath '_win'];
  781. if exist([fullPath_win '.bin']) == 2
  782. disp('Data already exist, quit memory mapping...');return
  783. end
  784. if ~exist([fullPath_win '.bin'])
  785. fid = fopen([fullPath_win '.bin'], 'w');
  786. fwrite(fid, Iw, 'single');
  787. fclose(fid);clear fid;
  788. end
  789. memMap.('win').([Priv.prefixFreqBand ...
  790. num2str(m)]).([Priv.prefixSession ...
  791. num2str(s)]).(Priv.simM{k}) = ...
  792. memmapfile([fullPath_win '.bin'],'format',...
  793. {'single',[Priv.dataSize(s,1:3),5]...
  794. ,'xyz'},'Writable',logical(1));
  795. end
  796. flag = 0;
  797. catch
  798. if flag == 20
  799. error('Problems with writing data, memory mapping quitted!!')
  800. return
  801. end
  802. disp(lasterr)
  803. flag = flag + 1;
  804. end
  805. end
  806. end
  807. end
  808. end
  809. end
  810. clear I;
  811. load([Pub.dataDestination 'memMaps'])
  812. memMaps = setfield(memMaps,Priv.statMapName,memMap);
  813. save([Pub.dataDestination 'memMaps'],'memMaps')
  814. disp(' ')
  815. otherwise
  816. error('Unknown data specification!!')
  817. return
  818. end
  819. function ParamsNew = checkUpdates(Params,ParamsNew)
  820. PubNew = ParamsNew.PublicParams;
  821. PrivNew = ParamsNew.PrivateParams;
  822. Pub = Params.PublicParams;
  823. Priv = Params.PrivateParams;
  824. if ( ( PubNew.windowSize ~= Pub.windowSize ) || ( PubNew.windowStep ~= Pub.windowStep) )
  825. PrivNew.filterUpdate = false;
  826. disp('Changed time-window parameters. New results will overwrite the existing ones in the directory.')
  827. end
  828. if ( ( PubNew.ssiOn ~= Pub.ssiOn ) || ( PubNew.nmiOn ~= Pub.nmiOn ) || ...
  829. ( PubNew.corOn ~= Pub.corOn ) || ( PubNew.kenOn ~= Pub.kenOn ) )
  830. PrivNew.filterUpdate = false;
  831. disp('Changed parameters found for similarity maps, specified maps will overwrite the existing ones in the directory.')
  832. end
  833. ParamsNew.PrivateParams = PrivNew;
  834. ParamsNew.PublicParams = PubNew;