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)
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()
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()