test_reachgraspio.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import sys
  2. from os.path import join, realpath, dirname
  3. sys.path.insert(0, join(dirname(realpath(__file__)), '..'))
  4. print(sys.path)
  5. import load_local_neo_odml_elephant
  6. import unittest
  7. import reachgraspio.reachgraspio as rg
  8. class RGIOTestCase(unittest.TestCase):
  9. def setUp(self):
  10. rio = rg.ReachGraspIO("../../datasets/i140703-001", odml_directory="../../datasets",
  11. nsx_to_load='all')
  12. self.block = rio.read_block(lazy=True)
  13. def test_group_units_present(self):
  14. unit_groups = [g for g in self.block.groups if 'Unit' in g.name]
  15. self.assertGreater(len(unit_groups), 0)
  16. self.assertGreaterEqual(len(unit_groups), len(self.block.segments[0].spiketrains))
  17. def test_channel_infos_present(self):
  18. for seg in self.block.segments:
  19. for anasig in seg.analogsignals:
  20. if anasig.annotations['neural_signal']:
  21. self.assertIn('connector_aligned_ids', anasig.array_annotations)
  22. self.assertIn('coordinates_x', anasig.array_annotations)
  23. self.assertIn('coordinates_y', anasig.array_annotations)
  24. def test_group_unit_annotations(self):
  25. for group in self.block.groups:
  26. if 'Unit' in group.name:
  27. self.assertIn('unit_id', group.annotations)
  28. self.assertIn('connector_aligned_id', group.annotations)
  29. self.assertIn('sua', group.annotations)
  30. self.assertIn('mua', group.annotations)
  31. self.assertIn('noise', group.annotations)
  32. # To be investigated
  33. # if group.annotations['unit_id'] > 0:
  34. # print(group.annotations)
  35. # self.assertIn('spike_duration', group.annotations)
  36. # self.assertIn('spike_amplitude', group.annotations)
  37. # self.assertIn('spike_count', group.annotations)
  38. def test_group_unit_linking(self):
  39. for group in self.block.groups:
  40. if 'Unit' in group.name:
  41. asig_annotations = group.channelviews[0].obj.array_annotations
  42. idx = group.channelviews[0].index
  43. self.assertEqual(group.annotations['channel_id'],
  44. asig_annotations['channel_ids'][idx])
  45. def test_rejection_annotations_present(self):
  46. for seg in self.block.segments:
  47. for anasig in seg.analogsignals:
  48. if anasig.annotations['neural_signal']:
  49. for key in ['file_origin', 'connector_ID', 'connector_pinID', 'nev_dig_factor',
  50. 'nb_sorted_units', 'nev_hi_freq_order', 'nev_hi_freq_type',
  51. 'nev_lo_freq_order', 'nev_lo_freq_type', 'nsx_hi_freq_order',
  52. 'nsx_lo_freq_order', 'nsx_hi_freq_type', 'nsx_lo_freq_type',
  53. 'description', 'nsx', 'electrode_reject_IFC',
  54. 'electrode_reject_LFC', 'electrode_reject_HFC']:
  55. self.assertIn(key, anasig.array_annotations)
  56. def test_event_annotations(self):
  57. for seg in self.block.segments:
  58. for ev in seg.events:
  59. if ev.name in ['DigitalTrialEvents', 'AnalogTrialEvents', 'TrialEvents']:
  60. for key in ['trial_event_labels', 'trial_timestamp_id', 'trial_id',
  61. 'belongs_to_trialtype', 'performance_in_trial',
  62. 'performance_in_trial_str', 'trial_reject_HFC', 'trial_reject_LFC',
  63. 'trial_reject_IFC']:
  64. self.assertIn(key, ev.array_annotations)
  65. ev_names = [ev.name for ev in seg.events]
  66. for key in ['AnalogTrialEvents', 'DigitalTrialEvents', 'TrialEvents']:
  67. self.assertIn(key, ev_names)
  68. def test_block_annotation(self):
  69. self.assertIn('conditions', self.block.annotations)
  70. self.assertGreater(len(self.block.annotations['conditions']), 0)
  71. def test_connector_aligned_ids(self):
  72. for seg in self.block.segments:
  73. for anasig in seg.analogsignals:
  74. for coords in ['coordinates_x', 'coordinates_y']:
  75. if coords in anasig.array_annotations:
  76. print(np.unique(anasig.array_annotations[coords]))
  77. self.assertEqual(len(np.unique(anasig.array_annotations[coords])), 10)
  78. def suite():
  79. suite = unittest.makeSuite(RGIOTestCase, 'test')
  80. return suite
  81. if __name__ == "__main__":
  82. runner = unittest.TextTestRunner(verbosity=2)
  83. runner.run(suite())