statutil.h
1//-*-C++-*-
2/***************************************************************************
3 *
4 * Copyright (C) 2020 by Willem van Straten
5 * Licensed under the Academic Free License version 2.1
6 *
7 ***************************************************************************/
8
9// psrchive/Util/stat/statutil.h
10
11#ifndef __psrchive_Util_stat_statutil_h
12#define __psrchive_Util_stat_statutil_h
13
14#include <algorithm>
15#include <vector>
16#include "Error.h"
17
19void central_moments (std::vector<double> data, std::vector<double>& mu);
20
22
24double robust_variance (const std::vector<double>& data, std::vector<float>* psd = 0);
25
27double median_upper_harmonic (const std::vector<double>& data, std::vector<float>* psd = 0);
28
30void power_spectral_density (const std::vector<double>& data, std::vector<float>& psd);
31
32template<typename T>
33T median (std::vector<T> data)
34{
35 if (data.size() == 0)
36 throw Error (InvalidParam, "median (statutil.h)", "input data size = 0");
37
38 unsigned mid = data.size() / 2;
39 std::nth_element( data.begin(), data.begin()+mid, data.end() );
40 return data[mid];
41}
42
43template<typename T>
44T mean (const std::vector<T>& data)
45{
46 if (data.size() == 0)
47 throw Error (InvalidParam, "mean (statutil.h)", "input data size = 0");
48
49 T sum (0.0);
50 for (auto element: data)
51 sum += element;
52 return sum / data.size();
53}
54
55template<typename T>
56void Q1_Q2_Q3 (std::vector<T> data, T& Q1, T& Q2, T& Q3)
57{
58 if (data.size() == 0)
59 throw Error (InvalidParam, "Q1_Q2_Q3 (statutil.h)", "input data size = 0");
60
61 std::sort( data.begin(), data.end() );
62 unsigned ndat = data.size();
63 Q1 = data[ndat / 4];
64 Q2 = data[ndat / 2];
65 Q3 = data[(3 * ndat) / 4];
66}
67
68template<typename T>
69void filtered_Q1_Q2_Q3 (std::vector<T> data, T& Q1, T& Q2, T& Q3, T value)
70{
71 if (data.size() == 0)
72 throw Error (InvalidParam, "filtered_Q1_Q2_Q3 (statutil.h)", "input data size = 0");
73
74 std::remove( data.begin(), data.end(), value );
75 std::sort( data.begin(), data.end() );
76 unsigned ndat = data.size();
77 Q1 = data[ndat / 4];
78 Q2 = data[ndat / 2];
79 Q3 = data[(3 * ndat) / 4];
80}
81
82#endif // __psrchive_Util_stat_statutil_h
83
A convenient exception handling class.
Definition Error.h:54

Generated using doxygen 1.14.0