示例#1
0
文件: testing.py 项目: sforazz/arcana
 def assertStatEqual(self,
                     stat,
                     dataset_name,
                     target,
                     study_name,
                     subject=None,
                     visit=None,
                     frequency='per_session'):
     try:
         NiAnalysisNodeMixin.load_module('mrtrix')
     except NiAnalysisModulesNotInstalledException:
         pass
     val = float(
         sp.check_output('mrstats {} -output {}'.format(
             self.output_file_path(dataset_name,
                                   study_name,
                                   subject=subject,
                                   visit=visit,
                                   frequency=frequency), stat),
                         shell=True))
     self.assertEqual(
         val, target,
         ("{} value of '{}' ({}) does not equal target ({}) "
          "for subject {} visit {}".format(stat, dataset_name, val, target,
                                           subject, visit)))
示例#2
0
 def test_multi_multi_study(self):
     study = self.create_study(
         MultiMultiStudy, 'multi_multi',
         [DatasetMatch('ss1_x', mrtrix_format, 'ones'),
          DatasetMatch('ss1_y', mrtrix_format, 'ones'),
          DatasetMatch('full_a', mrtrix_format, 'ones'),
          DatasetMatch('full_b', mrtrix_format, 'ones'),
          DatasetMatch('full_c', mrtrix_format, 'ones'),
          DatasetMatch('partial_a', mrtrix_format, 'ones'),
          DatasetMatch('partial_b', mrtrix_format, 'ones'),
          DatasetMatch('partial_c', mrtrix_format, 'ones')],
         options=[Option('full_required_op', 'product'),
                  Option('partial_ss2_product_op', 'product')])
     g = study.data('g')[0]
     if self.mrtrix_req is not None:
         NiAnalysisNodeMixin.load_module(*self.mrtrix_req)
     try:
         g_mean = float(sp.check_output(
             'mrstats {} -output mean'.format(g.path),
             shell=True))
         self.assertEqual(g_mean, 11.0)
     finally:
         if self.mrtrix_req is not None:
             NiAnalysisNodeMixin.unload_module(*self.mrtrix_req)
     # Test option values in MultiStudy
     self.assertEqual(study.data('full_p1'), 100)
     self.assertEqual(study.data('full_p2'), '200')
     self.assertEqual(study.data('full_p3'), 300.0)
     self.assertEqual(study.data('full_q1'), 150)
     self.assertEqual(study.data('full_q2'), '250')
     self.assertEqual(study.data('full_required_op'),
                      'product')
     # Test option values in SubStudy
     ss1 = study.sub_study('full').sub_study('ss1')
     self.assertEqual(ss1.data('o1'), 100)
     self.assertEqual(ss1.data('o2'), '200')
     self.assertEqual(ss1.data('o3'), 300.0)
     ss2 = study.sub_study('full').sub_study('ss2')
     self.assertEqual(ss2.data('o1'), 150)
     self.assertEqual(ss2.data('o2'), '250')
     self.assertEqual(ss2.data('o3'), 300.0)
     self.assertEqual(ss2.data('product_op'), 'product')
     # Test option values in MultiStudy
     self.assertEqual(study.data('partial_p1'), 1000)
     self.assertEqual(study.data('partial_ss1_o2'), '2')
     self.assertEqual(study.data('partial_ss1_o3'), 3.0)
     self.assertEqual(study.data('partial_ss2_o2'), '20')
     self.assertEqual(study.data('partial_ss2_o3'), 30.0)
     self.assertEqual(
         study.partial_ss2_product_op, 'product')
     # Test option values in SubStudy
     ss1 = study.sub_study('partial').sub_study('ss1')
     self.assertEqual(ss1.data('o1'), 1000)
     self.assertEqual(ss1.data('o2'), '2')
     self.assertEqual(ss1.data('o3'), 3.0)
     ss2 = study.sub_study('partial').sub_study('ss2')
     self.assertEqual(ss2.data('o1'), 1000)
     self.assertEqual(ss2.data('o2'), '20')
     self.assertEqual(ss2.data('o3'), 30.0)
     self.assertEqual(ss2.data('product_op'), 'product')
示例#3
0
 def setUp(self):
     super(TestMulti, self).setUp()
     # Calculate MRtrix module required for 'mrstats' commands
     try:
         self.mrtrix_req = Requirement.best_requirement(
             [mrtrix3_req], NiAnalysisNodeMixin.available_modules(),
             NiAnalysisNodeMixin.preloaded_modules())
     except NiAnalysisModulesNotInstalledException:
         self.mrtrix_req = None
示例#4
0
 def test_partial_multi_study(self):
     study = self.create_study(
         PartialMultiStudy, 'partial',
         [DatasetMatch('a', mrtrix_format, 'ones'),
          DatasetMatch('b', mrtrix_format, 'ones'),
          DatasetMatch('c', mrtrix_format, 'ones')],
         options=[Option('ss2_product_op', 'product')])
     ss1_z = study.data('ss1_z')[0]
     ss2_y = study.data('ss2_y')[0]
     ss2_z = study.data('ss2_z')[0]
     if self.mrtrix_req is not None:
         NiAnalysisNodeMixin.load_module(*self.mrtrix_req)
     try:
         ss1_z_mean = float(sp.check_output(
             'mrstats {} -output mean'.format(ss1_z.path),
             shell=True))
         self.assertEqual(ss1_z_mean, 2.0)
         ss2_y_mean = float(sp.check_output(
             'mrstats {} -output mean'.format(ss2_y.path),
             shell=True))
         self.assertEqual(ss2_y_mean, 3.0)
         ss2_z_mean = float(sp.check_output(
             'mrstats {} -output mean'.format(ss2_z.path),
             shell=True))
         self.assertEqual(ss2_z_mean, 6.0)
     finally:
         if self.mrtrix_req is not None:
             NiAnalysisNodeMixin.unload_module(*self.mrtrix_req)
     # Test option values in MultiStudy
     self.assertEqual(study.data('p1'), 1000)
     self.assertEqual(study.data('ss1_o2'), '2')
     self.assertEqual(study.data('ss1_o3'), 3.0)
     self.assertEqual(study.data('ss2_o2'), '20')
     self.assertEqual(study.data('ss2_o3'), 30.0)
     self.assertEqual(study.data('ss2_product_op'), 'product')
     # Test option values in SubStudy
     ss1 = study.sub_study('ss1')
     self.assertEqual(ss1.data('o1'), 1000)
     self.assertEqual(ss1.data('o2'), '2')
     self.assertEqual(ss1.data('o3'), 3.0)
     ss2 = study.sub_study('ss2')
     self.assertEqual(ss2.data('o1'), 1000)
     self.assertEqual(ss2.data('o2'), '20')
     self.assertEqual(ss2.data('o3'), 30.0)
     self.assertEqual(ss2.data('product_op'), 'product')
示例#5
0
 def test_full_multi_study(self):
     study = self.create_study(
         FullMultiStudy, 'full',
         [DatasetMatch('a', mrtrix_format, 'ones'),
          DatasetMatch('b', mrtrix_format, 'ones'),
          DatasetMatch('c', mrtrix_format, 'ones')],
         options=[Option('required_op', 'product')])
     d = study.data('d', subject_id='SUBJECT', visit_id='VISIT')
     e = study.data('e')[0]
     f = study.data('f')[0]
     if self.mrtrix_req is not None:
         NiAnalysisNodeMixin.load_module(*self.mrtrix_req)
     try:
         d_mean = float(sp.check_output(
             'mrstats {} -output mean'.format(d.path),
             shell=True))
         self.assertEqual(d_mean, 2.0)
         e_mean = float(sp.check_output(
             'mrstats {} -output mean'.format(e.path),
             shell=True))
         self.assertEqual(e_mean, 3.0)
         f_mean = float(sp.check_output(
             'mrstats {} -output mean'.format(f.path),
             shell=True))
         self.assertEqual(f_mean, 6.0)
     finally:
         if self.mrtrix_req is not None:
             NiAnalysisNodeMixin.unload_module(*self.mrtrix_req)
     # Test option values in MultiStudy
     self.assertEqual(study.data('p1'), 100)
     self.assertEqual(study.data('p2'), '200')
     self.assertEqual(study.data('p3'), 300.0)
     self.assertEqual(study.data('q1'), 150)
     self.assertEqual(study.data('q2'), '250')
     self.assertEqual(study.data('required_op'), 'product')
     # Test option values in SubStudy
     ss1 = study.sub_study('ss1')
     self.assertEqual(ss1.data('o1'), 100)
     self.assertEqual(ss1.data('o2'), '200')
     self.assertEqual(ss1.data('o3'), 300.0)
     ss2 = study.sub_study('ss2')
     self.assertEqual(ss2.data('o1'), 150)
     self.assertEqual(ss2.data('o2'), '250')
     self.assertEqual(ss2.data('o3'), 300.0)
     self.assertEqual(ss2.data('product_op'), 'product')
示例#6
0
 def test_project_summary(self):
     self.study.data('project_summary')
     # Get mean value from resultant image (should be the same as the
     # number of sessions as the original image is full of ones and
     # all sessions have been summed together
     if self.mrtrix_req is not None:
         NiAnalysisNodeMixin.load_module(*self.mrtrix_req)
     try:
         mean_val = float(
             sp.check_output('mrstats {} -output mean'.format(
                 self.output_file_path('project_summary.mif',
                                       self.study.name,
                                       frequency='per_project')),
                             shell=True))
         self.assertEqual(mean_val,
                          len(self.SUBJECT_IDS) * len(self.SESSION_IDS))
     finally:
         if self.mrtrix_req is not None:
             NiAnalysisNodeMixin.unload_module(*self.mrtrix_req)
示例#7
0
 def setUp(self):
     self.reset_dirs()
     for subject_id in self.SUBJECT_IDS:
         for visit_id in self.SESSION_IDS:
             self.add_session(self.project_dir, subject_id, visit_id)
     self.study = self.create_study(
         TestStudy,
         'dummy',
         inputs=[
             DatasetMatch('start', nifti_gz_format, 'start'),
             DatasetMatch('ones_slice', mrtrix_format, 'ones_slice')
         ],
         options={'pipeline_option': True})
     # Calculate MRtrix module required for 'mrstats' commands
     try:
         self.mrtrix_req = Requirement.best_requirement(
             [mrtrix3_req], NiAnalysisNodeMixin.available_modules(),
             NiAnalysisNodeMixin.preloaded_modules())
     except NiAnalysisModulesNotInstalledException:
         self.mrtrix_req = None
示例#8
0
 def tearDown(self):
     try:
         NiAnalysisNodeMixin.unload_module('mrtrix')
     except NiAnalysisModulesNotInstalledException:
         pass