File indexing completed on 2023-03-17 10:43:56
0001 #include <fstream>
0002 #include <iostream> // for any std::cout
0003 #include <iomanip> // to print nicely formatted
0004 #include <string>
0005 #include <map>
0006 #include <memory>
0007
0008 #include <cassert>
0009
0010 #include "CLHEP/Matrix/GenMatrix.h"
0011 #include "CLHEP/Matrix/Matrix.h"
0012 #include "CLHEP/Matrix/Vector.h"
0013
0014 #include "Calibration/Tools/interface/matrixSaver.h"
0015
0016 matrixSaver::matrixSaver() {
0017
0018 }
0019
0020 matrixSaver::~matrixSaver() {
0021
0022 }
0023
0024 std::ostream &operator<<(std::ostream &outputFile, const CLHEP::HepGenMatrix *saveMe) {
0025 int numRow = saveMe->num_row();
0026 int numCol = saveMe->num_col();
0027
0028
0029 outputFile << numRow << '\t' << numCol << '\n';
0030
0031
0032 for (int row = 0; row < numRow; ++row) {
0033 for (int col = 0; col < numCol; ++col) {
0034 assert(row < numRow);
0035 assert(col < numCol);
0036 outputFile << (*saveMe)[row][col] << '\t';
0037 }
0038 outputFile << '\n';
0039 }
0040
0041 return outputFile;
0042 }
0043
0044 int matrixSaver::saveMatrix(std::string outputFileName, const CLHEP::HepGenMatrix *saveMe) {
0045
0046 std::fstream outputFile(outputFileName.c_str(), std::ios::out);
0047 assert(outputFile);
0048
0049 int numRow = saveMe->num_row();
0050 int numCol = saveMe->num_col();
0051
0052
0053 outputFile << numRow << '\t' << numCol << '\n';
0054
0055 outputFile << saveMe;
0056
0057 return 0;
0058 }
0059
0060 int matrixSaver::saveMatrixVector(std::string filename, const std::vector<CLHEP::HepGenMatrix *> &saveMe) {
0061 typedef std::vector<CLHEP::HepGenMatrix *>::const_iterator const_iterator;
0062
0063 std::fstream outputFile(filename.c_str(), std::ios::out);
0064 assert(outputFile.fail() == false);
0065
0066
0067 outputFile << saveMe.size() << '\n';
0068
0069
0070 outputFile << (*saveMe.begin())->num_row() << '\t' << (*saveMe.begin())->num_col() << '\n';
0071
0072
0073 for (const_iterator it = saveMe.begin(); it != saveMe.end(); ++it) {
0074 outputFile << (*it);
0075 }
0076
0077 return 0;
0078 }
0079
0080 std::istream &operator>>(std::istream &input, CLHEP::HepGenMatrix &matrix) {
0081 int numRow = 0;
0082 int numCol = 0;
0083
0084
0085 input >> numRow;
0086 input >> numCol;
0087
0088
0089 assert(numRow == matrix.num_row());
0090 assert(numCol == matrix.num_col());
0091
0092
0093 for (int row = 0; row < numRow; ++row) {
0094 for (int col = 0; col < numCol; ++col) {
0095 input >> matrix[row][col];
0096 assert(col * row < numRow * numCol);
0097 }
0098 }
0099
0100 return input;
0101 }
0102
0103 bool matrixSaver::touch(std::string inputFileName) {
0104 std::fstream inputFile(inputFileName.c_str(), std::ios::in);
0105 return !inputFile.fail();
0106 }
0107
0108 CLHEP::HepGenMatrix *matrixSaver::getMatrix(std::string inputFileName) {
0109
0110 std::fstream inputFile(inputFileName.c_str(), std::ios::in);
0111 if (inputFile.fail())
0112 std::cerr << "file: " << inputFileName << std::endl;
0113 assert(inputFile.fail() == false);
0114
0115
0116 int numRow = 0;
0117 int numCol = 0;
0118 inputFile >> numRow;
0119 inputFile >> numCol;
0120
0121
0122 CLHEP::HepGenMatrix *matrix;
0123 if (numCol > 1)
0124 matrix = new CLHEP::HepMatrix(numRow, numCol, 0);
0125 else
0126 matrix = new CLHEP::HepVector(numRow, 0);
0127
0128 inputFile >> *matrix;
0129
0130 return matrix;
0131 }
0132
0133 std::vector<CLHEP::HepGenMatrix *> *matrixSaver::getMatrixVector(std::string inputFileName) {
0134
0135 std::fstream inputFile(inputFileName.c_str(), std::ios::in);
0136 assert(inputFile.fail() == false);
0137
0138
0139 int numElem = 0;
0140 inputFile >> numElem;
0141
0142
0143 int numRow = 0;
0144 int numCol = 0;
0145 inputFile >> numRow;
0146 inputFile >> numCol;
0147
0148
0149 std::vector<CLHEP::HepGenMatrix *> *matrixVector = new std::vector<CLHEP::HepGenMatrix *>(numElem);
0150
0151
0152 for (int i = 0; i < numElem; ++i) {
0153
0154 CLHEP::HepGenMatrix *matrix;
0155
0156
0157 if (numCol > 1)
0158 matrix = new CLHEP::HepMatrix(numRow, numCol, 0);
0159 else
0160 matrix = new CLHEP::HepVector(numRow, 0);
0161
0162
0163 inputFile >> *matrix;
0164
0165
0166 (*matrixVector)[i] = matrix;
0167 }
0168
0169 return matrixVector;
0170 }
0171
0172 std::vector<CLHEP::HepMatrix> matrixSaver::getConcreteMatrixVector(std::string inputFileName) {
0173
0174 std::fstream inputFile(inputFileName.c_str(), std::ios::in);
0175 assert(inputFile.fail() == false);
0176
0177
0178 int numElem = 0;
0179 inputFile >> numElem;
0180
0181
0182 int numRow = 0;
0183 int numCol = 0;
0184 inputFile >> numRow;
0185 inputFile >> numCol;
0186
0187
0188 std::vector<CLHEP::HepMatrix> matrixVector(numElem, CLHEP::HepMatrix(numRow, numCol, 0));
0189
0190
0191 for (int i = 0; i < numElem; ++i) {
0192
0193 inputFile >> matrixVector[i];
0194 }
0195
0196 return matrixVector;
0197 }