GeneralBrokenLines  trunk_rev46
 All Classes Files Functions Variables Typedefs Pages
MilleBinary.cpp
Go to the documentation of this file.
1 /*
2  * MilleBinary.cpp
3  *
4  * Created on: Aug 31, 2011
5  * Author: kleinwrt
6  */
7 
8 #include "MilleBinary.h"
9 
11 
15 MilleBinary::MilleBinary(const std::string fileName, unsigned int aSize) :
16  binaryFile(fileName.c_str(), std::ios::binary | std::ios::out), intBuffer(), floatBuffer() {
17  intBuffer.reserve(aSize);
18  floatBuffer.reserve(aSize);
19  intBuffer.push_back(0); // first word is error counter
20  floatBuffer.push_back(0.);
21 }
22 
24  binaryFile.close();
25 }
26 
28 
36 void MilleBinary::addData(float aMeas, float aErr,
37  const std::vector<unsigned int> &indLocal,
38  const std::vector<double> &derLocal, const std::vector<int> &labGlobal,
39  const std::vector<double> &derGlobal) {
40 
41  intBuffer.push_back(0);
42  floatBuffer.push_back(aMeas);
43  for (unsigned int i = 0; i < indLocal.size(); ++i) {
44  intBuffer.push_back(indLocal[i]);
45  floatBuffer.push_back(derLocal[i]);
46  }
47  intBuffer.push_back(0);
48  floatBuffer.push_back(aErr);
49  for (unsigned int i = 0; i < labGlobal.size(); ++i) {
50  if (derGlobal[i]) {
51  intBuffer.push_back(labGlobal[i]);
52  floatBuffer.push_back(derGlobal[i]);
53  }
54  }
55 }
56 
59 
60  const int recordLength = intBuffer.size() * 2;
61  binaryFile.write(reinterpret_cast<const char*>(&recordLength),
62  sizeof(recordLength));
63  binaryFile.write(reinterpret_cast<char*>(&floatBuffer[0]),
64  floatBuffer.size() * sizeof(floatBuffer[0]));
65  binaryFile.write(reinterpret_cast<char*>(&intBuffer[0]),
66  intBuffer.size() * sizeof(intBuffer[0]));
67  // start with new record
68  intBuffer.resize(1);
69  floatBuffer.resize(1);
70 }
71