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)
Beispiel #2
0
    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)
Beispiel #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()
Beispiel #4
0
    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)
Beispiel #5
0
    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))
Beispiel #6
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()