10 #include <svd/reconstruction/NNWaveFitter.h>
11 #include <svd/reconstruction/NNWaveFitTool.h>
12 #include <svd/simulation/SVDSimulationTools.h>
20 typedef chrono::high_resolution_clock myclock;
21 myclock::time_point beginning = myclock::now();
25 auto fitTool = fitter.getFitTool();
28 myclock::duration d = myclock::now() - beginning;
29 unsigned seed = d.count();
30 default_random_engine randn(seed);
31 normal_distribution<double> gaussian(0.0, 1.0);
35 size_t n_amplitudes = 3;
36 vector< tuple<double, double, double> > components(n_amplitudes);
37 components = {{6, -20, 300}, {6, -20, 300}, {6, -20, 300}};
38 vector<apvSamples> samples_arr(n_amplitudes);
39 vector<shared_ptr<nnFitterBinData> > parr(n_amplitudes);
41 fill(p.begin(), p.end(),
double(1.0));
42 double amplitude, t0, width;
43 double t0_fit, t0_err;
44 double a_fit, a_err, chi2;
45 cout <<
" >>>>>>>>>> SEPARRATE COMPONENTS <<<<<<<<<< " << endl;
46 for (
size_t icomp = 0; icomp < n_amplitudes; ++icomp) {
47 tie(amplitude, t0, width) = components[icomp];
50 transform(
u.begin(),
u.end(), samples_arr[icomp].begin(),
51 [&](
double x)->double {
52 double w = amplitude * x + gaussian(randn);
53 return (int(w) > 3 ? int(w) : 0.0);
56 copy(samples_arr[icomp].begin(), samples_arr[icomp].end(), ostream_iterator<double>(cout,
" "));
58 parr[icomp] = fitter.getFit(samples_arr[icomp], width);
59 copy(parr[icomp]->begin(), parr[icomp]->end(), ostream_iterator<double>(cout,
" "));
61 fitTool.multiply(p, *(parr[icomp]));
62 tie(t0_fit, t0_err) = fitTool.getTimeShift(*(parr[icomp]));
63 tie(a_fit, a_err, chi2) = fitTool.getAmplitudeChi2(u, t0_fit, width);
64 cout <<
"Component: " << icomp << endl;
65 cout <<
"Time: " << t0_fit <<
" +/- " << t0_err << endl;
66 cout <<
"Amplitude: " << a_fit <<
" +/- " << a_err << endl;
67 cout <<
"Chi-square " << chi2 << endl;
69 cout <<
" >>>>>>>>>> POOLED COMPONENTS <<<<<<<<<< " << endl;
70 tie(t0_fit, t0_err) = fitTool.getTimeShift(p);
71 cout <<
"Time: " << t0_fit <<
" +/- " << t0_err << endl;
72 for (
size_t icomp = 0; icomp < n_amplitudes; ++icomp) {
73 tie(a_fit, a_err, chi2) = fitTool.getAmplitudeChi2(samples_arr[icomp], t0_fit, width);
74 cout <<
"Component: " << icomp << endl;
75 cout <<
"Amplitude: " << a_fit <<
" +/- " << a_err << endl;
76 cout <<
"Chi-square " << chi2 << endl;
78 cout <<
" >>>>>>>>>> SUM OF SIGNALS COMPONENTS <<<<<<<<<< " << endl;
81 fill(u_sum.begin(), u_sum.end(),
double(0.0));
83 for (
size_t j = 0; j < n_amplitudes; ++j)
84 u_sum[i] += samples_arr[j][i];
85 shared_ptr<nnFitterBinData> p_sum = fitter.getFit(u_sum, width);
86 tie(t0_fit, t0_err) = fitTool.getTimeShift(*p_sum);
87 cout <<
"Time: " << t0_fit <<
" +/- " << t0_err << endl;
88 for (
size_t icomp = 0; icomp < n_amplitudes; ++icomp) {
89 tie(a_fit, a_err, chi2) = fitTool.getAmplitudeChi2(samples_arr[icomp], t0_fit, width);
90 cout <<
"Component: " << icomp << endl;
91 cout <<
"Amplitude: " << a_fit <<
" +/- " << a_err << endl;
92 cout <<
"Chi-square " << chi2 << endl;