1193 {
1194 MsgStream log(
msgSvc,
"MucCalibMgr" );
1195 log << MSG::INFO << "Read event" << endmsg;
1196
1197 Gaudi::svcLocator()->service(
"EventDataSvc",
eventSvc );
1198 m_evtBegin = clock();
1199
1200
1201 SmartDataPtr<Event::EventHeader> eventHeader(
eventSvc,
"/Event/EventHeader" );
1202 if ( !eventHeader )
1203 {
1204 log << MSG::FATAL << "Could not find event header" << endmsg;
1205 return ( StatusCode::FAILURE );
1206 }
1207
1208 m_currentRun = eventHeader->runNumber();
1209 m_currentEvent = eventHeader->eventNumber();
1210 if ( m_fStartRun == 0 ) m_fStartRun = m_currentRun;
1211 m_fEndRun = m_currentRun;
1212 m_fTotalEvent++;
1213
1214 log << MSG::INFO << "Run [ " << m_currentRun << " ]\tEvent [ " << m_currentEvent << " ]"
1215 << endmsg;
1216 if ( ( (long)m_fTotalEvent ) % 2000 == 0 ) cout << m_fTotalEvent << "\tdone!" << endl;
1217
1218
1219 if ( m_dimuSelect )
1220 {
1222 log << MSG::INFO << "Event tag:\t" << m_eventTag << endmsg;
1223 if ( m_dimuOnly && m_eventTag != 1 ) return ( StatusCode::FAILURE );
1224 }
1225
1226
1227 log << MSG::INFO << "Retrieve digis" << endmsg;
1228
1229 SmartDataPtr<MucDigiCol> mucDigiCol(
eventSvc,
"/Event/Digi/MucDigiCol" );
1230 if ( !mucDigiCol )
1231 {
1232 log << MSG::FATAL << "Could not find MUC digi" << endmsg;
1233 return ( StatusCode::FAILURE );
1234 }
1235
1236 int part, segment, layer, strip, pad;
1237 part = segment = layer = strip = pad = 0;
1238 double padX, padY, padZ;
1239 padX = padY = padZ = 0.;
1240 double resMax = 0.;
1241
1242 Identifier mucId;
1243 MucDigiCol::iterator digiIter = mucDigiCol->begin();
1244 int eventDigi = 0;
1245 for ( int digiId = 0; digiIter != mucDigiCol->end(); digiIter++, digiId++ )
1246 {
1247 mucId = ( *digiIter )->identify();
1252
1253 log << MSG::DEBUG << "[" << part << "\t" << segment << "\t" << layer << "\t" << strip
1254 << "]\t";
1255 if ( ( digiId + 1 ) % 8 == 0 ) log << MSG::DEBUG << endmsg;
1256
1257 eventDigi++;
1258
1260 abs( layer ) >= LAYER_MAX ||
abs( strip ) >= STRIP_INBOX_MAX )
1261 {
1262 log << MSG::ERROR << endmsg << "Digi IDs slop over!" << endmsg;
1263 continue;
1264 }
1265
1266
1267 MucMark* aMark = new MucMark( part, segment, layer, strip );
1268 m_digiCol.push_back( aMark );
1269 m_segDigiCol[part][segment].push_back( aMark );
1270 }
1271 log << MSG::DEBUG << endmsg;
1272 log << MSG::INFO << "Total digits of this event: " << eventDigi << endmsg;
1273 if ( eventDigi > 200 )
1274 log << MSG::ERROR << "Event: " << m_currentEvent << "\tdigits sharply rise:\t" << eventDigi
1275 << endmsg;
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294 int clusterNum, bigClusterNum, clusterSize;
1295 clusterNum = bigClusterNum = clusterSize = 0;
1296 if ( m_clusterMode )
1297 {
1298 log << MSG::INFO << "Searching clusters" << endmsg;
1299 m_clusterCol = ( *m_ptrMucMark ).CreateClusterCol( m_clusterMode, m_digiCol );
1300 }
1301
1302 for ( unsigned int i = 0; i < m_clusterCol.size(); i++ )
1303 {
1304 clusterSize = m_clusterCol[i].size();
1305
1306 if ( clusterSize > CLUSTER_ALARM )
1307 {
1308 log << MSG::WARNING << "Big cluster:" << endmsg;
1309 part = ( *m_clusterCol[i][0] ).Part();
1310 segment = ( *m_clusterCol[i][0] ).
Segment();
1311 layer = ( *m_clusterCol[i][0] ).Layer();
1312
1313 if ( m_clusterSave )
1314 ( *m_fdata ) << "Event:\t" << m_currentEvent << "\tbig cluster " << bigClusterNum
1315 << endl;
1316
1317 for ( int j = 0; j < clusterSize; j++ )
1318 {
1319 strip = ( *m_clusterCol[i][j] ).Strip();
1320 log << MSG::WARNING << "[" << part << "\t" << segment << "\t" << layer << "\t" << strip
1321 << "]\t";
1322 if ( ( j + 1 ) % 8 == 0 ) log << MSG::WARNING << endmsg;
1323 if ( m_clusterSave )
1324 ( *m_fdata ) << part << "\t" << segment << "\t" << layer << "\t" << strip << endl;
1325 }
1326 log << MSG::WARNING << endmsg;
1327 bigClusterNum++;
1328 }
1329 else if ( clusterSize > 1 )
1330 {
1331 log << MSG::DEBUG << "cluster: " << clusterNum << endmsg;
1332 clusterNum++, m_fTotalClstNum++;
1333 part = ( *m_clusterCol[i][0] ).Part();
1334 segment = ( *m_clusterCol[i][0] ).
Segment();
1335 layer = ( *m_clusterCol[i][0] ).Layer();
1336 for ( int j = 0; j < clusterSize; j++ )
1337 {
1338 strip = ( *m_clusterCol[i][j] ).Strip();
1339 log << MSG::DEBUG << "[" << part << "\t" << segment << "\t" << layer << "\t" << strip
1340 << "]\t";
1341 if ( ( j + 1 ) % 8 == 0 ) log << MSG::DEBUG << endmsg;
1342 }
1343 log << MSG::DEBUG << endmsg;
1344 }
1345 }
1346
1347 if ( m_clusterMode )
1348 log << MSG::INFO << "Total clusters in this event: " << clusterNum << endmsg;
1349 else log << MSG::INFO << "Clusters not built" << endmsg;
1350
1351
1352
1353 log << MSG::INFO << "Retrieve tracks" << endmsg;
1354
1355 SmartDataPtr<RecMdcTrackCol> mdcTrackCol(
eventSvc,
"/Event/Recon/RecMdcTrackCol" );
1356 if ( !mdcTrackCol )
1357 {
1358 log << MSG::FATAL << "Could not find mdc tracks" << endmsg;
1359 return ( StatusCode::FAILURE );
1360 }
1361
1362 RecMdcTrackCol::iterator mdctrkIter = mdcTrackCol->begin();
1363 for ( ; mdctrkIter != mdcTrackCol->end(); mdctrkIter++ )
1364 {
1365 m_charge = ( *mdctrkIter )->charge();
1366 m_mdcpx = ( *mdctrkIter )->px();
1367 m_mdcpy = ( *mdctrkIter )->py();
1368 m_mdcpz = ( *mdctrkIter )->pz();
1369 m_mdcpt = ( *mdctrkIter )->pxy();
1370 m_mdcpp = ( *mdctrkIter )->p();
1371 m_mdcphi = ( *mdctrkIter )->phi();
1372 m_mdctheta = ( *mdctrkIter )->theta();
1373 m_mdcTrkInfoTuple->write();
1374 }
1375
1376
1377 SmartDataPtr<RecMucTrackCol> mucTrackCol(
eventSvc,
"/Event/Recon/RecMucTrackCol" );
1378 if ( !mucTrackCol )
1379 {
1380 log << MSG::FATAL << "Could not find RecMucTrackCol" << endmsg;
1381 return ( StatusCode::FAILURE );
1382 }
1383
1385 if ( aRecMucTrackCol->size() < 1 )
1386 {
1387 log << MSG::INFO << "No MUC tracks in this event" << endmsg;
1388 return StatusCode::SUCCESS;
1389 }
1390 log << MSG::INFO << "Total tracks of this event: " << aRecMucTrackCol->size() << endmsg;
1391
1392
1393
1394
1395 if ( 0 )
1396 {
1397 SmartDataPtr<RecEsTimeCol> aRecEsTimeCol(
eventSvc,
"/Event/Recon/RecEsTimeCol" );
1398 if ( !aRecEsTimeCol )
1399 {
1400 log << MSG::ERROR << "Could not find RecEsTimeCol" << endmsg;
1401 return StatusCode::FAILURE;
1402 }
1403 else
1404 {
1405 RecEsTimeCol::iterator iter_evt = aRecEsTimeCol->begin();
1406
1407
1408 m_ntEsTime = ( *iter_evt )->getStat();
1409 if ( ( *iter_evt )->getStat() != 211 )
1410 {
1411 log << MSG::WARNING << "Event time not by TOF, skip!" << endmsg;
1412 return StatusCode::SUCCESS;
1413 }
1414 }
1415 }
1416
1417
1419 phiDiff = thetaDiff = 0.;
1420 if ( aRecMucTrackCol->size() == 2 && ( *aRecMucTrackCol )[0]->GetTotalHits() > 4 &&
1421 ( *aRecMucTrackCol )[1]->GetTotalHits() > 4 )
1422 {
1423
1424 phi1 = ( *aRecMucTrackCol )[0]->getMucPos().phi();
1425 phi2 = ( *aRecMucTrackCol )[1]->getMucPos().phi();
1428
1429
1430 theta1 = ( *aRecMucTrackCol )[0]->getMucPos().theta();
1431 theta2 = ( *aRecMucTrackCol )[1]->getMucPos().theta();
1433 m_hTrackPosPhiDiff->Fill( phiDiff );
1434 m_hTrackPosThetaDiff->Fill( thetaDiff );
1435 m_hDimuTracksPosDiff->Fill( thetaDiff, phiDiff );
1436 m_ntPosPhiDiff = phiDiff;
1437 m_ntPosThetaDiff = thetaDiff;
1438
1439 log << MSG::INFO << "PosPhiDiff:\t" << phiDiff << "\tPosThetaDiff:\t" << thetaDiff
1440 << endmsg;
1441
1442
1443 phi1 = ( *aRecMucTrackCol )[0]->getMucMomentum().phi();
1444 phi2 = ( *aRecMucTrackCol )[1]->getMucMomentum().phi();
1447
1448
1449 theta1 = ( *aRecMucTrackCol )[0]->getMucMomentum().theta();
1450 theta2 = ( *aRecMucTrackCol )[1]->getMucMomentum().theta();
1452
1453 m_hTrackMomPhiDiff->Fill( phiDiff );
1454 m_hTrackMomThetaDiff->Fill( thetaDiff );
1455 m_hDimuTracksMomDiff->Fill( thetaDiff, phiDiff );
1456 m_ntMomPhiDiff = phiDiff;
1457 m_ntMomThetaDiff = thetaDiff;
1458
1459 log << MSG::INFO << "MomPhiDiff:\t" << phiDiff << "\tMomThetaDiff:\t" << thetaDiff
1460 << endmsg;
1461 m_ntDimuTag = m_eventTag;
1462 m_trackDiffTuple->write();
1463 }
1464
1465
1466 RecMucTrackCol::iterator trackIter = mucTrackCol->begin();
1467 int trackHitNum, rawHitNum, expectedHitNum, segNum, trkRecMode, lastLayerBR, lastLayerEC;
1468 int layerPassNum[3], passMax[TRACK_SEG_MAX][2];
1469 bool firedLay[TRACK_SEG_MAX][LAYER_MAX];
1470 bool seedList[
PART_MAX][LAYER_MAX];
1471 trackHitNum = rawHitNum = expectedHitNum = segNum = trkRecMode = lastLayerBR = lastLayerEC =
1472 0;
1473 layerPassNum[0] = layerPassNum[1] = layerPassNum[2] = 0;
1474 for ( int segi = 0; segi < TRACK_SEG_MAX; segi++ )
1475 {
1476 passMax[segi][0] = passMax[segi][1] = 0;
1477 for ( int layi = 0; layi < LAYER_MAX; layi++ ) firedLay[segi][layi] = 0;
1478 }
1479
1481
1482
1483
1484 vector<int> mucRawHitCol;
1485 vector<int> mucExpHitCol;
1486
1487 for ( int trackId = 0; trackIter != mucTrackCol->end(); trackIter++, trackId++ )
1488 {
1489
1490
1491
1492 trackHitNum = ( *trackIter )->numHits();
1493 log << MSG::DEBUG << "Track: " << trackId << " Hits: " << trackHitNum << endmsg;
1494
1495 if ( trackHitNum == 0 )
1496 {
1497 log << MSG::INFO << "Track " << trackId << " no hits" << endmsg;
1498 continue;
1499 }
1500
1501 m_ntTrackHits = trackHitNum;
1502
1503 m_trkRecMode = trkRecMode = ( *trackIter )->GetRecMode();
1504 m_chi2 = ( *trackIter )->chi2();
1505 m_px = ( *trackIter )->getMucMomentum().x();
1506 m_py = ( *trackIter )->getMucMomentum().y();
1507 m_pz = ( *trackIter )->getMucMomentum().z();
1508 m_pt = sqrt( m_px * m_px + m_py * m_py );
1509 m_pp = sqrt( m_px * m_px + m_py * m_py + m_pz * m_pz );
1510
1511
1512 m_r = ( *trackIter )->getMucPos().mag();
1513 m_cosTheta = ( *trackIter )->getMucPos().cosTheta();
1514 m_theta = ( *trackIter )->getMucPos().theta();
1515 m_phi = ( *trackIter )->getMucPos().phi();
1516 m_depth = ( *trackIter )->depth();
1517 m_brLastLayer = lastLayerBR = ( *trackIter )->brLastLayer();
1518 m_ecLastLayer = lastLayerEC = ( *trackIter )->ecLastLayer();
1519 m_totalHits = ( *trackIter )->numHits();
1520 m_totalLayers = ( *trackIter )->numLayers();
1521 m_maxHitsInLayer = ( *trackIter )->maxHitsInLayer();
1522
1523 m_hPhiCosTheta->Fill( m_cosTheta, m_phi );
1524 log << MSG::INFO << "Fill track info" << endmsg;
1525
1526
1527
1528 if ( m_calHitCol.size() != 0 ) m_calHitCol.clear();
1529
1530
1531 log << MSG::DEBUG << "Reconstruction hits(digis in a track): " << endmsg;
1532
1533 mucRawHitCol = ( *trackIter )->getVecHits();
1534 rawHitNum += mucRawHitCol.size();
1535
1536 segNum = 0;
1537
1538
1539
1540
1541
1542
1543 for ( unsigned int hitId = 0; hitId < mucRawHitCol.size(); hitId++ )
1544 {
1545
1546
1547
1548
1549
1550
1551 mucId = mucRawHitCol[hitId];
1556
1557
1558
1559 log << MSG::DEBUG << "[" << part << "\t" << segment << "\t" << layer << "\t" << strip
1560 << "]\t";
1561
1562
1563
1564 MucMark* aMark = new MucMark( part, segment, layer, strip );
1565 m_calHitCol.push_back( aMark );
1566
1567
1568
1569
1570
1571
1572 if ( hitId == 0 )
1573 {
1574 trkSeg[segNum].push_back( aMark );
1575 segNum++;
1576 }
1577 else
1578 {
1579 log << MSG::DEBUG << "segNum: " << segNum << endmsg;
1580 bool notInSeg = true;
1581 for ( int segi = 0; segi < segNum; segi++ )
1582 {
1584 {
1585 trkSeg[segi].push_back( aMark );
1586 notInSeg = false;
1587 break;
1588 }
1589 }
1590
1591 if ( notInSeg == true )
1592 {
1593 trkSeg[segNum].push_back( aMark );
1594 segNum++;
1595 if ( segNum > TRACK_SEG_MAX )
1596 {
1597 log << MSG::ERROR << "Track segment overflow: " << segNum << endmsg;
1598 break;
1599 }
1600 }
1601 }
1602 }
1603 log << MSG::DEBUG << endmsg;
1604
1605
1606 layerPassNum[0] = layerPassNum[1] = layerPassNum[2] = 0;
1607 for ( int segi = 0; segi < segNum; segi++ )
1608 {
1609 int tmpLayNum = 0;
1610 passMax[segi][0] = passMax[segi][1] = trkSeg[segi][0]->Layer();
1611 for ( unsigned int hiti = 1; hiti < trkSeg[segi].size(); hiti++ )
1612 {
1613 if ( trkSeg[segi][hiti]->Layer() < passMax[segi][0] )
1614 passMax[segi][0] = trkSeg[segi][hiti]->Layer();
1615 if ( trkSeg[segi][hiti]->Layer() > passMax[segi][1] )
1616 passMax[segi][1] = trkSeg[segi][hiti]->Layer();
1617 firedLay[segi][trkSeg[segi][hiti]->Layer()] = 1;
1618 }
1619
1620 for ( int layi = 0; layi < LAYER_MAX; layi++ )
1621 {
1622 if ( firedLay[segi][layi] ) tmpLayNum++;
1623 }
1624
1625 if ( segi == 0 ) layerPassNum[0] += passMax[segi][1] + 1;
1626 else layerPassNum[0] += ( passMax[segi][1] - passMax[segi][0] + 1 );
1627
1628 layerPassNum[1] += ( passMax[segi][1] - passMax[segi][0] + 1 );
1629 layerPassNum[2] += tmpLayNum;
1630
1631 trkSeg[segi].clear();
1632 }
1633 m_ntTrackEvent = m_currentEvent;
1634 m_ntTrackTag = m_eventTag;
1635 m_ntTrackSegFly = segNum;
1636 m_ntTrackLayFlyA = layerPassNum[0];
1637 m_ntTrackLayFlyB = layerPassNum[1];
1638 m_ntTrackLayFlyC = layerPassNum[2];
1639 m_trackInfoTuple->write();
1640 log << MSG::INFO << "Track\t" << trackId << "\tsegment(s):\t" << segNum
1641 << "\tlayer passed:\t" << layerPassNum[0] << "\t" << layerPassNum[1] << "\t"
1642 << layerPassNum[2] << endmsg;
1643
1644
1645
1646
1647
1648
1649 log << MSG::DEBUG << "Fitting hits(expected hits in a track): " << endmsg;
1650
1651 mucExpHitCol = ( *trackIter )->getExpHits();
1652
1653 expectedHitNum += mucExpHitCol.size();
1654
1655 for ( unsigned int hitId = 0; hitId < mucExpHitCol.size(); hitId++ )
1656 {
1657
1658
1659
1660
1661 mucId = mucExpHitCol[hitId];
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685 MucMark* currentMark = new MucMark( part, segment, layer, strip );
1686 m_expHitCol.push_back( currentMark );
1687
1688
1689
1690
1691 int isInPos = -1;
1692 bool isInEffWindow = false;
1693 isInPos = currentMark->
IsInCol( m_segDigiCol[part][segment] );
1694
1695
1696 if ( part ==
BRID && ( layer - lastLayerBR > 1 ) )
continue;
1697 if ( part !=
BRID && ( layer - lastLayerEC > 1 ) )
continue;
1698
1699
1700 if ( part ==
BRID && layer == 0 && ( strip < 2 || strip > 45 ) )
1701 {
1702 if ( isInPos != -1 )
1703 {
1704 m_record[part][segment][layer][strip][2]++;
1705 m_record[part][segment][layer][strip][1]++;
1706 m_effHitCol.push_back( m_segDigiCol[part][segment][isInPos] );
1707
1708 if ( m_usePad != 0 )
1709 {
1710 m_h2DExpMap[part][segment][layer]->Fill( padX, padY );
1711 m_h2DHitMap[part][segment][layer]->Fill( padX, padY );
1712 }
1713 }
1714 else
1715 {
1716 m_record[part][segment][layer][strip][1]++;
1717 if ( m_usePad != 0 ) m_h2DExpMap[part][segment][layer]->Fill( padX, padY );
1718 }
1719 continue;
1720 }
1721
1722
1723 if ( isInPos != -1 )
1724 {
1725 m_record[part][segment][layer][strip][2]++;
1726 m_record[part][segment][layer][strip][1]++;
1727 m_effHitCol.push_back( m_segDigiCol[part][segment][isInPos] );
1728
1729 if ( m_usePad != 0 )
1730 {
1731 m_h2DExpMap[part][segment][layer]->Fill( padX, padY );
1732 m_h2DHitMap[part][segment][layer]->Fill( padX, padY );
1733 }
1734
1735 continue;
1736 }
1737 else
1738 for ( int tempStrip = 0, hiti = -m_effWindow; hiti <= m_effWindow; hiti++ )
1739 {
1740 if ( hiti == 0 ) continue;
1741 tempStrip = strip + hiti;
1742 if ( tempStrip < 0 || tempStrip > m_ptrIdTr->GetStripMax( part, segment, layer ) )
1743 continue;
1744
1745 isInPos = m_ptrMucMark->IsInCol( part, segment, layer, tempStrip,
1746 m_segDigiCol[part][segment] );
1747 if ( isInPos != -1 )
1748 {
1749 m_record[part][segment][layer][tempStrip][2]++;
1750 m_record[part][segment][layer][tempStrip][1]++;
1751 m_effHitCol.push_back( m_segDigiCol[part][segment][isInPos] );
1752
1753 if ( m_usePad != 0 )
1754 {
1755 m_h2DExpMap[part][segment][layer]->Fill( padX, padY );
1756 m_h2DHitMap[part][segment][layer]->Fill( padX, padY );
1757 }
1758
1759 m_ntEffWindow = hiti;
1760 m_effWindowTuple->write();
1761 isInEffWindow = true;
1762 }
1763
1764 }
1765
1766 if ( isInEffWindow ) { continue; }
1767 else
1768 {
1769 m_record[part][segment][layer][strip][1]++;
1770 if ( m_usePad != 0 ) m_h2DExpMap[part][segment][layer]->Fill( padX, padY );
1771 }
1772
1773 }
1774
1775
1776 log << MSG::INFO << "Fill residual" << endmsg;
1777 vector<float> m_lineResCol = ( *trackIter )->getDistHits();
1778 vector<float> m_quadResCol = ( *trackIter )->getQuadDistHits();
1779 vector<float> m_extrResCol = ( *trackIter )->getExtDistHits();
1780 int mode = ( *trackIter )->GetRecMode();
1781
1782 for ( unsigned int nres = 0; nres < m_lineResCol.size(); nres++ )
1783 if ( fabs( m_lineResCol[nres] ) > resMax ) resMax = fabs( m_lineResCol[nres] );
1784
1785 log << MSG::INFO << "Good track for res" << endmsg;
1786 if ( trackHitNum > 4 && m_lineResCol[0] != -99 )
1787 {
1788
1789 bool firedFlag[
PART_MAX][LAYER_MAX][2];
1790 for (
int iprt = 0; iprt <
PART_MAX; iprt++ )
1791 for ( int jlay = 0; jlay < LAYER_MAX; jlay++ )
1792 firedFlag[iprt][jlay][0] = firedFlag[iprt][jlay][1] = false;
1793
1794 for ( unsigned int hitId = 0; hitId < mucExpHitCol.size(); hitId++ )
1795 {
1796
1797
1798
1799
1800 mucId = mucExpHitCol[hitId];
1801
1805
1806 firedFlag[part][layer][0] = true;
1807 }
1808
1809 log << MSG::INFO << "Fit res" << endmsg;
1810 for ( unsigned int hitId = 0; hitId < mucRawHitCol.size(); hitId++ )
1811 {
1812
1813
1814
1815
1816 mucId = mucRawHitCol[hitId];
1820
1821 if ( part ==
BRID ) m_hBarrelResDist[layer]->Fill( m_lineResCol[hitId] );
1822 else m_hEndcapResDist[layer]->Fill( m_lineResCol[hitId] );
1823
1824
1825 if ( firedFlag[part][layer][0] == true && firedFlag[part][layer][1] == false )
1826 {
1827 m_resPart = part;
1828 m_resSegment = segment;
1829 m_resLayer = layer;
1830 m_lineRes = m_lineResCol[hitId];
1831
1832
1833 m_quadRes = 999;
1834 m_extrRes = 999;
1835 m_resFired = 1;
1836 m_resMode = mode;
1837 m_resInfoTuple->write();
1838
1839 }
1840
1841 firedFlag[part][layer][1] = true;
1842 }
1843
1844 log << MSG::INFO << "Exp res" << endmsg;
1845 for ( unsigned int hitId = 0; hitId < mucExpHitCol.size(); hitId++ )
1846 {
1847
1848
1849
1850
1851 mucId = mucExpHitCol[hitId];
1855
1856 if ( firedFlag[part][layer][0] == true && firedFlag[part][layer][1] == false )
1857 {
1858 m_resPart = part;
1859 m_resSegment = segment;
1860 m_resLayer = layer;
1861 m_lineRes = 1000;
1862 m_quadRes = 1000;
1863 m_extrRes = 1000;
1864 m_resFired = 0;
1865 m_resMode = mode;
1866 m_resInfoTuple->write();
1867 }
1868 }
1869
1870 }
1871
1872 mucRawHitCol.clear();
1873 mucExpHitCol.clear();
1874
1875 }
1876
1877
1878
1879
1880 m_ntTrackNum = mucTrackCol->size();
1881
1882 m_fTotalEffHit += rawHitNum;
1883 log << MSG::INFO << "Total hits in this event, raw: " << rawHitNum
1884 << "\texpected: " << expectedHitNum << endmsg;
1885
1886
1887
1888 log << MSG::INFO << "Searching inc/noise hits" << endmsg;
1889 bool isNosHit;
1890 bool hasEffHit;
1891 for ( unsigned int i = 0; i < m_digiCol.size(); i++ )
1892 {
1893 isNosHit = true;
1894
1895 if ( m_digiCol[i]->IsInCol( m_effHitCol ) != -1 ) continue;
1896 else
1897 {
1898 for ( unsigned int j = 0; j < m_clusterCol.size(); j++ )
1899 {
1900 hasEffHit = false;
1901 for ( unsigned int k = 0; k < m_clusterCol[j].size(); k++ )
1902 {
1903 if ( m_clusterCol[j][k]->IsInCol( m_effHitCol ) != -1 )
1904
1905 {
1906 hasEffHit = true;
1907 break;
1908 }
1909 }
1910
1911 if ( hasEffHit && ( m_digiCol[i]->IsInCol( m_clusterCol[j] ) != -1 ) )
1912 {
1913 isNosHit = false;
1914 break;
1915 }
1916 }
1917
1918 if ( isNosHit )
1919 {
1920 m_nosHitCol.push_back( m_digiCol[i] );
1921 m_fTotalNosHit++;
1922 }
1923 }
1924 }
1925
1926 return StatusCode::SUCCESS;
1927}
vector< MucMark * > mark_col
ObjectVector< RecMucTrack > RecMucTrackCol
static int barrel_ec(const Identifier &id)
Values of different levels.
static int layer(const Identifier &id)
static int channel(const Identifier &id)
static int segment(const Identifier &id)
bool IsInSegWith(MucMark &other)
int IsInCol(int part, int segment, int layer, int strip, mark_col &aCol)