def test_unused_protocol_fixer(self):
     i_table_path = os.path.join(self._tmp_dir, 'BII-S-3', 'i_gilbert.txt')
     fixer = utils.IsaTabFixer(i_table_path)
     fixer.remove_unused_protocols()
     with open('{}.fix'.format(i_table_path)) as fixed_i_fp:
         investigation = isatab.load(fixed_i_fp)
         study = investigation.studies[-1]
         unused_protocol1 = \
             study.get_prot('reverse transcription - standard procedure 5')
         unused_protocol2 = \
             study.get_prot('sequence analysis - standard procedure 7')
         self.assertIsNone(unused_protocol1)
         self.assertIsNone(unused_protocol2)
Exemple #2
0
    def test_replace_factor_with_source_characteristic(self):
        fixer = utils.IsaTabFixer(os.path.join(self._tmp_dir, 's_BII-S-1.txt'))
        fixer.replace_factor_with_source_characteristic('limiting nutrient')

        expected_field_names = [
            'Source Name', 'Factor Value[limiting nutrient]',
            'Term Source REF', 'Term Accession Number',
            'Characteristics[organism]', 'Term Source REF',
            'Term Accession Number', 'Characteristics[strain]',
            'Term Source REF', 'Term Accession Number',
            'Characteristics[genotype]', 'Term Source REF',
            'Term Accession Number', 'Protocol REF', 'Sample Name',
            'Factor Value[rate]', 'Unit', 'Term Source REF',
            'Term Accession Number'
        ]

        with open(os.path.join(self._tmp_dir,
                               's_BII-S-1.txt')) as fixed_tab_fp:
            actual_field_names = list(
                map(lambda field_name: field_name.strip(),
                    next(fixed_tab_fp).split('\t')))
            self.assertListEqual(actual_field_names, expected_field_names)
    def test_fix_factor_two_args(self):
        s_table_path = os.path.join(self._tmp_dir, 'BII-S-3', 's_BII-S-3.txt')
        fixer = utils.IsaTabFixer(s_table_path)
        fixer.fix_factor(
            'dose', 'environmental material collection - standard procedure 1')

        expected_field_names = [
            'Source Name',
            'Characteristics[organism]',
            'Term Source REF', 'Term Accession Number',
            'Characteristics[geographic location (country and/or sea,region)]',
            'Term Source REF', 'Term Accession Number',
            'Characteristics[geographic location (longitude)]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[geographic location (latitude)]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[chlorophyll a concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[fucoxanthin concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[peridinin concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[butfucoxanthin concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[hexfucoxanthin concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[alloxanthin concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[zeaxanthin concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[lutein concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[chl-c3 concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[chl-c2 concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[prasinoxanthin concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[neoxanthin concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[violaxanthin concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[diadinoxanthin concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[diatoxanthin concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[divinyl-chl-b concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[chl-b concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[divinyl-chl-a concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[chl-a concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[BB carotene concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[bacteria count]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[synechococcus count]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[small picoeukaryotes count]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[large picoeukaryotes count]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[nanoflagellates count]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[cryptophytes count]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[phosphate concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[nitrate concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[particulate organic nitrogen concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[particulate organic carbon concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[primary production depth integrated production to '
            '3 m expressed_in mgC m-2 d-1]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[water salinity]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[fluorescence]',
            'Term Source REF', 'Term Accession Number',
            'Characteristics[water temperature at 3 meter depth]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Protocol REF',
            'Parameter Value[dose]',
            'Term Source REF', 'Term Accession Number',
            'Parameter Value[filter pore size]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Sample Name',
            'Factor Value[compound]',
            'Term Source REF', 'Term Accession Number',
            'Factor Value[collection time]',
            'Term Source REF', 'Term Accession Number']

        # check the columns got moved in the study file
        with open(s_table_path + '.fix') as fixed_tab_fp:
            actual_field_names = list(
                map(lambda field_name: field_name.strip(),
                    next(fixed_tab_fp).split('\t')))
            self.assertListEqual(actual_field_names, expected_field_names)

        # check the param got added to protocol and factor removed from study
        with open(os.path.dirname(
                s_table_path) + '/i_Investigation.txt.fix') as fixed_i_fp:
            investigation = isatab.load(fixed_i_fp)
            study = investigation.studies[-1]
            protocol = study.get_prot(
                'environmental material collection - standard procedure 1')
            param = protocol.get_param('dose')
            self.assertIsNotNone(param)
            factor = study.get_factor('dose')
            self.assertIsNone(factor)
    def test_fix_factor_one_arg(self):
        s_table_path = os.path.join(self._tmp_dir, 'BII-S-3', 's_BII-S-3.txt')
        fixer = utils.IsaTabFixer(s_table_path)
        fixer.fix_factor('dose')

        expected_field_names = [
            'Source Name',
            'Characteristics[dose]',
            'Term Source REF', 'Term Accession Number',
            'Characteristics[organism]',
            'Term Source REF', 'Term Accession Number',
            'Characteristics[geographic location (country and/or sea,region)]',
            'Term Source REF', 'Term Accession Number',
            'Characteristics[geographic location (longitude)]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[geographic location (latitude)]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[chlorophyll a concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[fucoxanthin concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[peridinin concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[butfucoxanthin concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[hexfucoxanthin concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[alloxanthin concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[zeaxanthin concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[lutein concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[chl-c3 concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[chl-c2 concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[prasinoxanthin concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[neoxanthin concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[violaxanthin concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[diadinoxanthin concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[diatoxanthin concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[divinyl-chl-b concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[chl-b concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[divinyl-chl-a concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[chl-a concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[BB carotene concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[bacteria count]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[synechococcus count]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[small picoeukaryotes count]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[large picoeukaryotes count]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[nanoflagellates count]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[cryptophytes count]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[phosphate concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[nitrate concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[particulate organic nitrogen concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[particulate organic carbon concentration]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[primary production depth integrated production to '
            '3 m expressed_in mgC m-2 d-1]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[water salinity]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Characteristics[fluorescence]',
            'Term Source REF', 'Term Accession Number',
            'Characteristics[water temperature at 3 meter depth]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Protocol REF',
            'Parameter Value[filter pore size]',
            'Unit', 'Term Source REF', 'Term Accession Number',
            'Sample Name',
            'Factor Value[compound]',
            'Term Source REF', 'Term Accession Number',
            'Factor Value[collection time]',
            'Term Source REF', 'Term Accession Number']

        with open(s_table_path) as fixed_tab_fp:
            actual_field_names = list(
                map(lambda field_name: field_name.strip(),
                    next(fixed_tab_fp).split('\t')))
            self.assertListEqual(actual_field_names, expected_field_names)