lolxnano
Code to control the LoLX SiPM biasing board from the connected nanoPi
Loading...
Searching...
No Matches
convenience.h
1#include <utility> // std::pair
2#include <cmath>
3#include <numeric>
4
6std::pair<double, char> SIConvert(double v){
7 std::pair<double, char> c(v,' ');
8 int mag = log10(v);
9 if(mag < -12){
10 c.first *= 1e15;
11 c.second = 'f';
12 } else if(mag < -9){
13 c.first *= 1e12;
14 c.second = 'p';
15 } else if(mag < -6){
16 c.first *= 1e9;
17 c.second = 'n';
18 } else if(mag < -3){
19 c.first *= 1e6;
20 c.second = 'u';
21 } else if(mag < 0){
22 c.first *= 1e3;
23 c.second = 'm';
24 } else if(mag < 3){
25 } else if(mag < 6){
26 c.first *= 1e3;
27 c.second = 'k';
28 } else if(mag < 9){
29 c.first *= 1e6;
30 c.second = 'M';
31 } else if(mag < 12){
32 c.first *= 1e9;
33 c.second = 'G';
34 } else if(mag < 15){
35 c.first *= 1e6;
36 c.second = 'T';
37 }
38 return c;
39}
40
42std::pair<double,double> stats(std::vector<double> v){
43 double sum = std::accumulate(v.begin(), v.end(), 0.0);
44 double mean = sum / v.size();
45
46 double sq_sum = std::inner_product(v.begin(), v.end(), v.begin(), 0.0);
47 double stdev = std::sqrt(sq_sum / v.size() - mean * mean);
48 return std::pair<double,double>(mean, stdev);
49}