nwbSessionParams.m 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. % Session-specific NWB parameters
  2. % Parameters that are different for different animals are:
  3. % sessionID
  4. % sessionDescription
  5. % sessionNotes
  6. % areas
  7. % endCh
  8. % probeInserted
  9. % electrodeName
  10. % nChannelsPerShank
  11. % electrodeCoordinates
  12. % electrodeImplantationType
  13. % General info
  14. sessionID = {'20190122191103'};
  15. sessionDescription = {'awake restrained'};
  16. sessionNotes = {'Probes advanced to 700 um (z-axis) into the left S1bf and 3250 um (z-axis) into the left VB. Recording was done in an awake head-restraint animal.'};
  17. endCh{1}{1} = [16]; % Corresponding probe end channels starting from the tip of the probe. Corresponding and previous end channels are used to work out probe channels that reside in the corresponding brain area.
  18. endCh{1}{2} = [6 10 18 24 32];
  19. for iSess = 1:numel(sessionID)
  20. sessionStartTime{iSess} = datetime(str2double(sessionID{iSess}(1:4)), str2double(sessionID{iSess}(5:6)), str2double(sessionID{iSess}(7:8)),...
  21. str2double(sessionID{iSess}(9:10)), str2double(sessionID{iSess}(11:12)), str2double(sessionID{iSess}(13:14))); %#ok<*SAGROW>
  22. % Probe #1 info
  23. ref = 1; % probe reference
  24. probeInserted{iSess}{ref} = true; % If the probe used at all
  25. if probeInserted{iSess}{ref} && ~isempty(endCh{iSess}{ref})
  26. electrodeName{iSess}{ref} = 'CM16LP-A1x16-Poly2-5mm-50s-177';
  27. electrodeDescription{iSess}{ref} = ['Single shank low density probe in position ' num2str(ref)];
  28. electrodeManufacturer{iSess}{ref} = 'Neuronexus';
  29. electrodeFolder{iSess}{ref} = [animalRawDataFolder filesep sessionID{iSess} '1'];
  30. if ~exist(electrodeFolder{iSess}{ref}, 'file') % in case a probe is missing
  31. electrodeFolder{iSess}{ref} = electrodeFolder{iSess}{ref}(1:end-1);
  32. end
  33. electrodeMap = [electrodeFolder{iSess}{ref} filesep 'forPRB_' electrodeName{iSess}{ref} '.mat'];
  34. nShanks{iSess}{ref} = 1;
  35. nChannelsPerShank{iSess}{ref} = 16;
  36. nCh{iSess}{ref} = nChannelsPerShank{iSess}{ref}*nShanks{iSess}{ref}; % total number of probe channels
  37. areas = {'S1'}; % brain areas that this probe spans
  38. electrodeLocation{iSess}{ref} = electrodeLocations(areas, endCh{iSess}{ref}, nCh{iSess}{ref}); % Brain area assigned to each recording channel.
  39. electrodeCoordinates{iSess}{ref} = [-1.8, -2.5, 0]; % Electrode insertion location on the cortical surface in Paxinos coords: AP (posterior negative), ML (left negative), DV (recording site position starting with the tip of the probe.
  40. electrodeCoordinates{iSess}{ref} = repmat(electrodeCoordinates{iSess}{ref}, nCh{iSess}{ref}, 1); % Coordinates of each probe recording channel (the probe rotation angle is not taken into account). Y coordinates are relative to the tip of the probe.
  41. load(electrodeMap, 'ycoords');
  42. if size(ycoords,1) == 1
  43. electrodeCoordinates{iSess}{ref}(:,3) = ycoords(1:nCh{iSess}{ref})'./1000;
  44. else
  45. electrodeCoordinates{iSess}{ref}(:,3) = ycoords(1:nCh{iSess}{ref})./1000;
  46. end
  47. electrodeLabel{iSess}{ref} = ['probe' num2str(ref)];
  48. electrodeImplantationType{iSess}{ref} = 'chronic';
  49. else % The case when the probe #1 is missing
  50. electrodeName{iSess}{ref} = []; %#ok<*UNRCH>
  51. electrodeDescription{iSess}{ref} = [];
  52. electrodeManufacturer{iSess}{ref} = [];
  53. electrodeFolder{iSess}{ref} = [];
  54. nShanks{iSess}{ref} = [];
  55. nChannelsPerShank{iSess}{ref} = [];
  56. nCh{iSess}{ref} = [];
  57. electrodeLocation{iSess}{ref} = [];
  58. electrodeCoordinates{iSess}{ref} = [];
  59. electrodeLabel{iSess}{ref} = [];
  60. electrodeImplantationType{iSess}{ref} = [];
  61. end
  62. % Probe #2 info
  63. ref = 2;
  64. probeInserted{iSess}{ref} = true;
  65. if probeInserted{iSess}{ref} && ~isempty(endCh{iSess}{ref})
  66. electrodeName{iSess}{ref} = 'CM32-A1x32-Edge-5mm-100-177';
  67. electrodeDescription{iSess}{ref} = ['Single shank low density probe in position ' num2str(ref)];
  68. electrodeManufacturer{iSess}{ref} = 'Neuronexus';
  69. electrodeFolder{iSess}{ref} = [animalRawDataFolder filesep sessionID{iSess} '26'];
  70. if ~exist(electrodeFolder{iSess}{ref},'file') || numel(dir(electrodeFolder{iSess}{ref})) <= 2 % in case the raw data folder name is shorter
  71. electrodeFolder{iSess}{ref} = electrodeFolder{iSess}{ref}(1:end-1);
  72. end
  73. if ~exist(electrodeFolder{iSess}{ref}, 'file') % in case a probe is missing
  74. electrodeFolder{iSess}{ref} = electrodeFolder{iSess}{ref}(1:end-1);
  75. end
  76. electrodeMap = [electrodeFolder{iSess}{ref} filesep 'forPRB_' electrodeName{iSess}{ref} '.mat'];
  77. nShanks{iSess}{ref} = 1;
  78. nChannelsPerShank{iSess}{ref} = 32;
  79. nCh{iSess}{ref} = nChannelsPerShank{iSess}{ref}*nShanks{iSess}{ref};
  80. areas = {'Po','LP','DG','CA1','RSC'};
  81. electrodeLocation{iSess}{ref} = electrodeLocations(areas, endCh{iSess}{ref}, nCh{iSess}{ref});
  82. electrodeCoordinates{iSess}{ref} = [-1.8, -0.5, 0];
  83. electrodeCoordinates{iSess}{ref} = repmat(electrodeCoordinates{iSess}{ref}, nCh{iSess}{ref}, 1);
  84. load(electrodeMap, 'ycoords');
  85. if size(ycoords,1) == 1
  86. electrodeCoordinates{iSess}{ref}(:,3) = ycoords(1:nCh{iSess}{ref})'./1000;
  87. else
  88. electrodeCoordinates{iSess}{ref}(:,3) = ycoords(1:nCh{iSess}{ref})./1000;
  89. end
  90. electrodeLabel{iSess}{ref} = ['probe' num2str(ref)];
  91. electrodeImplantationType{iSess}{ref} = 'chronic';
  92. else % The case when the probe #2 is missing
  93. electrodeName{iSess}{ref} = []; %#ok<*UNRCH>
  94. electrodeDescription{iSess}{ref} = [];
  95. electrodeManufacturer{iSess}{ref} = [];
  96. electrodeFolder{iSess}{ref} = [];
  97. nShanks{iSess}{ref} = [];
  98. nChannelsPerShank{iSess}{ref} = [];
  99. nCh{iSess}{ref} = [];
  100. electrodeLocation{iSess}{ref} = [];
  101. electrodeCoordinates{iSess}{ref} = [];
  102. electrodeLabel{iSess}{ref} = [];
  103. electrodeImplantationType{iSess}{ref} = [];
  104. end
  105. end
  106. %% Local functions
  107. function electrodeLocationVec = electrodeLocations(areas, endCh, nCh)
  108. % electrodeLocationVec = electrodeLocations(areas, endCh, nCh)
  109. % Function assigns brain area to a channel
  110. for iCh = 1:nCh
  111. areaInd = find(endCh >= iCh,1);
  112. electrodeLocationVec{iCh} = areas{areaInd};
  113. end
  114. end