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

#include <MagneticFieldSvc.h>

Inheritance diagram for MagneticFieldSvc:

Public Member Functions

 MagneticFieldSvc (const std::string &name, ISvcLocator *svc)
virtual ~MagneticFieldSvc ()
 Virtual destructor.
virtual StatusCode initialize ()
 Initialise the service (Inherited Service overrides).
void init_params ()
void init_params (std::vector< double > current, std::vector< double > beamEnergy, int runNo)
virtual StatusCode finalize ()
 Finalise the service.
virtual const InterfaceID & type () const
 Service type.
void handle (const Incident &)
virtual StatusCode fieldVector (const HepPoint3D &xyz, HepVector3D &fvec) const
virtual StatusCode uniFieldVector (const HepPoint3D &xyz, HepVector3D &fvec) const
virtual double getReferField ()
virtual bool ifRealField () const

Public Attributes

bool m_readOneTime
int m_runFrom
int m_runTo
int runNo
IDataProviderSvc * m_eventSvc
FieldDBUtil::ConnectionDBm_connect_run
std::map< int, std::vector< double > > m_mapMagnetInfo
std::map< int, std::vector< double > > m_mapBeamEnergy
std::vector< double > beamEnergy
std::vector< double > current

Detailed Description

A service for finding the magnetic field vector at a given point in space.

Definition at line 40 of file MagneticFieldSvc.h.

Constructor & Destructor Documentation

◆ MagneticFieldSvc()

MagneticFieldSvc::MagneticFieldSvc ( const std::string & name,
ISvcLocator * svc )

Standard Constructor.

Parameters
nameString with service name
svcPointer to service locator interface

Definition at line 46 of file MagneticFieldSvc.cxx.

47 : base_class( name, svc ) {
48 declareProperty( "TurnOffField", m_turnOffField = false );
49 declareProperty( "FieldMapFile", m_filename );
50 declareProperty( "GridDistance", m_gridDistance = 5 );
51 declareProperty( "RunMode", m_runmode = 2 );
52 declareProperty( "IfRealField", m_ifRealField = true );
53 declareProperty( "OutLevel", m_outlevel = 1 );
54 declareProperty( "Scale", m_scale = 1.0 );
55 declareProperty( "UniField", m_uniField = false );
56
57 declareProperty( "Cur_SCQ1_55", m_Cur_SCQ1_55 = 349.4 );
58 declareProperty( "Cur_SCQ1_89", m_Cur_SCQ1_89 = 426.2 );
59 declareProperty( "Cur_SCQ2_10", m_Cur_SCQ2_10 = 474.2 );
60
61 declareProperty( "UseDBFlag", m_useDB = true );
62 declareProperty( "ReadOneTime", m_readOneTime = false );
63 declareProperty( "RunFrom", m_runFrom = 8093 );
64 declareProperty( "RunTo", m_runTo = 9025 );
65
66 m_Mucfield = new MucMagneticField();
67 if ( !m_Mucfield ) cout << "error: can not get MucMagneticField pointer" << endl;
68
69 m_zfield = -1.0 * tesla;
70
71 if ( getenv( "MAGNETICFIELDDATAROOT" ) )
72 { path = std::string( getenv( "MAGNETICFIELDDATAROOT" ) ); }
73 else { std::cerr << "Couldn't find MAGNETICFIELDDATAROOT" << std::endl; }
74}

Referenced by MagneticFieldSvc().

◆ ~MagneticFieldSvc()

MagneticFieldSvc::~MagneticFieldSvc ( )
virtual

Virtual destructor.

Definition at line 106 of file MagneticFieldSvc.cxx.

106 {
107 if ( m_Mucfield ) delete m_Mucfield;
108}

Member Function Documentation

◆ fieldVector()

StatusCode MagneticFieldSvc::fieldVector ( const HepPoint3D & xyz,
HepVector3D & fvec ) const
virtual

IBesMagFieldSvc interface.

Parameters
[in]xyzPoint at which magnetic field vector will be given
[out]fvecMagnectic field vector.
Returns
StatusCode SUCCESS if calculation was performed.

Definition at line 1166 of file MagneticFieldSvc.cxx.

1166 {
1167
1168 if ( m_turnOffField == true )
1169 {
1170 newb[0] = 0.;
1171 newb[1] = 0.;
1172 newb[2] = 0.;
1173#ifndef BEAN
1174 return StatusCode::SUCCESS;
1175#else
1176 return true;
1177#endif
1178 }
1179
1180 // wll added 2012-08-27
1181 if ( m_uniField )
1182 {
1183 uniFieldVector( newr, newb );
1184#ifndef BEAN
1185 return StatusCode::SUCCESS;
1186#else
1187 return true;
1188#endif
1189 }
1190
1191 // reference frames defined by simulation and SCM are different. In simulation: x--south to
1192 // north, y--down to up, but in SCM: x--north to south, y--down to up
1193 double new_x = -newr.x();
1194 double new_y = newr.y();
1195 double new_z = -newr.z();
1196 HepPoint3D r( new_x, new_y, new_z );
1197 HepVector3D b;
1198 b[0] = 0.0 * tesla;
1199 b[1] = 0.0 * tesla;
1200 b[2] = 0.0 * tesla;
1201 // This routine is now dummy. Was previously converting to/from CLHEP units
1202 if ( -2.1 * m < r.z() && r.z() < 2.1 * m && -1.8 * m < r.x() && r.x() < 1.8 * m &&
1203 -1.8 * m < r.y() && r.y() < 1.8 * m )
1204 {
1205 if ( -1.2 * m < r.z() && r.z() < 1.2 * m &&
1206 0 * m <= std::sqrt( r.x() * r.x() + r.y() * r.y() ) &&
1207 std::sqrt( r.x() * r.x() + r.y() * r.y() ) < 0.9 * m )
1208 // if(std::abs(r.z())<1.2*m&&std::abs(r.x())<=0.9*m&&std::abs(r.y())<=0.9*m)
1209 { this->fieldGrid( r, b ); }
1210 else { this->fieldGrid_TE( r, b ); }
1211 }
1212 if ( ( fabs( r.z() ) <= 1970 * mm && sqrt( r.x() * r.x() + r.y() * r.y() ) >= 1740 * mm ) ||
1213 ( fabs( r.z() ) >= 2050 * mm ) )
1214 {
1215 HepPoint3D mr;
1216 HepVector3D tb;
1217 int part = 0, layer = 0, mat = 0;
1218 double theta;
1219 bool ifbar = false;
1220 bool ifend = false;
1221 if ( r.x() != 0. )
1222 {
1223 theta = atan2( fabs( r.y() ), fabs( r.x() ) );
1224 if ( 0 <= theta && theta < pi / 8 )
1225 {
1226 mr[0] = fabs( r.x() );
1227 mr[1] = -fabs( r.y() );
1228 mr[2] = fabs( r.z() );
1229 if ( mr[2] <= 1970 * mm && 1740 * mm <= mr[0] && mr[0] <= 2620 * mm )
1230 {
1231 part = 1;
1232 if ( 1740 * mm <= mr[0] && mr[0] < 1770 * mm )
1233 {
1234 layer = 0;
1235 mat = 0;
1236 }
1237 if ( 1770 * mm <= mr[0] && mr[0] < 1810 * mm )
1238 {
1239 layer = 0;
1240 mat = 1;
1241 }
1242 if ( 1810 * mm <= mr[0] && mr[0] < 1840 * mm )
1243 {
1244 layer = 1;
1245 mat = 0;
1246 }
1247 if ( 1840 * mm <= mr[0] && mr[0] < 1880 * mm )
1248 {
1249 layer = 1;
1250 mat = 1;
1251 }
1252 if ( 1880 * mm <= mr[0] && mr[0] < 1910 * mm )
1253 {
1254 layer = 2;
1255 mat = 0;
1256 }
1257 if ( 1910 * mm <= mr[0] && mr[0] < 1950 * mm )
1258 {
1259 layer = 2;
1260 mat = 1;
1261 }
1262 if ( 1950 * mm <= mr[0] && mr[0] < 1990 * mm )
1263 {
1264 layer = 3;
1265 mat = 0;
1266 }
1267 if ( 1990 * mm <= mr[0] && mr[0] < 2030 * mm )
1268 {
1269 layer = 3;
1270 mat = 1;
1271 }
1272 if ( 2030 * mm <= mr[0] && mr[0] < 2070 * mm )
1273 {
1274 layer = 4;
1275 mat = 0;
1276 }
1277 if ( 2070 * mm <= mr[0] && mr[0] < 2110 * mm )
1278 {
1279 layer = 4;
1280 mat = 1;
1281 }
1282 if ( 2110 * mm <= mr[0] && mr[0] < 2190 * mm )
1283 {
1284 layer = 5;
1285 mat = 0;
1286 }
1287 if ( 2190 * mm <= mr[0] && mr[0] < 2230 * mm )
1288 {
1289 layer = 5;
1290 mat = 1;
1291 }
1292 if ( 2230 * mm <= mr[0] && mr[0] < 2310 * mm )
1293 {
1294 layer = 6;
1295 mat = 0;
1296 }
1297 if ( 2310 * mm <= mr[0] && mr[0] < 2350 * mm )
1298 {
1299 layer = 6;
1300 mat = 1;
1301 }
1302 if ( 2350 * mm <= mr[0] && mr[0] < 2430 * mm )
1303 {
1304 layer = 7;
1305 mat = 0;
1306 }
1307 if ( 2430 * mm <= mr[0] && mr[0] < 2470 * mm )
1308 {
1309 layer = 7;
1310 mat = 1;
1311 }
1312 if ( 2470 * mm <= mr[0] && mr[0] <= 2620 * mm )
1313 {
1314 layer = 8;
1315 mat = 0;
1316 }
1317 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1318 b[0] = tb[0];
1319 b[1] = -tb[1];
1320 b[2] = tb[2];
1321 ifbar = true;
1322 }
1323 if ( 2050 * mm <= mr[2] && mr[2] < 2090 * mm && 1034 * mm <= mr[0] &&
1324 mr[0] <= 2500 * mm )
1325 {
1326 part = 0;
1327 layer = 0;
1328 mat = 0;
1329 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1330 b[0] = tb[0];
1331 b[1] = -tb[1];
1332 b[2] = tb[2];
1333 ifend = true;
1334 }
1335 if ( 2090 * mm <= mr[2] && mr[2] < 2130 * mm && 1067 * mm <= mr[0] &&
1336 mr[0] <= 2500 * mm )
1337 {
1338 part = 0;
1339 layer = 0;
1340 mat = 1;
1341 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1342 b[0] = tb[0];
1343 b[1] = -tb[1];
1344 b[2] = tb[2];
1345 ifend = true;
1346 }
1347 if ( 2130 * mm <= mr[2] && mr[2] < 2170 * mm && 1067 * mm <= mr[0] &&
1348 mr[0] <= 2500 * mm )
1349 {
1350 part = 0;
1351 layer = 1;
1352 mat = 0;
1353 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1354 b[0] = tb[0];
1355 b[1] = -tb[1];
1356 b[2] = tb[2];
1357 ifend = true;
1358 }
1359 if ( 2170 * mm <= mr[2] && mr[2] < 2210 * mm && 1100 * mm <= mr[0] &&
1360 mr[0] <= 2500 * mm )
1361 {
1362 part = 0;
1363 layer = 1;
1364 mat = 1;
1365 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1366 b[0] = tb[0];
1367 b[1] = -tb[1];
1368 b[2] = tb[2];
1369 ifend = true;
1370 }
1371 if ( 2210 * mm <= mr[2] && mr[2] < 2240 * mm && 1100 * mm < mr[0] &&
1372 mr[0] <= 2500 * mm )
1373 {
1374 part = 0;
1375 layer = 2;
1376 mat = 0;
1377 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1378 b[0] = tb[0];
1379 b[1] = -tb[1];
1380 b[2] = tb[2];
1381 ifend = true;
1382 }
1383 if ( 2240 * mm <= mr[2] && mr[2] < 2280 * mm && 1133 * mm <= mr[0] &&
1384 mr[0] <= 2500 * mm )
1385 {
1386 part = 0;
1387 layer = 2;
1388 mat = 1;
1389 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1390 b[0] = tb[0];
1391 b[1] = -tb[1];
1392 b[2] = tb[2];
1393 ifend = true;
1394 }
1395 if ( 2280 * mm <= mr[2] && mr[2] < 2310 * mm && 1133 * mm <= mr[0] &&
1396 mr[0] <= 2500 * mm )
1397 {
1398 part = 0;
1399 layer = 3;
1400 mat = 0;
1401 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1402 b[0] = tb[0];
1403 b[1] = -tb[1];
1404 b[2] = tb[2];
1405 ifend = true;
1406 }
1407 if ( 2310 * mm <= mr[2] && mr[2] < 2350 * mm && 1167 * mm <= mr[0] &&
1408 mr[0] <= 2500 * mm )
1409 {
1410 part = 0;
1411 layer = 3;
1412 mat = 1;
1413 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1414 b[0] = tb[0];
1415 b[1] = -tb[1];
1416 b[2] = tb[2];
1417 ifend = true;
1418 }
1419 if ( 2350 * mm <= mr[2] && mr[2] < 2380 * mm && 1167 * mm <= mr[0] &&
1420 mr[0] <= 2500 * mm )
1421 {
1422 part = 0;
1423 layer = 4;
1424 mat = 0;
1425 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1426 b[0] = tb[0];
1427 b[1] = -tb[1];
1428 b[2] = tb[2];
1429 ifend = true;
1430 }
1431 if ( 2380 * mm <= mr[2] && mr[2] < 2420 * mm && 1203 * mm <= mr[0] &&
1432 mr[0] <= 2500 * mm )
1433 {
1434 part = 0;
1435 layer = 4;
1436 mat = 1;
1437 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1438 b[0] = tb[0];
1439 b[1] = -tb[1];
1440 b[2] = tb[2];
1441 ifend = true;
1442 }
1443 if ( 2420 * mm <= mr[2] && mr[2] < 2470 * mm && 1203 * mm <= mr[0] &&
1444 mr[0] <= 2500 * mm )
1445 {
1446 part = 0;
1447 layer = 5;
1448 mat = 0;
1449 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1450 b[0] = tb[0];
1451 b[1] = -tb[1];
1452 b[2] = tb[2];
1453 ifend = true;
1454 }
1455 if ( 2470 * mm <= mr[2] && mr[2] < 2510 * mm && 1241 * mm <= mr[0] &&
1456 mr[0] <= 2500 * mm )
1457 {
1458 part = 0;
1459 layer = 5;
1460 mat = 1;
1461 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1462 b[0] = tb[0];
1463 b[1] = -tb[1];
1464 b[2] = tb[2];
1465 ifend = true;
1466 }
1467 if ( 2510 * mm <= mr[2] && mr[2] < 2590 * mm && 1241 * mm <= mr[0] &&
1468 mr[0] <= 2500 * mm )
1469 {
1470 part = 0;
1471 layer = 6;
1472 mat = 0;
1473 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1474 b[0] = tb[0];
1475 b[1] = -tb[1];
1476 b[2] = tb[2];
1477 ifend = true;
1478 }
1479 if ( 2590 * mm <= mr[2] && mr[2] < 2630 * mm && 1302 * mm <= mr[0] &&
1480 mr[0] <= 2500 * mm )
1481 {
1482 part = 0;
1483 layer = 6;
1484 mat = 1;
1485 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1486 b[0] = tb[0];
1487 b[1] = -tb[1];
1488 b[2] = tb[2];
1489 ifend = true;
1490 }
1491 if ( 2630 * mm <= mr[2] && mr[2] < 2710 * mm && 1302 * mm <= mr[0] &&
1492 mr[0] <= 2500 * mm )
1493 {
1494 part = 0;
1495 layer = 7;
1496 mat = 0;
1497 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1498 b[0] = tb[0];
1499 b[1] = -tb[1];
1500 b[2] = tb[2];
1501 ifend = true;
1502 }
1503 if ( 2710 * mm <= mr[2] && mr[2] < 2750 * mm && 1362 * mm <= mr[0] &&
1504 mr[0] <= 2500 * mm )
1505 {
1506 part = 0;
1507 layer = 7;
1508 mat = 1;
1509 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1510 b[0] = tb[0];
1511 b[1] = -tb[1];
1512 b[2] = tb[2];
1513 ifend = true;
1514 }
1515 if ( 2750 * mm <= mr[2] && mr[2] <= 2800 * mm && 1302 * mm <= mr[0] &&
1516 mr[0] <= 2500 * mm )
1517 {
1518 part = 0;
1519 layer = 8;
1520 mat = 0;
1521 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1522 b[0] = tb[0];
1523 b[1] = -tb[1];
1524 b[2] = tb[2];
1525 ifend = true;
1526 }
1527 }
1528 if ( pi / 8 <= theta && theta < pi / 4 )
1529 {
1530 mr[0] = fabs( r.x() ) * cos( pi / 4 ) + fabs( r.y() ) * sin( pi / 4 );
1531 mr[1] = -fabs( r.x() ) * sin( pi / 4 ) + fabs( r.y() ) * cos( pi / 4 );
1532 mr[2] = fabs( r.z() );
1533 if ( mr[2] <= 1970 * mm && 1740 * mm <= mr[0] && mr[0] <= 2620 * mm )
1534 {
1535 part = 1;
1536 if ( 1740 * mm <= mr[0] && mr[0] < 1770 * mm )
1537 {
1538 layer = 0;
1539 mat = 0;
1540 }
1541 if ( 1770 * mm <= mr[0] && mr[0] < 1810 * mm )
1542 {
1543 layer = 0;
1544 mat = 1;
1545 }
1546 if ( 1810 * mm <= mr[0] && mr[0] < 1840 * mm )
1547 {
1548 layer = 1;
1549 mat = 0;
1550 }
1551 if ( 1840 * mm <= mr[0] && mr[0] < 1880 * mm )
1552 {
1553 layer = 1;
1554 mat = 1;
1555 }
1556 if ( 1880 * mm <= mr[0] && mr[0] < 1910 * mm )
1557 {
1558 layer = 2;
1559 mat = 0;
1560 }
1561 if ( 1910 * mm <= mr[0] && mr[0] < 1950 * mm )
1562 {
1563 layer = 2;
1564 mat = 1;
1565 }
1566 if ( 1950 * mm <= mr[0] && mr[0] < 1990 * mm )
1567 {
1568 layer = 3;
1569 mat = 0;
1570 }
1571 if ( 1990 * mm <= mr[0] && mr[0] < 2030 * mm )
1572 {
1573 layer = 3;
1574 mat = 1;
1575 }
1576 if ( 2030 * mm <= mr[0] && mr[0] < 2070 * mm )
1577 {
1578 layer = 4;
1579 mat = 0;
1580 }
1581 if ( 2070 * mm <= mr[0] && mr[0] < 2110 * mm )
1582 {
1583 layer = 4;
1584 mat = 1;
1585 }
1586 if ( 2110 * mm <= mr[0] && mr[0] < 2190 * mm )
1587 {
1588 layer = 5;
1589 mat = 0;
1590 }
1591 if ( 2190 * mm <= mr[0] && mr[0] < 2230 * mm )
1592 {
1593 layer = 5;
1594 mat = 1;
1595 }
1596 if ( 2230 * mm <= mr[0] && mr[0] < 2310 * mm )
1597 {
1598 layer = 6;
1599 mat = 0;
1600 }
1601 if ( 2310 * mm <= mr[0] && mr[0] < 2350 * mm )
1602 {
1603 layer = 6;
1604 mat = 1;
1605 }
1606 if ( 2350 * mm <= mr[0] && mr[0] < 2430 * mm )
1607 {
1608 layer = 7;
1609 mat = 0;
1610 }
1611 if ( 2430 * mm <= mr[0] && mr[0] < 2470 * mm )
1612 {
1613 layer = 7;
1614 mat = 1;
1615 }
1616 if ( 2470 * mm <= mr[0] && mr[0] <= 2620 * mm )
1617 {
1618 layer = 8;
1619 mat = 0;
1620 }
1621 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1622 b[0] = tb[0] * cos( pi / 4 ) - tb[1] * sin( pi / 4 );
1623 b[1] = tb[0] * sin( pi / 4 ) + tb[1] * cos( pi / 4 );
1624 b[2] = tb[2];
1625 ifbar = true;
1626 }
1627 if ( 2050 * mm <= mr[2] && mr[2] < 2090 * mm && 1034 * mm <= mr[0] &&
1628 mr[0] <= 2500 * mm )
1629 {
1630 part = 0;
1631 layer = 0;
1632 mat = 0;
1633 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1634 b[0] = tb[0] * cos( pi / 4 ) - tb[1] * sin( pi / 4 );
1635 b[1] = tb[0] * sin( pi / 4 ) + tb[1] * cos( pi / 4 );
1636 b[2] = tb[2];
1637 ifend = true;
1638 }
1639 if ( 2090 * mm <= mr[2] && mr[2] < 2130 * mm && 1067 * mm <= mr[0] &&
1640 mr[0] <= 2500 * mm )
1641 {
1642 part = 0;
1643 layer = 0;
1644 mat = 1;
1645 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1646 b[0] = tb[0] * cos( pi / 4 ) - tb[1] * sin( pi / 4 );
1647 b[1] = tb[0] * sin( pi / 4 ) + tb[1] * cos( pi / 4 );
1648 b[2] = tb[2];
1649 ifend = true;
1650 }
1651 if ( 2130 * mm <= mr[2] && mr[2] < 2170 * mm && 1067 * mm <= mr[0] &&
1652 mr[0] <= 2500 * mm )
1653 {
1654 part = 0;
1655 layer = 1;
1656 mat = 0;
1657 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1658 b[0] = tb[0] * cos( pi / 4 ) - tb[1] * sin( pi / 4 );
1659 b[1] = tb[0] * sin( pi / 4 ) + tb[1] * cos( pi / 4 );
1660 b[2] = tb[2];
1661 ifend = true;
1662 }
1663 if ( 2170 * mm <= mr[2] && mr[2] < 2210 * mm && 1100 * mm <= mr[0] &&
1664 mr[0] <= 2500 * mm )
1665 {
1666 part = 0;
1667 layer = 1;
1668 mat = 1;
1669 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1670 b[0] = tb[0] * cos( pi / 4 ) - tb[1] * sin( pi / 4 );
1671 b[1] = tb[0] * sin( pi / 4 ) + tb[1] * cos( pi / 4 );
1672 b[2] = tb[2];
1673 ifend = true;
1674 }
1675 if ( 2210 * mm <= mr[2] && mr[2] < 2240 * mm && 1100 * mm < mr[0] &&
1676 mr[0] <= 2500 * mm )
1677 {
1678 part = 0;
1679 layer = 2;
1680 mat = 0;
1681 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1682 b[0] = tb[0] * cos( pi / 4 ) - tb[1] * sin( pi / 4 );
1683 b[1] = tb[0] * sin( pi / 4 ) + tb[1] * cos( pi / 4 );
1684 b[2] = tb[2];
1685 ifend = true;
1686 }
1687 if ( 2240 * mm <= mr[2] && mr[2] < 2280 * mm && 1133 * mm <= mr[0] &&
1688 mr[0] <= 2500 * mm )
1689 {
1690 part = 0;
1691 layer = 2;
1692 mat = 1;
1693 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1694 b[0] = tb[0] * cos( pi / 4 ) - tb[1] * sin( pi / 4 );
1695 b[1] = tb[0] * sin( pi / 4 ) + tb[1] * cos( pi / 4 );
1696 b[2] = tb[2];
1697 ifend = true;
1698 }
1699 if ( 2280 * mm <= mr[2] && mr[2] < 2310 * mm && 1133 * mm <= mr[0] &&
1700 mr[0] <= 2500 * mm )
1701 {
1702 part = 0;
1703 layer = 3;
1704 mat = 0;
1705 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1706 b[0] = tb[0] * cos( pi / 4 ) - tb[1] * sin( pi / 4 );
1707 b[1] = tb[0] * sin( pi / 4 ) + tb[1] * cos( pi / 4 );
1708 b[2] = tb[2];
1709 ifend = true;
1710 }
1711 if ( 2310 * mm <= mr[2] && mr[2] < 2350 * mm && 1167 * mm <= mr[0] &&
1712 mr[0] <= 2500 * mm )
1713 {
1714 part = 0;
1715 layer = 3;
1716 mat = 1;
1717 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1718 b[0] = tb[0] * cos( pi / 4 ) - tb[1] * sin( pi / 4 );
1719 b[1] = tb[0] * sin( pi / 4 ) + tb[1] * cos( pi / 4 );
1720 b[2] = tb[2];
1721 ifend = true;
1722 }
1723 if ( 2350 * mm <= mr[2] && mr[2] < 2380 * mm && 1167 * mm <= mr[0] &&
1724 mr[0] <= 2500 * mm )
1725 {
1726 part = 0;
1727 layer = 4;
1728 mat = 0;
1729 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1730 b[0] = tb[0] * cos( pi / 4 ) - tb[1] * sin( pi / 4 );
1731 b[1] = tb[0] * sin( pi / 4 ) + tb[1] * cos( pi / 4 );
1732 b[2] = tb[2];
1733 ifend = true;
1734 }
1735 if ( 2380 * mm <= mr[2] && mr[2] < 2420 * mm && 1203 * mm <= mr[0] &&
1736 mr[0] <= 2500 * mm )
1737 {
1738 part = 0;
1739 layer = 4;
1740 mat = 1;
1741 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1742 b[0] = tb[0] * cos( pi / 4 ) - tb[1] * sin( pi / 4 );
1743 b[1] = tb[0] * sin( pi / 4 ) + tb[1] * cos( pi / 4 );
1744 b[2] = tb[2];
1745 ifend = true;
1746 }
1747 if ( 2420 * mm <= mr[2] && mr[2] < 2470 * mm && 1203 * mm <= mr[0] &&
1748 mr[0] <= 2500 * mm )
1749 {
1750 part = 0;
1751 layer = 5;
1752 mat = 0;
1753 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1754 b[0] = tb[0] * cos( pi / 4 ) - tb[1] * sin( pi / 4 );
1755 b[1] = tb[0] * sin( pi / 4 ) + tb[1] * cos( pi / 4 );
1756 b[2] = tb[2];
1757 ifend = true;
1758 }
1759 if ( 2470 * mm <= mr[2] && mr[2] < 2510 * mm && 1241 * mm <= mr[0] &&
1760 mr[0] <= 2500 * mm )
1761 {
1762 part = 0;
1763 layer = 5;
1764 mat = 1;
1765 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1766 b[0] = tb[0] * cos( pi / 4 ) - tb[1] * sin( pi / 4 );
1767 b[1] = tb[0] * sin( pi / 4 ) + tb[1] * cos( pi / 4 );
1768 b[2] = tb[2];
1769 ifend = true;
1770 }
1771 if ( 2510 * mm <= mr[2] && mr[2] < 2590 * mm && 1241 * mm <= mr[0] &&
1772 mr[0] <= 2500 * mm )
1773 {
1774 part = 0;
1775 layer = 6;
1776 mat = 0;
1777 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1778 b[0] = tb[0] * cos( pi / 4 ) - tb[1] * sin( pi / 4 );
1779 b[1] = tb[0] * sin( pi / 4 ) + tb[1] * cos( pi / 4 );
1780 b[2] = tb[2];
1781 ifend = true;
1782 }
1783 if ( 2590 * mm <= mr[2] && mr[2] < 2630 * mm && 1302 * mm <= mr[0] &&
1784 mr[0] <= 2500 * mm )
1785 {
1786 part = 0;
1787 layer = 6;
1788 mat = 1;
1789 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1790 b[0] = tb[0] * cos( pi / 4 ) - tb[1] * sin( pi / 4 );
1791 b[1] = tb[0] * sin( pi / 4 ) + tb[1] * cos( pi / 4 );
1792 b[2] = tb[2];
1793 ifend = true;
1794 }
1795 if ( 2630 * mm <= mr[2] && mr[2] < 2710 * mm && 1302 * mm <= mr[0] &&
1796 mr[0] <= 2500 * mm )
1797 {
1798 part = 0;
1799 layer = 7;
1800 mat = 0;
1801 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1802 b[0] = tb[0] * cos( pi / 4 ) - tb[1] * sin( pi / 4 );
1803 b[1] = tb[0] * sin( pi / 4 ) + tb[1] * cos( pi / 4 );
1804 b[2] = tb[2];
1805 ifend = true;
1806 }
1807 if ( 2710 * mm <= mr[2] && mr[2] < 2750 * mm && 1362 * mm <= mr[0] &&
1808 mr[0] <= 2500 * mm )
1809 {
1810 part = 0;
1811 layer = 7;
1812 mat = 1;
1813 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1814 b[0] = tb[0] * cos( pi / 4 ) - tb[1] * sin( pi / 4 );
1815 b[1] = tb[0] * sin( pi / 4 ) + tb[1] * cos( pi / 4 );
1816 b[2] = tb[2];
1817 ifend = true;
1818 }
1819 if ( 2750 * mm <= mr[2] && mr[2] <= 2800 * mm && 1302 * mm <= mr[0] &&
1820 mr[0] <= 2500 * mm )
1821 {
1822 part = 0;
1823 layer = 8;
1824 mat = 0;
1825 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1826 b[0] = tb[0] * cos( pi / 4 ) - tb[1] * sin( pi / 4 );
1827 b[1] = tb[0] * sin( pi / 4 ) + tb[1] * cos( pi / 4 );
1828 b[2] = tb[2];
1829 ifend = true;
1830 }
1831 }
1832 if ( pi / 4 <= theta && theta < 3 * pi / 8 )
1833 {
1834 mr[0] = fabs( r.x() ) * cos( pi / 4 ) + fabs( r.y() ) * sin( pi / 4 );
1835 mr[1] = fabs( r.x() ) * sin( pi / 4 ) - fabs( r.y() ) * cos( pi / 4 );
1836 mr[2] = fabs( r.z() );
1837 if ( mr[2] <= 1970 * mm && 1740 * mm <= mr[0] && mr[0] <= 2620 * mm )
1838 {
1839 part = 1;
1840 if ( 1740 * mm <= mr[0] && mr[0] < 1770 * mm )
1841 {
1842 layer = 0;
1843 mat = 0;
1844 }
1845 if ( 1770 * mm <= mr[0] && mr[0] < 1810 * mm )
1846 {
1847 layer = 0;
1848 mat = 1;
1849 }
1850 if ( 1810 * mm <= mr[0] && mr[0] < 1840 * mm )
1851 {
1852 layer = 1;
1853 mat = 0;
1854 }
1855 if ( 1840 * mm <= mr[0] && mr[0] < 1880 * mm )
1856 {
1857 layer = 1;
1858 mat = 1;
1859 }
1860 if ( 1880 * mm <= mr[0] && mr[0] < 1910 * mm )
1861 {
1862 layer = 2;
1863 mat = 0;
1864 }
1865 if ( 1910 * mm <= mr[0] && mr[0] < 1950 * mm )
1866 {
1867 layer = 2;
1868 mat = 1;
1869 }
1870 if ( 1950 * mm <= mr[0] && mr[0] < 1990 * mm )
1871 {
1872 layer = 3;
1873 mat = 0;
1874 }
1875 if ( 1990 * mm <= mr[0] && mr[0] < 2030 * mm )
1876 {
1877 layer = 3;
1878 mat = 1;
1879 }
1880 if ( 2030 * mm <= mr[0] && mr[0] < 2070 * mm )
1881 {
1882 layer = 4;
1883 mat = 0;
1884 }
1885 if ( 2070 * mm <= mr[0] && mr[0] < 2110 * mm )
1886 {
1887 layer = 4;
1888 mat = 1;
1889 }
1890 if ( 2110 * mm <= mr[0] && mr[0] < 2190 * mm )
1891 {
1892 layer = 5;
1893 mat = 0;
1894 }
1895 if ( 2190 * mm <= mr[0] && mr[0] < 2230 * mm )
1896 {
1897 layer = 5;
1898 mat = 1;
1899 }
1900 if ( 2230 * mm <= mr[0] && mr[0] < 2310 * mm )
1901 {
1902 layer = 6;
1903 mat = 0;
1904 }
1905 if ( 2310 * mm <= mr[0] && mr[0] < 2350 * mm )
1906 {
1907 layer = 6;
1908 mat = 1;
1909 }
1910 if ( 2350 * mm <= mr[0] && mr[0] < 2430 * mm )
1911 {
1912 layer = 7;
1913 mat = 0;
1914 }
1915 if ( 2430 * mm <= mr[0] && mr[0] < 2470 * mm )
1916 {
1917 layer = 7;
1918 mat = 1;
1919 }
1920 if ( 2470 * mm <= mr[0] && mr[0] <= 2620 * mm )
1921 {
1922 layer = 8;
1923 mat = 0;
1924 }
1925 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1926 b[0] = tb[0] * cos( pi / 4 ) + tb[1] * sin( pi / 4 );
1927 b[1] = tb[0] * sin( pi / 4 ) - tb[1] * cos( pi / 4 );
1928 b[2] = tb[2];
1929 ifbar = true;
1930 }
1931 if ( 2050 * mm <= mr[2] && mr[2] < 2090 * mm && 1034 * mm <= mr[0] &&
1932 mr[0] <= 2500 * mm )
1933 {
1934 part = 0;
1935 layer = 0;
1936 mat = 0;
1937 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1938 b[0] = tb[0] * cos( pi / 4 ) + tb[1] * sin( pi / 4 );
1939 b[1] = tb[0] * sin( pi / 4 ) - tb[1] * cos( pi / 4 );
1940 b[2] = tb[2];
1941 ifend = true;
1942 }
1943 if ( 2090 * mm <= mr[2] && mr[2] < 2130 * mm && 1067 * mm <= mr[0] &&
1944 mr[0] <= 2500 * mm )
1945 {
1946 part = 0;
1947 layer = 0;
1948 mat = 1;
1949 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1950 b[0] = tb[0] * cos( pi / 4 ) + tb[1] * sin( pi / 4 );
1951 b[1] = tb[0] * sin( pi / 4 ) - tb[1] * cos( pi / 4 );
1952 b[2] = tb[2];
1953 ifend = true;
1954 }
1955 if ( 2130 * mm <= mr[2] && mr[2] < 2170 * mm && 1067 * mm <= mr[0] &&
1956 mr[0] <= 2500 * mm )
1957 {
1958 part = 0;
1959 layer = 1;
1960 mat = 0;
1961 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1962 b[0] = tb[0] * cos( pi / 4 ) + tb[1] * sin( pi / 4 );
1963 b[1] = tb[0] * sin( pi / 4 ) - tb[1] * cos( pi / 4 );
1964 b[2] = tb[2];
1965 ifend = true;
1966 }
1967 if ( 2170 * mm <= mr[2] && mr[2] < 2210 * mm && 1100 * mm <= mr[0] &&
1968 mr[0] <= 2500 * mm )
1969 {
1970 part = 0;
1971 layer = 1;
1972 mat = 1;
1973 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1974 b[0] = tb[0] * cos( pi / 4 ) + tb[1] * sin( pi / 4 );
1975 b[1] = tb[0] * sin( pi / 4 ) - tb[1] * cos( pi / 4 );
1976 b[2] = tb[2];
1977 ifend = true;
1978 }
1979 if ( 2210 * mm <= mr[2] && mr[2] < 2240 * mm && 1100 * mm < mr[0] &&
1980 mr[0] <= 2500 * mm )
1981 {
1982 part = 0;
1983 layer = 2;
1984 mat = 0;
1985 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1986 b[0] = tb[0] * cos( pi / 4 ) + tb[1] * sin( pi / 4 );
1987 b[1] = tb[0] * sin( pi / 4 ) - tb[1] * cos( pi / 4 );
1988 b[2] = tb[2];
1989 ifend = true;
1990 }
1991 if ( 2240 * mm <= mr[2] && mr[2] < 2280 * mm && 1133 * mm <= mr[0] &&
1992 mr[0] <= 2500 * mm )
1993 {
1994 part = 0;
1995 layer = 2;
1996 mat = 1;
1997 m_Mucfield->getMucField( part, layer, mat, mr, tb );
1998 b[0] = tb[0] * cos( pi / 4 ) + tb[1] * sin( pi / 4 );
1999 b[1] = tb[0] * sin( pi / 4 ) - tb[1] * cos( pi / 4 );
2000 b[2] = tb[2];
2001 ifend = true;
2002 }
2003 if ( 2280 * mm <= mr[2] && mr[2] < 2310 * mm && 1133 * mm <= mr[0] &&
2004 mr[0] <= 2500 * mm )
2005 {
2006 part = 0;
2007 layer = 3;
2008 mat = 0;
2009 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2010 b[0] = tb[0] * cos( pi / 4 ) + tb[1] * sin( pi / 4 );
2011 b[1] = tb[0] * sin( pi / 4 ) - tb[1] * cos( pi / 4 );
2012 b[2] = tb[2];
2013 ifend = true;
2014 }
2015 if ( 2310 * mm <= mr[2] && mr[2] < 2350 * mm && 1167 * mm <= mr[0] &&
2016 mr[0] <= 2500 * mm )
2017 {
2018 part = 0;
2019 layer = 3;
2020 mat = 1;
2021 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2022 b[0] = tb[0] * cos( pi / 4 ) + tb[1] * sin( pi / 4 );
2023 b[1] = tb[0] * sin( pi / 4 ) - tb[1] * cos( pi / 4 );
2024 b[2] = tb[2];
2025 ifend = true;
2026 }
2027 if ( 2350 * mm <= mr[2] && mr[2] < 2380 * mm && 1167 * mm <= mr[0] &&
2028 mr[0] <= 2500 * mm )
2029 {
2030 part = 0;
2031 layer = 4;
2032 mat = 0;
2033 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2034 b[0] = tb[0] * cos( pi / 4 ) + tb[1] * sin( pi / 4 );
2035 b[1] = tb[0] * sin( pi / 4 ) - tb[1] * cos( pi / 4 );
2036 b[2] = tb[2];
2037 ifend = true;
2038 }
2039 if ( 2380 * mm <= mr[2] && mr[2] < 2420 * mm && 1203 * mm <= mr[0] &&
2040 mr[0] <= 2500 * mm )
2041 {
2042 part = 0;
2043 layer = 4;
2044 mat = 1;
2045 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2046 b[0] = tb[0] * cos( pi / 4 ) + tb[1] * sin( pi / 4 );
2047 b[1] = tb[0] * sin( pi / 4 ) - tb[1] * cos( pi / 4 );
2048 b[2] = tb[2];
2049 ifend = true;
2050 }
2051 if ( 2420 * mm <= mr[2] && mr[2] < 2470 * mm && 1203 * mm <= mr[0] &&
2052 mr[0] <= 2500 * mm )
2053 {
2054 part = 0;
2055 layer = 5;
2056 mat = 0;
2057 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2058 b[0] = tb[0] * cos( pi / 4 ) + tb[1] * sin( pi / 4 );
2059 b[1] = tb[0] * sin( pi / 4 ) - tb[1] * cos( pi / 4 );
2060 b[2] = tb[2];
2061 ifend = true;
2062 }
2063 if ( 2470 * mm <= mr[2] && mr[2] < 2510 * mm && 1241 * mm <= mr[0] &&
2064 mr[0] <= 2500 * mm )
2065 {
2066 part = 0;
2067 layer = 5;
2068 mat = 1;
2069 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2070 b[0] = tb[0] * cos( pi / 4 ) + tb[1] * sin( pi / 4 );
2071 b[1] = tb[0] * sin( pi / 4 ) - tb[1] * cos( pi / 4 );
2072 b[2] = tb[2];
2073 ifend = true;
2074 }
2075 if ( 2510 * mm <= mr[2] && mr[2] < 2590 * mm && 1241 * mm <= mr[0] &&
2076 mr[0] <= 2500 * mm )
2077 {
2078 part = 0;
2079 layer = 6;
2080 mat = 0;
2081 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2082 b[0] = tb[0] * cos( pi / 4 ) + tb[1] * sin( pi / 4 );
2083 b[1] = tb[0] * sin( pi / 4 ) - tb[1] * cos( pi / 4 );
2084 b[2] = tb[2];
2085 ifend = true;
2086 }
2087 if ( 2590 * mm <= mr[2] && mr[2] < 2630 * mm && 1302 * mm <= mr[0] &&
2088 mr[0] <= 2500 * mm )
2089 {
2090 part = 0;
2091 layer = 6;
2092 mat = 1;
2093 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2094 b[0] = tb[0] * cos( pi / 4 ) + tb[1] * sin( pi / 4 );
2095 b[1] = tb[0] * sin( pi / 4 ) - tb[1] * cos( pi / 4 );
2096 b[2] = tb[2];
2097 ifend = true;
2098 }
2099 if ( 2630 * mm <= mr[2] && mr[2] < 2710 * mm && 1302 * mm <= mr[0] &&
2100 mr[0] <= 2500 * mm )
2101 {
2102 part = 0;
2103 layer = 7;
2104 mat = 0;
2105 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2106 b[0] = tb[0] * cos( pi / 4 ) + tb[1] * sin( pi / 4 );
2107 b[1] = tb[0] * sin( pi / 4 ) - tb[1] * cos( pi / 4 );
2108 b[2] = tb[2];
2109 ifend = true;
2110 }
2111 if ( 2710 * mm <= mr[2] && mr[2] < 2750 * mm && 1362 * mm <= mr[0] &&
2112 mr[0] <= 2500 * mm )
2113 {
2114 part = 0;
2115 layer = 7;
2116 mat = 1;
2117 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2118 b[0] = tb[0] * cos( pi / 4 ) + tb[1] * sin( pi / 4 );
2119 b[1] = tb[0] * sin( pi / 4 ) - tb[1] * cos( pi / 4 );
2120 b[2] = tb[2];
2121 ifend = true;
2122 }
2123 if ( 2750 * mm <= mr[2] && mr[2] <= 2800 * mm && 1302 * mm <= mr[0] &&
2124 mr[0] <= 2500 * mm )
2125 {
2126 part = 0;
2127 layer = 8;
2128 mat = 0;
2129 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2130 b[0] = tb[0] * cos( pi / 4 ) + tb[1] * sin( pi / 4 );
2131 b[1] = tb[0] * sin( pi / 4 ) - tb[1] * cos( pi / 4 );
2132 b[2] = tb[2];
2133 ifend = true;
2134 }
2135 }
2136 if ( 3 * pi / 8 <= theta && theta < pi / 2 )
2137 {
2138 mr[0] = fabs( r.y() );
2139 mr[1] = -fabs( r.x() );
2140 mr[2] = fabs( r.z() );
2141 if ( mr[2] <= 1970 * mm && 1740 * mm <= mr[0] && mr[0] <= 2620 * mm )
2142 {
2143 part = 1;
2144 if ( 1740 * mm <= mr[0] && mr[0] < 1770 * mm )
2145 {
2146 layer = 0;
2147 mat = 0;
2148 }
2149 if ( 1770 * mm <= mr[0] && mr[0] < 1810 * mm )
2150 {
2151 layer = 0;
2152 mat = 1;
2153 }
2154 if ( 1810 * mm <= mr[0] && mr[0] < 1840 * mm )
2155 {
2156 layer = 1;
2157 mat = 0;
2158 }
2159 if ( 1840 * mm <= mr[0] && mr[0] < 1880 * mm )
2160 {
2161 layer = 1;
2162 mat = 1;
2163 }
2164 if ( 1880 * mm <= mr[0] && mr[0] < 1910 * mm )
2165 {
2166 layer = 2;
2167 mat = 0;
2168 }
2169 if ( 1910 * mm <= mr[0] && mr[0] < 1950 * mm )
2170 {
2171 layer = 2;
2172 mat = 1;
2173 }
2174 if ( 1950 * mm <= mr[0] && mr[0] < 1990 * mm )
2175 {
2176 layer = 3;
2177 mat = 0;
2178 }
2179 if ( 1990 * mm <= mr[0] && mr[0] < 2030 * mm )
2180 {
2181 layer = 3;
2182 mat = 1;
2183 }
2184 if ( 2030 * mm <= mr[0] && mr[0] < 2070 * mm )
2185 {
2186 layer = 4;
2187 mat = 0;
2188 }
2189 if ( 2070 * mm <= mr[0] && mr[0] < 2110 * mm )
2190 {
2191 layer = 4;
2192 mat = 1;
2193 }
2194 if ( 2110 * mm <= mr[0] && mr[0] < 2190 * mm )
2195 {
2196 layer = 5;
2197 mat = 0;
2198 }
2199 if ( 2190 * mm <= mr[0] && mr[0] < 2230 * mm )
2200 {
2201 layer = 5;
2202 mat = 1;
2203 }
2204 if ( 2230 * mm <= mr[0] && mr[0] < 2310 * mm )
2205 {
2206 layer = 6;
2207 mat = 0;
2208 }
2209 if ( 2310 * mm <= mr[0] && mr[0] < 2350 * mm )
2210 {
2211 layer = 6;
2212 mat = 1;
2213 }
2214 if ( 2350 * mm <= mr[0] && mr[0] < 2430 * mm )
2215 {
2216 layer = 7;
2217 mat = 0;
2218 }
2219 if ( 2430 * mm <= mr[0] && mr[0] < 2470 * mm )
2220 {
2221 layer = 7;
2222 mat = 1;
2223 }
2224 if ( 2470 * mm <= mr[0] && mr[0] <= 2620 * mm )
2225 {
2226 layer = 8;
2227 mat = 0;
2228 }
2229 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2230 b[0] = -tb[1];
2231 b[1] = tb[0];
2232 b[2] = tb[2];
2233 ifbar = true;
2234 }
2235 if ( 2050 * mm <= mr[2] && mr[2] < 2090 * mm && 1034 * mm <= mr[0] &&
2236 mr[0] <= 2500 * mm )
2237 {
2238 part = 0;
2239 layer = 0;
2240 mat = 0;
2241 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2242 b[0] = -tb[1];
2243 b[1] = tb[0];
2244 b[2] = tb[2];
2245 ifend = true;
2246 }
2247 if ( 2090 * mm <= mr[2] && mr[2] < 2130 * mm && 1067 * mm <= mr[0] &&
2248 mr[0] <= 2500 * mm )
2249 {
2250 part = 0;
2251 layer = 0;
2252 mat = 1;
2253 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2254 b[0] = -tb[1];
2255 b[1] = tb[0];
2256 b[2] = tb[2];
2257 ifend = true;
2258 }
2259 if ( 2130 * mm <= mr[2] && mr[2] < 2170 * mm && 1067 * mm <= mr[0] &&
2260 mr[0] <= 2500 * mm )
2261 {
2262 part = 0;
2263 layer = 1;
2264 mat = 0;
2265 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2266 b[0] = -tb[1];
2267 b[1] = tb[0];
2268 b[2] = tb[2];
2269 ifend = true;
2270 }
2271 if ( 2170 * mm <= mr[2] && mr[2] < 2210 * mm && 1100 * mm <= mr[0] &&
2272 mr[0] <= 2500 * mm )
2273 {
2274 part = 0;
2275 layer = 1;
2276 mat = 1;
2277 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2278 b[0] = -tb[1];
2279 b[1] = tb[0];
2280 b[2] = tb[2];
2281 ifend = true;
2282 }
2283 if ( 2210 * mm <= mr[2] && mr[2] < 2240 * mm && 1100 * mm < mr[0] &&
2284 mr[0] <= 2500 * mm )
2285 {
2286 part = 0;
2287 layer = 2;
2288 mat = 0;
2289 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2290 b[0] = -tb[1];
2291 b[1] = tb[0];
2292 b[2] = tb[2];
2293 ifend = true;
2294 }
2295 if ( 2240 * mm <= mr[2] && mr[2] < 2280 * mm && 1133 * mm <= mr[0] &&
2296 mr[0] <= 2500 * mm )
2297 {
2298 part = 0;
2299 layer = 2;
2300 mat = 1;
2301 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2302 b[0] = -tb[1];
2303 b[1] = tb[0];
2304 b[2] = tb[2];
2305 ifend = true;
2306 }
2307 if ( 2280 * mm <= mr[2] && mr[2] < 2310 * mm && 1133 * mm <= mr[0] &&
2308 mr[0] <= 2500 * mm )
2309 {
2310 part = 0;
2311 layer = 3;
2312 mat = 0;
2313 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2314 b[0] = -tb[1];
2315 b[1] = tb[0];
2316 b[2] = tb[2];
2317 ifend = true;
2318 }
2319 if ( 2310 * mm <= mr[2] && mr[2] < 2350 * mm && 1167 * mm <= mr[0] &&
2320 mr[0] <= 2500 * mm )
2321 {
2322 part = 0;
2323 layer = 3;
2324 mat = 1;
2325 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2326 b[0] = -tb[1];
2327 b[1] = tb[0];
2328 b[2] = tb[2];
2329 ifend = true;
2330 }
2331 if ( 2350 * mm <= mr[2] && mr[2] < 2380 * mm && 1167 * mm <= mr[0] &&
2332 mr[0] <= 2500 * mm )
2333 {
2334 part = 0;
2335 layer = 4;
2336 mat = 0;
2337 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2338 b[0] = -tb[1];
2339 b[1] = tb[0];
2340 b[2] = tb[2];
2341 ifend = true;
2342 }
2343 if ( 2380 * mm <= mr[2] && mr[2] < 2420 * mm && 1203 * mm <= mr[0] &&
2344 mr[0] <= 2500 * mm )
2345 {
2346 part = 0;
2347 layer = 4;
2348 mat = 1;
2349 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2350 b[0] = -tb[1];
2351 b[1] = tb[0];
2352 b[2] = tb[2];
2353 ifend = true;
2354 }
2355 if ( 2420 * mm <= mr[2] && mr[2] < 2470 * mm && 1203 * mm <= mr[0] &&
2356 mr[0] <= 2500 * mm )
2357 {
2358 part = 0;
2359 layer = 5;
2360 mat = 0;
2361 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2362 b[0] = -tb[1];
2363 b[1] = tb[0];
2364 b[2] = tb[2];
2365 ifend = true;
2366 }
2367 if ( 2470 * mm <= mr[2] && mr[2] < 2510 * mm && 1241 * mm <= mr[0] &&
2368 mr[0] <= 2500 * mm )
2369 {
2370 part = 0;
2371 layer = 5;
2372 mat = 1;
2373 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2374 b[0] = -tb[1];
2375 b[1] = tb[0];
2376 b[2] = tb[2];
2377 ifend = true;
2378 }
2379 if ( 2510 * mm <= mr[2] && mr[2] < 2590 * mm && 1241 * mm <= mr[0] &&
2380 mr[0] <= 2500 * mm )
2381 {
2382 part = 0;
2383 layer = 6;
2384 mat = 0;
2385 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2386 b[0] = -tb[1];
2387 b[1] = tb[0];
2388 b[2] = tb[2];
2389 ifend = true;
2390 }
2391 if ( 2590 * mm <= mr[2] && mr[2] < 2630 * mm && 1302 * mm <= mr[0] &&
2392 mr[0] <= 2500 * mm )
2393 {
2394 part = 0;
2395 layer = 6;
2396 mat = 1;
2397 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2398 b[0] = -tb[1];
2399 b[1] = tb[0];
2400 b[2] = tb[2];
2401 ifend = true;
2402 }
2403 if ( 2630 * mm <= mr[2] && mr[2] < 2710 * mm && 1302 * mm <= mr[0] &&
2404 mr[0] <= 2500 * mm )
2405 {
2406 part = 0;
2407 layer = 7;
2408 mat = 0;
2409 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2410 b[0] = -tb[1];
2411 b[1] = tb[0];
2412 b[2] = tb[2];
2413 ifend = true;
2414 }
2415 if ( 2710 * mm <= mr[2] && mr[2] < 2750 * mm && 1362 * mm <= mr[0] &&
2416 mr[0] <= 2500 * mm )
2417 {
2418 part = 0;
2419 layer = 7;
2420 mat = 1;
2421 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2422 b[0] = -tb[1];
2423 b[1] = tb[0];
2424 b[2] = tb[2];
2425 ifend = true;
2426 }
2427 if ( 2750 * mm <= mr[2] && mr[2] <= 2800 * mm && 1302 * mm <= mr[0] &&
2428 mr[0] <= 2500 * mm )
2429 {
2430 part = 0;
2431 layer = 8;
2432 mat = 0;
2433 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2434 b[0] = -tb[1];
2435 b[1] = tb[0];
2436 b[2] = tb[2];
2437 ifend = true;
2438 }
2439 }
2440 }
2441 if ( r.x() == 0. )
2442 {
2443 mr[0] = fabs( r.y() );
2444 mr[1] = -fabs( r.x() );
2445 mr[2] = fabs( r.z() );
2446 if ( mr[2] <= 1970 * mm && 1740 * mm <= mr[0] && mr[0] <= 2620 * mm )
2447 {
2448 part = 1;
2449 if ( 1740 * mm <= mr[0] && mr[0] < 1770 * mm )
2450 {
2451 layer = 0;
2452 mat = 0;
2453 }
2454 if ( 1770 * mm <= mr[0] && mr[0] < 1810 * mm )
2455 {
2456 layer = 0;
2457 mat = 1;
2458 }
2459 if ( 1810 * mm <= mr[0] && mr[0] < 1840 * mm )
2460 {
2461 layer = 1;
2462 mat = 0;
2463 }
2464 if ( 1840 * mm <= mr[0] && mr[0] < 1880 * mm )
2465 {
2466 layer = 1;
2467 mat = 1;
2468 }
2469 if ( 1880 * mm <= mr[0] && mr[0] < 1910 * mm )
2470 {
2471 layer = 2;
2472 mat = 0;
2473 }
2474 if ( 1910 * mm <= mr[0] && mr[0] < 1950 * mm )
2475 {
2476 layer = 2;
2477 mat = 1;
2478 }
2479 if ( 1950 * mm <= mr[0] && mr[0] < 1990 * mm )
2480 {
2481 layer = 3;
2482 mat = 0;
2483 }
2484 if ( 1990 * mm <= mr[0] && mr[0] < 2030 * mm )
2485 {
2486 layer = 3;
2487 mat = 1;
2488 }
2489 if ( 2030 * mm <= mr[0] && mr[0] < 2070 * mm )
2490 {
2491 layer = 4;
2492 mat = 0;
2493 }
2494 if ( 2070 * mm <= mr[0] && mr[0] < 2110 * mm )
2495 {
2496 layer = 4;
2497 mat = 1;
2498 }
2499 if ( 2110 * mm <= mr[0] && mr[0] < 2190 * mm )
2500 {
2501 layer = 5;
2502 mat = 0;
2503 }
2504 if ( 2190 * mm <= mr[0] && mr[0] < 2230 * mm )
2505 {
2506 layer = 5;
2507 mat = 1;
2508 }
2509 if ( 2230 * mm <= mr[0] && mr[0] < 2310 * mm )
2510 {
2511 layer = 6;
2512 mat = 0;
2513 }
2514 if ( 2310 * mm <= mr[0] && mr[0] < 2350 * mm )
2515 {
2516 layer = 6;
2517 mat = 1;
2518 }
2519 if ( 2350 * mm <= mr[0] && mr[0] < 2430 * mm )
2520 {
2521 layer = 7;
2522 mat = 0;
2523 }
2524 if ( 2430 * mm <= mr[0] && mr[0] < 2470 * mm )
2525 {
2526 layer = 7;
2527 mat = 1;
2528 }
2529 if ( 2470 * mm <= mr[0] && mr[0] <= 2620 * mm )
2530 {
2531 layer = 8;
2532 mat = 0;
2533 }
2534 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2535 b[0] = -tb[1];
2536 b[1] = tb[0];
2537 b[2] = tb[2];
2538 ifbar = true;
2539 }
2540 if ( 2050 * mm <= mr[2] && mr[2] < 2090 * mm && 1034 * mm <= mr[0] &&
2541 mr[0] <= 2500 * mm )
2542 {
2543 part = 0;
2544 layer = 0;
2545 mat = 0;
2546 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2547 b[0] = -tb[1];
2548 b[1] = tb[0];
2549 b[2] = tb[2];
2550 ifend = true;
2551 }
2552 if ( 2090 * mm <= mr[2] && mr[2] < 2130 * mm && 1067 * mm <= mr[0] &&
2553 mr[0] <= 2500 * mm )
2554 {
2555 part = 0;
2556 layer = 0;
2557 mat = 1;
2558 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2559 b[0] = -tb[1];
2560 b[1] = tb[0];
2561 b[2] = tb[2];
2562 ifend = true;
2563 }
2564 if ( 2130 * mm <= mr[2] && mr[2] < 2170 * mm && 1067 * mm <= mr[0] &&
2565 mr[0] <= 2500 * mm )
2566 {
2567 part = 0;
2568 layer = 1;
2569 mat = 0;
2570 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2571 b[0] = -tb[1];
2572 b[1] = tb[0];
2573 b[2] = tb[2];
2574 ifend = true;
2575 }
2576 if ( 2170 * mm <= mr[2] && mr[2] < 2210 * mm && 1100 * mm <= mr[0] &&
2577 mr[0] <= 2500 * mm )
2578 {
2579 part = 0;
2580 layer = 1;
2581 mat = 1;
2582 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2583 b[0] = -tb[1];
2584 b[1] = tb[0];
2585 b[2] = tb[2];
2586 ifend = true;
2587 }
2588 if ( 2210 * mm <= mr[2] && mr[2] < 2240 * mm && 1100 * mm < mr[0] && mr[0] <= 2500 * mm )
2589 {
2590 part = 0;
2591 layer = 2;
2592 mat = 0;
2593 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2594 b[0] = -tb[1];
2595 b[1] = tb[0];
2596 b[2] = tb[2];
2597 ifend = true;
2598 }
2599 if ( 2240 * mm <= mr[2] && mr[2] < 2280 * mm && 1133 * mm <= mr[0] &&
2600 mr[0] <= 2500 * mm )
2601 {
2602 part = 0;
2603 layer = 2;
2604 mat = 1;
2605 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2606 b[0] = -tb[1];
2607 b[1] = tb[0];
2608 b[2] = tb[2];
2609 ifend = true;
2610 }
2611 if ( 2280 * mm <= mr[2] && mr[2] < 2310 * mm && 1133 * mm <= mr[0] &&
2612 mr[0] <= 2500 * mm )
2613 {
2614 part = 0;
2615 layer = 3;
2616 mat = 0;
2617 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2618 b[0] = -tb[1];
2619 b[1] = tb[0];
2620 b[2] = tb[2];
2621 ifend = true;
2622 }
2623 if ( 2310 * mm <= mr[2] && mr[2] < 2350 * mm && 1167 * mm <= mr[0] &&
2624 mr[0] <= 2500 * mm )
2625 {
2626 part = 0;
2627 layer = 3;
2628 mat = 1;
2629 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2630 b[0] = -tb[1];
2631 b[1] = tb[0];
2632 b[2] = tb[2];
2633 ifend = true;
2634 }
2635 if ( 2350 * mm <= mr[2] && mr[2] < 2380 * mm && 1167 * mm <= mr[0] &&
2636 mr[0] <= 2500 * mm )
2637 {
2638 part = 0;
2639 layer = 4;
2640 mat = 0;
2641 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2642 b[0] = -tb[1];
2643 b[1] = tb[0];
2644 b[2] = tb[2];
2645 ifend = true;
2646 }
2647 if ( 2380 * mm <= mr[2] && mr[2] < 2420 * mm && 1203 * mm <= mr[0] &&
2648 mr[0] <= 2500 * mm )
2649 {
2650 part = 0;
2651 layer = 4;
2652 mat = 1;
2653 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2654 b[0] = -tb[1];
2655 b[1] = tb[0];
2656 b[2] = tb[2];
2657 ifend = true;
2658 }
2659 if ( 2420 * mm <= mr[2] && mr[2] < 2470 * mm && 1203 * mm <= mr[0] &&
2660 mr[0] <= 2500 * mm )
2661 {
2662 part = 0;
2663 layer = 5;
2664 mat = 0;
2665 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2666 b[0] = -tb[1];
2667 b[1] = tb[0];
2668 b[2] = tb[2];
2669 ifend = true;
2670 }
2671 if ( 2470 * mm <= mr[2] && mr[2] < 2510 * mm && 1241 * mm <= mr[0] &&
2672 mr[0] <= 2500 * mm )
2673 {
2674 part = 0;
2675 layer = 5;
2676 mat = 1;
2677 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2678 b[0] = -tb[1];
2679 b[1] = tb[0];
2680 b[2] = tb[2];
2681 ifend = true;
2682 }
2683 if ( 2510 * mm <= mr[2] && mr[2] < 2590 * mm && 1241 * mm <= mr[0] &&
2684 mr[0] <= 2500 * mm )
2685 {
2686 part = 0;
2687 layer = 6;
2688 mat = 0;
2689 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2690 b[0] = -tb[1];
2691 b[1] = tb[0];
2692 b[2] = tb[2];
2693 ifend = true;
2694 }
2695 if ( 2590 * mm <= mr[2] && mr[2] < 2630 * mm && 1302 * mm <= mr[0] &&
2696 mr[0] <= 2500 * mm )
2697 {
2698 part = 0;
2699 layer = 6;
2700 mat = 1;
2701 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2702 b[0] = -tb[1];
2703 b[1] = tb[0];
2704 b[2] = tb[2];
2705 ifend = true;
2706 }
2707 if ( 2630 * mm <= mr[2] && mr[2] < 2710 * mm && 1302 * mm <= mr[0] &&
2708 mr[0] <= 2500 * mm )
2709 {
2710 part = 0;
2711 layer = 7;
2712 mat = 0;
2713 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2714 b[0] = -tb[1];
2715 b[1] = tb[0];
2716 b[2] = tb[2];
2717 ifend = true;
2718 }
2719 if ( 2710 * mm <= mr[2] && mr[2] < 2750 * mm && 1362 * mm <= mr[0] &&
2720 mr[0] <= 2500 * mm )
2721 {
2722 part = 0;
2723 layer = 7;
2724 mat = 1;
2725 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2726 b[0] = -tb[1];
2727 b[1] = tb[0];
2728 b[2] = tb[2];
2729 ifend = true;
2730 }
2731 if ( 2750 * mm <= mr[2] && mr[2] <= 2800 * mm && 1302 * mm <= mr[0] &&
2732 mr[0] <= 2500 * mm )
2733 {
2734 part = 0;
2735 layer = 8;
2736 mat = 0;
2737 m_Mucfield->getMucField( part, layer, mat, mr, tb );
2738 b[0] = -tb[1];
2739 b[1] = tb[0];
2740 b[2] = tb[2];
2741 ifend = true;
2742 }
2743 }
2744 if ( ifbar == true || ifend == true )
2745 {
2746 if ( r.x() < 0. && r.y() >= 0. && r.z() > 0. ) { b[0] = -b[0]; }
2747 else if ( r.x() <= 0. && r.y() < 0. && r.z() > 0. )
2748 {
2749 b[0] = -b[0];
2750 b[1] = -b[1];
2751 }
2752 else if ( r.x() > 0. && r.y() < 0. && r.z() > 0. ) { b[1] = -b[1]; }
2753 else if ( r.x() >= 0. && r.y() > 0. && r.z() < 0. )
2754 {
2755 b[0] = -b[0];
2756 b[1] = -b[1];
2757 }
2758 else if ( r.x() < 0. && r.y() >= 0. && r.z() < 0. ) { b[1] = -b[1]; }
2759 else if ( r.x() <= 0. && r.y() < 0. && r.z() < 0. )
2760 {
2761 b[0] = b[0];
2762 b[1] = b[1];
2763 }
2764 else if ( r.x() > 0. && r.y() <= 0. && r.z() < 0. ) { b[0] = -b[0]; }
2765 }
2766 }
2767
2768 // reference frames defined by simulation and SCM are different.
2769 newb[0] = -b[0] * m_scale;
2770 newb[1] = b[1] * m_scale;
2771 newb[2] = -b[2] * m_scale;
2772 /* if(-1.2*m<r.z()&&r.z()<1.2*m&&0*m<=std::sqrt(r.x()*r.x()+r.y()*r.y())&&std::sqrt(r.x()*r.x()+r.y()*r.y())<0.9*m)
2773 { return StatusCode::SUCCESS;
2774 }
2775 else {
2776 newb[0] = newb[0] - 0.10*tesla;
2777 newb[1] = newb[1] + 0.10*tesla;
2778 newb[2] = newb[2] - 0.10*tesla;
2779 }*/
2780
2781 // newb[0] = b[0];
2782 // newb[1] = b[1];
2783 // newb[2] = b[2];
2784
2785#ifndef BEAN
2786 return StatusCode::SUCCESS;
2787#else
2788 return true;
2789#endif
2790}
double pi
HepGeom::Point3D< double > HepPoint3D
HepGeom::Vector3D< double > HepVector3D
virtual StatusCode uniFieldVector(const HepPoint3D &xyz, HepVector3D &fvec) const

◆ finalize()

StatusCode MagneticFieldSvc::finalize ( )
virtual

Finalise the service.

Definition at line 704 of file MagneticFieldSvc.cxx.

704 {
705 MsgStream log( msgSvc(), name() );
706 // if(m_connect_run) delete m_connect_run;
707 StatusCode status = Service::finalize();
708
709 if ( status.isSuccess() ) log << MSG::INFO << "Service finalized successfully" << endmsg;
710 return status;
711}
IMessageSvc * msgSvc()

◆ getReferField()

double MagneticFieldSvc::getReferField ( )
virtual

Definition at line 2845 of file MagneticFieldSvc.cxx.

2845 {
2846 if ( m_useDB == false )
2847 {
2848 if ( m_runmode == 8 || m_runmode == 7 ) m_zfield = -0.9 * tesla;
2849 else m_zfield = -1.0 * tesla;
2850 }
2851
2852 if ( m_turnOffField == true ) { m_zfield = 0.; }
2853 return m_zfield * m_scale;
2854}

◆ handle()

void MagneticFieldSvc::handle ( const Incident & inc)

Definition at line 734 of file MagneticFieldSvc.cxx.

734 {
735 MsgStream log( msgSvc(), name() );
736 log << MSG::DEBUG << "handle: " << inc.type() << endmsg;
737 if ( inc.type() != "NewRun" ) { return; }
738 log << MSG::DEBUG << "Begin New Runcc" << endmsg;
739
740 SmartDataPtr<Event::EventHeader> eventHeader( m_eventSvc, "/Event/EventHeader" );
741 int new_run = eventHeader->runNumber();
742 if ( new_run < 0 ) new_run = -new_run;
743
744 if ( ( m_useDB == true ) && ( m_readOneTime == false ) )
745 {
746 using FieldDBUtil::ConnectionDB;
747 ConnectionDB::eRet e = m_connect_run->getReadSC_MagnetInfo( current, std::abs( new_run ) );
748 e = m_connect_run->getBeamEnergy( beamEnergy, std::abs( new_run ) );
749 init_params( current, beamEnergy, new_run );
750 }
751 else if ( ( m_useDB == true ) && ( m_readOneTime == true ) )
752 {
753 std::vector<double> beamEnergy;
754 std::vector<double> current( 3, 0. );
755 // if (m_mapBeamEnergy == NULL ||m_mapBeamEnergy.size() == 0))
756 if ( m_mapBeamEnergy.size() == 0 )
757 {
758 cout << "Run:" << new_run << " BeamEnergy is NULL, please check!!" << endl;
759 exit( 1 );
760 }
761 beamEnergy.push_back( ( m_mapBeamEnergy[new_run] )[0] );
762 beamEnergy.push_back( ( m_mapBeamEnergy[new_run] )[1] );
763 // if (m_mapMagnetInfo.size()<1||m_mapMagnetInfo.isEmpty())
764 if ( m_mapMagnetInfo.size() == 0 )
765 {
766 cout << "Run:" << new_run << " MagnetInfo is NULL, please check!!" << endl;
767 exit( 1 );
768 }
769 current[0] = ( m_mapMagnetInfo[new_run] )[0];
770 current[1] = ( m_mapMagnetInfo[new_run] )[1];
771 current[2] = ( m_mapMagnetInfo[new_run] )[2];
772 init_params( current, beamEnergy, new_run );
773 }
774}
FieldDBUtil::ConnectionDB * m_connect_run
std::map< int, std::vector< double > > m_mapMagnetInfo
std::vector< double > beamEnergy
std::map< int, std::vector< double > > m_mapBeamEnergy
std::vector< double > current
IDataProviderSvc * m_eventSvc

◆ ifRealField()

bool MagneticFieldSvc::ifRealField ( ) const
virtual

Definition at line 2856 of file MagneticFieldSvc.cxx.

2856{ return m_ifRealField; }

◆ init_params() [1/2]

void MagneticFieldSvc::init_params ( )

Referenced by handle(), and init_params().

◆ init_params() [2/2]

void MagneticFieldSvc::init_params ( std::vector< double > current,
std::vector< double > beamEnergy,
int runNo )

Definition at line 273 of file MagneticFieldSvc.cxx.

274 {
275 MsgStream log( msgSvc(), name() );
276#else
277void init_params( int runNo ) {
278 if ( !init_mucMagneticField() )
279 {
280 cerr << " STOP! " << endl;
281 exit( 1 );
282 }
283#endif
284
285 m_Q.clear();
286 m_P.clear();
287 m_Q_1.clear();
288 m_P_1.clear();
289 m_Q_2.clear();
290 m_P_2.clear();
291 m_P_TE.clear();
292 m_Q_TE.clear();
293
294 if ( m_gridDistance == 5 )
295 {
296 m_Q.reserve( 201250 );
297 m_P.reserve( 201250 );
298 m_Q_1.reserve( 201250 );
299 m_P_1.reserve( 201250 );
300 m_Q_2.reserve( 201250 );
301 m_P_2.reserve( 201250 );
302 m_Q_TE.reserve( 176608 );
303 m_P_TE.reserve( 176608 );
304 }
305 if ( m_gridDistance == 10 )
306 {
307 m_Q.reserve( 27082 );
308 m_P.reserve( 27082 );
309 m_Q_1.reserve( 27082 );
310 m_P_1.reserve( 27082 );
311 m_Q_2.reserve( 27082 );
312 m_P_2.reserve( 27082 );
313 m_Q_TE.reserve( 23833 );
314 m_P_TE.reserve( 23833 );
315 }
316
317 char BPR_PRB[200];
318 char BER_PRB[200];
319 sprintf( BPR_PRB, "%f ", beamEnergy[0] );
320 sprintf( BER_PRB, "%f ", beamEnergy[1] );
321 setenv( "BEPCII_INFO.BPR_PRB", BPR_PRB, 1 );
322 setenv( "BEPCII_INFO.BER_PRB", BER_PRB, 1 );
323 int ssm_curr = int( current[0] );
324 double scql_curr = current[1];
325 double scqr_curr = current[2];
326 // cout<<"curent is:"<<ssm_curr<<"scql_curr is:"<<scql_curr<<"scqr_curr
327 // is:"<<scqr_currendl;
328
329#ifndef BEAN
330 log << MSG::INFO << "SSM current: " << current[0] << " SCQL current: " << current[1]
331 << " SCQR current: " << current[2] << " in Run " << runNo << endmsg;
332 log << MSG::INFO << "beamEnergy is:" << beamEnergy[0] << " BER_PRB:" << beamEnergy[1]
333 << " in Run " << runNo << endmsg;
334#else
335
336 cout << "SSM current: " << current[0] << " SCQL current: " << current[1]
337 << " SCQR current: " << current[2] << " in Run " << runNo << endl;
338 log << MSG::INFO << "beamEnergy is:" << beamEnergy[0] << " BER_PRB:" << beamEnergy[1]
339 << " in Run " << runNo << endmsg;
340#endif
341
342 // int ssm_curr = 3369;
343 // double scql_curr = 426.2;
344 // double scqr_curr = 426.2;
345 // for the energy less than 1.89GeV
346 if ( ( ( ssm_curr >= 3367 ) && ( ssm_curr <= 3370 ) &&
347 ( ( scql_curr + scqr_curr ) / 2 < m_Cur_SCQ1_89 ) ) )
348 {
349 m_zfield = -1.0 * tesla;
350 m_filename = path;
351 m_filename += std::string( "/dat/2008-05-27BESIII-field-Mode2.dat" );
352#ifndef BEAN
353 log << MSG::INFO << "Select field map: " << m_filename << endmsg;
354#else
355 cout << "Select field map: " << m_filename << endl;
356#endif
357
358 if ( ( ( former_m_filename == "First Run" ) || ( former_m_filename != m_filename ) ) &&
359 ( m_readOneTime == true ) )
360 { former_m_filename = m_filename; }
361 else if ( m_readOneTime == false ) {}
362 StatusCode status = parseFile();
363#ifndef BEAN
364 if ( !status.isSuccess() )
365 { log << MSG::DEBUG << "Magnetic field parse failled" << endmsg; }
366#else
367 if ( !status ) { cout << "Magnetic field parse failled" << endl; }
368#endif
369
370 m_Q_1 = m_Q;
371 m_P_1 = m_P;
372
373 m_Q.clear();
374 m_P.clear();
375 if ( m_gridDistance == 5 )
376 {
377 m_Q.reserve( 201250 );
378 m_P.reserve( 201250 );
379 }
380 if ( m_gridDistance == 10 )
381 {
382 m_Q.reserve( 27082 );
383 m_P.reserve( 27082 );
384 }
385
386 m_filename = path;
387 m_filename += std::string( "/dat/2008-05-27BESIII-field-Mode3.dat" );
388#ifndef BEAN
389 log << MSG::INFO << "Select field map: " << m_filename << endmsg;
390#else
391 cout << "Select field map: " << m_filename << endl;
392#endif
393
394 if ( ( ( former_m_filename == "First Run" ) || ( former_m_filename != m_filename ) ) &&
395 ( m_readOneTime == true ) )
396 { former_m_filename = m_filename; }
397 else if ( m_readOneTime == false ) {}
398 status = parseFile();
399#ifndef BEAN
400 if ( !status.isSuccess() )
401 { log << MSG::DEBUG << "Magnetic field parse failled" << endmsg; }
402#else
403 if ( !status ) { cout << "Magnetic field parse failled" << endl; }
404#endif
405
406 m_Q_2 = m_Q;
407 m_P_2 = m_P;
408
409 m_Q.clear();
410 m_P.clear();
411 if ( m_gridDistance == 5 )
412 {
413 m_Q.reserve( 201250 );
414 m_P.reserve( 201250 );
415 }
416 if ( m_gridDistance == 10 )
417 {
418 m_Q.reserve( 27082 );
419 m_P.reserve( 27082 );
420 }
421 // check
422 if ( m_Q_2.size() != m_Q_1.size() )
423 {
424#ifndef BEAN
425 log << MSG::FATAL << "The two field maps used in this run are wrong!!!" << endmsg;
426#else
427 cout << "The two field maps used in this run are wrong!!!" << endl;
428#endif
429 exit( 1 );
430 }
431
432 for ( unsigned int iQ = 0; iQ < m_Q_1.size(); iQ++ )
433 {
434 double fieldvalue = ( m_Q_1[iQ] - m_Q_2[iQ] ) / ( m_Cur_SCQ1_55 - m_Cur_SCQ1_89 ) *
435 ( ( scql_curr + scqr_curr ) / 2 - m_Cur_SCQ1_89 ) +
436 m_Q_2[iQ];
437 m_Q.push_back( fieldvalue );
438 m_P.push_back( m_P_2[iQ] );
439 }
440 }
441 // for the energy greater than 1.89GeV
442 if ( ( ( ssm_curr >= 3367 ) && ( ssm_curr <= 3370 ) &&
443 ( ( scql_curr + scqr_curr ) / 2 >= m_Cur_SCQ1_89 ) ) )
444 {
445 m_zfield = -1.0 * tesla;
446 m_filename = path;
447 m_filename += std::string( "/dat/2008-05-27BESIII-field-Mode3.dat" );
448#ifndef BEAN
449 log << MSG::INFO << "Select field map: " << m_filename << endmsg;
450#else
451 cout << "Select field map: " << m_filename << endl;
452#endif
453 if ( ( ( former_m_filename == "First Run" ) || ( former_m_filename != m_filename ) ) &&
454 ( m_readOneTime == true ) )
455 { former_m_filename = m_filename; }
456 else if ( m_readOneTime == false ) {}
457 StatusCode status = parseFile();
458#ifndef BEAN
459 if ( !status.isSuccess() )
460 { log << MSG::DEBUG << "Magnetic field parse failled" << endmsg; }
461#else
462 if ( !status ) { cout << "Magnetic field parse failled" << endl; }
463#endif
464
465 m_Q_1 = m_Q;
466 m_P_1 = m_P;
467
468 m_Q.clear();
469 m_P.clear();
470 if ( m_gridDistance == 5 )
471 {
472 m_Q.reserve( 201250 );
473 m_P.reserve( 201250 );
474 }
475 if ( m_gridDistance == 10 )
476 {
477 m_Q.reserve( 27082 );
478 m_P.reserve( 27082 );
479 }
480
481 m_filename = path;
482 m_filename += std::string( "/dat/2008-05-27BESIII-field-Mode4.dat" );
483#ifndef BEAN
484 log << MSG::INFO << "Select field map: " << m_filename << endmsg;
485#else
486 cout << "Select field map: " << m_filename << endl;
487#endif
488
489 if ( ( ( former_m_filename == "First Run" ) || ( former_m_filename != m_filename ) ) &&
490 ( m_readOneTime == true ) )
491 { former_m_filename = m_filename; }
492 else if ( m_readOneTime == false ) {}
493 status = parseFile();
494#ifndef BEAN
495 if ( !status.isSuccess() )
496 { log << MSG::DEBUG << "Magnetic field parse failled" << endmsg; }
497#else
498 if ( !status ) { cout << "Magnetic field parse failled" << endl; }
499#endif
500
501 m_Q_2 = m_Q;
502 m_P_2 = m_P;
503
504 m_Q.clear();
505 m_P.clear();
506 if ( m_gridDistance == 5 )
507 {
508 m_Q.reserve( 201250 );
509 m_P.reserve( 201250 );
510 }
511 if ( m_gridDistance == 10 )
512 {
513 m_Q.reserve( 27082 );
514 m_P.reserve( 27082 );
515 }
516
517 // check
518 if ( m_Q_2.size() != m_Q_1.size() )
519 {
520#ifndef BEAN
521
522 log << MSG::FATAL << "The two field maps used in this run are wrong!!!" << endmsg;
523
524#else
525
526 cout << "The two field maps used in this run are wrong!!!" << endl;
527
528#endif
529 exit( 1 );
530 }
531
532 for ( unsigned int iQ = 0; iQ < m_Q_1.size(); iQ++ )
533 {
534 double fieldvalue = ( m_Q_1[iQ] - m_Q_2[iQ] ) / ( m_Cur_SCQ1_89 - m_Cur_SCQ2_10 ) *
535 ( ( scql_curr + scqr_curr ) / 2 - m_Cur_SCQ2_10 ) +
536 m_Q_2[iQ];
537 m_Q.push_back( fieldvalue );
538 m_P.push_back( m_P_2[iQ] );
539 }
540 }
541 if ( ( ssm_curr >= 3033 ) && ( ssm_curr <= 3035 ) )
542 {
543 m_zfield = -0.9 * tesla;
544 m_filename = path;
545 m_filename += std::string( "/dat/2008-05-27BESIII-field-Mode7.dat" );
546#ifndef BEAN
547 log << MSG::INFO << "Select field map: " << m_filename << endmsg;
548#else
549 cout << "Select field map: " << m_filename << endl;
550#endif
551
552 if ( ( ( former_m_filename == "First Run" ) || ( former_m_filename != m_filename ) ) &&
553 ( m_readOneTime == true ) )
554 { former_m_filename = m_filename; }
555 else if ( m_readOneTime == false ) {}
556 StatusCode status = parseFile();
557#ifndef BEAN
558 if ( !status.isSuccess() )
559 { log << MSG::DEBUG << "Magnetic field parse failled" << endmsg; }
560#else
561 if ( !status ) { cout << "Magnetic field parse failled" << endl; }
562#endif
563
564 m_Q_1 = m_Q;
565 m_P_1 = m_P;
566
567 m_Q.clear();
568 m_P.clear();
569 if ( m_gridDistance == 5 )
570 {
571 m_Q.reserve( 201250 );
572 m_P.reserve( 201250 );
573 }
574 if ( m_gridDistance == 10 )
575 {
576 m_Q.reserve( 27082 );
577 m_P.reserve( 27082 );
578 }
579
580 m_filename = path;
581 m_filename += std::string( "/dat/2008-05-27BESIII-field-Mode8.dat" );
582#ifndef BEAN
583 log << MSG::INFO << "Select field map: " << m_filename << endmsg;
584#else
585 cout << "Select field map: " << m_filename << endl;
586#endif
587
588 if ( ( ( former_m_filename == "First Run" ) || ( former_m_filename != m_filename ) ) &&
589 ( m_readOneTime == true ) )
590 { former_m_filename = m_filename; }
591 else if ( m_readOneTime == false ) {}
592 status = parseFile();
593#ifndef BEAN
594 if ( !status.isSuccess() )
595 { log << MSG::DEBUG << "Magnetic field parse failled" << endmsg; }
596#else
597 if ( !status ) { cout << "Magnetic field parse failled" << endl; }
598#endif
599
600 m_Q_2 = m_Q;
601 m_P_2 = m_P;
602
603 m_Q.clear();
604 m_P.clear();
605 if ( m_gridDistance == 5 )
606 {
607 m_Q.reserve( 201250 );
608 m_P.reserve( 201250 );
609 }
610 if ( m_gridDistance == 10 )
611 {
612 m_Q.reserve( 27082 );
613 m_P.reserve( 27082 );
614 }
615 // check
616 if ( m_Q_2.size() != m_Q_1.size() )
617 {
618#ifndef BEAN
619 log << MSG::FATAL << "The two field maps used in this run are wrong!!!" << endmsg;
620#else
621 cout << "The two field maps used in this run are wrong!!!" << endl;
622#endif
623 exit( 1 );
624 }
625
626 for ( unsigned int iQ = 0; iQ < m_Q_1.size(); iQ++ )
627 {
628 double fieldvalue = ( m_Q_1[iQ] - m_Q_2[iQ] ) / ( m_Cur_SCQ1_55 - m_Cur_SCQ1_89 ) *
629 ( ( scql_curr + scqr_curr ) / 2 - m_Cur_SCQ1_89 ) +
630 m_Q_2[iQ];
631 m_Q.push_back( fieldvalue );
632 m_P.push_back( m_P_2[iQ] );
633 }
634 }
635 if ( ( !( ( ssm_curr >= 3367 ) && ( ssm_curr <= 3370 ) ) &&
636 !( ( ssm_curr >= 3033 ) && ( ssm_curr <= 3035 ) ) ) ||
637 scql_curr == 0 || scqr_curr == 0 )
638 {
639#ifndef BEAN
640 log << MSG::FATAL << "The current of run " << runNo
641 << " is abnormal in database, please check it! " << endmsg;
642 log << MSG::FATAL << "The current of SSM is " << ssm_curr << ", SCQR is " << scqr_curr
643 << ", SCQL is " << scql_curr << endmsg;
644#else
645 cout << "The current of run " << runNo << " is abnormal in database, please check it! "
646 << endl;
647 cout << "The current of SSM is " << ssm_curr << ", SCQR is " << scqr_curr << ", SCQL is "
648 << scql_curr << endl;
649#endif
650 exit( 1 );
651 }
652 if ( m_Q.size() == 0 )
653 {
654#ifndef BEAN
655 log << MSG::FATAL
656 << "This size of field map vector is ZERO, please check the current of run " << runNo
657 << " in database!" << endmsg;
658#else
659 cout << "This size of field map vector is ZERO,"
660 << " please check the current of run " << runNo << " in database!" << endl;
661#endif
662 exit( 1 );
663 }
664
665 m_filename_TE = path;
666 if ( m_gridDistance == 10 ) m_filename_TE += std::string( "/dat/TEMap10cm.dat" );
667 if ( m_gridDistance == 5 ) m_filename_TE += std::string( "/dat/TEMap5cm.dat" );
668#ifndef BEAN
669 log << MSG::INFO << "Select field map: " << m_filename_TE << endmsg;
670#else
671 cout << "Select field map: " << m_filename_TE << endl;
672#endif
673 if ( ( ( former_m_filename_TE == "First Run" ) ||
674 ( former_m_filename_TE != m_filename_TE ) ) &&
675 ( m_readOneTime == true ) )
676 { former_m_filename_TE = m_filename_TE; }
677 else if ( m_readOneTime == false ) {}
678 StatusCode status = parseFile_TE();
679#ifndef BEAN
680 if ( !status.isSuccess() ) { log << MSG::DEBUG << "Magnetic field parse failled" << endmsg; }
681#else
682 if ( !status ) { cout << "Magnetic field parse failled" << endl; }
683#endif
684
685 for ( int iC = 0; iC < 2; ++iC )
686 {
687 m_min_FL[iC] = -90.0 * cm;
688 m_max_FL[iC] = m_min_FL[iC] + ( m_Nxyz[iC] - 1 ) * m_Dxyz[iC];
689 // for tof and emc
690 m_min_FL_TE[iC] = 0.0 * cm;
691 m_max_FL_TE[iC] = m_min_FL_TE[iC] + ( m_Nxyz_TE[iC] - 1 ) * m_Dxyz_TE[iC];
692 } // iC
693 m_min_FL[2] = -120.0 * cm;
694 m_max_FL[2] = m_min_FL[2] + ( m_Nxyz[2] - 1 ) * m_Dxyz[2];
695 // for tof and emc
696 m_min_FL_TE[2] = 0.0 * cm;
697 m_max_FL_TE[2] = m_min_FL_TE[2] + ( m_Nxyz_TE[2] - 1 ) * m_Dxyz_TE[2];
698}
sprintf(cut, "kal_costheta0_em>-0.93&&kal_costheta0_em<0.93&&kal_pxy0_em>=0.05+%d*0.1&&kal_" "pxy0_em<0.15+%d*0.1&&NGch>=2", j, j)

◆ initialize()

StatusCode MagneticFieldSvc::initialize ( )
virtual

Initialise the service (Inherited Service overrides).

Definition at line 133 of file MagneticFieldSvc.cxx.

133 {
134#ifndef BEAN
135 MsgStream log( msgSvc(), name() );
136 StatusCode status = Service::initialize();
137 former_m_filename_TE = "First Run";
138 former_m_filename = "First Run";
139 // cout<<"former_m_filename_TE is:"<<former_m_filename_TE<<":former_m_filename
140 // is:"<<former_m_filename<<endl;
141 // Get the references to the services that are needed by the ApplicationMgr itself
142 IIncidentSvc* incsvc;
143 status = service( "IncidentSvc", incsvc );
144 int priority = 100;
145 if ( status.isSuccess() ) { incsvc->addListener( this, "NewRun", priority ); }
146
147 status = serviceLocator()->service( "EventDataSvc", m_eventSvc, true );
148 if ( status.isFailure() )
149 {
150 log << MSG::ERROR << "Unable to find EventDataSvc " << endmsg;
151 return status;
152 }
153#else
154 if ( !init_mucMagneticField() ) return false;
155 StatusCode status = true;
156#endif
157 if ( m_useDB == false )
158 {
159 if ( m_gridDistance == 5 )
160 {
161 m_Q.reserve( 201250 );
162 m_P.reserve( 201250 );
163 m_Q_TE.reserve( 176608 );
164 m_P_TE.reserve( 176608 );
165 }
166 if ( m_gridDistance == 10 )
167 {
168 m_Q.reserve( 27082 );
169 m_P.reserve( 27082 );
170 m_Q_TE.reserve( 23833 );
171 m_P_TE.reserve( 23833 );
172 }
173
174 m_filename = path;
175 m_filename_TE = path;
176 if ( m_gridDistance == 10 )
177 {
178 m_filename_TE += std::string( "/dat/TEMap10cm.dat" );
179 if ( m_runmode == 2 )
180 m_filename += std::string( "/dat/2008-04-03BESIII-field-Mode2.dat" );
181 else if ( m_runmode == 4 )
182 m_filename += std::string( "/dat/2008-04-03BESIII-field-Mode4.dat" );
183 else if ( m_runmode == 6 )
184 m_filename += std::string( "/dat/2008-04-03BESIII-field-Mode6.dat" );
185 else if ( m_runmode == 7 )
186 m_filename += std::string( "/dat/2008-04-03BESIII-field-Mode7.dat" );
187 else
188 {
189 m_filename += std::string( "/dat/2007-08-28BESIII-field.dat" );
190 std::cout << "WARNING: YOU ARE USING OLD FIELD MAP!!!!" << std::endl;
191 }
192 }
193 if ( m_gridDistance == 5 )
194 {
195 m_filename_TE += std::string( "/dat/TEMap5cm.dat" );
196 if ( m_runmode == 1 )
197 m_filename += std::string( "/dat/2008-05-27BESIII-field-Mode1.dat" );
198 else if ( m_runmode == 2 )
199 m_filename += std::string( "/dat/2008-05-27BESIII-field-Mode2.dat" );
200 else if ( m_runmode == 3 )
201 m_filename += std::string( "/dat/2008-05-27BESIII-field-Mode3.dat" );
202 else if ( m_runmode == 4 )
203 m_filename += std::string( "/dat/2008-05-27BESIII-field-Mode4.dat" );
204 else if ( m_runmode == 5 )
205 m_filename += std::string( "/dat/2008-05-27BESIII-field-Mode5.dat" );
206 else if ( m_runmode == 6 )
207 m_filename += std::string( "/dat/2008-05-27BESIII-field-Mode6.dat" );
208 else if ( m_runmode == 7 )
209 m_filename += std::string( "/dat/2008-05-27BESIII-field-Mode7.dat" );
210 else if ( m_runmode == 8 )
211 m_filename += std::string( "/dat/2008-05-27BESIII-field-Mode8.dat" );
212 else
213 {
214 m_filename += std::string( "/dat/2008-05-27BESIII-field-Mode2.dat" );
215 std::cout << "WARNING: NO RUN MODE, YOU ARE USING DEFAULT FIELD MAP!!!!" << std::endl;
216 }
217 }
218 cout << "*** Read field map: " << m_filename << endl;
219 cout << "*** Read field map " << m_filename_TE << endl;
220
221 status = parseFile();
222 status = parseFile_TE();
223#ifndef BEAN
224 if ( status.isSuccess() )
225 {
226 log << MSG::DEBUG << "Magnetic field parsed successfully" << endmsg;
227#else
228 if ( status )
229 {
230 cout << "Magnetic field parsed successfully" << endl;
231#endif
232
233 for ( int iC = 0; iC < 2; ++iC )
234 {
235 m_min_FL[iC] = -90.0 * cm;
236 m_max_FL[iC] = m_min_FL[iC] + ( m_Nxyz[iC] - 1 ) * m_Dxyz[iC];
237 // for tof and emc
238 m_min_FL_TE[iC] = 0.0 * cm;
239 m_max_FL_TE[iC] = m_min_FL_TE[iC] + ( m_Nxyz_TE[iC] - 1 ) * m_Dxyz_TE[iC];
240 } // iC
241 m_min_FL[2] = -120.0 * cm;
242 m_max_FL[2] = m_min_FL[2] + ( m_Nxyz[2] - 1 ) * m_Dxyz[2];
243 // for tof and emc
244 m_min_FL_TE[2] = 0.0 * cm;
245 m_max_FL_TE[2] = m_min_FL_TE[2] + ( m_Nxyz_TE[2] - 1 ) * m_Dxyz_TE[2];
246 }
247 else
248 {
249#ifndef BEAN
250 log << MSG::DEBUG << "Magnetic field parse failled" << endmsg;
251#else
252 cout << "Magnetic field parse failled" << endl;
253#endif
254 }
255 }
256 else
257 {
258 m_connect_run = new FieldDBUtil::ConnectionDB();
259 if ( m_readOneTime == true )
260 {
261 bool e = m_connect_run->getReadSC_MagnetInfo( m_mapMagnetInfo, m_runFrom, m_runTo );
262 e = m_connect_run->getBeamEnergy( m_mapBeamEnergy, m_runFrom, m_runTo );
263 }
264#ifndef BEAN
265 if ( !m_connect_run )
266 { log << MSG::ERROR << "Could not open connection to database" << endmsg; }
267#endif
268 }
269 return status;
270}

◆ type()

virtual const InterfaceID & MagneticFieldSvc::type ( ) const
inlinevirtual

Service type.

Query the available interfaces.

Parameters
riidRequested interface ID
ppvInterfacePointer to requested interface
Returns
StatusCode indicating SUCCESS or FAILURE.

Definition at line 70 of file MagneticFieldSvc.h.

70{ return IBesMagFieldSvc::interfaceID(); };

◆ uniFieldVector()

StatusCode MagneticFieldSvc::uniFieldVector ( const HepPoint3D & xyz,
HepVector3D & fvec ) const
virtual

Definition at line 2792 of file MagneticFieldSvc.cxx.

2792 {
2793 if ( m_runmode == 8 || m_runmode == 7 )
2794 {
2795 if ( -1.5 * m <= r.z() && r.z() <= 1.5 * m &&
2796 0 * m <= std::sqrt( r.x() * r.x() + r.y() * r.y() ) &&
2797 std::sqrt( r.x() * r.x() + r.y() * r.y() ) <= 1.5 * m )
2798 {
2799 b[0] = 0.0;
2800 b[1] = 0.0;
2801 b[2] = -0.9 * tesla;
2802 }
2803 else
2804 {
2805 b[0] = 0.0;
2806 b[1] = 0.0;
2807 b[2] = 0.0;
2808 }
2809 }
2810 else
2811 {
2812 if ( -1.5 * m <= r.z() && r.z() <= 1.5 * m &&
2813 0 * m <= std::sqrt( r.x() * r.x() + r.y() * r.y() ) &&
2814 std::sqrt( r.x() * r.x() + r.y() * r.y() ) <= 1.5 * m )
2815 {
2816 b[0] = 0.0;
2817 b[1] = 0.0;
2818 b[2] = -1.0 * tesla;
2819 }
2820 else
2821 {
2822 b[0] = 0.0;
2823 b[1] = 0.0;
2824 b[2] = 0.0;
2825 }
2826 }
2827
2828 if ( m_turnOffField == true )
2829 {
2830 b[0] = 0.;
2831 b[1] = 0.;
2832 b[2] = 0.;
2833 }
2834 // yzhang add 2012-04-25
2835 b[0] *= m_scale;
2836 b[1] *= m_scale;
2837 b[2] *= m_scale;
2838#ifndef BEAN
2839 return StatusCode::SUCCESS;
2840#else
2841 return true;
2842#endif
2843}

Referenced by fieldVector().

Member Data Documentation

◆ beamEnergy

std::vector<double> MagneticFieldSvc::beamEnergy

Definition at line 202 of file MagneticFieldSvc.h.

Referenced by handle(), init_params(), and init_params().

◆ current

std::vector<double> MagneticFieldSvc::current

Definition at line 203 of file MagneticFieldSvc.h.

Referenced by handle(), init_params(), and init_params().

◆ m_connect_run

FieldDBUtil::ConnectionDB* MagneticFieldSvc::m_connect_run

Definition at line 199 of file MagneticFieldSvc.h.

Referenced by handle(), and initialize().

◆ m_eventSvc

IDataProviderSvc* MagneticFieldSvc::m_eventSvc

Definition at line 196 of file MagneticFieldSvc.h.

Referenced by handle(), and initialize().

◆ m_mapBeamEnergy

std::map<int, std::vector<double> > MagneticFieldSvc::m_mapBeamEnergy

Definition at line 201 of file MagneticFieldSvc.h.

Referenced by handle(), and initialize().

◆ m_mapMagnetInfo

std::map<int, std::vector<double> > MagneticFieldSvc::m_mapMagnetInfo

Definition at line 200 of file MagneticFieldSvc.h.

Referenced by handle(), and initialize().

◆ m_readOneTime

bool MagneticFieldSvc::m_readOneTime

Definition at line 190 of file MagneticFieldSvc.h.

Referenced by handle(), init_params(), initialize(), and MagneticFieldSvc().

◆ m_runFrom

int MagneticFieldSvc::m_runFrom

Definition at line 191 of file MagneticFieldSvc.h.

Referenced by initialize(), and MagneticFieldSvc().

◆ m_runTo

int MagneticFieldSvc::m_runTo

Definition at line 192 of file MagneticFieldSvc.h.

Referenced by initialize(), and MagneticFieldSvc().

◆ runNo

int MagneticFieldSvc::runNo

Definition at line 193 of file MagneticFieldSvc.h.

Referenced by init_params(), and init_params().


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