def test_process_matching_templates_acquisition_file(self):
     """ """
     # Define context
     context = {
         'container_type': 'file',
         'parent_container_type': 'acquisition',
         'project': {'label': 'testproject'},
         'subject': {'code': '12345'},
         'session': {'label': 'haha', 'info': {'BIDS': {'Label': 'haha', 'Subject': '12345'}}},
         'acquisition':{'label': 'blue', u'id': u'ID'},
         'file': {u'type': u'image', u'name': u'fname'},
         'ext': '.jpg'
     }
     # Won't match if not on upload
     container = bidsify_flywheel.process_matching_templates(context)
     # Define expected container
     container_expected = {u'type': u'image', u'name': u'fname'}
     self.assertEqual(container, container_expected)
     # Call function
     container = bidsify_flywheel.process_matching_templates(context, upload=True)
     # Define expected container
     container_expected = {
         'info': {
             'BIDS': {
                 'template': 'acquisition_file',
                 'Filename': '', 'Folder': 'acq-blue', 'Path': 'sub-12345/ses-haha/acq-blue',
                 'ignore': False
                 }
             },
         u'type': u'image',
         u'name': u'fname'
         }
     self.assertEqual(container, container_expected)
    def test_process_matching_templates_BIDS_NA(self):
        """ """
        # Define context
        context = {
            'container_type': 'file',
            'parent_container_type': 'acquisition',
            'project': None,
            'subject': {u'code': u'001'},
            'session': {u'label': u'sesTEST', 'info': {'BIDS': {'Label': u'sesTEST', 'Subject': u'001'}}},
            'run_counters': utils.RunCounterMap(),
            'acquisition': {u'label': u'acq_task-TEST_run+'},
            'file': {u'classification': {u'Intent': u'Functional'},
                    u'type': u'nifti','info': {'BIDS': 'NA'}
                        },
            'ext': '.nii.gz'
        }
        # Call function
        container = bidsify_flywheel.process_matching_templates(context)
        # Define expected container
        container_expected = {
            u'classification': {u'Intent': u'Functional'},
            u'type': u'nifti',
            'info': {'BIDS': 'NA'}
        }

        self.assertEqual(container, container_expected)
 def test_process_matching_templates_project_file_multiple_measurements(self):
     """ """
     # Define context
     context = {
         'container_type': 'file',
         'parent_container_type': 'acquisition',
         'project': None,
         'subject': {u'code': u'001'},
         'session': {u'label': u'sesTEST', 'info': {'BIDS': {'Label': u'sesTEST', 'Subject': u'001'}}},
         'acquisition': {u'label': u'acqTEST'},
         'file': {
             u'classification': {u'Measurement': [u'T1', u'T2'], u'Intent': u'Structural'},
             u'type': u'nifti'
         },
         'ext': '.nii.gz'
     }
     # Call function
     container = bidsify_flywheel.process_matching_templates(context)
     # Define expected container
     container_expected = {
         'info': {
             'BIDS': {
                 'template': 'anat_file',
                 'Filename': u'sub-001_ses-sesTEST_T1w.nii.gz',
                 'Path': u'sub-001/ses-sesTEST/anat', 'Folder': 'anat',
                 'Run': '', 'Acq': '', 'Ce': '', 'Rec': '',
                 'Modality': 'T1w', 'Mod': '',
                 'ignore': False
                 }
             },
         u'classification': {u'Measurement': [u'T1', u'T2'], u'Intent': u'Structural'}, u'type': u'nifti'}
     print(container)
     self.assertEqual(container, container_expected)
 def test_process_matching_templates_project_file(self):
     """ """
     # Define context
     context = {
         'container_type': 'file',
         'parent_container_type': 'project',
         'project': None,
         'subject': None,
         'session': None,
         'acquisition': None,
         'file': {u'classification': {},
                 u'type': u'archive'},
         'ext': '.zip'
     }
     # Call function
     container = bidsify_flywheel.process_matching_templates(context)
     # Define expected container
     container_expected = {
         'info': {
             'BIDS': {
                 'template': 'project_file',
                 'Filename': '', 'Folder': '', 'Path': '',
                 'ignore': False
                 }
             },
         u'classification': {}, u'type': u'archive'}
     self.assertEqual(container, container_expected)
 def test_process_matching_templates_project(self):
     """ """
     # Define context
     context = {
         'container_type': 'project',
         'parent_container_type': 'group',
         'project': {'label': 'Project_Label_Test'},
         'subject': None,
         'session': None,
         'acquisition': None,
         'file': {},
         'ext': '.zip'
     }
     # Call function
     container = bidsify_flywheel.process_matching_templates(context)
     # Define expected container
     container_expected = {
         'info': {
             'BIDS': {
                 'Acknowledgements': '',
                 'Authors': [],
                 'BIDSVersion': '1.0.2',
                 'DatasetDOI': '',
                 'Funding': '',
                 'HowToAcknowledge': '',
                 'License': '',
                 'Name': 'Project_Label_Test',
                 'ReferencesAndLinks': [],
                 'template': 'project'
                 }
             },
             'label': 'Project_Label_Test'
         }
     self.assertEqual(container, container_expected)
 def test_process_matching_templates_session_file(self):
     """ """
     # Define context
     context = {
         'container_type': 'file',
         'parent_container_type': 'session',
         'project': {'label': 'testproject'},
         'subject': {'code': '12345'},
         'session': {'label': u'sesTEST', 'info': {'BIDS': {'Label': u'sesTEST', 'Subject': u'12345'}}},
         'acquisition': None,
         'file': {u'type': u'tabular'},
         'ext': '.tsv'
     }
     # Call function
     container = bidsify_flywheel.process_matching_templates(context)
     # Define expected container
     container_expected = {
         'info': {
             'BIDS': {
                 'template': 'session_file',
                 'Filename': '', 'Folder': 'ses-sesTEST', 'Path': 'sub-12345/ses-sesTEST',
                 'ignore': False
                 }
             },
         u'type': u'tabular'}
     self.assertEqual(container, container_expected)
 def test_process_matching_templates_session(self):
     """ """
     # Define context
     context = {
         'container_type': 'session',
         'parent_container_type': 'project',
         'project': {'label': 'Project_Label_Test'},
         'subject': {'code' : '12345'},
         'session': {'label': 'Session_Label_Test'},
         'acquisition': None,
         'file': {},
         'ext': '.zip'
     }
     # Call function
     container = bidsify_flywheel.process_matching_templates(context)
     # Define expected container
     container_expected = {
         'info': {
             'BIDS': {
                 'Label': 'SessionLabelTest',
                 'Subject': '12345',
                 'template': 'session',
                 'ignore': False
                 }
             },
             'label': 'Session_Label_Test'
         }
     self.assertEqual(container, container_expected)
 def test_resolve_initial_dicom_field_values_from_filename(self):
     # Define context
     context = {
         'container_type': 'file',
         'parent_container_type': 'acquisition',
         'project': {u'label': 'hello'},
         'subject': {u'code': u'001'},
         'session': {u'label': u'sesTEST', 'info': {'BIDS': {'Label': u'sesTEST', 'Subject': u'001'}}},
         'acquisition': {u'label': u'acqTEST'},
         'file': {
             u'name': u'09 cmrr_mbepi_task-spatialfrequency_s6_2mm_66sl_PA_TR1.0.dcm.zip',
             u'classification': {u'Measurement': u'Diffusion', u'Intent': u'Structural'},
             u'type': u'dicom'
         },
         'ext': '.dcm.zip'
     }
     # Call function
     container = bidsify_flywheel.process_matching_templates(context)
     # Define expected container
     container_expected = {'info': {'BIDS': {
             'template': 'dicom_file',
             'Filename': u'09 cmrr_mbepi_task-spatialfrequency_s6_2mm_66sl_PA_TR1.0.dcm.zip',
             'Folder': 'sourcedata',
             'Path': u'sourcedata/sub-001/ses-sesTEST',
             'ignore': False
             }},
         u'name': u'09 cmrr_mbepi_task-spatialfrequency_s6_2mm_66sl_PA_TR1.0.dcm.zip',
         u'classification': {u'Measurement': u'Diffusion', u'Intent': u'Structural'},
         u'type': u'dicom'}
     self.assertEqual(container, container_expected)
 def test_process_matching_templates_non_bids_dicom(self):
     # Define context
     context = {
         'container_type': 'file',
         'parent_container_type': 'acquisition',
         'project': {u'label': 'hello'},
         'subject': {u'code': u'001'},
         'session': {u'label': u'sesTEST', 'info': {'BIDS': {'Label': u'sesTEST', 'Subject': u'001'}}},
         'acquisition': {u'label': u'acqTEST', u'id': u'09090'},
         'file': {
             u'name': u'4784_1_1_localizer',
             u'classification': {u'Measurement': u'T2', u'Intent': u'Localizer'},
             u'type': u'dicom'
         },
         'ext': '.dcm.zip'
     }
     # Call function
     container = bidsify_flywheel.process_matching_templates(context)
     print(container)
     # Define expected container
     container_expected = {
         u'name': u'4784_1_1_localizer',
         u'classification': {u'Measurement': u'T2', u'Intent': u'Localizer'},
         u'type': u'dicom'
     }
     self.assertEqual(container, container_expected)
 def test_process_matching_templates_fieldmap_phase_encoded(self):
     """"""
     # Define context
     context = {
         'container_type': 'file',
         'parent_container_type': 'acquisition',
         'project': None,
         'subject': {u'code': u'001'},
         'session': {u'label': u'sesTEST', 'info': {'BIDS': {'Label': u'sesTEST', 'Subject': u'001'}}},
         'acquisition': {u'label': u'acqTEST Topup PA'}, # Acquisition label needs to contain
         'file': {u'classification': {u'Intent': u'Fieldmap'},
                 u'type': u'nifti'
                 },
         'ext': '.nii.gz'
     }
     # Call function
     container = bidsify_flywheel.process_matching_templates(context)
     # Define expected container
     container_expected = {
         'info': {
             'BIDS': {
                 'template': 'fieldmap_phase_encoded_file',
                 'Filename': u'sub-001_ses-sesTEST_dir-PA_epi.nii.gz',
                 'Folder': 'fmap', 'Path': u'sub-001/ses-sesTEST/fmap',
                 'Acq': '', 'Run': '', 'Dir': 'PA', 'Modality': 'epi',
                 'IntendedFor': [
                     {'Folder': 'anat'},
                     {'Folder': 'func'}
                 ],
                 'ignore': False
                 }
             },
         u'classification': {u'Intent': u'Fieldmap'}, u'type': u'nifti'}
     self.assertEqual(container, container_expected)
 def test_process_matching_templates_dwi_bvec(self):
     """ """
     # Define context
     context = {
         'container_type': 'file',
         'parent_container_type': 'acquisition',
         'project': None,
         'subject': {u'code': u'001'},
         'session': {u'label': u'sesTEST', 'info': {'BIDS': {'Label': u'sesTEST', 'Subject': u'001'}}},
         'acquisition': {u'label': u'acqTEST'},
         'file': {u'classification': {u'Measurement': u'Diffusion', u'Intent': u'Structural'},
                 u'type': u'bvec'
                     },
         'ext': '.bvec'
     }
     # Call function
     container = bidsify_flywheel.process_matching_templates(context)
     # Define expected container
     container_expected = {
         'info': {
             'BIDS': {
                 'template': 'diffusion_file',
                 'Filename': u'sub-001_ses-sesTEST_dwi.bvec',
                 'Path': u'sub-001/ses-sesTEST/dwi', 'Folder': 'dwi',
                  'Modality': 'dwi', 'Acq': '', 'Run': '',
                 'ignore': False
                 }
             },
         u'classification': {u'Measurement': u'Diffusion', u'Intent': u'Structural'}, u'type': u'bvec'}
     self.assertEqual(container, container_expected)
 def test_process_matching_templates_physio_task_events(self):
     """"""
     # Define context
     context = {
         'container_type': 'file',
         'parent_container_type': 'acquisition',
         'project': None,
         'subject': {u'code': u'001'},
         'session': {u'label': u'sesTEST', 'info': {'BIDS': {'Label': u'sesTEST', 'Subject': u'001'}}},
         'acquisition': {u'label': u'acqTEST'},
         'file': {u'classification': {u'Custom': u'Physio'},
                 u'type': u'tabular data',
                     },
         'ext': '.tsv'
     }
     # Call function
     container = bidsify_flywheel.process_matching_templates(context)
     # Define expected container
     container_expected = {
         'info': {
             'BIDS': {
                 'template': 'physio_task_file',
                 'Filename': u'sub-001_ses-sesTEST_task-{file.info.BIDS.Task}_physio.tsv',
                 'Folder': 'func', 'Path': u'sub-001/ses-sesTEST/func',
                 'Acq': '', 'Task': '',
                 'Modality': 'physio',
                 'Rec': '',
                 'Recording': '',
                 'Run': '',
                 'Echo': '',
                 'ignore': False
                 }
             },
         u'classification': {u'Custom': u'Physio'}, u'type': u'tabular data'}
     self.assertEqual(container, container_expected)
 def test_process_matching_templates_func(self):
     """ """
     # Define context
     context = {
         'container_type': 'file',
         'parent_container_type': 'acquisition',
         'project': None,
         'subject': {u'code': u'001'},
         'session': {u'label': u'sesTEST', 'info': {'BIDS': {'Label': u'sesTEST', 'Subject': u'001'}}},
         'run_counters': utils.RunCounterMap(),
         'acquisition': {u'label': u'acq_task-TEST_run+'},
         'file': {u'classification': {u'Intent': u'Functional'},
                 u'type': u'nifti',
                     },
         'ext': '.nii.gz'
     }
     # Call function
     container = bidsify_flywheel.process_matching_templates(context)
     # Define expected container
     container_expected = {
         'info': {
             'BIDS': {
                 'template': 'func_file',
                 'Filename': u'sub-001_ses-sesTEST_task-TEST_run-1_bold.nii.gz',
                 'Folder': 'func', 'Path': u'sub-001/ses-sesTEST/func',
                 'Acq': '', 'Task': 'TEST', 'Modality': 'bold',
                 'Rec': '', 'Run': '1', 'Echo': '',
                 'ignore': False
                 }
             },
         u'classification': {u'Intent': u'Functional'}, u'type': u'nifti'}
     self.assertEqual(container, container_expected)