示例#1
0
def setCompressionOptions(opt):
    """
    Adds suitable compression options for an object of type
    pyopenms.PeakFileOptions
        - compresses mass / time arrays with numpress linear
        - compresses intensity with slof (log integer)
        - compresses ion mobility with slof (log integer)
    """
    cfg = pyopenms.NumpressConfig()
    cfg.estimate_fixed_point = True
    cfg.numpressErrorTolerance = -1.0  # skip check, faster
    cfg.setCompression(b"linear")
    cfg.linear_fp_mass_acc = -1
    # set the desired RT accuracy in seconds
    opt.setNumpressConfigurationMassTime(cfg)
    cfg = pyopenms.NumpressConfig()
    cfg.estimate_fixed_point = True
    cfg.numpressErrorTolerance = -1.0  # skip check, faster
    cfg.setCompression(b"slof")
    opt.setNumpressConfigurationIntensity(cfg)
    opt.setCompression(True)  # zlib compression

    # Now also try to compress float data arrays (this is not enabled in all
    # versions of pyOpenMS).
    try:
        cfg = pyopenms.NumpressConfig()
        cfg.estimate_fixed_point = True
        cfg.numpressErrorTolerance = -1.0  # skip check, faster
        cfg.setCompression(b"slof")
        opt.setNumpressConfigurationFloatDataArray(cfg)
    except Exception:
        pass
示例#2
0
def main():

    if len(sys.argv) < 3:
        raise RuntimeError("need arguments: tdf_directory output.mzML")

    analysis_dir = sys.argv[1]
    output_fname = sys.argv[2]

    if sys.version_info.major == 2:
        analysis_dir = unicode(analysis_dir)

    td = timsdata.TimsData(analysis_dir)
    conn = td.conn

    # Get total frame count:
    q = conn.execute("SELECT COUNT(*) FROM Frames")
    row = q.fetchone()
    N = row[0]
    print("Analysis has {0} frames.".format(N))

    # Store output
    if output_fname.lower().endswith("mzml"):
        consumer = pyopenms.PlainMSDataWritingConsumer(output_fname)

        # Compress output
        try:
            opt = consumer.getOptions()
            cfg = pyopenms.NumpressConfig()
            cfg.estimate_fixed_point = True
            cfg.numpressErrorTolerance = -1.0 # skip check, faster
            cfg.setCompression("linear");
            cfg.linear_fp_mass_acc = -1; # set the desired RT accuracy in seconds
            opt.setNumpressConfigurationMassTime(cfg)
            cfg = pyopenms.NumpressConfig()
            cfg = pyopenms.NumpressConfig()
            cfg.estimate_fixed_point = True
            cfg.numpressErrorTolerance = -1.0 # skip check, faster
            cfg.setCompression("slof");
            opt.setNumpressConfigurationIntensity(cfg)
            opt.setCompression(True) # zlib compression
            consumer.setOptions(opt)
        except Exception:
            pass

    if output_fname.lower().endswith("sqmass"):
        consumer = pyopenms.MSDataSqlConsumer(output_fname)

    for frame_id in range(N):
        store_frame(frame_id+1, td, conn, consumer, compressFrame=True)
示例#3
0
    def test_encodeNP_SLOF(self):
        """
          String out;

          MSNumpressCoder::NumpressConfig config;
          config.np_compression = MSNumpressCoder::SLOF;
          config.estimate_fixed_point = true; // critical

          bool zlib_compression = false;
          MSNumpressCoder().encodeNP(in, out, zlib_compression, config);

          TEST_EQUAL(out.size(), 24)
          TEST_EQUAL(out, "QMVagAAAAAAZxX3ivPP8/w==")

        """
        coder = pyopenms.MSNumpressCoder()
        config = pyopenms.NumpressConfig()
        config.np_compression = pyopenms.MSNumpressCoder.NumpressCompression.SLOF
        config.estimate_fixed_point = True

        out_ = pyopenms.String()
        coder.encodeNP(self.testData, out_, False, config)
        out = out_.c_str()

        self.assertEqual(len(out), 24)
        self.assertEqual(out, "QMVagAAAAAAZxX3ivPP8/w==")
示例#4
0
    def test_encodeNP_LINEAR(self):
        coder = pyopenms.MSNumpressCoder()
        config = pyopenms.NumpressConfig()
        config.np_compression = pyopenms.MSNumpressCoder.NumpressCompression.LINEAR
        config.estimate_fixed_point = True

        out_ = pyopenms.String()
        coder.encodeNP(self.testData, out_, False, config)
        out = out_.c_str()

        self.assertEqual(len(out), 28)
        self.assertEqual(out, "QWR64UAAAADo//8/0P//f1kSgA==")
示例#5
0
    def test_encodeNP_PIC(self):
        coder = pyopenms.MSNumpressCoder()
        config = pyopenms.NumpressConfig()
        config.np_compression = pyopenms.MSNumpressCoder.NumpressCompression.PIC
        config.estimate_fixed_point = True

        out_ = pyopenms.String()
        coder.encodeNP(self.testData, out_, False, config)
        out = out_.c_str()

        self.assertEqual(len(out), 12)
        self.assertEqual(out, "ZGaMXCFQkQ==")
示例#6
0
    def test_encodeNP_PIC(self):
        coder = pyopenms.MSNumpressCoder()
        config = pyopenms.NumpressConfig()
        config.np_compression = pyopenms.MSNumpressCoder.NumpressCompression.PIC
        config.estimate_fixed_point = True

        out_ = pyopenms.String()
        coder.encodeNPRaw(self.testData, out_, config)
        out = out_.c_str()

        self.assertEqual(len(out), 7)
        self.assertEqual(out, b'df\x8c\\!P\x91')
示例#7
0
    def test_decodeNP_LINEAR(self):
        coder = pyopenms.MSNumpressCoder()
        config = pyopenms.NumpressConfig()
        config.np_compression = pyopenms.MSNumpressCoder.NumpressCompression.LINEAR
        config.estimate_fixed_point = True

        inData = "QWR64UAAAADo//8/0P//f1kSgA=="
        out = []
        coder.decodeNP(inData, out, False, config)

        self.assertEqual(len(out), 4)
        for a, b in zip(self.testData, out):
            self.assertAlmostEqual(a, b, places=7)
示例#8
0
    def test_decodeNP_PIC(self):
        coder = pyopenms.MSNumpressCoder()
        config = pyopenms.NumpressConfig()
        config.np_compression = pyopenms.MSNumpressCoder.NumpressCompression.PIC
        config.estimate_fixed_point = True

        inData = "ZGaMXCFQkQ=="
        out = []
        coder.decodeNP(inData, out, False, config)

        self.assertEqual(len(out), 4)
        for a, b in zip(self.testData, out):
            self.assertAlmostEqual(a, b, places=2)
示例#9
0
    def test_decodeNP_SLOF(self):
        coder = pyopenms.MSNumpressCoder()
        config = pyopenms.NumpressConfig()
        config.np_compression = pyopenms.MSNumpressCoder.NumpressCompression.SLOF
        config.estimate_fixed_point = True

        inData = "QMVagAAAAAAZxX3ivPP8/w=="
        out = []
        coder.decodeNP(inData, out, False, config)

        self.assertEqual(len(out), 4)
        for a, b in zip(self.testData, out):
            self.assertAlmostEqual(a, b, places=2)
示例#10
0
    def test_decodeNP_LINEAR(self):
        coder = pyopenms.MSNumpressCoder()
        config = pyopenms.NumpressConfig()
        config.np_compression = pyopenms.MSNumpressCoder.NumpressCompression.LINEAR
        config.estimate_fixed_point = True

        inData = b'Adz\xe1@\x00\x00\x00\xe8\xff\xff?\xd0\xff\xff\x7fY\x12\x80'
        out = []
        coder.decodeNPRaw(inData, out, config)

        self.assertEqual(len(out), 4)
        for a, b in zip(self.testData, out):
            self.assertAlmostEqual(a, b, places=7)
示例#11
0
    def test_encodeNP_LINEAR(self):
        coder = pyopenms.MSNumpressCoder()
        config = pyopenms.NumpressConfig()
        config.np_compression = pyopenms.MSNumpressCoder.NumpressCompression.LINEAR
        config.estimate_fixed_point = True

        out_ = pyopenms.String()
        coder.encodeNPRaw(self.testData, out_, config)
        out = out_.c_str()

        self.assertEqual(len(out), 19)
        self.assertEqual(
            out, b'Adz\xe1@\x00\x00\x00\xe8\xff\xff?\xd0\xff\xff\x7fY\x12\x80')
示例#12
0
    def test_decodeNP_PIC(self):
        coder = pyopenms.MSNumpressCoder()
        config = pyopenms.NumpressConfig()
        config.np_compression = pyopenms.MSNumpressCoder.NumpressCompression.PIC
        config.estimate_fixed_point = True

        inData = b'df\x8c\\!P\x91'
        out = []
        coder.decodeNPRaw(inData, out, config)

        self.assertEqual(len(out), 4)
        for a, b in zip(self.testData, out):
            self.assertAlmostEqual(a, b, places=2)
示例#13
0
    def test_decodeNP_SLOF(self):
        coder = pyopenms.MSNumpressCoder()
        config = pyopenms.NumpressConfig()
        config.np_compression = pyopenms.MSNumpressCoder.NumpressCompression.SLOF
        config.estimate_fixed_point = True

        inData = b'@\xc5Z\x80\x00\x00\x00\x00\x19\xc5}\xe2\xbc\xf3\xfc\xff'
        out = []
        coder.decodeNPRaw(inData, out, config)

        self.assertEqual(len(out), 4)
        for a, b in zip(self.testData, out):
            self.assertAlmostEqual(a, b, places=2)
示例#14
0
    def test_encodeNP_SLOF(self):
        coder = pyopenms.MSNumpressCoder()
        config = pyopenms.NumpressConfig()
        config.np_compression = pyopenms.MSNumpressCoder.NumpressCompression.SLOF
        config.estimate_fixed_point = True

        out_ = pyopenms.String()
        coder.encodeNPRaw(self.testData, out_, config)
        out = out_.c_str()

        self.assertEqual(len(out), 16)
        self.assertEqual(
            out, b'@\xc5Z\x80\x00\x00\x00\x00\x19\xc5}\xe2\xbc\xf3\xfc\xff')