1 #include <ecl/digitization/algorithms.h>
6 void Belle2::ECL::shapeFitter(
short int*
id,
int* f,
int* f1,
int* fg41,
int* fg43,
int* fg31,
int* fg32,
int* fg33,
int* y,
7 int* ttrig2,
int* n16,
int* lar,
int* ltr,
int* lq,
int* hi2)
9 static long long int k_np[16] = {
29 int A0 = (int) * (
id + 0) - 128;
30 int Askip = (int) * (
id + 1) - 128;
33 int Ahard = (int) * (
id + 2);
34 int k_a = (int) * ((
unsigned char*)
id + 26);
35 int k_b = (int) * ((
unsigned char*)
id + 27);
36 int k_c = (int) * ((
unsigned char*)
id + 28);
37 int k_16 = (int) * ((
unsigned char*)
id + 29);
38 int k1_chi = (int) * ((
unsigned char*)
id + 24);
39 int k2_chi = (int) * ((
unsigned char*)
id + 25);
41 int chi_thres = (int) * (
id + 15);
54 long long A1, B1, A2, C1, ch1, ch2, B2, B3, B5 ;
55 int low_ampl, i, T, iter;
61 if (k_16 + *n16 != 16) {
62 cout <<
"disagreement in number of the points " << k_16 <<
"and " << *n16 << endl;
66 int validity_code = 0;
67 for (i = ys, z00 = 0; i < 16; i++) {
75 it0 = 48 + ((143 - *ttrig2) << 2) / 6;
78 if (ttrig > 23) {cout <<
"*Ttrig Warning" << ttrig << endl; ttrig = 23;}
79 if (ttrig < 0) {cout <<
"*Ttrig Warning" << ttrig << endl; ttrig = 0;}
86 if (it0 < it_l)it0 = it_l;
87 if (it0 > it_h)it0 = it_h;
94 s1 = (*(fg41 + ttrig * 16));
101 for (i = 1; i < 16; i++) {
102 s1 = (*(fg41 + ttrig * 16 + i));
111 A2 += (1 << (k_a - 1));
129 for (iter = 0, it = it0; iter < 3;) {
131 s1 = (*(fg31 + it * 16));
132 s2 = (*(fg32 + it * 16));
138 for (i = 1; i < 16; i++) {
139 s1 = (*(fg31 + i + it * 16));
140 s2 = (*(fg32 + i + it * 16));
152 A1 += (1 << (k_a - 1));
169 B2 = B1 >> (k_b - 9);
178 it += ((B3 + 1) >> 1) - 256;
179 it = it > it_h ? it_h : it;
180 it = it < it_l ? it_l : it;
182 B2 = B1 >> (k_b - 11);
183 B5 = B1 >> (k_b - 9);
188 T = ((it) << 3) + ((it) << 2) + ((B3 + 1) >> 1) + B3 - 3072;
190 T = ((215 - *ttrig2) << 3) - 4 - T;
195 it += ((B3 + 1) >> 1) - 256;
196 it = it > it_h ? it_h : it;
197 it = it < it_l ? it_l : it;
199 T = T > 2046 ? 2047 : T;
201 T = T < -2046 ? -2047 : T;
203 C1 = (*(fg33 + it * 16) * z00);
205 for (i = 1; i < 16; i++)
206 C1 += *(fg33 + i + it * 16) * y[15 + i];
207 C1 += (1 << (k_c - 1));
223 C1 = (*(fg43 + ttrig * 16) * z00);
224 for (i = 1; i < 16; i++) {
226 C1 += *(fg43 + i + ttrig * 16) * B5;
228 C1 += (1 << (k_c - 1));
233 ch2 = z00 - *n16 * C1;
234 ch1 = ((ch2) * (ch2));
235 ch1 = ch1 * k_np[*n16 - 1];
237 for (i = 1; i < 16; i++) {
238 ch2 = A1 * (*(f + i + it * 16)) + B1 * (*(f1 + i + it * 16));
240 ch2 = (y[i + 15] - ch2 - C1);
242 ch1 = ch1 + ch2 * ch2;
245 B2 = (A1 >> 1) * (A1 >> 1);
248 if (ch1 > B2)validity_code = 3;
256 if (A1 < Askip)validity_code = validity_code + 8;
258 int ss = (y[20] + y[21]);
260 if (ss <= Ahard)validity_code = validity_code + 4;