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>
34 #include "pwiz/data/common/cv.hpp"
35 
36 
37 namespace pwiz {
38 namespace msdata {
39 
40 const double BinaryDataEncoder_default_numpressSlofErrorTolerance = 0.0002; // 2/100th of one percent
42 const 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),
75  numpressLinearErrorTolerance(BinaryDataEncoder_default_numpressLinearErrorTolerance),
76  numpressSlofErrorTolerance(BinaryDataEncoder_default_numpressSlofErrorTolerance),
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 
106 PWIZ_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 
pwiz::msdata::BinaryDataEncoder::decode
void decode(const char *encodedData, size_t len, pwiz::util::BinaryData< double > &result) const
decode text-encoded data as binary
pwiz
Definition: ChromatogramList_Filter.hpp:36
pwiz::msdata::BinaryDataEncoder::Numpress
Numpress
Definition: BinaryDataEncoder.hpp:52
pwiz::msdata::BinaryDataEncoder::encode
void encode(const std::vector< double > &data, std::string &result, size_t *binaryByteCount=NULL) const
encode binary data as a text string
PWIZ_API_DECL
#define PWIZ_API_DECL
Definition: Export.hpp:32
pwiz::msdata::BinaryDataEncoder::impl_
boost::shared_ptr< Impl > impl_
Definition: BinaryDataEncoder.hpp:99
Export.hpp
pwiz::msdata::BinaryDataEncoder::Config::numpressSlofErrorTolerance
double numpressSlofErrorTolerance
Definition: BinaryDataEncoder.hpp:63
pwiz::msdata::BinaryDataEncoder::Config::precisionOverrides
std::map< cv::CVID, Precision > precisionOverrides
Definition: BinaryDataEncoder.hpp:66
pwiz::msdata::operator<<
PWIZ_API_DECL std::ostream & operator<<(std::ostream &os, const BinaryDataEncoder::Config &config)
pwiz::msdata::BinaryDataEncoder::Config::numpressOverrides
std::map< cv::CVID, Numpress > numpressOverrides
Definition: BinaryDataEncoder.hpp:67
pwiz::msdata::BinaryDataEncoder::Config::precision
Precision precision
Definition: BinaryDataEncoder.hpp:57
pwiz::msdata::BinaryDataEncoder_default_numpressLinearErrorTolerance
const double BinaryDataEncoder_default_numpressLinearErrorTolerance
Definition: BinaryDataEncoder.hpp:41
pwiz::msdata::BinaryDataEncoder_default_numpressPicErrorTolerance
const double BinaryDataEncoder_default_numpressPicErrorTolerance
Definition: BinaryDataEncoder.hpp:42
pwiz::msdata::BinaryDataEncoder::Config::byteOrder
ByteOrder byteOrder
Definition: BinaryDataEncoder.hpp:58
pwiz::util::BinaryData< double >
pwiz::msdata::BinaryDataEncoder::ByteOrder
ByteOrder
Definition: BinaryDataEncoder.hpp:50
pwiz::msdata::BinaryDataEncoder::Config::numpressLinearAbsMassAcc
double numpressLinearAbsMassAcc
Definition: BinaryDataEncoder.hpp:64
pwiz::msdata::BinaryDataEncoder::Compression
Compression
Definition: BinaryDataEncoder.hpp:51
pwiz::msdata::BinaryDataEncoder::decode
void decode(const std::string &encodedData, pwiz::util::BinaryData< double > &result) const
Definition: BinaryDataEncoder.hpp:93
pwiz::msdata::BinaryDataEncoder::getConfig
const Config & getConfig() const
pwiz::msdata::BinaryDataEncoder::BinaryDataEncoder
BinaryDataEncoder(const Config &config=Config())
pwiz::msdata::BinaryDataEncoder::Config::numpress
Numpress numpress
Definition: BinaryDataEncoder.hpp:60
pwiz::msdata::BinaryDataEncoder
binary-to-text encoding
Definition: BinaryDataEncoder.hpp:46
pwiz::msdata::BinaryDataEncoder::Config::numpressLinearErrorTolerance
double numpressLinearErrorTolerance
Definition: BinaryDataEncoder.hpp:62
pwiz::msdata::BinaryDataEncoder::ByteOrder_LittleEndian
@ ByteOrder_LittleEndian
Definition: BinaryDataEncoder.hpp:50
BinaryData.hpp
pwiz::msdata::BinaryDataEncoder::encode
void encode(const double *data, size_t dataSize, std::string &result, size_t *binaryByteCount=NULL) const
encode binary data as a text string
pwiz::msdata::BinaryDataEncoder::Config::Config
Config()
Definition: BinaryDataEncoder.hpp:69
pwiz::msdata::BinaryDataEncoder_default_numpressSlofErrorTolerance
const double BinaryDataEncoder_default_numpressSlofErrorTolerance
Definition: BinaryDataEncoder.hpp:40
pwiz::msdata::BinaryDataEncoder::operator=
BinaryDataEncoder & operator=(const BinaryDataEncoder &)
pwiz::msdata::BinaryDataEncoder::Config::numpressFixedPoint
double numpressFixedPoint
Definition: BinaryDataEncoder.hpp:61
pwiz::msdata::BinaryDataEncoder::Precision
Precision
Definition: BinaryDataEncoder.hpp:49
cv.hpp
pwiz::msdata::BinaryDataEncoder::BinaryDataEncoder
BinaryDataEncoder(const BinaryDataEncoder &)
pwiz::msdata::BinaryDataEncoder::Config::compression
Compression compression
Definition: BinaryDataEncoder.hpp:59
pwiz::msdata::BinaryDataEncoder::Config
encoding/decoding configuration
Definition: BinaryDataEncoder.hpp:56