BmnRoot
Loading...
Searching...
No Matches
L1Extrapolation.h
Go to the documentation of this file.
1#ifndef L1Extrapolation_h
2#define L1Extrapolation_h
3
4#include "CbmL1Def.h"
5#include "L1Field.h"
6#include "L1TrackPar.h"
7
8//#define cnst static const fvec
9#define cnst const fvec
10
11inline void L1Extrapolate
12(
13 L1TrackPar &T, // input track parameters (x,y,tx,ty,Q/p) and cov.matrix
14 fvec z_out , // extrapolate to this z position
15 fvec qp0 , // use Q/p linearisation at this value
17 fvec *w = 0
18 )
19{
20 //cout<<"Extrapolation..."<<endl;
21 //
22 // Part of the analytic extrapolation formula with error (c_light*B*dz)^4/4!
23 //
24
25 cnst ZERO = 0.0, ONE = 1.;
26 cnst c_light = 0.000299792458;//, c_light_i = 1./c_light;
27
28 cnst
29 c1 = 1., c2 = 2., c3 = 3., c4 = 4., c6 = 6., c9 = 9., c15 = 15., c18 = 18., c45 = 45.,
30 c2i = 1./2., c3i = 1./3., c6i = 1./6., c12i = 1./12.;
31
32 const fvec qp = T.qp;
33 const fvec dz = (z_out - T.z);
34 const fvec dz2 = dz*dz;
35 const fvec dz3 = dz2*dz;
36
37 // construct coefficients
38
39 const fvec x = T.tx;
40 const fvec y = T.ty;
41 const fvec xx = x*x;
42 const fvec xy = x*y;
43 const fvec yy = y*y;
44 const fvec y2 = y*c2;
45 const fvec x2 = x*c2;
46 const fvec x4 = x*c4;
47 const fvec xx31 = xx*c3+c1;
48 const fvec xx159 = xx*c15+c9;
49
50 const fvec Ay = -xx-c1;
51 const fvec Ayy = x*(xx*c3+c3);
52 const fvec Ayz = -c2*xy;
53 const fvec Ayyy = -(c15*xx*xx+c18*xx+c3);
54
55 const fvec Ayy_x = c3*xx31;
56 const fvec Ayyy_x = -x4*xx159;
57
58 const fvec Bx = yy+c1;
59 const fvec Byy = y*xx31;
60 const fvec Byz = c2*xx+c1;
61 const fvec Byyy = -xy*xx159;
62
63 const fvec Byy_x = c6*xy;
64 const fvec Byyy_x = -y*(c45*xx+c9);
65 const fvec Byyy_y = -x*xx159;
66
67 // end of coefficients calculation
68
69 const fvec t2 = c1 + xx + yy;
70 const fvec t = sqrt( t2 );
71 const fvec h = qp0*c_light;
72 const fvec ht = h*t;
73
74 // get field integrals
75 const fvec ddz = T.z-F.z0;
76 const fvec Fx0 = F.cx0 + F.cx1*ddz + F.cx2*ddz*ddz;
77 const fvec Fx1 = (F.cx1 + c2*F.cx2*ddz)*dz;
78 const fvec Fx2 = F.cx2*dz2;
79 const fvec Fy0 = F.cy0 + F.cy1*ddz + F.cy2*ddz*ddz;
80 const fvec Fy1 = (F.cy1 + c2*F.cy2*ddz)*dz;
81 const fvec Fy2 = F.cy2*dz2;
82 const fvec Fz0 = F.cz0 + F.cz1*ddz + F.cz2*ddz*ddz;
83 const fvec Fz1 = (F.cz1 + c2*F.cz2*ddz)*dz;
84 const fvec Fz2 = F.cz2*dz2;
85
86 //
87
88 const fvec sx = ( Fx0 + Fx1*c2i + Fx2*c3i );
89 const fvec sy = ( Fy0 + Fy1*c2i + Fy2*c3i );
90 const fvec sz = ( Fz0 + Fz1*c2i + Fz2*c3i );
91
92 const fvec Sx = ( Fx0*c2i + Fx1*c6i + Fx2*c12i );
93 const fvec Sy = ( Fy0*c2i + Fy1*c6i + Fy2*c12i );
94 const fvec Sz = ( Fz0*c2i + Fz1*c6i + Fz2*c12i );
95
96 fvec syz;
97 {
98 cnst
99 d = 1./360.,
100 c00 = 30.*6.*d, c01 = 30.*2.*d, c02 = 30.*d,
101 c10 = 3.*40.*d, c11 = 3.*15.*d, c12 = 3.*8.*d,
102 c20 = 2.*45.*d, c21 = 2.*2.*9.*d, c22 = 2.*2.*5.*d;
103 syz = Fy0*( c00*Fz0 + c01*Fz1 + c02*Fz2)
104 + Fy1*( c10*Fz0 + c11*Fz1 + c12*Fz2)
105 + Fy2*( c20*Fz0 + c21*Fz1 + c22*Fz2) ;
106 }
107
108 fvec Syz;
109 {
110 cnst
111 d = 1./2520.,
112 c00 = 21.*20.*d, c01 = 21.*5.*d, c02 = 21.*2.*d,
113 c10 = 7.*30.*d, c11 = 7.*9.*d, c12 = 7.*4.*d,
114 c20 = 2.*63.*d, c21 = 2.*21.*d, c22 = 2.*10.*d;
115 Syz = Fy0*( c00*Fz0 + c01*Fz1 + c02*Fz2 )
116 + Fy1*( c10*Fz0 + c11*Fz1 + c12*Fz2 )
117 + Fy2*( c20*Fz0 + c21*Fz1 + c22*Fz2 ) ;
118 }
119
120 const fvec syy = sy*sy*c2i;
121 const fvec syyy = syy*sy*c3i;
122
123 fvec Syy ;
124 {
125 cnst
126 d= 1./2520., c00= 420.*d, c01= 21.*15.*d, c02= 21.*8.*d,
127 c03= 63.*d, c04= 70.*d, c05= 20.*d;
128 Syy = Fy0*(c00*Fy0+c01*Fy1+c02*Fy2) + Fy1*(c03*Fy1+c04*Fy2) + c05*Fy2*Fy2 ;
129 }
130
131 fvec Syyy;
132 {
133 cnst
134 d = 1./181440.,
135 c000 = 7560*d, c001 = 9*1008*d, c002 = 5*1008*d,
136 c011 = 21*180*d, c012 = 24*180*d, c022 = 7*180*d,
137 c111 = 540*d, c112 = 945*d, c122 = 560*d, c222 = 112*d;
138 const fvec Fy22 = Fy2*Fy2;
139 Syyy = Fy0*( Fy0*(c000*Fy0+c001*Fy1+c002*Fy2)+ Fy1*(c011*Fy1+c012*Fy2)+c022*Fy22 )
140 + Fy1*( Fy1*(c111*Fy1+c112*Fy2)+c122*Fy22) + c222*Fy22*Fy2 ;
141 }
142
143
144 const fvec sA1 = sx*xy + sy*Ay + sz*y ;
145 const fvec sA1_x = sx*y - sy*x2 ;
146 const fvec sA1_y = sx*x + sz ;
147
148 const fvec sB1 = sx*Bx - sy*xy - sz*x ;
149 const fvec sB1_x = -sy*y - sz ;
150 const fvec sB1_y = sx*y2 - sy*x ;
151
152 const fvec SA1 = Sx*xy + Sy*Ay + Sz*y ;
153 const fvec SA1_x = Sx*y - Sy*x2 ;
154 const fvec SA1_y = Sx*x + Sz;
155
156 const fvec SB1 = Sx*Bx - Sy*xy - Sz*x ;
157 const fvec SB1_x = -Sy*y - Sz;
158 const fvec SB1_y = Sx*y2 - Sy*x;
159
160
161 const fvec sA2 = syy*Ayy + syz*Ayz ;
162 const fvec sA2_x = syy*Ayy_x - syz*y2 ;
163 const fvec sA2_y = -syz*x2 ;
164 const fvec sB2 = syy*Byy + syz*Byz ;
165 const fvec sB2_x = syy*Byy_x + syz*x4 ;
166 const fvec sB2_y = syy*xx31 ;
167
168 const fvec SA2 = Syy*Ayy + Syz*Ayz ;
169 const fvec SA2_x = Syy*Ayy_x - Syz*y2 ;
170 const fvec SA2_y = -Syz*x2 ;
171 const fvec SB2 = Syy*Byy + Syz*Byz ;
172 const fvec SB2_x = Syy*Byy_x + Syz*x4 ;
173 const fvec SB2_y = Syy*xx31 ;
174
175 const fvec sA3 = syyy*Ayyy ;
176 const fvec sA3_x = syyy*Ayyy_x;
177 const fvec sB3 = syyy*Byyy ;
178 const fvec sB3_x = syyy*Byyy_x;
179 const fvec sB3_y = syyy*Byyy_y;
180
181
182 const fvec SA3 = Syyy*Ayyy ;
183 const fvec SA3_x = Syyy*Ayyy_x;
184 const fvec SB3 = Syyy*Byyy ;
185 const fvec SB3_x = Syyy*Byyy_x;
186 const fvec SB3_y = Syyy*Byyy_y;
187
188 const fvec ht1 = ht*dz;
189 const fvec ht2 = ht*ht*dz2;
190 const fvec ht3 = ht*ht*ht*dz3;
191 const fvec ht1sA1 = ht1*sA1;
192 const fvec ht1sB1 = ht1*sB1;
193 const fvec ht1SA1 = ht1*SA1;
194 const fvec ht1SB1 = ht1*SB1;
195 const fvec ht2sA2 = ht2*sA2;
196 const fvec ht2SA2 = ht2*SA2;
197 const fvec ht2sB2 = ht2*sB2;
198 const fvec ht2SB2 = ht2*SB2;
199 const fvec ht3sA3 = ht3*sA3;
200 const fvec ht3sB3 = ht3*sB3;
201 const fvec ht3SA3 = ht3*SA3;
202 const fvec ht3SB3 = ht3*SB3;
203
204 fvec initialised = ZERO;
205 if(w) //TODO use operator {?:}
206 {
207 const fvec zero = ZERO;
208 initialised = fvec( zero < *w );
209 }
210 else
211 {
212 const fvec one = ONE;
213 const fvec zero = ZERO;
214 initialised = fvec( zero < one );
215 }
216
217 T.x += (((x + ht1SA1 + ht2SA2 + ht3SA3)*dz)&initialised) ;
218 T.y += (((y + ht1SB1 + ht2SB2 + ht3SB3)*dz)&initialised) ;
219 T.tx += ((ht1sA1 + ht2sA2 + ht3sA3)&initialised);
220 T.ty += ((ht1sB1 + ht2sB2 + ht3sB3)&initialised);
221 T.z += ((dz)&initialised);
222
223 const fvec ctdz = c_light*t*dz;
224 const fvec ctdz2 = c_light*t*dz2;
225
226 const fvec dqp = qp - qp0;
227 const fvec t2i = c1*rcp(t2);// /t2;
228 const fvec xt2i = x*t2i;
229 const fvec yt2i = y*t2i;
230 const fvec tmp0 = ht1SA1 + c2*ht2SA2 + c3*ht3SA3;
231 const fvec tmp1 = ht1SB1 + c2*ht2SB2 + c3*ht3SB3;
232 const fvec tmp2 = ht1sA1 + c2*ht2sA2 + c3*ht3sA3;
233 const fvec tmp3 = ht1sB1 + c2*ht2sB2 + c3*ht3sB3;
234
235 const fvec j02 = dz*(c1 + xt2i*tmp0 + ht1*SA1_x + ht2*SA2_x + ht3*SA3_x);
236 const fvec j12 = dz*( xt2i*tmp1 + ht1*SB1_x + ht2*SB2_x + ht3*SB3_x);
237 const fvec j22 = c1 + xt2i*tmp2 + ht1*sA1_x + ht2*sA2_x + ht3*sA3_x ;
238 const fvec j32 = xt2i*tmp3 + ht1*sB1_x + ht2*sB2_x + ht3*sB3_x ;
239
240 const fvec j03 = dz*( yt2i*tmp0 + ht1*SA1_y + ht2*SA2_y );
241 const fvec j13 = dz*(c1 + yt2i*tmp1 + ht1*SB1_y + ht2*SB2_y + ht3*SB3_y );
242 const fvec j23 = yt2i*tmp2 + ht1*sA1_y + ht2*sA2_y ;
243 const fvec j33 = c1 + yt2i*tmp3 + ht1*sB1_y + ht2*sB2_y + ht3*sB3_y ;
244
245 const fvec j04 = ctdz2*( SA1 + c2*ht1*SA2 + c3*ht2*SA3 );
246 const fvec j14 = ctdz2*( SB1 + c2*ht1*SB2 + c3*ht2*SB3 );
247 const fvec j24 = ctdz *( sA1 + c2*ht1*sA2 + c3*ht2*sA3 );
248 const fvec j34 = ctdz *( sB1 + c2*ht1*sB2 + c3*ht2*sB3 );
249
250
251 // extrapolate inverse momentum
252
253 T.x +=((j04*dqp)&initialised);
254 T.y +=((j14*dqp)&initialised);
255 T.tx+=((j24*dqp)&initialised);
256 T.ty+=((j34*dqp)&initialised);
257
258 // covariance matrix transport
259
260 const fvec c42 = T.C42, c43 = T.C43;
261
262 const fvec cj00 = T.C00 + T.C20*j02 + T.C30*j03 + T.C40*j04;
263// const fvec cj10 = T.C10 + T.C21*j02 + T.C31*j03 + T.C41*j04;
264 const fvec cj20 = T.C20 + T.C22*j02 + T.C32*j03 + c42*j04;
265 const fvec cj30 = T.C30 + T.C32*j02 + T.C33*j03 + c43*j04;
266
267 const fvec cj01 = T.C10 + T.C20*j12 + T.C30*j13 + T.C40*j14;
268 const fvec cj11 = T.C11 + T.C21*j12 + T.C31*j13 + T.C41*j14;
269 const fvec cj21 = T.C21 + T.C22*j12 + T.C32*j13 + c42*j14;
270 const fvec cj31 = T.C31 + T.C32*j12 + T.C33*j13 + c43*j14;
271
272// const fvec cj02 = T.C20*j22 + T.C30*j23 + T.C40*j24;
273// const fvec cj12 = T.C21*j22 + T.C31*j23 + T.C41*j24;
274 const fvec cj22 = T.C22*j22 + T.C32*j23 + c42*j24;
275 const fvec cj32 = T.C32*j22 + T.C33*j23 + c43*j24;
276
277// const fvec cj03 = T.C20*j32 + T.C30*j33 + T.C40*j34;
278// const fvec cj13 = T.C21*j32 + T.C31*j33 + T.C41*j34;
279 const fvec cj23 = T.C22*j32 + T.C32*j33 + c42*j34;
280 const fvec cj33 = T.C32*j32 + T.C33*j33 + c43*j34;
281
282 T.C40+= ((c42*j02 + c43*j03 + T.C44*j04) & initialised); // cj40
283 T.C41+= ((c42*j12 + c43*j13 + T.C44*j14) & initialised); // cj41
284 T.C42 = ((c42*j22 + c43*j23 + T.C44*j24) & initialised) + (T.C42&(!initialised)); // cj42
285 T.C43 = ((c42*j32 + c43*j33 + T.C44*j34) & initialised) + (T.C43&(!initialised)); // cj43
286
287 T.C00 = ((cj00 + j02*cj20 + j03*cj30 + j04*T.C40) & initialised) + (T.C00&(!initialised));
288 T.C10 = ((cj01 + j02*cj21 + j03*cj31 + j04*T.C41) & initialised) + (T.C10&(!initialised));
289 T.C11 = ((cj11 + j12*cj21 + j13*cj31 + j14*T.C41) & initialised) + (T.C11&(!initialised));
290
291 T.C20 = ((j22*cj20 + j23*cj30 + j24*T.C40) & initialised) + (T.C20&(!initialised)) ;
292 T.C30 = ((j32*cj20 + j33*cj30 + j34*T.C40) & initialised) + (T.C30&(!initialised)) ;
293 T.C21 = ((j22*cj21 + j23*cj31 + j24*T.C41) & initialised) + (T.C21&(!initialised)) ;
294 T.C31 = ((j32*cj21 + j33*cj31 + j34*T.C41) & initialised) + (T.C31&(!initialised)) ;
295 T.C22 = ((j22*cj22 + j23*cj32 + j24*T.C42) & initialised) + (T.C22&(!initialised)) ;
296 T.C32 = ((j32*cj22 + j33*cj32 + j34*T.C42) & initialised) + (T.C32&(!initialised)) ;
297 T.C33 = ((j32*cj23 + j33*cj33 + j34*T.C43) & initialised) + (T.C33&(!initialised)) ;
298 //cout<<"Extrapolation ok"<<endl;
299
300}
301
302
303inline void L1Extrapolate0
304(
305 L1TrackPar &T, // input track parameters (x,y,tx,ty,Q/p) and cov.matrix
306 fvec z_out , // extrapolate to this z position
308 )
309{
310 //
311 // Part of the analytic extrapolation formula with error (c_light*B*dz)^4/4!
312 //
313
314 cnst c_light = 0.000299792458;
315
316 cnst
317 c1 = 1., /*c2 = 2., c3 = 3., c4 = 4., c6 = 6., c9 = 9., c15 = 15., c18 = 18., c45 = 45.,*/
318 c2i = 1./2., c3i = 1./3., c6i = 1./6., c12i = 1./12.;
319
320 const fvec qp = T.qp;
321 const fvec dz = (z_out - T.z);
322 const fvec dz2 = dz*dz;
323
324 // construct coefficients
325
326 const fvec x = T.tx;
327 const fvec y = T.ty;
328 const fvec xx = x*x;
329 const fvec xy = x*y;
330 const fvec yy = y*y;
331 const fvec Ay = -xx-c1;
332 const fvec Bx = yy+c1;
333 const fvec ct = c_light*sqrt( c1 + xx + yy );
334
335 const fvec dzc2i = dz*c2i;
336 const fvec dz2c3i = dz2*c3i;
337 const fvec dzc6i = dz*c6i;
338 const fvec dz2c12i= dz2*c12i;
339
340 const fvec sx = ( F.cx0 + F.cx1*dzc2i + F.cx2*dz2c3i );
341 const fvec sy = ( F.cy0 + F.cy1*dzc2i + F.cy2*dz2c3i );
342 const fvec sz = ( F.cz0 + F.cz1*dzc2i + F.cz2*dz2c3i );
343
344 const fvec Sx = ( F.cx0*c2i + F.cx1*dzc6i + F.cx2*dz2c12i );
345 const fvec Sy = ( F.cy0*c2i + F.cy1*dzc6i + F.cy2*dz2c12i );
346 const fvec Sz = ( F.cz0*c2i + F.cz1*dzc6i + F.cz2*dz2c12i );
347
348
349 const fvec ctdz = ct*dz;
350 const fvec ctdz2 = ct*dz2;
351
352 const fvec j04 = ctdz2* ( Sx*xy + Sy*Ay + Sz*y );
353 const fvec j14 = ctdz2* ( Sx*Bx - Sy*xy - Sz*x );
354 const fvec j24 = ctdz * ( sx*xy + sy*Ay + sz*y );
355 const fvec j34 = ctdz * ( sx*Bx - sy*xy - sz*x );
356
357 T.x += x*dz + j04*qp;
358 T.y += y*dz + j14*qp;
359 T.tx+=j24*qp;
360 T.ty+=j34*qp;
361 T.z += dz;
362
363 // covariance matrix transport
364
365 const fvec cj00 = T.C00 + T.C20*dz + T.C40*j04;
366// const fvec cj10 = T.C10 + T.C21*dz + T.C41*j04;
367 const fvec cj20 = T.C20 + T.C22*dz + T.C42*j04;
368 const fvec cj30 = T.C30 + T.C32*dz + T.C43*j04;
369
370 const fvec cj01 = T.C10 + T.C30*dz + T.C40*j14;
371 const fvec cj11 = T.C11 + T.C31*dz + T.C41*j14;
372 const fvec cj21 = T.C21 + T.C32*dz + T.C42*j14;
373 const fvec cj31 = T.C31 + T.C33*dz + T.C43*j14;
374
375// const fvec cj02 = T.C20 + T.C40*j24;
376// const fvec cj12 = T.C21 + T.C41*j24;
377 const fvec cj22 = T.C22 + T.C42*j24;
378 const fvec cj32 = T.C32 + T.C43*j24;
379
380// const fvec cj03 = T.C30 + T.C40*j34;
381// const fvec cj13 = T.C31 + T.C41*j34;
382// const fvec cj23 = T.C32 + T.C42*j34;
383 const fvec cj33 = T.C33 + T.C43*j34;
384
385 T.C40+= T.C42*dz + T.C44*j04; // cj40
386 T.C41+= T.C43*dz + T.C44*j14; // cj41
387 T.C42+= T.C44*j24; // cj42
388 T.C43+= T.C44*j34; // cj43
389
390 T.C00 = cj00 + dz*cj20 + j04*T.C40;
391 T.C10 = cj01 + dz*cj21 + j04*T.C41;
392 T.C11 = cj11 + dz*cj31 + j14*T.C41;
393
394 T.C20 = cj20 + j24*T.C40 ;
395 T.C30 = cj30 + j34*T.C40 ;
396 T.C21 = cj21 + j24*T.C41 ;
397 T.C31 = cj31 + j34*T.C41 ;
398 T.C22 = cj22 + j24*T.C42 ;
399 T.C32 = cj32 + j34*T.C42 ;
400 T.C33 = cj33 + j34*T.C43 ;
401
402}
403
404inline void L1ExtrapolateLine( L1TrackPar &T, fvec z_out)
405{
406 fvec dz = (z_out - T.z);
407
408 T.x += T.tx*dz;
409 T.y += T.ty*dz;
410 T.z += dz;
411
412 const fvec dzC32_in = dz * T.C32;
413
414 T.C21 += dzC32_in;
415 T.C10 += dz * ( T.C21 + T.C30 );
416
417 const fvec C20_in = T.C20;
418
419 T.C20 += dz * T.C22;
420 T.C00 += dz * ( T.C20 + C20_in );
421
422 const fvec C31_in = T.C31;
423
424 T.C31 += dz * T.C33;
425 T.C11 += dz * ( T.C31 + C31_in );
426 T.C30 += dzC32_in;
427
428 T.C40 += dz * T.C42;
429 T.C41 += dz * T.C43;
430}
431
432inline void L1ExtrapolateXC00Line( const L1TrackPar &T, fvec z_out, fvec& x, fvec& C00 )
433{
434 const fvec dz = (z_out - T.z);
435 x = T.x + T.tx*dz;
436 C00 = T.C00 + dz * ( 2*T.C20 + dz * T.C22 );
437}
438
439inline void L1ExtrapolateYC11Line( const L1TrackPar &T, fvec z_out, fvec& y, fvec& C11 )
440{
441 const fvec dz = (z_out - T.z);
442 y = T.y + T.ty*dz;
443 C11 = T.C11 + dz * ( 2*T.C31 + dz * T.C33 );
444}
445
446inline void L1ExtrapolateC10Line( const L1TrackPar &T, fvec z_out, fvec& C10 )
447{
448 const fvec dz = (z_out - T.z);
449 C10 = T.C10 + dz * ( T.C21 + T.C30 + dz * T.C32 );
450}
451
452inline void L1ExtrapolateJXY // is not used currently
453(
454 fvec &tx, fvec &ty, fvec &qp, // input track parameters
455 fvec dz , // extrapolate to this dz
456 L1FieldRegion &F,
457 fvec &extrDx, fvec &extrDy, fvec extrJ[]
458 )
459{
460 //
461 // Part of the analytic extrapolation formula with error (c_light*B*dz)^4/4!
462 //
463
464 //cnst ZERO = 0.0, ONE = 1.;
465 cnst c_light = 0.000299792458;//, c_light_i = 1./c_light;
466
467 cnst
468 c1 = 1., c2 = 2., c3 = 3., c4 = 4., c6 = 6., c9 = 9., c15 = 15., c18 = 18., c45 = 45.,
469 c2i = 1./2., /*c3i = 1./3.,*/ c6i = 1./6., c12i = 1./12.;
470
471 fvec dz2 = dz*dz;
472 fvec dz3 = dz2*dz;
473
474 // construct coefficients
475
476 fvec x = tx;
477 fvec y = ty;
478 fvec xx = x*x;
479 fvec xy = x*y;
480 fvec yy = y*y;
481 fvec y2 = y*c2;
482 fvec x2 = x*c2;
483 fvec x4 = x*c4;
484 fvec xx31 = xx*c3+c1;
485 fvec xx159 = xx*c15+c9;
486
487 fvec Ay = -xx-c1;
488 fvec Ayy = x*(xx*c3+c3);
489 fvec Ayz = -c2*xy;
490 fvec Ayyy = -(c15*xx*xx+c18*xx+c3);
491
492 fvec Ayy_x = c3*xx31;
493 fvec Ayyy_x = -x4*xx159;
494
495 fvec Bx = yy+c1;
496 fvec Byy = y*xx31;
497 fvec Byz = c2*xx+c1;
498 fvec Byyy = -xy*xx159;
499
500 fvec Byy_x = c6*xy;
501 fvec Byyy_x = -y*(c45*xx+c9);
502 fvec Byyy_y = -x*xx159;
503
504 // end of coefficients calculation
505
506 fvec t2 = c1 + xx + yy;
507 fvec t = sqrt( t2 );
508 fvec h = qp*c_light;
509 fvec ht = h*t;
510
511 // get field integrals
512 fvec Fx0 = F.cx0;
513 fvec Fx1 = F.cx1*dz;
514 fvec Fx2 = F.cx2*dz2;
515 fvec Fy0 = F.cy0;
516 fvec Fy1 = F.cy1*dz;
517 fvec Fy2 = F.cy2*dz2;
518 fvec Fz0 = F.cz0;
519 fvec Fz1 = F.cz1*dz;
520 fvec Fz2 = F.cz2*dz2;
521
522 //
523
524 fvec Sx = ( Fx0*c2i + Fx1*c6i + Fx2*c12i );
525 fvec Sy = ( Fy0*c2i + Fy1*c6i + Fy2*c12i );
526 fvec Sz = ( Fz0*c2i + Fz1*c6i + Fz2*c12i );
527
528 fvec Syz;
529 {
530 cnst
531 d = 1./2520.,
532 c00 = 21.*20.*d, c01 = 21.*5.*d, c02 = 21.*2.*d,
533 c10 = 7.*30.*d, c11 = 7.*9.*d, c12 = 7.*4.*d,
534 c20 = 2.*63.*d, c21 = 2.*21.*d, c22 = 2.*10.*d;
535 Syz = Fy0*( c00*Fz0 + c01*Fz1 + c02*Fz2 )
536 + Fy1*( c10*Fz0 + c11*Fz1 + c12*Fz2 )
537 + Fy2*( c20*Fz0 + c21*Fz1 + c22*Fz2 ) ;
538 }
539
540 fvec Syy ;
541 {
542 cnst
543 d= 1./2520., c00= 420.*d, c01= 21.*15.*d, c02= 21.*8.*d,
544 c03= 63.*d, c04= 70.*d, c05= 20.*d;
545 Syy = Fy0*(c00*Fy0+c01*Fy1+c02*Fy2) + Fy1*(c03*Fy1+c04*Fy2) + c05*Fy2*Fy2 ;
546 }
547
548 fvec Syyy;
549 {
550 cnst
551 d = 1./181440.,
552 c000 = 7560*d, c001 = 9*1008*d, c002 = 5*1008*d,
553 c011 = 21*180*d, c012 = 24*180*d, c022 = 7*180*d,
554 c111 = 540*d, c112 = 945*d, c122 = 560*d, c222 = 112*d;
555 fvec Fy22 = Fy2*Fy2;
556 Syyy = Fy0*( Fy0*(c000*Fy0+c001*Fy1+c002*Fy2)+ Fy1*(c011*Fy1+c012*Fy2)+c022*Fy22 )
557 + Fy1*( Fy1*(c111*Fy1+c112*Fy2)+c122*Fy22) + c222*Fy22*Fy2 ;
558 }
559
560 fvec SA1 = Sx*xy + Sy*Ay + Sz*y ;
561 fvec SA1_x = Sx*y - Sy*x2 ;
562 fvec SA1_y = Sx*x + Sz;
563
564 fvec SB1 = Sx*Bx - Sy*xy - Sz*x ;
565 fvec SB1_x = -Sy*y - Sz;
566 fvec SB1_y = Sx*y2 - Sy*x;
567
568 fvec SA2 = Syy*Ayy + Syz*Ayz ;
569 fvec SA2_x = Syy*Ayy_x - Syz*y2 ;
570 fvec SA2_y = -Syz*x2 ;
571 fvec SB2 = Syy*Byy + Syz*Byz ;
572 fvec SB2_x = Syy*Byy_x + Syz*x4 ;
573 fvec SB2_y = Syy*xx31 ;
574
575 fvec SA3 = Syyy*Ayyy ;
576 fvec SA3_x = Syyy*Ayyy_x;
577 fvec SB3 = Syyy*Byyy ;
578 fvec SB3_x = Syyy*Byyy_x;
579 fvec SB3_y = Syyy*Byyy_y;
580
581 fvec ht1 = ht*dz;
582 fvec ht2 = ht*ht*dz2;
583 fvec ht3 = ht*ht*ht*dz3;
584 fvec ht1SA1 = ht1*SA1;
585 fvec ht1SB1 = ht1*SB1;
586 fvec ht2SA2 = ht2*SA2;
587 fvec ht2SB2 = ht2*SB2;
588 fvec ht3SA3 = ht3*SA3;
589 fvec ht3SB3 = ht3*SB3;
590
591 extrDx = ( x + ht1SA1 + ht2SA2 + ht3SA3 )*dz ;
592 extrDy = ( y + ht1SB1 + ht2SB2 + ht3SB3 )*dz ;
593
594 fvec ctdz2 = c_light*t*dz2;
595
596 fvec t2i = c1*rcp(t2);// /t2;
597 fvec xt2i = x*t2i;
598 fvec yt2i = y*t2i;
599 fvec tmp0 = ht1SA1 + c2*ht2SA2 + c3*ht3SA3;
600 fvec tmp1 = ht1SB1 + c2*ht2SB2 + c3*ht3SB3;
601
602 extrJ[0] = dz*(c1 + xt2i*tmp0 + ht1*SA1_x + ht2*SA2_x + ht3*SA3_x); // j02
603 extrJ[1] = dz*( yt2i*tmp0 + ht1*SA1_y + ht2*SA2_y ); // j03
604 extrJ[2] = ctdz2*( SA1 + c2*ht1*SA2 + c3*ht2*SA3 ); // j04
605 extrJ[3] = dz*( xt2i*tmp1 + ht1*SB1_x + ht2*SB2_x + ht3*SB3_x); // j12
606 extrJ[4] = dz*(c1 + yt2i*tmp1 + ht1*SB1_y + ht2*SB2_y + ht3*SB3_y ); // j13
607 extrJ[5] = ctdz2*( SB1 + c2*ht1*SB2 + c3*ht2*SB3 ); // j14
608
609}
610
612(
613 fvec &tx, fvec &ty, // input track slopes
614 fvec dz , // extrapolate to this dz position
615 L1FieldRegion &F,
616 fvec &extrDx, fvec &extrDy, fvec &J04, fvec &J14
617 )
618{
619 cnst c_light = 0.000299792458, c1 = 1., c2i = 0.5, c6i = 1./6., c12i = 1./12.;
620
621 fvec dz2 = dz*dz;
622 fvec dzc6i = dz*c6i;
623 fvec dz2c12i = dz2*c12i;
624
625 fvec xx = tx*tx;
626 fvec yy = ty*ty;
627 fvec xy = tx*ty;
628
629 fvec Ay = -xx-c1;
630 fvec Bx = yy+c1;
631
632 fvec ctdz2 = c_light*sqrt( c1 + xx + yy )*dz2;
633
634 fvec Sx = F.cx0*c2i + F.cx1*dzc6i + F.cx2*dz2c12i ;
635 fvec Sy = F.cy0*c2i + F.cy1*dzc6i + F.cy2*dz2c12i ;
636 fvec Sz = F.cz0*c2i + F.cz1*dzc6i + F.cz2*dz2c12i ;
637
638 extrDx = ( tx )*dz ;
639 extrDy = ( ty )*dz ;
640 J04 = ctdz2 * (Sx*xy + Sy*Ay + Sz*ty);
641 J14 = ctdz2 * (Sx*Bx - Sy*xy - Sz*tx);
642}
643
644#undef cnst
645
646#endif
const Float_t d
Z-ccordinate of the first GEM-station.
Definition BmnMwpcHit.cxx:7
void L1Extrapolate0(L1TrackPar &T, fvec z_out, L1FieldRegion &F)
void L1ExtrapolateJXY(fvec &tx, fvec &ty, fvec &qp, fvec dz, L1FieldRegion &F, fvec &extrDx, fvec &extrDy, fvec extrJ[])
void L1ExtrapolateC10Line(const L1TrackPar &T, fvec z_out, fvec &C10)
void L1ExtrapolateLine(L1TrackPar &T, fvec z_out)
#define cnst
void L1ExtrapolateJXY0(fvec &tx, fvec &ty, fvec dz, L1FieldRegion &F, fvec &extrDx, fvec &extrDy, fvec &J04, fvec &J14)
void L1ExtrapolateYC11Line(const L1TrackPar &T, fvec z_out, fvec &y, fvec &C11)
void L1Extrapolate(L1TrackPar &T, fvec z_out, fvec qp0, L1FieldRegion &F, fvec *w=0)
void L1ExtrapolateXC00Line(const L1TrackPar &T, fvec z_out, fvec &x, fvec &C00)
friend F32vec4 sqrt(const F32vec4 &a)
Definition P4_F32vec4.h:34
friend F32vec4 rcp(const F32vec4 &a)
Definition P4_F32vec4.h:45
F32vec4 fvec
Definition P4_F32vec4.h:231