def test_query_report(self): s1 = Subject(subject_id=md.s1_subject_id, gender=md.s1_gender, age=md.s1_age, handedness=md.s1_handedness, edinburgh_handedness_raw=md.s1_edinburgh_handedness_raw, ravens_iq_raw=md.s1_ravens_iq_raw, dataset_code=md.s1_dataset_code, file_path=md.s1_file_path, mmse=md.s1_mmse) db.session.add(s1) s2 = Subject(subject_id=md.s2_subject_id, gender=md.s2_gender, age=md.s2_age, handedness=md.s2_handedness, edinburgh_handedness_raw=md.s2_edinburgh_handedness_raw, ravens_iq_raw=md.s2_ravens_iq_raw, dataset_code=md.s2_dataset_code, file_path=md.s2_file_path, mmse=md.s2_mmse) db.session.add(s2) s3 = Subject(subject_id=md.s3_subject_id, gender=md.s3_gender, age=md.s3_age, handedness=md.s3_handedness, edinburgh_handedness_raw=md.s3_edinburgh_handedness_raw, ravens_iq_raw=md.s3_ravens_iq_raw, dataset_code=md.s3_dataset_code, file_path=md.s3_file_path, mmse=md.s3_mmse) db.session.add(s3) s4 = Subject(subject_id=md.s4_subject_id, gender=md.s4_gender, age=md.s4_age, handedness=md.s4_handedness, edinburgh_handedness_raw=md.s4_edinburgh_handedness_raw, ravens_iq_raw=md.s4_ravens_iq_raw, dataset_code=md.s4_dataset_code, file_path=md.s4_file_path, mmse=md.s4_mmse) db.session.add(s4) db.session.commit() # initial request resp = self.client.get(f'/query_report?{md.brc_atlas_females_query}') data = json.loads(resp.get_data()) assert isinstance(data, dict) assert isinstance(data['dataset'], dict) assert len(data['dataset'].keys()) == 1 assert list(data['dataset'].keys())[0] == md.d1_code assert int(data['dataset'][md.d1_code]) == 1 # query string is for females in BRC_ATLAS dataset
def insert_tract_test_data(self): s1 = Subject(subject_id=md.s1_subject_id, gender=md.s1_gender, age=md.s1_age, handedness=md.s1_handedness, edinburgh_handedness_raw=md.s1_edinburgh_handedness_raw, ravens_iq_raw=md.s1_ravens_iq_raw, dataset_code=md.s1_dataset_code, file_path=md.s1_file_path, mmse=md.s1_mmse) db.session.add(s1) s2 = Subject(subject_id=md.s2_subject_id, gender=md.s2_gender, age=md.s2_age, handedness=md.s2_handedness, edinburgh_handedness_raw=md.s2_edinburgh_handedness_raw, ravens_iq_raw=md.s2_ravens_iq_raw, dataset_code=md.s2_dataset_code, file_path=md.s2_file_path, mmse=md.s2_mmse) db.session.add(s2) s3 = Subject(subject_id=md.s3_subject_id, gender=md.s3_gender, age=md.s3_age, handedness=md.s3_handedness, edinburgh_handedness_raw=md.s3_edinburgh_handedness_raw, ravens_iq_raw=md.s3_ravens_iq_raw, dataset_code=md.s3_dataset_code, file_path=md.s3_file_path, mmse=md.s3_mmse) db.session.add(s3) s4 = Subject(subject_id=md.s4_subject_id, gender=md.s4_gender, age=md.s4_age, handedness=md.s4_handedness, edinburgh_handedness_raw=md.s4_edinburgh_handedness_raw, ravens_iq_raw=md.s4_ravens_iq_raw, dataset_code=md.s4_dataset_code, file_path=md.s4_file_path, mmse=md.s4_mmse) db.session.add(s4) d1 = Dataset(md.d1_code, md.d1_name, md.d1_file_path, md.d1_query_params) db.session.add(d1) t1 = Tract(md.t1_code, md.t1_name, md.t1_file_path, md.t1_description) db.session.add(t1) t2 = Tract(md.t2_code, md.t2_name, md.t2_file_path, md.t2_description) db.session.add(t2) db.session.commit()
def test_get_static_tract_info_no_subjects(self): ''' Test 404 returned when no subjects in query. ''' s2 = Subject(subject_id=md.s2_subject_id, gender=md.s2_gender, age=md.s2_age, handedness=md.s2_handedness, edinburgh_handedness_raw=md.s2_edinburgh_handedness_raw, ravens_iq_raw=md.s2_ravens_iq_raw, dataset_code=md.s2_dataset_code, file_path=md.s2_file_path, mmse=md.s2_mmse) db.session.add(s2) s4 = Subject(subject_id=md.s4_subject_id, gender=md.s4_gender, age=md.s4_age, handedness=md.s4_handedness, edinburgh_handedness_raw=md.s4_edinburgh_handedness_raw, ravens_iq_raw=md.s4_ravens_iq_raw, dataset_code=md.s4_dataset_code, file_path=md.s4_file_path, mmse=md.s4_mmse) db.session.add(s4) d1 = Dataset(md.d1_code, md.d1_name, md.d1_file_path, md.d1_query_params) db.session.add(d1) t1 = Tract(md.t1_code, md.t1_name, md.t1_file_path, md.t1_description) db.session.add(t1) t2 = Tract(md.t2_code, md.t2_name, md.t2_file_path, md.t2_description) db.session.add(t2) db.session.commit() resp = self.client.get(f'/get_tract_info/{md.t1_code}?{md.brc_atlas_males_query}') self.assert404(resp)
def test_get_tract_no_subjects(self): ''' Test behaviour when there are no subjects returned by the selected query. ''' s2 = Subject(subject_id=md.s2_subject_id, gender=md.s2_gender, age=md.s2_age, handedness=md.s2_handedness, edinburgh_handedness_raw=md.s2_edinburgh_handedness_raw, ravens_iq_raw=md.s2_ravens_iq_raw, dataset_code=md.s2_dataset_code, file_path=md.s2_file_path, mmse=md.s2_mmse) db.session.add(s2) s4 = Subject(subject_id=md.s4_subject_id, gender=md.s4_gender, age=md.s4_age, handedness=md.s4_handedness, edinburgh_handedness_raw=md.s4_edinburgh_handedness_raw, ravens_iq_raw=md.s4_ravens_iq_raw, dataset_code=md.s4_dataset_code, file_path=md.s4_file_path, mmse=md.s4_mmse) db.session.add(s4) d1 = Dataset(md.d1_code, md.d1_name, md.d1_file_path, md.d1_query_params) db.session.add(d1) t1 = Tract(md.t1_code, md.t1_name, md.t1_file_path, md.t1_description) db.session.add(t1) t2 = Tract(md.t2_code, md.t2_name, md.t2_file_path, md.t2_description) db.session.add(t2) db.session.commit() resp = self.tract_test_response(md.t1_code, md.brc_atlas_males_query) self.assert404(resp)
def test_query_report_nonexistent_dataset(self): # only add subject from TESTDATASET s4 = Subject(subject_id=md.s4_subject_id, gender=md.s4_gender, age=md.s4_age, handedness=md.s4_handedness, edinburgh_handedness_raw=md.s4_edinburgh_handedness_raw, ravens_iq_raw=md.s4_ravens_iq_raw, dataset_code=md.s4_dataset_code, file_path=md.s4_file_path, mmse=md.s4_mmse) db.session.add(s4) db.session.commit() # query for females in BRC_ATLAS resp = self.client.get(f'/query_report?{md.brc_atlas_females_query}') data = json.loads(resp.get_data()) assert isinstance(data, dict) assert isinstance(data['dataset'], dict) assert len(data['dataset'].keys()) == 1 assert list(data['dataset'].keys())[0] == md.d1_code assert int(data['dataset'][md.d1_code]) == 0
def test_subject_tract_metrics(self): # insert subjects sbjct1 = Subject(subject_id=DatabaseUtilsTestCase.sbjct1_subject_id, gender=DatabaseUtilsTestCase.sbjct1_gender, age=DatabaseUtilsTestCase.sbjct1_age, handedness=DatabaseUtilsTestCase.sbjct1_handedness, edinburgh_handedness_raw=DatabaseUtilsTestCase.sbjct1_edinburgh_handedness_raw, ravens_iq_raw=DatabaseUtilsTestCase.sbjct1_ravens_iq_raw, dataset_code=DatabaseUtilsTestCase.sbjct1_dataset_code, file_path=DatabaseUtilsTestCase.sbjct1_file_path, mmse=DatabaseUtilsTestCase.sbjct1_mmse) db.session.add(sbjct1) sbjct2 = Subject(subject_id=DatabaseUtilsTestCase.sbjct2_subject_id, gender=DatabaseUtilsTestCase.sbjct2_gender, age=DatabaseUtilsTestCase.sbjct2_age, handedness=DatabaseUtilsTestCase.sbjct2_handedness, edinburgh_handedness_raw=DatabaseUtilsTestCase.sbjct2_edinburgh_handedness_raw, ravens_iq_raw=DatabaseUtilsTestCase.sbjct2_ravens_iq_raw, dataset_code=DatabaseUtilsTestCase.sbjct2_dataset_code, file_path=DatabaseUtilsTestCase.sbjct2_file_path, mmse=DatabaseUtilsTestCase.sbjct2_mmse) db.session.add(sbjct2) sbjct3 = Subject(subject_id=DatabaseUtilsTestCase.sbjct3_subject_id, gender=DatabaseUtilsTestCase.sbjct3_gender, age=DatabaseUtilsTestCase.sbjct3_age, handedness=DatabaseUtilsTestCase.sbjct3_handedness, edinburgh_handedness_raw=DatabaseUtilsTestCase.sbjct3_edinburgh_handedness_raw, ravens_iq_raw=DatabaseUtilsTestCase.sbjct3_ravens_iq_raw, dataset_code=DatabaseUtilsTestCase.sbjct3_dataset_code, file_path=DatabaseUtilsTestCase.sbjct3_file_path, mmse=DatabaseUtilsTestCase.sbjct3_mmse) db.session.add(sbjct3) # insert test tract tract1 = Tract(code=DatabaseUtilsTestCase.tract1_code, name=DatabaseUtilsTestCase.tract1_name, file_path=DatabaseUtilsTestCase.tract1_file_path, description=DatabaseUtilsTestCase.tract1_description) db.session.add(tract1) # insert subject metrics sbjct1_mets = SubjectTractMetrics(subject_id=DatabaseUtilsTestCase.sbjct1_subject_id, tract_code=DatabaseUtilsTestCase.tract1_code, method_code=DatabaseUtilsTestCase.method1_code, mean_MD=0.5, std_MD=0.01, mean_FA=0.5, std_FA=0.01, volume=10) db.session.add(sbjct1_mets) sbjct2_mets = SubjectTractMetrics(subject_id=DatabaseUtilsTestCase.sbjct2_subject_id, tract_code=DatabaseUtilsTestCase.tract1_code, method_code=DatabaseUtilsTestCase.method1_code, mean_MD=0.5, std_MD=0.01, mean_FA=0.5, std_FA=0.01, volume=10) db.session.add(sbjct2_mets) sbjct3_mets = SubjectTractMetrics(subject_id=DatabaseUtilsTestCase.sbjct3_subject_id, tract_code=DatabaseUtilsTestCase.tract1_code, method_code=DatabaseUtilsTestCase.method1_code, mean_MD=0.5, std_MD=0.01, mean_FA=0.5, std_FA=0.01, volume=10) db.session.add(sbjct3_mets) db.session.commit() test_query = { "TESTDATASET1": { "method": "DTI", "constraints": { "handedness": {"type": "checkbox", "values": ["R","L"]} } } } metrics = dbu.subject_tract_metrics(test_query, DatabaseUtilsTestCase.tract1_code) assert type(metrics) == np.ndarray assert metrics.shape == (3,5) assert np.sum(metrics) == 33.06
def test_subject_id_dataset_file_path(self): # insert 2 test datasets dataset1 = Dataset(code=DatabaseUtilsTestCase.dataset1_code, name=DatabaseUtilsTestCase.dataset1_name, file_path=DatabaseUtilsTestCase.dataset1_file_path, query_params=DatabaseUtilsTestCase.dataset1_query_params) db.session.add(dataset1) dataset2 = Dataset(code=DatabaseUtilsTestCase.dataset2_code, name=DatabaseUtilsTestCase.dataset2_name, file_path=DatabaseUtilsTestCase.dataset2_file_path, query_params=DatabaseUtilsTestCase.dataset2_query_params) db.session.add(dataset2) # insert subjects sbjct1 = Subject(subject_id=DatabaseUtilsTestCase.sbjct1_subject_id, gender=DatabaseUtilsTestCase.sbjct1_gender, age=DatabaseUtilsTestCase.sbjct1_age, handedness=DatabaseUtilsTestCase.sbjct1_handedness, edinburgh_handedness_raw=DatabaseUtilsTestCase.sbjct1_edinburgh_handedness_raw, ravens_iq_raw=DatabaseUtilsTestCase.sbjct1_ravens_iq_raw, dataset_code=DatabaseUtilsTestCase.sbjct1_dataset_code, file_path=DatabaseUtilsTestCase.sbjct1_file_path, mmse=DatabaseUtilsTestCase.sbjct1_mmse) db.session.add(sbjct1) sbjct2 = Subject(subject_id=DatabaseUtilsTestCase.sbjct2_subject_id, gender=DatabaseUtilsTestCase.sbjct2_gender, age=DatabaseUtilsTestCase.sbjct2_age, handedness=DatabaseUtilsTestCase.sbjct2_handedness, edinburgh_handedness_raw=DatabaseUtilsTestCase.sbjct2_edinburgh_handedness_raw, ravens_iq_raw=DatabaseUtilsTestCase.sbjct2_ravens_iq_raw, dataset_code=DatabaseUtilsTestCase.sbjct2_dataset_code, file_path=DatabaseUtilsTestCase.sbjct2_file_path, mmse=DatabaseUtilsTestCase.sbjct2_mmse) db.session.add(sbjct2) sbjct3 = Subject(subject_id=DatabaseUtilsTestCase.sbjct3_subject_id, gender=DatabaseUtilsTestCase.sbjct3_gender, age=DatabaseUtilsTestCase.sbjct3_age, handedness=DatabaseUtilsTestCase.sbjct3_handedness, edinburgh_handedness_raw=DatabaseUtilsTestCase.sbjct3_edinburgh_handedness_raw, ravens_iq_raw=DatabaseUtilsTestCase.sbjct3_ravens_iq_raw, dataset_code=DatabaseUtilsTestCase.sbjct3_dataset_code, file_path=DatabaseUtilsTestCase.sbjct3_file_path, mmse=DatabaseUtilsTestCase.sbjct3_mmse) db.session.add(sbjct3) sbjct4 = Subject(subject_id=DatabaseUtilsTestCase.sbjct4_subject_id, gender=DatabaseUtilsTestCase.sbjct4_gender, age=DatabaseUtilsTestCase.sbjct4_age, handedness=DatabaseUtilsTestCase.sbjct4_handedness, edinburgh_handedness_raw=DatabaseUtilsTestCase.sbjct4_edinburgh_handedness_raw, ravens_iq_raw=DatabaseUtilsTestCase.sbjct4_ravens_iq_raw, dataset_code=DatabaseUtilsTestCase.sbjct4_dataset_code, file_path=DatabaseUtilsTestCase.sbjct4_file_path, mmse=DatabaseUtilsTestCase.sbjct4_mmse) db.session.add(sbjct4) db.session.commit() test_query = { "TESTDATASET1": { "method": "DTI", "constraints": { "handedness": {"type": "checkbox", "values": ["R","L"]} } }, "TESTDATASET2": { "method": "DTI", "constraints": { "handedness": {"type": "checkbox", "values": ["R","L"]} } } } result = dbu.subject_id_dataset_file_path(test_query) assert len(result) == 4 sorted_result = sorted(result, key=lambda subject: subject[0]) assert sorted_result[0][0] == DatabaseUtilsTestCase.sbjct1_subject_id assert sorted_result[0][1] == DatabaseUtilsTestCase.dataset1_file_path assert sorted_result[1][0] == DatabaseUtilsTestCase.sbjct2_subject_id assert sorted_result[1][1] == DatabaseUtilsTestCase.dataset1_file_path assert sorted_result[2][0] == DatabaseUtilsTestCase.sbjct3_subject_id assert sorted_result[2][1] == DatabaseUtilsTestCase.dataset1_file_path assert sorted_result[3][0] == DatabaseUtilsTestCase.sbjct4_subject_id assert sorted_result[3][1] == DatabaseUtilsTestCase.dataset2_file_path
def test_generate_mean_maps(self): s1 = Subject(subject_id=md.s1_subject_id, gender=md.s1_gender, age=md.s1_age, handedness=md.s1_handedness, edinburgh_handedness_raw=md.s1_edinburgh_handedness_raw, ravens_iq_raw=md.s1_ravens_iq_raw, dataset_code=md.s1_dataset_code, file_path=md.s1_file_path, mmse=md.s1_mmse) db.session.add(s1) s2 = Subject(subject_id=md.s2_subject_id, gender=md.s2_gender, age=md.s2_age, handedness=md.s2_handedness, edinburgh_handedness_raw=md.s2_edinburgh_handedness_raw, ravens_iq_raw=md.s2_ravens_iq_raw, dataset_code=md.s2_dataset_code, file_path=md.s2_file_path, mmse=md.s2_mmse) db.session.add(s2) s3 = Subject(subject_id=md.s3_subject_id, gender=md.s3_gender, age=md.s3_age, handedness=md.s3_handedness, edinburgh_handedness_raw=md.s3_edinburgh_handedness_raw, ravens_iq_raw=md.s3_ravens_iq_raw, dataset_code=md.s3_dataset_code, file_path=md.s3_file_path, mmse=md.s3_mmse) db.session.add(s3) s4 = Subject(subject_id=md.s4_subject_id, gender=md.s4_gender, age=md.s4_age, handedness=md.s4_handedness, edinburgh_handedness_raw=md.s4_edinburgh_handedness_raw, ravens_iq_raw=md.s4_ravens_iq_raw, dataset_code=md.s4_dataset_code, file_path=md.s4_file_path, mmse=md.s4_mmse) db.session.add(s4) d1 = Dataset(code=md.d1_code, name=md.d1_name, file_path=md.d1_file_path, query_params=md.d1_query_params) db.session.add(d1) d2 = Dataset(code=md.d2_code, name=md.d2_name, file_path=md.d2_file_path, query_params=md.d1_query_params) db.session.add(d2) db.session.commit() self.saved_file_path = '' self.saved_img = None def nib_save_patch(img, file_path): self.saved_file_path = file_path self.saved_img = img data = img.get_data() assert np.all(data == 1.) def nib_load_patch(file_path): if du.TEMPLATE_FILE_NAME in file_path: return md.template_nifti elif md.s1_subject_id in file_path: return md.s1_MD if 'MD' in file_path else md.s1_FA elif md.s3_subject_id in file_path: return md.s3_MD if 'MD' in file_path else md.s3_FA else: print('Unexpected file path passed to nib_load_path in test_views.test_generate_maps') print(file_path) return # assert the cache is empty for query string before response assert not current_app.cache.get(md.brc_atlas_males_query) # first request with monkey_patch(du.nib, 'save', nib_save_patch): with monkey_patch(du.nib, 'load', nib_load_patch): resp = self.client.get(f'/generate_mean_maps?{md.brc_atlas_males_query}') self.assertStatus(resp, 204) assert current_app.cache.get(md.brc_atlas_males_query) # check data has been cached