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)))
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')
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
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')
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')
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)
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
def tearDown(self): try: NiAnalysisNodeMixin.unload_module('mrtrix') except NiAnalysisModulesNotInstalledException: pass