Project
Loading...
Searching...
No Matches
Utils.cxx
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
16
17#include "Utils.h"
18
19std::vector<float> o2::zdc::fastsim::normal_distribution(double mean, double stddev, size_t size)
20{
21 // Creates 64bit random number generator
22 std::random_device randomDevice{};
23 std::mt19937_64 generator{randomDevice()};
24
25 std::normal_distribution<> distribution{mean, stddev};
26
27 // Each value in vector is generated with the same distribution
28 std::vector<float> result;
29 for (size_t i = 0; i < size; ++i) {
30 result.emplace_back(distribution(generator));
31 }
32 return result;
33}
34
35std::vector<std::vector<float>> o2::zdc::fastsim::normal_distribution_batch(double mean,
36 double stddev,
37 size_t size,
38 long batchSize)
39{
40 // Creates 64bit random number generator
41 std::random_device randomDevice{};
42 std::mt19937_64 generator{randomDevice()};
43
44 std::normal_distribution<> distribution{mean, stddev};
45
46 std::vector<std::vector<float>> batch;
47 for (long i = 0; i < batchSize; ++i) {
48 // Each value in vector is generated with the same distribution
49 std::vector<float> result(size, 0);
50 for (size_t i = 0; i < size; ++i) {
51 result.at(i) = distribution(generator);
52 }
53 batch.emplace_back(std::move(result));
54 }
55 return batch;
56}
57
58std::vector<float> o2::zdc::fastsim::parse_block(std::istream& input, const std::string& option)
59{
60 // Marks if should start reading and parsing block
61 bool read = false;
62 // Container for parsed data (data) and current line (line)
63 std::vector<float> data;
64 std::string line;
65
66 // read while eof if marker was found brake and start parsing
67 while (std::getline(input, line)) {
68 if (line == option) {
69 read = true;
70 break;
71 }
72 }
73
74 // read while empty line or eof reached
75 // discrads empty lines
76 while (std::getline(input, line) && !line.empty()) {
77 if (read) {
78 data.push_back(std::stof(line));
79 }
80 }
81
82 return data;
83}
84
85std::vector<float> o2::zdc::fastsim::flat_vector(std::vector<std::vector<float>>& vector2D)
86{
87 std::vector<float> flatVector;
88 for (auto& vector1D : vector2D) {
89 for (auto& value : vector1D) {
90 flatVector.emplace_back(value);
91 }
92 }
93
94 return flatVector;
95}
int32_t i
GLuint64EXT * result
Definition glcorearb.h:5662
GLsizeiptr size
Definition glcorearb.h:659
GLsizei const GLfloat * value
Definition glcorearb.h:819
GLboolean * data
Definition glcorearb.h:298
std::vector< float > flat_vector(std::vector< std::vector< float > > &vector2D)
Definition Utils.cxx:85
std::vector< std::vector< float > > normal_distribution_batch(double mean, double stddev, size_t size, long batchSize)
Generates a batch of vectors of numbers with a given normal distribution and length.
Definition Utils.cxx:35
std::vector< float > normal_distribution(double mean, double stddev, size_t size)
Generates a vector of numbers with a given normal distribution and length.
Definition Utils.cxx:19
std::vector< float > parse_block(std::istream &input, const std::string &option)
Parses .txt file containing scales for model. Function will search for given marker (option) and read...
Definition Utils.cxx:58