Пример #1
0
    def test_iterRows(self):
        print("Checking iterRows...")
        dataFile = testfile('star', 'refine3d', 'run_it016_data.star')
        table = Table(fileName=dataFile, tableName='particles')

        # Let's open again the same file for iteration
        with open(dataFile) as f:
            tableReader = Table.Reader(f, tableName='particles')

            for c1, c2 in zip(table.getColumns(), tableReader.getColumns()):
                self.assertEqual(c1, c2, "Column c1 (%s) differs from c2 (%s)"
                                 % (c1, c2))

                for r1, r2 in zip(table, tableReader):
                    self.assertEqual(r1, r2)

        # Now try directly with iterRows function
        for r1, r2 in zip(table,
                          Table.iterRows(dataFile, tableName='particles')):
            self.assertEqual(r1, r2)

        defocusSorted = sorted(float(r.rlnDefocusU) for r in table)

        for d1, row in zip(defocusSorted,
                           Table.iterRows(dataFile,
                                          tableName='particles',
                                          key=lambda r: r.rlnDefocusU)):
            self.assertAlmostEqual(d1, row.rlnDefocusU)

        # Test sorting by imageName column, also using getColumnValues and sort()
        imageIds = table.getColumnValues('rlnImageName')
        imageIds.sort()

        # Check sorted iteration give the total amount of rows
        rows = [r for r in Table.iterRows(dataFile,
                                          tableName='particles',
                                          key='rlnImageName')]
        self.assertEqual(len(imageIds), len(rows))

        for id1, row in zip(imageIds,
                            Table.iterRows(dataFile,
                                           tableName='particles',
                                           key='rlnImageName')):
            self.assertEqual(id1, row.rlnImageName)

        def getIter():
            """ Test a function to get an iterator. """
            return Table.iterRows(dataFile,
                                  tableName='particles', key='rlnImageName')

        iterByIds = getIter()
        for id1, row in zip(imageIds, iterByIds):
            self.assertEqual(id1, row.rlnImageName)
Пример #2
0
    def test_read_blocks(self):
        """
        Read an star file with several blocks
        """
        print("Reading micrograph star file...")
        t1 = Table()
        f1 = StringIO(one_micrograph_mc)

        # This is a single-row table (different text format key, value)
        print("\tread data_general ..")
        t1.readStar(f1, tableName='general')

        goldValues = [('rlnImageSizeX', 3710),
                      ('rlnImageSizeY', 3838),
                      ('rlnImageSizeZ', 24),
                      ('rlnMicrographMovieName', 'Movies/20170629_00027_frameImage.tiff'),
                      ('rlnMicrographGainName', 'Movies/gain.mrc'),
                      ('rlnMicrographBinning', 1.000000),
                      ('rlnMicrographOriginalPixelSize', 0.885000),
                      ('rlnMicrographDoseRate', 1.277000),
                      ('rlnMicrographPreExposure', 0.000000),
                      ('rlnVoltage', 200.000000),
                      ('rlnMicrographStartFrame', 1),
                      ('rlnMotionModelVersion', 1)
                      ]

        self._checkColumns(t1, [k for k, v in goldValues])
        row = t1[0]
        for k, v in goldValues:
            self.assertEqual(getattr(row, k), v, "data_general table check failed!")

        print("\tread data_global_shift ..")
        t1.readStar(f1, tableName='global_shift')
        cols = t1.getColumns()

        self.assertEqual(len(t1), 24, "Number of rows check failed!")
        self._checkColumns(t1, ['rlnMicrographFrameNumber',
                                'rlnMicrographShiftX',
                                'rlnMicrographShiftY'])

        print("\tread data_local_motion_model ..")
        t1.readStar(f1, tableName='local_motion_model')

        self.assertEqual(len(t1), 36, "Number of rows check failed!")
        self._checkColumns(t1, ['rlnMotionModelCoeffsIdx',
                                'rlnMotionModelCoeff'])
        coeffs = [int(v) for v in t1.getColumnValues('rlnMotionModelCoeffsIdx')]
        self.assertEqual(coeffs, list(range(36)), "rlnMotionModelCoeffsIdx check failed")

        f1.close()
Пример #3
0
    def test_read_particles(self):
        """
        Read from a particles .star file
        """
        print("Reading particles star file...")
        t1 = Table()
        f1 = StringIO(particles_3d_classify)

        t1.readStar(f1)
        cols = t1.getColumns()

        self.assertEqual(len(t1), 16, "Number of rows check failed!")
        self.assertEqual(len(cols), 25, "Number of columns check failed!")

        # Check that all rlnOpticsGroup is 1 and rlnImageName file is the same
        for i, row in enumerate(t1):
            self.assertEqual(row.rlnOpticsGroup, 1, "rlnOpticsGroup check failed!")
            self.assertEqual(row.rlnImageName.split("@")[1], "Extract/job012/Movies/20170629_00021_frameImage.mrcs",
                                                             "rlnImageId check failed!")

        f1.close()