ProteoWizard
BinaryDataEncoder.hpp
Go to the documentation of this file.
1//
2// $Id$
3//
4//
5// Original author: Darren Kessner <darren@proteowizard.org>
6//
7// Copyright 2007 Spielberg Family Center for Applied Proteomics
8// Cedars Sinai Medical Center, Los Angeles, California 90048
9//
10// Licensed under the Apache License, Version 2.0 (the "License");
11// you may not use this file except in compliance with the License.
12// You may obtain a copy of the License at
13//
14// http://www.apache.org/licenses/LICENSE-2.0
15//
16// Unless required by applicable law or agreed to in writing, software
17// distributed under the License is distributed on an "AS IS" BASIS,
18// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19// See the License for the specific language governing permissions and
20// limitations under the License.
21//
22
23
24#ifndef _BINARYDATAENCODER_HPP_
25#define _BINARYDATAENCODER_HPP_
26
27
30#include "boost/shared_ptr.hpp"
31#include <string>
32#include <vector>
33#include <map>
35
36
37namespace pwiz {
38namespace msdata {
39
40const double BinaryDataEncoder_default_numpressSlofErrorTolerance = 0.0002; // 2/100th of one percent
42const double BinaryDataEncoder_default_numpressPicErrorTolerance = 0.5; // rounds to nearest integer
43
44/// binary-to-text encoding
46{
47 public:
48
49 enum Precision {Precision_32, Precision_64};
50 enum ByteOrder {ByteOrder_LittleEndian, ByteOrder_BigEndian};
51 enum Compression {Compression_None, Compression_Zlib};
52 enum Numpress {Numpress_None, Numpress_Linear, Numpress_Pic, Numpress_Slof}; // lossy numerical representations
53
54 /// encoding/decoding configuration
56 {
59 Compression compression; // zlib or none
60 Numpress numpress; // lossy numerical compression
61 double numpressFixedPoint; // for Numpress_* use, 0=derive best value
62 double numpressLinearErrorTolerance; // guarantee abs(1.0-(encoded/decoded)) <= this, 0=do not guarantee anything
63 double numpressSlofErrorTolerance; // guarantee abs(1.0-(encoded/decoded)) <= this, 0=do not guarantee anything
64 double numpressLinearAbsMassAcc; // absolute mass error for lossy linear compression in Th (e.g. use 1e-4 for 1ppm @ 100 Th)
65
66 std::map<cv::CVID, Precision> precisionOverrides;
67 std::map<cv::CVID, Numpress> numpressOverrides;
68
70 : precision(Precision_64),
71 byteOrder(ByteOrder_LittleEndian),
72 compression(Compression_None),
73 numpress(Numpress_None),
74 numpressFixedPoint(0.0),
77 numpressLinearAbsMassAcc(-1.0)
78 {}
79 };
80
81 BinaryDataEncoder(const Config& config = Config());
82
83 const Config& getConfig() const; // get the config actually used - may differ from input for numpress use
84
85 /// encode binary data as a text string
86 void encode(const std::vector<double>& data, std::string& result, size_t* binaryByteCount = NULL) const;
87
88 /// encode binary data as a text string
89 void encode(const double* data, size_t dataSize, std::string& result, size_t* binaryByteCount = NULL) const;
90
91 /// decode text-encoded data as binary
92 void decode(const char *encodedData, size_t len, pwiz::util::BinaryData<double>& result) const;
93 void decode(const std::string& encodedData, pwiz::util::BinaryData<double>& result) const
94 {
95 decode(encodedData.c_str(),encodedData.length(),result);
96 }
97
98 private:
99 class Impl;
100 boost::shared_ptr<Impl> impl_;
103};
104
105
106PWIZ_API_DECL std::ostream& operator<<(std::ostream& os, const BinaryDataEncoder::Config& config);
107
108
109} // namespace msdata
110} // namespace pwiz
111
112
113#endif // _BINARYDATAENCODER_HPP_
114
#define PWIZ_API_DECL
Definition Export.hpp:32
void decode(const char *encodedData, size_t len, pwiz::util::BinaryData< double > &result) const
decode text-encoded data as binary
BinaryDataEncoder(const Config &config=Config())
void decode(const std::string &encodedData, pwiz::util::BinaryData< double > &result) const
BinaryDataEncoder & operator=(const BinaryDataEncoder &)
void encode(const std::vector< double > &data, std::string &result, size_t *binaryByteCount=NULL) const
encode binary data as a text string
boost::shared_ptr< Impl > impl_
const Config & getConfig() const
BinaryDataEncoder(const BinaryDataEncoder &)
void encode(const double *data, size_t dataSize, std::string &result, size_t *binaryByteCount=NULL) const
encode binary data as a text string
A custom vector class that can store its contents in either a std::vector or a cli::array (when compi...
std::ostream & operator<<(std::ostream &os, const Diff< object_type, config_type > &diff)
stream insertion of Diff results
Definition diff_std.hpp:200
const double BinaryDataEncoder_default_numpressPicErrorTolerance
const double BinaryDataEncoder_default_numpressSlofErrorTolerance
const double BinaryDataEncoder_default_numpressLinearErrorTolerance
encoding/decoding configuration
std::map< cv::CVID, Precision > precisionOverrides
std::map< cv::CVID, Numpress > numpressOverrides