CbmRoot
Loading...
Searching...
No Matches
PronyFitter.h
Go to the documentation of this file.
1/* Copyright (C) 2020-2021 Institute for Nuclear Research, Moscow
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Nikolay Karpushkin [committer] */
4
10
11#ifndef PronyFitter_H
12#define PronyFitter_H
13
14#include <algorithm> // for reverse
15#include <complex> // for complex numbers
16#include <cstdint> // for uint16_t
17#include <cstdio> // for printf
18#include <cstring> // for memcpy
19#include <iostream>
20#include <vector> // for std::vector
21
22namespace PsdSignalFitting
23{
25
26 public:
29 PronyFitter(int model_order, int exponent_number, int gate_beg, int gate_end);
30
33
34 int CalcSignalBegin(float front_time_beg_03, float front_time_end);
35 int ChooseBestSignalBeginHarmonics(int first_sample, int last_sample);
36 int ChooseBestSignalBegin(int first_sample, int last_sample);
37 void MakePileUpRejection(int time_max);
40 void SolveSLEGauss(float* x, float** r, float* b, int n);
41 void SolveSLEGauss(std::complex<float>* x, std::complex<float>** r, std::complex<float>* b, int n);
42 void SolveSLECholesky(float* x, float** a, float* b, int n);
43 void CovarianceQRmod(float& rho_f, std::vector<float>& a_f, float& rho_b, std::vector<float>& a_b);
44 void CovarianceDirect(float& rho_f, std::vector<float>& a_f, float& rho_b, std::vector<float>& a_b);
45 float LevelBy2Points(float X1, float Y1, float X2, float Y2, float Y0);
46 //
47 // Setters
48 //
49 void SetDebugMode(bool IsDebug) { fIsDebug = IsDebug; };
50 void SetWaveform(std::vector<uint16_t>& uWfm, uint16_t uZeroLevel);
51 void SetSignalBegin(int SignalBeg);
52 void SetHarmonics(std::complex<float>* z);
53 void SetExternalHarmonics(std::complex<float> z1, std::complex<float> z2);
54 //
55 // Getters
56 //
57 std::complex<float>* GetHarmonics();
58 std::complex<float>* GetAmplitudes();
59 float GetIntegral(int gate_beg, int gate_end);
60 uint16_t GetFitValue(int sample_number);
61 float GetFitValue(float x);
62 float GetZeroLevel();
63 float GetX(float level, int first_sample, int last_sample);
64 float GetX(float level, int first_sample, int last_sample, float step);
65 float GetRSquare(int gate_beg, int gate_end);
66 float GetRSquareSignal();
67 float GetChiSquare(int gate_beg, int gate_end, int time_max);
68 float GetDeltaInSample(int sample);
70 float GetSignalMaxTime();
71 float GetMaxAmplitude();
73 std::vector<uint16_t> GetFitWfm() { return fuFitWfm; }
74
75 private:
76 void Initialize(int model_order, int exponent_number, int gate_beg, int gate_end);
77 void AllocData();
78 void DeleteData();
79 void Clear();
80
81 bool fIsDebug = false;
87
90
91 std::vector<uint16_t> fuWfm;
92 uint16_t fuZeroLevel;
93 std::complex<float>* fz;
94 std::complex<float>* fh;
95 std::vector<uint16_t> fuFitWfm;
97 };
98} // namespace PsdSignalFitting
99
100#endif
uint16_t GetFitValue(int sample_number)
void CovarianceDirect(float &rho_f, std::vector< float > &a_f, float &rho_b, std::vector< float > &a_b)
void SetSignalBegin(int SignalBeg)
void SetExternalHarmonics(std::complex< float > z1, std::complex< float > z2)
void SolveSLEGauss(float *x, float **r, float *b, int n)
std::complex< float > * fz
Definition PronyFitter.h:93
std::vector< uint16_t > GetFitWfm()
Definition PronyFitter.h:73
void CovarianceQRmod(float &rho_f, std::vector< float > &a_f, float &rho_b, std::vector< float > &a_b)
float GetRSquare(int gate_beg, int gate_end)
void SetHarmonics(std::complex< float > *z)
std::vector< uint16_t > fuWfm
Definition PronyFitter.h:91
int CalcSignalBegin(float front_time_beg_03, float front_time_end)
std::complex< float > * GetHarmonics()
int ChooseBestSignalBeginHarmonics(int first_sample, int last_sample)
void SetDebugMode(bool IsDebug)
Definition PronyFitter.h:49
std::complex< float > * GetAmplitudes()
void SetWaveform(std::vector< uint16_t > &uWfm, uint16_t uZeroLevel)
int ChooseBestSignalBegin(int first_sample, int last_sample)
float GetDeltaInSample(int sample)
float GetChiSquare(int gate_beg, int gate_end, int time_max)
float GetX(float level, int first_sample, int last_sample)
void Initialize(int model_order, int exponent_number, int gate_beg, int gate_end)
std::complex< float > * fh
Definition PronyFitter.h:94
float LevelBy2Points(float X1, float Y1, float X2, float Y2, float Y0)
void MakePileUpRejection(int time_max)
float GetIntegral(int gate_beg, int gate_end)
void SolveSLECholesky(float *x, float **a, float *b, int n)
std::vector< uint16_t > fuFitWfm
Definition PronyFitter.h:95