BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
MucMagneticField Class Reference

#include <MucMagneticField.h>

Public Member Functions

 MucMagneticField ()
 ~MucMagneticField ()
void getMucField (int part, int layer, int mat, HepPoint3D &r, HepVector3D &b)
void readPar ()
std::string getPath ()

Detailed Description

Definition at line 15 of file MucMagneticField.h.

Constructor & Destructor Documentation

◆ MucMagneticField()

MucMagneticField::MucMagneticField ( )

Definition at line 10 of file MucMagneticField.cxx.

10 {
11 if ( !getenv( "MAGNETICFIELDDATAROOT" ) ) { cerr << "MAGNETICFIELDDATAROOT is not set!" << endl; }
12 else
13 {
14 path = std::string( getenv( "MAGNETICFIELDDATAROOT" ) );
15 readPar();
16 }
17#else
18MucMagneticField::MucMagneticField( const std::string Path ) {
19 path = Path;
20 readPar();
21#endif
22}

Referenced by MucMagneticField().

◆ ~MucMagneticField()

MucMagneticField::~MucMagneticField ( )

Definition at line 23 of file MucMagneticField.cxx.

23{}

Member Function Documentation

◆ getMucField()

void MucMagneticField::getMucField ( int part,
int layer,
int mat,
HepPoint3D & r,
HepVector3D & b )

Definition at line 24 of file MucMagneticField.cxx.

25 {
26 double x, y, z, bmf, emf;
27 x = r.x() / m;
28 y = r.y() / m;
29 z = r.z() / m;
30 // barrel, layer is the number of iron layer, mat=0 iron, mat=1 air
31 if ( part == 1 )
32 {
33 if ( layer == 0 && mat == 0 )
34 {
35 for ( int i = 0; i < 18; i++ ) bp[i] = bipx0[i];
36 }
37 if ( layer == 0 && mat == 1 )
38 {
39 for ( int i = 0; i < 18; i++ ) bp[i] = bapx0[i];
40 }
41 if ( layer == 1 && mat == 0 )
42 {
43 for ( int i = 0; i < 18; i++ ) bp[i] = bipx1[i];
44 }
45 if ( layer == 1 && mat == 1 )
46 {
47 for ( int i = 0; i < 18; i++ ) bp[i] = bapx1[i];
48 }
49 if ( layer == 2 && mat == 0 )
50 {
51 for ( int i = 0; i < 18; i++ ) bp[i] = bipx2[i];
52 }
53 if ( layer == 2 && mat == 1 )
54 {
55 for ( int i = 0; i < 18; i++ ) bp[i] = bapx2[i];
56 }
57 if ( layer == 3 && mat == 0 )
58 {
59 for ( int i = 0; i < 18; i++ ) bp[i] = bipx3[i];
60 }
61 if ( layer == 3 && mat == 1 )
62 {
63 for ( int i = 0; i < 18; i++ ) bp[i] = bapx3[i];
64 }
65 if ( layer == 4 && mat == 0 )
66 {
67 for ( int i = 0; i < 18; i++ ) bp[i] = bipx4[i];
68 }
69 if ( layer == 4 && mat == 1 )
70 {
71 for ( int i = 0; i < 18; i++ ) bp[i] = bapx4[i];
72 }
73 if ( layer == 5 && mat == 0 )
74 {
75 for ( int i = 0; i < 18; i++ ) bp[i] = bipx5[i];
76 }
77 if ( layer == 5 && mat == 1 )
78 {
79 for ( int i = 0; i < 18; i++ ) bp[i] = bapx5[i];
80 }
81 if ( layer == 6 && mat == 0 )
82 {
83 for ( int i = 0; i < 18; i++ ) bp[i] = bipx6[i];
84 }
85 if ( layer == 6 && mat == 1 )
86 {
87 for ( int i = 0; i < 18; i++ ) bp[i] = bapx6[i];
88 }
89 if ( layer == 7 && mat == 0 )
90 {
91 for ( int i = 0; i < 18; i++ ) bp[i] = bipx7[i];
92 }
93 if ( layer == 7 && mat == 1 )
94 {
95 for ( int i = 0; i < 18; i++ ) bp[i] = bapx7[i];
96 }
97 if ( layer == 8 && mat == 0 )
98 {
99 for ( int i = 0; i < 18; i++ ) bp[i] = bipx8[i];
100 }
101 bmf = bp[0] + bp[1] * x + bp[2] * x * x + bp[3] * z + bp[4] * z * z + bp[5] * z * z * z +
102 bp[6] * z * z * z * z + bp[7] * z * z * z * z * z + bp[8] * z * z * z * z * z * z +
103 bp[9] * z * z * z * z * z * z * z + bp[10] * y + bp[11] * y * y +
104 bp[12] * y * y * y + bp[13] * x * z + bp[14] * z * y + bp[15] * x * y +
105 bp[16] * z * y * y + bp[17] * z * z * y;
106 b[0] = bmf * tesla;
107
108 if ( layer == 0 && mat == 0 )
109 {
110 for ( int i = 0; i < 18; i++ ) bp[i] = bipy0[i];
111 }
112 if ( layer == 0 && mat == 1 )
113 {
114 for ( int i = 0; i < 18; i++ ) bp[i] = bapy0[i];
115 }
116 if ( layer == 1 && mat == 0 )
117 {
118 for ( int i = 0; i < 18; i++ ) bp[i] = bipy1[i];
119 }
120 if ( layer == 1 && mat == 1 )
121 {
122 for ( int i = 0; i < 18; i++ ) bp[i] = bapy1[i];
123 }
124 if ( layer == 2 && mat == 0 )
125 {
126 for ( int i = 0; i < 18; i++ ) bp[i] = bipy2[i];
127 }
128 if ( layer == 2 && mat == 1 )
129 {
130 for ( int i = 0; i < 18; i++ ) bp[i] = bapy2[i];
131 }
132 if ( layer == 3 && mat == 0 )
133 {
134 for ( int i = 0; i < 18; i++ ) bp[i] = bipy3[i];
135 }
136 if ( layer == 3 && mat == 1 )
137 {
138 for ( int i = 0; i < 18; i++ ) bp[i] = bapy3[i];
139 }
140 if ( layer == 4 && mat == 0 )
141 {
142 for ( int i = 0; i < 18; i++ ) bp[i] = bipy4[i];
143 }
144 if ( layer == 4 && mat == 1 )
145 {
146 for ( int i = 0; i < 18; i++ ) bp[i] = bapy4[i];
147 }
148 if ( layer == 5 && mat == 0 )
149 {
150 for ( int i = 0; i < 18; i++ ) bp[i] = bipy5[i];
151 }
152 if ( layer == 5 && mat == 1 )
153 {
154 for ( int i = 0; i < 18; i++ ) bp[i] = bapy5[i];
155 }
156 if ( layer == 6 && mat == 0 )
157 {
158 for ( int i = 0; i < 18; i++ ) bp[i] = bipy6[i];
159 }
160 if ( layer == 6 && mat == 1 )
161 {
162 for ( int i = 0; i < 18; i++ ) bp[i] = bapy6[i];
163 }
164 if ( layer == 7 && mat == 0 )
165 {
166 for ( int i = 0; i < 18; i++ ) bp[i] = bipy7[i];
167 }
168 if ( layer == 7 && mat == 1 )
169 {
170 for ( int i = 0; i < 18; i++ ) bp[i] = bapy7[i];
171 }
172 if ( layer == 8 && mat == 0 )
173 {
174 for ( int i = 0; i < 18; i++ ) bp[i] = bipy8[i];
175 }
176 bmf = bp[0] + bp[1] * x + bp[2] * x * x + bp[3] * z + bp[4] * z * z + bp[5] * z * z * z +
177 bp[6] * z * z * z * z + bp[7] * z * z * z * z * z + bp[8] * z * z * z * z * z * z +
178 bp[9] * z * z * z * z * z * z * z + bp[10] * y + bp[11] * y * y +
179 bp[12] * y * y * y + bp[13] * x * z + bp[14] * z * y + bp[15] * x * y +
180 bp[16] * z * y * y + bp[17] * z * z * y;
181 b[1] = bmf * tesla;
182
183 if ( layer == 0 && mat == 0 )
184 {
185 for ( int i = 0; i < 18; i++ ) bp[i] = bipz0[i];
186 }
187 if ( layer == 0 && mat == 1 )
188 {
189 for ( int i = 0; i < 18; i++ ) bp[i] = bapz0[i];
190 }
191 if ( layer == 1 && mat == 0 )
192 {
193 for ( int i = 0; i < 18; i++ ) bp[i] = bipz1[i];
194 }
195 if ( layer == 1 && mat == 1 )
196 {
197 for ( int i = 0; i < 18; i++ ) bp[i] = bapz1[i];
198 }
199 if ( layer == 2 && mat == 0 )
200 {
201 for ( int i = 0; i < 18; i++ ) bp[i] = bipz2[i];
202 }
203 if ( layer == 2 && mat == 1 )
204 {
205 for ( int i = 0; i < 18; i++ ) bp[i] = bapz2[i];
206 }
207 if ( layer == 3 && mat == 0 )
208 {
209 for ( int i = 0; i < 18; i++ ) bp[i] = bipz3[i];
210 }
211 if ( layer == 3 && mat == 1 )
212 {
213 for ( int i = 0; i < 18; i++ ) bp[i] = bapz3[i];
214 }
215 if ( layer == 4 && mat == 0 )
216 {
217 for ( int i = 0; i < 18; i++ ) bp[i] = bipz4[i];
218 }
219 if ( layer == 4 && mat == 1 )
220 {
221 for ( int i = 0; i < 18; i++ ) bp[i] = bapz4[i];
222 }
223 if ( layer == 5 && mat == 0 )
224 {
225 for ( int i = 0; i < 18; i++ ) bp[i] = bipz5[i];
226 }
227 if ( layer == 5 && mat == 1 )
228 {
229 for ( int i = 0; i < 18; i++ ) bp[i] = bapz5[i];
230 }
231 if ( layer == 6 && mat == 0 )
232 {
233 for ( int i = 0; i < 18; i++ ) bp[i] = bipz6[i];
234 }
235 if ( layer == 6 && mat == 1 )
236 {
237 for ( int i = 0; i < 18; i++ ) bp[i] = bapz6[i];
238 }
239 if ( layer == 7 && mat == 0 )
240 {
241 for ( int i = 0; i < 18; i++ ) bp[i] = bipz7[i];
242 }
243 if ( layer == 7 && mat == 1 )
244 {
245 for ( int i = 0; i < 18; i++ ) bp[i] = bapz7[i];
246 }
247 if ( layer == 8 && mat == 0 )
248 {
249 for ( int i = 0; i < 18; i++ ) bp[i] = bipz8[i];
250 }
251 bmf = bp[0] + bp[1] * x + bp[2] * x * x + bp[3] * z + bp[4] * z * z + bp[5] * z * z * z +
252 bp[6] * z * z * z * z + bp[7] * z * z * z * z * z + bp[8] * z * z * z * z * z * z +
253 bp[9] * z * z * z * z * z * z * z + bp[10] * y + bp[11] * y * y +
254 bp[12] * y * y * y + bp[13] * x * z + bp[14] * z * y + bp[15] * x * y +
255 bp[16] * z * y * y + bp[17] * z * z * y;
256 b[2] = bmf * tesla;
257 }
258 // endcaps, layer is the number of iron layer, total 9. m=0 iron, m=1 air
259 if ( part == 0 )
260 {
261 if ( layer == 0 && mat == 0 )
262 {
263 for ( int i = 0; i < 17; i++ ) ep[i] = aipx0[i];
264 }
265 if ( layer == 0 && mat == 1 )
266 {
267 for ( int i = 0; i < 17; i++ ) ep[i] = aapx0[i];
268 }
269 if ( layer == 1 && mat == 0 )
270 {
271 for ( int i = 0; i < 17; i++ ) ep[i] = aipx1[i];
272 }
273 if ( layer == 1 && mat == 1 )
274 {
275 for ( int i = 0; i < 17; i++ ) ep[i] = aapx1[i];
276 }
277 if ( layer == 2 && mat == 0 )
278 {
279 for ( int i = 0; i < 17; i++ ) ep[i] = aipx2[i];
280 }
281 if ( layer == 2 && mat == 1 )
282 {
283 for ( int i = 0; i < 17; i++ ) ep[i] = aapx2[i];
284 }
285 if ( layer == 3 && mat == 0 )
286 {
287 for ( int i = 0; i < 17; i++ ) ep[i] = aipx3[i];
288 }
289 if ( layer == 3 && mat == 1 )
290 {
291 for ( int i = 0; i < 17; i++ ) ep[i] = aapx3[i];
292 }
293 if ( layer == 4 && mat == 0 )
294 {
295 for ( int i = 0; i < 17; i++ ) ep[i] = aipx4[i];
296 }
297 if ( layer == 4 && mat == 1 )
298 {
299 for ( int i = 0; i < 17; i++ ) ep[i] = aapx4[i];
300 }
301 if ( layer == 5 && mat == 0 )
302 {
303 for ( int i = 0; i < 17; i++ ) ep[i] = aipx5[i];
304 }
305 if ( layer == 5 && mat == 1 )
306 {
307 for ( int i = 0; i < 17; i++ ) ep[i] = aapx5[i];
308 }
309 if ( layer == 6 && mat == 0 )
310 {
311 for ( int i = 0; i < 17; i++ ) ep[i] = aipx6[i];
312 }
313 if ( layer == 6 && mat == 1 )
314 {
315 for ( int i = 0; i < 17; i++ ) ep[i] = aapx6[i];
316 }
317 if ( layer == 7 && mat == 0 )
318 {
319 for ( int i = 0; i < 17; i++ ) ep[i] = aipx7[i];
320 }
321 if ( layer == 7 && mat == 1 )
322 {
323 for ( int i = 0; i < 17; i++ ) ep[i] = aapx7[i];
324 }
325 if ( layer == 8 && mat == 0 )
326 {
327 for ( int i = 0; i < 17; i++ ) ep[i] = aipx8[i];
328 }
329 emf = ep[0] + ep[1] * x + ep[2] * x * x + ep[3] * x * x * x + ep[4] * x * x * x * x +
330 ep[5] * x * x * x * x * x + ep[6] * x * x * x * x * x * x +
331 ep[7] * x * x * x * x * x * x * x + ep[8] * z + ep[9] * y + ep[10] * y * y +
332 ep[11] * y * y * y + ep[12] * x * z + ep[13] * z * y + ep[14] * y * x +
333 ep[15] * y * x * x + ep[16] * y * y * x;
334 b[0] = emf * tesla;
335
336 if ( layer == 0 && mat == 0 )
337 {
338 for ( int i = 0; i < 17; i++ ) ep[i] = aipy0[i];
339 }
340 if ( layer == 0 && mat == 1 )
341 {
342 for ( int i = 0; i < 17; i++ ) ep[i] = aapy0[i];
343 }
344 if ( layer == 1 && mat == 0 )
345 {
346 for ( int i = 0; i < 17; i++ ) ep[i] = aipy1[i];
347 }
348 if ( layer == 1 && mat == 1 )
349 {
350 for ( int i = 0; i < 17; i++ ) ep[i] = aapy1[i];
351 }
352 if ( layer == 2 && mat == 0 )
353 {
354 for ( int i = 0; i < 17; i++ ) ep[i] = aipy2[i];
355 }
356 if ( layer == 2 && mat == 1 )
357 {
358 for ( int i = 0; i < 17; i++ ) ep[i] = aapy2[i];
359 }
360 if ( layer == 3 && mat == 0 )
361 {
362 for ( int i = 0; i < 17; i++ ) ep[i] = aipy3[i];
363 }
364 if ( layer == 3 && mat == 1 )
365 {
366 for ( int i = 0; i < 17; i++ ) ep[i] = aapy3[i];
367 }
368 if ( layer == 4 && mat == 0 )
369 {
370 for ( int i = 0; i < 17; i++ ) ep[i] = aipy4[i];
371 }
372 if ( layer == 4 && mat == 1 )
373 {
374 for ( int i = 0; i < 17; i++ ) ep[i] = aapy4[i];
375 }
376 if ( layer == 5 && mat == 0 )
377 {
378 for ( int i = 0; i < 17; i++ ) ep[i] = aipy5[i];
379 }
380 if ( layer == 5 && mat == 1 )
381 {
382 for ( int i = 0; i < 17; i++ ) ep[i] = aapy5[i];
383 }
384 if ( layer == 6 && mat == 0 )
385 {
386 for ( int i = 0; i < 17; i++ ) ep[i] = aipy6[i];
387 }
388 if ( layer == 6 && mat == 1 )
389 {
390 for ( int i = 0; i < 17; i++ ) ep[i] = aapy6[i];
391 }
392 if ( layer == 7 && mat == 0 )
393 {
394 for ( int i = 0; i < 17; i++ ) ep[i] = aipy7[i];
395 }
396 if ( layer == 7 && mat == 1 )
397 {
398 for ( int i = 0; i < 17; i++ ) ep[i] = aapy7[i];
399 }
400 if ( layer == 8 && mat == 0 )
401 {
402 for ( int i = 0; i < 17; i++ ) ep[i] = aipy8[i];
403 }
404 emf = ep[0] + ep[1] * x + ep[2] * x * x + ep[3] * x * x * x + ep[4] * x * x * x * x +
405 ep[5] * x * x * x * x * x + ep[6] * x * x * x * x * x * x +
406 ep[7] * x * x * x * x * x * x * x + ep[8] * z + ep[9] * y + ep[10] * y * y +
407 ep[11] * y * y * y + ep[12] * x * z + ep[13] * z * y + ep[14] * y * x +
408 ep[15] * y * x * x + ep[16] * y * y * x;
409 b[1] = emf * tesla;
410
411 if ( layer == 0 && mat == 0 )
412 {
413 for ( int i = 0; i < 17; i++ ) ep[i] = aipz0[i];
414 }
415 if ( layer == 0 && mat == 1 )
416 {
417 for ( int i = 0; i < 17; i++ ) ep[i] = aapz0[i];
418 }
419 if ( layer == 1 && mat == 0 )
420 {
421 for ( int i = 0; i < 17; i++ ) ep[i] = aipz1[i];
422 }
423 if ( layer == 1 && mat == 1 )
424 {
425 for ( int i = 0; i < 17; i++ ) ep[i] = aapz1[i];
426 }
427 if ( layer == 2 && mat == 0 )
428 {
429 for ( int i = 0; i < 17; i++ ) ep[i] = aipz2[i];
430 }
431 if ( layer == 2 && mat == 1 )
432 {
433 for ( int i = 0; i < 17; i++ ) ep[i] = aapz2[i];
434 }
435 if ( layer == 3 && mat == 0 )
436 {
437 for ( int i = 0; i < 17; i++ ) ep[i] = aipz3[i];
438 }
439 if ( layer == 3 && mat == 1 )
440 {
441 for ( int i = 0; i < 17; i++ ) ep[i] = aapz3[i];
442 }
443 if ( layer == 4 && mat == 0 )
444 {
445 for ( int i = 0; i < 17; i++ ) ep[i] = aipz4[i];
446 }
447 if ( layer == 4 && mat == 1 )
448 {
449 for ( int i = 0; i < 17; i++ ) ep[i] = aapz4[i];
450 }
451 if ( layer == 5 && mat == 0 )
452 {
453 for ( int i = 0; i < 17; i++ ) ep[i] = aipz5[i];
454 }
455 if ( layer == 5 && mat == 1 )
456 {
457 for ( int i = 0; i < 17; i++ ) ep[i] = aapz5[i];
458 }
459 if ( layer == 6 && mat == 0 )
460 {
461 for ( int i = 0; i < 17; i++ ) ep[i] = aipz6[i];
462 }
463 if ( layer == 6 && mat == 1 )
464 {
465 for ( int i = 0; i < 17; i++ ) ep[i] = aapz6[i];
466 }
467 if ( layer == 7 && mat == 0 )
468 {
469 for ( int i = 0; i < 17; i++ ) ep[i] = aipz7[i];
470 }
471 if ( layer == 7 && mat == 1 )
472 {
473 for ( int i = 0; i < 17; i++ ) ep[i] = aapz7[i];
474 }
475 if ( layer == 8 && mat == 0 )
476 {
477 for ( int i = 0; i < 17; i++ ) ep[i] = aipz8[i];
478 }
479 emf = ep[0] + ep[1] * x + ep[2] * x * x + ep[3] * x * x * x + ep[4] * x * x * x * x +
480 ep[5] * x * x * x * x * x + ep[6] * x * x * x * x * x * x +
481 ep[7] * x * x * x * x * x * x * x + ep[8] * z + ep[9] * y + ep[10] * y * y +
482 ep[11] * y * y * y + ep[12] * x * z + ep[13] * z * y + ep[14] * y * x +
483 ep[15] * y * x * x + ep[16] * y * y * x;
484 b[2] = emf * tesla;
485 }
486}
Double_t x[10]

◆ getPath()

std::string MucMagneticField::getPath ( )
inline

Definition at line 27 of file MucMagneticField.h.

27{ return path; }

◆ readPar()

void MucMagneticField::readPar ( )

Definition at line 487 of file MucMagneticField.cxx.

487 {
488 filename = path + std::string( "/dat/barIronpar.txt" );
489 ifstream infile1( filename.c_str(), ios_base::in );
490 if ( infile1 ) cout << "*** Read field map_Iron: " << filename << endl;
491 for ( int i = 0; i < 18; i++ )
492 {
493 infile1 >> bipx0[i] >> bipy0[i] >> bipz0[i] >> bipx1[i] >> bipy1[i] >> bipz1[i] >>
494 bipx2[i] >> bipy2[i] >> bipz2[i] >> bipx3[i] >> bipy3[i] >> bipz3[i] >> bipx4[i] >>
495 bipy4[i] >> bipz4[i] >> bipx5[i] >> bipy5[i] >> bipz5[i] >> bipx6[i] >> bipy6[i] >>
496 bipz6[i] >> bipx7[i] >> bipy7[i] >> bipz7[i] >> bipx8[i] >> bipy8[i] >> bipz8[i];
497 }
498
499 filename = path + std::string( "/dat/barAirpar.txt" );
500
501 ifstream infile2( filename.c_str(), ios_base::in );
502 if ( infile2 ) cout << "*** Read field map_Air: " << filename << endl;
503 for ( int j = 0; j < 18; j++ )
504 {
505 infile2 >> bapx0[j] >> bapy0[j] >> bapz0[j] >> bapx1[j] >> bapy1[j] >> bapz1[j] >>
506 bapx2[j] >> bapy2[j] >> bapz2[j] >> bapx3[j] >> bapy3[j] >> bapz3[j] >> bapx4[j] >>
507 bapy4[j] >> bapz4[j] >> bapx5[j] >> bapy5[j] >> bapz5[j] >> bapx6[j] >> bapy6[j] >>
508 bapz6[j] >> bapx7[j] >> bapy7[j] >> bapz7[j];
509 }
510
511 filename = path + std::string( "/dat/endIronpar.txt" );
512
513 ifstream infile3( filename.c_str(), ios_base::in );
514 if ( infile3 ) cout << "*** Read field map_end: " << filename << endl;
515 for ( int i = 0; i < 17; i++ )
516 {
517 infile3 >> aipx0[i] >> aipy0[i] >> aipz0[i] >> aipx1[i] >> aipy1[i] >> aipz1[i] >>
518 aipx2[i] >> aipy2[i] >> aipz2[i] >> aipx3[i] >> aipy3[i] >> aipz3[i] >> aipx4[i] >>
519 aipy4[i] >> aipz4[i] >> aipx5[i] >> aipy5[i] >> aipz5[i] >> aipx6[i] >> aipy6[i] >>
520 aipz6[i] >> aipx7[i] >> aipy7[i] >> aipz7[i] >> aipx8[i] >> aipy8[i] >> aipz8[i];
521 }
522
523 filename = path + std::string( "/dat/endAirpar.txt" );
524
525 ifstream infile4( filename.c_str(), ios_base::in );
526 if ( infile4 ) cout << "*** Read field map_end_air: " << filename << endl;
527 for ( int j = 0; j < 17; j++ )
528 {
529 infile4 >> aapx0[j] >> aapy0[j] >> aapz0[j] >> aapx1[j] >> aapy1[j] >> aapz1[j] >>
530 aapx2[j] >> aapy2[j] >> aapz2[j] >> aapx3[j] >> aapy3[j] >> aapz3[j] >> aapx4[j] >>
531 aapy4[j] >> aapz4[j] >> aapx5[j] >> aapy5[j] >> aapz5[j] >> aapx6[j] >> aapy6[j] >>
532 aapz6[j] >> aapx7[j] >> aapy7[j] >> aapz7[j];
533 }
534}

Referenced by MucMagneticField().


The documentation for this class was generated from the following files: