35 Double_t
c = 29.9792458;
37 Double_t amu = 931.494028;
46 Double_t v4xmin, v4ymin, v4zmin;
47 Double_t v3xmin, v3ymin, v3zmin;
63 Double_t v1x = pos1.X() - x0;
64 Double_t v1y = pos1.Y() - y0;
65 Double_t v1z = pos1.Z() - z0;
69 Double_t dr = sqrt(v1x * v1x + v1y * v1y + v1z * v1z);
71 Double_t beta1 = dr / dt /
c;
72 Double_t beta1max = (dr + dio) / dt /
c;
73 Double_t beta1min = (dr - dio) / dt /
c;
79 Double_t gamma1 = 1. / sqrt(1. - beta1 * beta1);
80 Double_t gamma1min = 1. / sqrt(1. - beta1min * beta1min);
81 Double_t gamma1max = 1. / sqrt(1. - beta1max * beta1max);
82 Double_t p1 = beta1 * gamma1 * 1. * amu;
83 Double_t p1min = beta1min * gamma1min * 1. * amu;
84 Double_t p1max = beta1max * gamma1max * 1. * amu;
85 Double_t En1 = sqrt(p1 * p1 + amu * amu);
86 Double_t En1min = sqrt(p1min * p1min + amu * amu);
87 Double_t En1max = sqrt(p1max * p1max + amu * amu);
88 Double_t K1 = En1 - amu;
89 Double_t K1min = En1min - amu;
90 Double_t K1max = En1max - amu;
94 Double_t v4x = (pos2 - pos1).X();
95 Double_t v4y = (pos2 - pos1).Y();
96 Double_t v4z = (pos2 - pos1).Z();
98 Double_t v5x = v1y * v4z - v1z * v4y;
99 Double_t v5y = v1z * v4x - v1x * v4z;
100 Double_t v5z = v1x * v4y - v1y * v4x;
104 dr = sqrt(v4x * v4x + v4y * v4y + v4z * v4z);
106 Double_t theta4Measured = acos((v1x * v4x + v1y * v4y + v1z * v4z) / sqrt(v1x * v1x + v1y * v1y + v1z * v1z) /
107 sqrt(v4x * v4x + v4y * v4y + v4z * v4z));
108 Double_t theta4Measuredmin = theta4Measured;
109 Double_t theta4Measuredmax = theta4Measured;
110 if ((v4x * v4x + v4y * v4y + v4z * v4z) == 0.)
112 theta4Measured = 1.55;
113 theta4Measuredmin = 0.;
114 theta4Measuredmax = 1.55;
116 for (Int_t k = 1; k < 3; k++)
126 for (Int_t l = 1; l < 3; l++)
136 for (Int_t m = 1; m < 3; m++)
147 acos((v1x * v4xmin + v1y * v4ymin + v1z * v4zmin) / sqrt(v1x * v1x + v1y * v1y + v1z * v1z) /
148 sqrt(v4xmin * v4xmin + v4ymin * v4ymin + v4zmin * v4zmin));
149 if (tempAngle > theta4Measuredmax)
150 theta4Measuredmax = tempAngle;
151 if (tempAngle < theta4Measuredmin)
152 theta4Measuredmin = tempAngle;
156 if (theta4Measuredmax > 1.55)
157 theta4Measuredmax = 1.55;
160 const TVector3 pos3 =
c2->GetFirstHit().GetPosition();
161 Double_t v3x = (pos3 - pos1).X();
162 Double_t v3y = (pos3 - pos1).Y();
163 Double_t v3z = (pos3 - pos1).Z();
165 Double_t v6x = v1y * v3z - v1z * v3y;
166 Double_t v6y = v1z * v3x - v1x * v3z;
167 Double_t v6z = v1x * v3y - v1y * v3x;
169 Double_t theta56 = acos((v5x * v6x + v5y * v6y + v5z * v6z) / sqrt(v5x * v5x + v5y * v5y + v5z * v5z) /
170 sqrt(v6x * v6x + v6y * v6y + v6z * v6z));
171 if ((v5x * v5x + v5y * v5y + v5z * v5z) == 0. || (v6x * v6x + v6y * v6y + v6z * v6z) == 0.)
176 Double_t theta3 = acos((v1x * v3x + v1y * v3y + v1z * v3z) / sqrt(v1x * v1x + v1y * v1y + v1z * v1z) /
177 sqrt(v3x * v3x + v3y * v3y + v3z * v3z));
178 Double_t theta3min = theta3;
179 Double_t theta3max = theta3;
181 for (Int_t k = 1; k < 3; k++)
191 for (Int_t l = 1; l < 3; l++)
201 for (Int_t m = 1; m < 3; m++)
212 acos((v1x * v3xmin + v1y * v3ymin + v1z * v3zmin) / sqrt(v1x * v1x + v1y * v1y + v1z * v1z) /
213 sqrt(v3xmin * v3xmin + v3ymin * v3ymin + v3zmin * v3zmin));
214 if (tempAngle > theta3max)
215 theta3max = tempAngle;
216 if (tempAngle < theta3min)
217 theta3min = tempAngle;
222 if (theta3max > 1.55)
225 dt =
c2->GetLastHit().GetT() -
c2->GetFirstHit().GetT();
226 dr = sqrt(v3x * v3x + v3y * v3y + v3z * v3z);
228 Double_t beta3 = dr / dt /
c;
229 Double_t beta3max = (dr + dio) / dt /
c;
230 Double_t beta3min = (dr - dio) / dt /
c;
237 Double_t gamma3 = 1. / sqrt(1. - beta3 * beta3);
238 Double_t gamma3min = 1. / sqrt(1. - beta3min * beta3min);
239 Double_t gamma3max = 1. / sqrt(1. - beta3max * beta3max);
240 Double_t p3 = beta3 * gamma3 * 1. * amu;
241 Double_t p3min = beta3min * gamma3min * 1. * amu;
242 Double_t p3max = beta3max * gamma3max * 1. * amu;
252 Double_t Ma, Mb, Mc, Md, Ka, Thc, Ei, Pa, AA, BB, a, b, cc, Pc1 ;
253 Double_t Pd1, Thd1, Ed1, Kd1 ;
263 Pa = sqrt(Ka * Ka + 2. * Ka * Ma);
264 AA = Ei * Ei - Md * Md + Mc * Mc - Pa * Pa;
265 BB = AA * AA - 4. * Ei * Ei * Mc * Mc;
266 a = 4. * Pa * Pa * cos(Thc) * cos(Thc) - 4. * Ei * Ei;
267 b = 4. * AA * Pa * cos(Thc);
269 Pc1 = -b / (2. * a) + sqrt((b * b) / (4. * a * a) - (cc / a));
273 Pd1 = sqrt(Pc1 * Pc1 + Pa * Pa - 2. * Pc1 * Pa * cos(Thc));
274 Thd1 = acos((Pc1 * Pc1 - Pd1 * Pd1 - Pa * Pa) / (-2. * Pd1 * Pa));
276 Ed1 = sqrt(Pd1 * Pd1 + Mb * Mb);
283 Double_t theta4 = Thd1;
288 Double_t p3bmin = p3b;
289 Double_t p3bmax = p3b;
290 Double_t p4bmin = p4b;
291 Double_t p4bmax = p4b;
292 Double_t theta4min = theta4;
293 Double_t theta4max = theta4;
297 for (Int_t m = 1; m < 5; m++)
321 Pa = sqrt(Ka * Ka + 2. * Ka * Ma);
322 AA = Ei * Ei - Md * Md + Mc * Mc - Pa * Pa;
323 BB = AA * AA - 4. * Ei * Ei * Mc * Mc;
324 a = 4. * Pa * Pa * cos(Thc) * cos(Thc) - 4. * Ei * Ei;
325 b = 4. * AA * Pa * cos(Thc);
327 Pc1 = -b / (2. * a) + sqrt((b * b) / (4. * a * a) - (cc / a));
328 if (((b * b) / (4. * a * a) - (cc / a)) < 0.)
333 Pd1 = sqrt(Pc1 * Pc1 + Pa * Pa - 2. * Pc1 * Pa * cos(Thc));
334 Thd1 = acos((Pc1 * Pc1 - Pd1 * Pd1 - Pa * Pa) / (-2. * Pd1 * Pa));
344 if (Thd1 < theta4min)
346 if (Thd1 > theta4max)
352 Ed1 = sqrt(p4bmin * p4bmin + Mb * Mb);
357 Double_t K4bmin = Kd1;
361 Ed1 = sqrt(p4bmax * p4bmax + Mb * Mb);
367 Double_t K4bmax = Kd1;
372 Double_t protonEnergy = 8.76839 + 4.13858 * c1->
GetE() - 0.00337368 * c1->
GetE() * c1->
GetE();
374 return p3bmax > p3min && p3bmin < p3max && theta4max > theta4Measuredmin && theta4min < theta4Measuredmax &&
375 K4bmax > protonEnergy && K4bmin < protonEnergy && theta56 * 180. / 3.14 > 120.;