File indexing completed on 2023-03-17 11:18:48
0001 #include <iostream>
0002 #include <sstream>
0003 #include <vector>
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 const float binMin[32] = {-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
0018 16, 18, 20, 22, 24, 26, 28, 31, 34, 37, 40, 44, 48, 52, 57, 62};
0019
0020 const float binMin2[64] = {-0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5,
0021 10.5, 11.5, 12.5, 13.5, 14.5,
0022 15.5, 17.5, 19.5, 21.5, 23.5, 25.5, 27.5, 29.5, 31.5, 33.5, 35.5,
0023 37.5, 39.5, 41.5, 43.5, 45.5, 47.5, 49.5, 51.5, 53.5,
0024 55.5, 59.5, 63.5, 67.5, 71.5, 75.5, 79.5, 83.5, 87.5, 91.5, 95.5,
0025 99.5, 103.5, 107.5, 111.5, 115.5, 119.5, 123.5, 127.5, 131.5, 135.5,
0026 139.5, 147.5, 155.5, 163.5, 171.5, 179.5, 187.5};
0027
0028 constexpr uint32_t nbins_qie8 = 32;
0029 constexpr uint32_t nbins_qie11 = 64;
0030
0031 void dump(std::vector<float> const& vec, std::string const& name) {
0032 std::stringstream str;
0033 str << "float const " << name << "[" << vec.size() << "] = {";
0034 uint32_t counter = 0;
0035 for (auto const& value : vec) {
0036 if (counter % 8 == 0)
0037 str << std::endl;
0038 if (counter == vec.size() - 1)
0039 str << value;
0040 else
0041 str << value << ", ";
0042 counter++;
0043 }
0044 str << "};";
0045 std::cout << str.str() << std::endl;
0046 }
0047
0048 void generate(uint32_t const nbins, float const* initValues, std::vector<float>& values) {
0049
0050 for (uint32_t adc = 0; adc < nbins; adc++)
0051 values[adc] = initValues[adc];
0052
0053
0054 int scale = 1;
0055 for (uint32_t range = 1; range < 4; range++) {
0056 int factor = nbins == 32 ? 5 : 8;
0057 scale *= factor;
0058
0059 auto const index_offset = range * nbins;
0060 uint32_t const overlap = nbins == 32 ? 2 : 3;
0061 values[index_offset] = values[index_offset - overlap];
0062
0063 for (uint32_t i = 1; i < nbins; i++)
0064 values[index_offset + i] = values[index_offset + i - 1] + scale * (values[i] - values[i - 1]);
0065 }
0066
0067 values[nbins * 4] = 2 * values[nbins * 4 - 1] - values[nbins * 4 - 2];
0068 }
0069
0070 int main(int argc, char* argv[]) {
0071
0072
0073
0074 std::vector<float> valuesqie8(nbins_qie8 * 4 + 1), valuesqie11(nbins_qie11 * 4 + 1);
0075 generate(nbins_qie8, binMin, valuesqie8);
0076 generate(nbins_qie11, binMin2, valuesqie11);
0077
0078 dump(valuesqie8, std::string{"qie8shape"});
0079 dump(valuesqie11, std::string{"qie11shape"});
0080
0081 return 0;
0082 }