Belle II Software  release-05-01-25
Sv123.cc
1 #include <ecl/digitization/algorithms.h>
2 #include <cmath>
3 using namespace std;
4 
5 
6 double Belle2::ECL::Sv123(double t, double t01, double tb1, double t02, double tb2, double td1, double ts1)
7 {
8 
9  double sv123 = 0.;
10  double dks0, dks1, dksm,
11  dw0, dw1, dwp, dwm, das1, dac1, das0, dac0, dzna, dksm2, ds, dd,
12  dcs0, dsn0, dzn0, td, ts, dr,
13  dcs0s, dsn0s, dcs0d, dsn0d, dcs1s, dsn1s, dcs1d, dsn1d;
14 
15 
16  if (t < 0.) return 0.;
17 
18  dr = (ts1 - td1) / td1;
19  if (abs(dr) >= 0.0000001) {
20  td = td1;
21  ts = ts1;
22  } else {
23  td = td1;
24  if (ts1 > td1) {
25  ts = td1 * 1.00001;
26  } else {
27  ts = td1 * 0.99999;
28  }
29  }
30 
31  dr = ((t01 - t02) * (t01 - t02) + (tb1 - tb2) * (tb1 - tb2)) / ((t01) * (t01) + (tb1) * (tb1));
32  dks0 = 1.0 / t01;
33  dks1 = 1.0 / t02;
34 
35  if (dr < 0.0000000001) {
36 
37  if (dks0 > dks1) {
38  dks0 = dks1 * 1.00001;
39  } else {
40  dks0 = dks1 * 0.99999;
41  }
42  }
43 
44 
45 
46 
47  dksm = dks1 - dks0;
48 
49  ds = 1. / ts;
50  dd = 1. / td;
51 
52  dw0 = 1. / tb1;
53  dw1 = 1. / tb2;
54  dwp = dw0 + dw1;
55  dwm = dw1 - dw0;
56 
57  dksm2 = dksm * dksm;
58 
59  dzna = (dksm2 + dwm * dwm) * (dksm2 + dwp * dwp);
60 
61 
62  das0 = dw1 * (dksm2 + dwp * dwm);
63  dac0 = -2 * dksm * dw0 * dw1;
64  das1 = dw0 * (dksm2 - dwp * dwm);
65  dac1 = -dac0;
66 
67 
68 
69 
70 
71  dsn0 = (ds - dks0);
72  dcs0 = -dw0;
73  dzn0 = dcs0 * dcs0 + dsn0 * dsn0;
74 
75  dsn0s = (dsn0 * das0 - dcs0 * dac0) / dzn0;
76  dcs0s = (dcs0 * das0 + dsn0 * dac0) / dzn0;
77 
78  dsn0 = (ds - dks1);
79  dcs0 = -dw1;
80  dzn0 = dcs0 * dcs0 + dsn0 * dsn0;
81 
82  dsn1s = (dsn0 * das1 - dcs0 * dac1) / dzn0;
83  dcs1s = (dcs0 * das1 + dsn0 * dac1) / dzn0;
84 
85 
86  dsn0 = (dd - dks0);
87  dcs0 = -dw0;
88  dzn0 = dcs0 * dcs0 + dsn0 * dsn0;
89 
90  dsn0d = (dsn0 * das0 - dcs0 * dac0) / dzn0;
91  dcs0d = (dcs0 * das0 + dsn0 * dac0) / dzn0;
92 
93  dsn0 = (dd - dks1);
94  dcs0 = -dw1;
95  dzn0 = dcs0 * dcs0 + dsn0 * dsn0;
96 
97  dsn1d = (dsn0 * das1 - dcs0 * dac1) / dzn0;
98  dcs1d = (dcs0 * das1 + dsn0 * dac1) / dzn0;
99 
100  //cppcheck dr = (ts - td) / td;
101 
102 
103 
104 
105  sv123 = ((((dsn0s - dsn0d) * sin(dw0 * t)
106  + (dcs0s - dcs0d) * cos(dw0 * t)) * exp(-t * dks0)
107  - (dcs0s + dcs1s) * exp(-t * ds) + (dcs0d + dcs1d) * exp(-t * dd)
108  + ((dsn1s - dsn1d) * sin(dw1 * t)
109  + (dcs1s - dcs1d) * cos(dw1 * t)) * exp(-t * dks1)) / dzna / (ts - td));
110 
111  return sv123;
112 
113 
114 }