def fromString(stringValue): """ Create an OpticsGroups from string content (STAR format) """ f = io.StringIO(stringValue) t = Table() t.readStar(f, tableName='optics') return OpticsGroups(t)
def test_write_singleRow(self): fn = '/tmp/test-single-row.star' print("Writing a single row to %s..." % fn) t = Table() f1 = StringIO(one_micrograph_mc) t.readStar(f1, tableName='global_shift') t.writeStar(sys.stdout, tableName='global_shift', singleRow=True) t = Table(columns=['rlnImageSizeX', 'rlnImageSizeY', 'rlnMicrographMovieName']) t.addRow(3710, 3838, 'Movies/14sep05c_00024sq_00003hl_00002es.frames.out.mrc') with open(fn, 'w') as f: t.writeStar(f, singleRow=True)
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()
def test_types(self): """ Tests when providing types dict instead of guessing the type. """ def _checkCols(goldValues, t): """ Check expected columns and their types. """ for colName, colType in goldValues.items(): col = t.getColumn(colName) self.assertIsNotNone(col) self.assertEqual(colType, col.getType()) # Replace the micName to get a number value for that column micsStr = corrected_micrographs_mc micsStr = micsStr.replace('MotionCorr/job002/Movies/20170629_000', '') micsStr = micsStr.replace('_frameImage.mrc', '') f = StringIO(micsStr) t = Table() t.readStar(f, tableName='micrographs') goldValues = {'rlnCtfPowerSpectrum': str, 'rlnMicrographName': int, # should be integer after replace 'rlnMicrographMetadata': str, 'rlnOpticsGroup': int, 'rlnAccumMotionTotal': float, 'rlnAccumMotionEarly': float, 'rlnAccumMotionLate': float } _checkCols(goldValues, t) # Now parse again the table but force some columns to be str types = {'rlnMicrographName': str, 'rlnOpticsGroup': str } f = StringIO(micsStr) t.readStar(f, tableName='micrographs', types=types) goldValues.update(types) _checkCols(goldValues, t)
def test_addRows(self): print("Checking addRows...") t1 = Table() f1 = StringIO(particles_3d_classify) t1.readStar(f1) nRows = len(t1) lastRow = t1[-1] values = [378.000000, 2826.000000, 5.360625, 4, -87.35289, "000100@Extract/job012/Movies/20170629_00021_frameImage.mrcs", "MotionCorr/job002/Movies/20170629_00021_frameImage.mrc", 1, 4.809192, 0.131159, 10864.146484, 10575.793945, 77.995003, 0.000000, 1.000000, 0.000000, 1, 81.264321, 138.043147, 4.959233, -2.12077, 0.798727, 10937.130965, 0.998434, 5 ] for i in range(1, 4): values[4] = nRows + 1 t1.addRow(*values) self.assertEqual(nRows + 3, len(t1)) newLastRow = t1[-1] self.assertEqual(len(lastRow), len(newLastRow))
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()