diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastPatternFinder.cxx b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastPatternFinder.cxx index 1b70f6312da74ac71695a1d6ac1bd2cbe8cbe161..743f13929934ad5767b6dc7972d4e50c5eb613a8 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastPatternFinder.cxx +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastPatternFinder.cxx @@ -113,12 +113,12 @@ StatusCode TrigL2MuonSA::MuFastPatternFinder::findPatterns(const TrigL2MuonSA::M ATH_CHECK( findPatterns(muonRoad, mdtHits, v_trackPatterns) ); ATH_CHECK( m_nswPatternFinder->findPatterns(muonRoad, stgcHits, mmHits, v_trackPatterns.back()) ); - for(unsigned int i_hit=0; i_hit<v_trackPatterns.at(0).stgcSegment.size(); i_hit++) { - ATH_MSG_DEBUG("PatternFinder: output sTGC hits global eta/phi/r/z/layer/channelType/isOutlier " << v_trackPatterns.at(0).stgcSegment[i_hit].eta << "/" << v_trackPatterns.at(0).stgcSegment[i_hit].phi << "/" << v_trackPatterns.at(0).stgcSegment[i_hit].r << "/" << v_trackPatterns.at(0).stgcSegment[i_hit].z << "/" << v_trackPatterns.at(0).stgcSegment[i_hit].layerNumber << "/" << v_trackPatterns.at(0).stgcSegment[i_hit].channelType << "/" << v_trackPatterns.at(0).stgcSegment[i_hit].isOutlier); + for(unsigned int i_hit=0; i_hit<v_trackPatterns.back().stgcSegment.size(); i_hit++) { + ATH_MSG_DEBUG("PatternFinder: output sTGC hits global eta/phi/r/z/layer/channelType/isOutlier " << v_trackPatterns.back().stgcSegment[i_hit].eta << "/" << v_trackPatterns.back().stgcSegment[i_hit].phi << "/" << v_trackPatterns.back().stgcSegment[i_hit].r << "/" << v_trackPatterns.back().stgcSegment[i_hit].z << "/" << v_trackPatterns.back().stgcSegment[i_hit].layerNumber << "/" << v_trackPatterns.back().stgcSegment[i_hit].channelType << "/" << v_trackPatterns.back().stgcSegment[i_hit].isOutlier); } - for(unsigned int i_hit=0; i_hit<v_trackPatterns.at(0).mmSegment.size(); i_hit++) { - ATH_MSG_DEBUG("PatternFinder: output MM hits global eta/phi/r/z/layer/isOutlier " << v_trackPatterns.at(0).mmSegment[i_hit].eta << "/" << v_trackPatterns.at(0).mmSegment[i_hit].phi << "/" << v_trackPatterns.at(0).mmSegment[i_hit].r << "/" << v_trackPatterns.at(0).mmSegment[i_hit].z << "/" << v_trackPatterns.at(0).mmSegment[i_hit].layerNumber << "/" << v_trackPatterns.at(0).mmSegment[i_hit].isOutlier); + for(unsigned int i_hit=0; i_hit<v_trackPatterns.back().mmSegment.size(); i_hit++) { + ATH_MSG_DEBUG("PatternFinder: output MM hits global eta/phi/r/z/layer/isOutlier " << v_trackPatterns.back().mmSegment[i_hit].eta << "/" << v_trackPatterns.back().mmSegment[i_hit].phi << "/" << v_trackPatterns.back().mmSegment[i_hit].r << "/" << v_trackPatterns.back().mmSegment[i_hit].z << "/" << v_trackPatterns.back().mmSegment[i_hit].layerNumber << "/" << v_trackPatterns.back().mmSegment[i_hit].isOutlier); } return StatusCode::SUCCESS; diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastStationFitter.cxx b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastStationFitter.cxx index 130cd73bf37e8bc2c3a08dd1fcb41baf0ed53d0e..65c597d24bfd356fc409c91344fe07a85e5c3605 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastStationFitter.cxx +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastStationFitter.cxx @@ -119,7 +119,7 @@ StatusCode TrigL2MuonSA::MuFastStationFitter::findSuperPointsSimple(const LVL1:: std::vector<TrigL2MuonSA::TrackPattern>& v_trackPatterns) { const double ZERO_LIMIT = 1e-5; - + for (TrigL2MuonSA::TrackPattern& itTrack : v_trackPatterns) { // loop for track candidates if (tgcFitResult.isSuccess) { diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastSteering.cxx b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastSteering.cxx index b646c6da7c792f6c5ecead88590306aec82c0d25..25b440bc3443e5d95fa6ecff12f4ebd0db4802d2 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastSteering.cxx +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastSteering.cxx @@ -385,7 +385,7 @@ StatusCode MuFastSteering::execute() } ATH_CHECK(findMuonSignatureIO(*tracks, internalRoI, recRoIVector, - *muonCBColl, *muFastContainer, *muIdContainer, *muMsContainer )); + *muonCBColl, *muFastContainer )); ATH_MSG_DEBUG("REGTEST: xAOD::L2CombinedMuonContainer key:" << m_outputCBmuonCollKey.key() << " size = " << muonCBColl->size()); xAOD::L2CombinedMuonContainer::const_iterator p_CBmuon = (*muonCBColl).begin(); @@ -689,7 +689,7 @@ StatusCode MuFastSteering::findMuonSignature(const std::vector<const TrigRoiDesc m_rpcFitResult, m_tgcFitResult, m_mdtHits_normal, m_cscHits, m_stgcHits, m_mmHits, trackPatterns, outputTracks, outputID, outputMS); - return StatusCode::SUCCESS; + continue; } if (m_use_timer) m_timingTimers[ITIMER_DATA_PREPARATOR]->pause(); prepTimer.stop(); @@ -703,7 +703,7 @@ StatusCode MuFastSteering::findMuonSignature(const std::vector<const TrigRoiDesc m_rpcFitResult, m_tgcFitResult, m_mdtHits_normal, m_cscHits, m_stgcHits, m_mmHits, trackPatterns, outputTracks, outputID, outputMS); - return StatusCode::FAILURE; + continue; } // Pattern finding @@ -719,7 +719,7 @@ StatusCode MuFastSteering::findMuonSignature(const std::vector<const TrigRoiDesc m_rpcFitResult, m_tgcFitResult, m_mdtHits_normal, m_cscHits, m_stgcHits, m_mmHits, trackPatterns, outputTracks, outputID, outputMS); - return StatusCode::SUCCESS; + continue; } if (m_use_timer) m_timingTimers[ITIMER_PATTERN_FINDER]->pause(); patternTimer.stop(); @@ -738,7 +738,7 @@ StatusCode MuFastSteering::findMuonSignature(const std::vector<const TrigRoiDesc m_rpcFitResult, m_tgcFitResult, m_mdtHits_normal, m_cscHits, m_stgcHits, m_mmHits, trackPatterns, outputTracks, outputID, outputMS); - return StatusCode::SUCCESS; + continue; } if (m_use_timer) m_timingTimers[ITIMER_STATION_FITTER]->pause(); stationFitterTimer.stop(); @@ -757,7 +757,7 @@ StatusCode MuFastSteering::findMuonSignature(const std::vector<const TrigRoiDesc m_rpcFitResult, m_tgcFitResult, m_mdtHits_normal, m_cscHits, m_stgcHits, m_mmHits, trackPatterns, outputTracks, outputID, outputMS); - return StatusCode::SUCCESS; + continue; } if (m_use_timer) m_timingTimers[ITIMER_TRACK_FITTER]->pause(); trackFitterTimer.stop(); @@ -790,7 +790,7 @@ StatusCode MuFastSteering::findMuonSignature(const std::vector<const TrigRoiDesc m_rpcFitResult, m_tgcFitResult, m_mdtHits_normal, m_cscHits, m_stgcHits, m_mmHits, trackPatterns, outputTracks, outputID, outputMS); - return StatusCode::SUCCESS; + continue; } if (m_use_timer) m_timingTimers[ITIMER_DATA_PREPARATOR]->pause(); prepTimer.stop(); @@ -813,7 +813,7 @@ StatusCode MuFastSteering::findMuonSignature(const std::vector<const TrigRoiDesc m_rpcFitResult, m_tgcFitResult, m_mdtHits_normal, m_cscHits, m_stgcHits, m_mmHits, trackPatterns, outputTracks, outputID, outputMS); - return StatusCode::SUCCESS; + continue; } if (m_use_timer) m_timingTimers[ITIMER_PATTERN_FINDER]->pause(); patternTimer.stop(); @@ -842,7 +842,7 @@ StatusCode MuFastSteering::findMuonSignature(const std::vector<const TrigRoiDesc m_rpcFitResult, m_tgcFitResult, m_mdtHits_normal, m_cscHits, m_stgcHits, m_mmHits, trackPatterns, outputTracks, outputID, outputMS); - return StatusCode::SUCCESS; + continue; } if (m_use_timer) m_timingTimers[ITIMER_STATION_FITTER]->pause(); @@ -863,7 +863,7 @@ StatusCode MuFastSteering::findMuonSignature(const std::vector<const TrigRoiDesc m_rpcFitResult, m_tgcFitResult, m_mdtHits_normal, m_cscHits, m_stgcHits, m_mmHits, trackPatterns, outputTracks, outputID, outputMS); - return StatusCode::SUCCESS; + continue; } if (m_use_timer) m_timingTimers[ITIMER_TRACK_FITTER]->pause(); trackFitterTimer.stop(); @@ -894,7 +894,7 @@ StatusCode MuFastSteering::findMuonSignature(const std::vector<const TrigRoiDesc m_rpcFitResult, m_tgcFitResult, m_mdtHits_normal, m_cscHits, m_stgcHits, m_mmHits, trackPatterns, outputTracks, outputID, outputMS); - return StatusCode::SUCCESS; + continue; } if (m_use_timer) m_timingTimers[ITIMER_TRACK_EXTRAPOLATOR]->pause(); trackExtraTimer.stop(); @@ -908,7 +908,7 @@ StatusCode MuFastSteering::findMuonSignature(const std::vector<const TrigRoiDesc m_rpcFitResult, m_tgcFitResult, m_mdtHits_normal, m_cscHits, m_stgcHits, m_mmHits, trackPatterns, outputTracks, outputID, outputMS); - return StatusCode::SUCCESS; + continue; } // Update output trigger element @@ -993,13 +993,11 @@ StatusCode MuFastSteering::findMuonSignatureIO(const xAOD::TrackParticleContaine const std::vector<const TrigRoiDescriptor*> roids, const std::vector<const LVL1::RecMuonRoI*> muonRoIs, DataVector<xAOD::L2CombinedMuon>& outputCBs, - DataVector<xAOD::L2StandAloneMuon>& outputSAs, - TrigRoiDescriptorCollection& outputID, - TrigRoiDescriptorCollection& outputMS - ) + DataVector<xAOD::L2StandAloneMuon>& outputSAs) { ATH_MSG_DEBUG("StatusCode MuFastSteering::findMuonSignatureIO start"); StatusCode sc = StatusCode::SUCCESS; + const float ZERO_LIMIT = 1.e-5; auto prepTimer = Monitored::Timer( "TIME_Data_Preparator" ); auto patternTimer = Monitored::Timer( "TIME_Pattern_Finder" ); @@ -1028,6 +1026,8 @@ StatusCode MuFastSteering::findMuonSignatureIO(const xAOD::TrackParticleContaine // muonRoIs = RecMURoIs, roids = MURoIs p_roids = roids.begin(); for (p_roi=(muonRoIs).begin(); p_roi!=(muonRoIs).end(); ++p_roi) { + sc = StatusCode::SUCCESS; + //p_roi = (muonRoIs.begin()); ATH_MSG_DEBUG("roi eta/phi: " << (*p_roi)->eta() << "/" << (*p_roi)->phi()); @@ -1040,6 +1040,11 @@ StatusCode MuFastSteering::findMuonSignatureIO(const xAOD::TrackParticleContaine ATH_MSG_DEBUG("IO TEST: FTF track key:" << m_FTFtrackKey.key() << " pt = " << idtrack->pt()/1000 << " GeV"); ATH_MSG_DEBUG("IO TEST: FTF track key:" << m_FTFtrackKey.key() << " eta/phi = " << idtrack->eta() << "/" << idtrack->phi()); + if(idtrack->pt() < m_ftfminPt) { + ATH_MSG_DEBUG("IO TEST: skip FTF track due to pT threshold: " << m_ftfminPt << " MeV"); + continue; + } + prepTimer.start(); m_mdtHits_normal.clear(); m_mdtHits_overlap.clear(); @@ -1048,15 +1053,16 @@ StatusCode MuFastSteering::findMuonSignatureIO(const xAOD::TrackParticleContaine m_mmHits.clear(); m_rpcFitResult.Clear(); m_tgcFitResult.Clear(); + m_rpcHits.clear(); + m_tgcHits.clear(); m_muonRoad.Clear(); + bool hasSP = false; sc = m_ftfRoadDefiner->defineRoad(idtrack, m_muonRoad); if (!sc.isSuccess()) { ATH_MSG_WARNING("FtfRoadDefiner failed"); - TrigL2MuonSA::TrackPattern trackPattern; - trackPatterns.push_back(trackPattern); - return StatusCode::SUCCESS; + continue; } else { ATH_MSG_DEBUG("FtfRoadDefiner::defineRoad success"); } @@ -1077,8 +1083,6 @@ StatusCode MuFastSteering::findMuonSignatureIO(const xAOD::TrackParticleContaine m_scaleRoadBarrelOuter); // Data preparation - m_rpcHits.clear(); - m_tgcHits.clear(); sc = m_dataPreparator->prepareData(*p_roi, *p_roids, m_insideOut, @@ -1090,32 +1094,13 @@ StatusCode MuFastSteering::findMuonSignatureIO(const xAOD::TrackParticleContaine m_mdtHits_overlap); if (!sc.isSuccess()) { ATH_MSG_WARNING("Data preparation failed"); - TrigL2MuonSA::TrackPattern trackPattern; - trackPatterns.push_back(trackPattern); - // Update output trigger element - updateOutputObjects(*p_roi, *p_roids, m_muonRoad, m_mdtRegion, m_rpcHits, m_tgcHits, - m_rpcFitResult, m_tgcFitResult, m_mdtHits_normal, m_cscHits, - m_stgcHits, m_mmHits, - trackPatterns, outputSAs, outputID, outputMS); - return StatusCode::SUCCESS; + continue; } else { ATH_MSG_DEBUG("Data preparation success"); } if (m_use_timer) m_timingTimers[ITIMER_DATA_PREPARATOR]->pause(); prepTimer.stop(); - // if ( m_rpcErrToDebugStream && m_dataPreparator->isRpcFakeRoi() ) { - // ATH_MSG_ERROR("Invalid RoI in RPC data found: event to debug stream"); - // TrigL2MuonSA::TrackPattern trackPattern; - // trackPatterns.push_back(trackPattern); - // // Update output trigger element - // updateOutputObjects(*p_roi, *p_roids, m_muonRoad, m_mdtRegion, m_rpcHits, m_tgcHits, - // m_rpcFitResult, m_tgcFitResult, m_mdtHits_normal, m_cscHits, - // m_stgcHits, m_mmHits, - // trackPatterns, outputSAs, outputID, outputMS); - // return StatusCode::FAILURE; - // } - // Pattern finding if (m_use_timer) m_timingTimers[ITIMER_PATTERN_FINDER]->resume(); patternTimer.start(); @@ -1124,12 +1109,7 @@ StatusCode MuFastSteering::findMuonSignatureIO(const xAOD::TrackParticleContaine trackPatterns); if (!sc.isSuccess()) { ATH_MSG_WARNING("Pattern finder failed"); - // Update output trigger element - updateOutputObjects(*p_roi, *p_roids, m_muonRoad, m_mdtRegion, m_rpcHits, m_tgcHits, - m_rpcFitResult, m_tgcFitResult, m_mdtHits_normal, m_cscHits, - m_stgcHits, m_mmHits, - trackPatterns, outputSAs, outputID, outputMS); - return StatusCode::SUCCESS; + continue; } if (m_use_timer) m_timingTimers[ITIMER_PATTERN_FINDER]->pause(); patternTimer.stop(); @@ -1143,16 +1123,18 @@ StatusCode MuFastSteering::findMuonSignatureIO(const xAOD::TrackParticleContaine trackPatterns); if (!sc.isSuccess()) { ATH_MSG_WARNING("Super point fitter failed"); - // Update output trigger element - updateOutputObjects(*p_roi, *p_roids, m_muonRoad, m_mdtRegion, m_rpcHits, m_tgcHits, - m_rpcFitResult, m_tgcFitResult, m_mdtHits_normal, m_cscHits, - m_stgcHits, m_mmHits, - trackPatterns, outputSAs, outputID, outputMS); - return StatusCode::SUCCESS; + continue; } if (m_use_timer) m_timingTimers[ITIMER_STATION_FITTER]->pause(); stationFitterTimer.stop(); + // Check if at least 1 SP + for (size_t i=0; i<std::extent<decltype(trackPatterns.back().superPoints), 0>::value; i++) { + if ( std::abs(trackPatterns.back().superPoints[i].R) > ZERO_LIMIT && std::abs(trackPatterns.back().superPoints[i].Z) > ZERO_LIMIT ) { // if R and Z exist + hasSP = true; + } + } + // Track fitting if (m_use_timer) m_timingTimers[ITIMER_TRACK_FITTER]->resume(); trackFitterTimer.start(); @@ -1161,12 +1143,24 @@ StatusCode MuFastSteering::findMuonSignatureIO(const xAOD::TrackParticleContaine trackPatterns); if (!sc.isSuccess()) { ATH_MSG_WARNING("Track fitter failed"); - // Update output trigger element - updateOutputObjects(*p_roi, *p_roids, m_muonRoad, m_mdtRegion, m_rpcHits, m_tgcHits, - m_rpcFitResult, m_tgcFitResult, m_mdtHits_normal, m_cscHits, - m_stgcHits, m_mmHits, - trackPatterns, outputSAs, outputID, outputMS); - return StatusCode::SUCCESS; + if(hasSP) { + storeMuonSA(*p_roi, *p_roids, m_muonRoad, m_mdtRegion, m_rpcHits, m_tgcHits, + m_rpcFitResult, m_tgcFitResult, m_mdtHits_normal, m_cscHits, + m_stgcHits, m_mmHits, + trackPatterns.back(), outputSAs); + float cbpt = (idtrack->charge() > 0) ? idtrack->pt() : -1.*idtrack->pt(); + xAOD::L2CombinedMuon* muonCB = new xAOD::L2CombinedMuon(); + muonCB->makePrivateStore(); + muonCB->setStrategy(-9); + muonCB->setErrorFlag(-9); + muonCB->setPt(cbpt); + muonCB->setEta(idtrack->eta()); + muonCB->setPhi(idtrack->phi()); + ElementLink<xAOD::L2StandAloneMuonContainer> muonSAEL(outputSAs, outputSAs.size()-1); + muonCB->setMuSATrackLink(muonSAEL); + outputCBs.push_back(muonCB); + } + continue; } if (m_use_timer) m_timingTimers[ITIMER_TRACK_FITTER]->pause(); trackFitterTimer.stop(); @@ -1177,8 +1171,6 @@ StatusCode MuFastSteering::findMuonSignatureIO(const xAOD::TrackParticleContaine prepTimer.start(); // Data preparation - m_rpcHits.clear(); - m_tgcHits.clear(); sc = m_dataPreparator->prepareData(*p_roi, *p_roids, m_insideOut, @@ -1193,14 +1185,7 @@ StatusCode MuFastSteering::findMuonSignatureIO(const xAOD::TrackParticleContaine m_mmHits); if (!sc.isSuccess()) { ATH_MSG_WARNING("Data preparation failed"); - TrigL2MuonSA::TrackPattern trackPattern; - trackPatterns.push_back(trackPattern); - // Update output trigger element - updateOutputObjects(*p_roi, *p_roids, m_muonRoad, m_mdtRegion, m_rpcHits, m_tgcHits, - m_rpcFitResult, m_tgcFitResult, m_mdtHits_normal, m_cscHits, - m_stgcHits, m_mmHits, - trackPatterns, outputSAs, outputID, outputMS); - return StatusCode::SUCCESS; + continue; } else{ ATH_MSG_DEBUG("Data preparation success"); } @@ -1217,12 +1202,7 @@ StatusCode MuFastSteering::findMuonSignatureIO(const xAOD::TrackParticleContaine trackPatterns); if (!sc.isSuccess()) { ATH_MSG_WARNING("Pattern finder failed"); - // Update output trigger element - updateOutputObjects(*p_roi, *p_roids, m_muonRoad, m_mdtRegion, m_rpcHits, m_tgcHits, - m_rpcFitResult, m_tgcFitResult, m_mdtHits_normal, m_cscHits, - m_stgcHits, m_mmHits, - trackPatterns, outputSAs, outputID, outputMS); - return StatusCode::SUCCESS; + continue; } if (m_use_timer) m_timingTimers[ITIMER_PATTERN_FINDER]->pause(); patternTimer.stop(); @@ -1238,16 +1218,18 @@ StatusCode MuFastSteering::findMuonSignatureIO(const xAOD::TrackParticleContaine m_cscsegmaker->FindSuperPointCsc(m_cscHits,trackPatterns,m_tgcFitResult,m_muonRoad); if (!sc.isSuccess()) { ATH_MSG_WARNING("Super point fitter failed"); - // Update output trigger element - updateOutputObjects(*p_roi, *p_roids, m_muonRoad, m_mdtRegion, m_rpcHits, m_tgcHits, - m_rpcFitResult, m_tgcFitResult, m_mdtHits_normal, m_cscHits, - m_stgcHits, m_mmHits, - trackPatterns, outputSAs, outputID, outputMS); - return StatusCode::SUCCESS; + continue; } if (m_use_timer) m_timingTimers[ITIMER_STATION_FITTER]->pause(); stationFitterTimer.stop(); + // Check if at least 1 SP + for (size_t i=0; i<std::extent<decltype(trackPatterns.back().superPoints), 0>::value; i++) { + if ( std::abs(trackPatterns.back().superPoints[i].R) > ZERO_LIMIT && std::abs(trackPatterns.back().superPoints[i].Z) > ZERO_LIMIT ) { // if R and Z exist + hasSP = true; + } + } + // Track fittingh if (m_use_timer) m_timingTimers[ITIMER_TRACK_FITTER]->resume(); trackFitterTimer.start(); @@ -1257,12 +1239,24 @@ StatusCode MuFastSteering::findMuonSignatureIO(const xAOD::TrackParticleContaine m_muonRoad); if (!sc.isSuccess()) { ATH_MSG_WARNING("Track fitter failed"); - // Update output trigger element - updateOutputObjects(*p_roi, *p_roids, m_muonRoad, m_mdtRegion, m_rpcHits, m_tgcHits, - m_rpcFitResult, m_tgcFitResult, m_mdtHits_normal, m_cscHits, - m_stgcHits, m_mmHits, - trackPatterns, outputSAs, outputID, outputMS); - return StatusCode::SUCCESS; + if(hasSP) { + storeMuonSA(*p_roi, *p_roids, m_muonRoad, m_mdtRegion, m_rpcHits, m_tgcHits, + m_rpcFitResult, m_tgcFitResult, m_mdtHits_normal, m_cscHits, + m_stgcHits, m_mmHits, + trackPatterns.back(), outputSAs); + float cbpt = (idtrack->charge() > 0) ? idtrack->pt() : -1.*idtrack->pt(); + xAOD::L2CombinedMuon* muonCB = new xAOD::L2CombinedMuon(); + muonCB->makePrivateStore(); + muonCB->setStrategy(-9); + muonCB->setErrorFlag(-9); + muonCB->setPt(cbpt); + muonCB->setEta(idtrack->eta()); + muonCB->setPhi(idtrack->phi()); + ElementLink<xAOD::L2StandAloneMuonContainer> muonSAEL(outputSAs, outputSAs.size()-1); + muonCB->setMuSATrackLink(muonSAEL); + outputCBs.push_back(muonCB); + } + continue; } if (m_use_timer) m_timingTimers[ITIMER_TRACK_FITTER]->pause(); trackFitterTimer.stop(); @@ -1275,73 +1269,75 @@ StatusCode MuFastSteering::findMuonSignatureIO(const xAOD::TrackParticleContaine const float ETA_LIMIT = 2.8; const float DELTA_ETA_LIMIT = 1.0; float roiEta = (*p_roi)->eta(); - const float ZERO_LIMIT = 1.e-5; if (fabs(track.pt) > ZERO_LIMIT && ( fabs(track.etaMap) > ETA_LIMIT || fabs(track.etaMap-roiEta) > DELTA_ETA_LIMIT ) ) { trackPatterns[i].etaMap = roiEta; } } - // // Track extrapolation for ID combined - // if (m_use_timer) m_timingTimers[ITIMER_TRACK_EXTRAPOLATOR]->resume(); - // trackExtraTimer.start(); - // sc = m_trackExtrapolator->extrapolateTrack(trackPatterns, m_winPt); - // if (sc != StatusCode::SUCCESS) { - // ATH_MSG_WARNING("Track extrapolator failed"); - // // Update output trigger element - // updateOutputObjects(*p_roi, *p_roids, m_muonRoad, m_mdtRegion, m_rpcHits, m_tgcHits, - // m_rpcFitResult, m_tgcFitResult, m_mdtHits_normal, m_cscHits, - // m_stgcHits, m_mmHits, - // trackPatterns, outputSAs, outputID, outputMS); - // return StatusCode::SUCCESS; - // } - // if (m_use_timer) m_timingTimers[ITIMER_TRACK_EXTRAPOLATOR]->pause(); - // trackExtraTimer.stop(); - // Update monitoring variables sc = updateMonitor(*p_roi, m_mdtHits_normal, trackPatterns ); if (sc != StatusCode::SUCCESS) { ATH_MSG_WARNING("Failed to update monitoring variables"); - // Update output trigger element - updateOutputObjects(*p_roi, *p_roids, m_muonRoad, m_mdtRegion, m_rpcHits, m_tgcHits, - m_rpcFitResult, m_tgcFitResult, m_mdtHits_normal, m_cscHits, - m_stgcHits, m_mmHits, - trackPatterns, outputSAs, outputID, outputMS); - return StatusCode::SUCCESS; } // Update output trigger element - updateOutputObjects(*p_roi, *p_roids, m_muonRoad, m_mdtRegion, m_rpcHits, m_tgcHits, - m_rpcFitResult, m_tgcFitResult, m_mdtHits_normal, m_cscHits, - m_stgcHits, m_mmHits, - trackPatterns, outputSAs, outputID, outputMS); - + if(hasSP) { + storeMuonSA(*p_roi, *p_roids, m_muonRoad, m_mdtRegion, m_rpcHits, m_tgcHits, + m_rpcFitResult, m_tgcFitResult, m_mdtHits_normal, m_cscHits, + m_stgcHits, m_mmHits, + trackPatterns.back(), outputSAs); + float cbpt = (idtrack->charge() > 0) ? idtrack->pt() : -1.*idtrack->pt(); + xAOD::L2CombinedMuon* muonCB = new xAOD::L2CombinedMuon(); + muonCB->makePrivateStore(); + muonCB->setStrategy(-9); + muonCB->setErrorFlag(-9); + muonCB->setPt(cbpt); + muonCB->setEta(idtrack->eta()); + muonCB->setPhi(idtrack->phi()); + ElementLink<xAOD::L2StandAloneMuonContainer> muonSAEL(outputSAs, outputSAs.size()-1); + muonCB->setMuSATrackLink(muonSAEL); + outputCBs.push_back(muonCB); + } } - ATH_MSG_DEBUG("trackPatterns->size(): " << trackPatterns.size()); - for (unsigned int i = 0; i< trackPatterns.size(); i++){ - TrigL2MuonSA::TrackPattern trackPattern = trackPatterns[i]; - ATH_MSG_DEBUG("trackPattern pt/eta/phi: " << trackPattern.pt << "/" << trackPattern.etaVtx << "/" << trackPattern.phiVtx); + if(outputSAs.size()==0) { + ATH_MSG_DEBUG("outputSAs size = 0 -> push_back dummy"); + m_muonRoad.Clear(); + TrigL2MuonSA::MdtRegion mdtRegion; + m_rpcHits.clear(); + m_tgcHits.clear(); + m_rpcFitResult.Clear(); + m_tgcFitResult.Clear(); + m_mdtHits_normal.clear(); + m_cscHits.clear(); + m_stgcHits.clear(); + m_mmHits.clear(); + trackPatterns.clear(); + TrigL2MuonSA::TrackPattern trackPattern; + storeMuonSA(*p_roi, *p_roids, m_muonRoad, mdtRegion, m_rpcHits, m_tgcHits, + m_rpcFitResult, m_tgcFitResult, m_mdtHits_normal, m_cscHits, + m_stgcHits, m_mmHits, + trackPattern, outputSAs); + xAOD::L2CombinedMuon* muonCB = new xAOD::L2CombinedMuon(); + muonCB->makePrivateStore(); + muonCB->setStrategy(-9); + muonCB->setErrorFlag(-9); + muonCB->setPt(0); + muonCB->setEta(0); + muonCB->setPhi(0); + ElementLink<xAOD::L2StandAloneMuonContainer> muonSAEL(outputSAs, outputSAs.size()-1); + muonCB->setMuSATrackLink(muonSAEL); + outputCBs.push_back(muonCB); } + ATH_MSG_DEBUG("outputSAs size: " << outputSAs.size()); ATH_MSG_DEBUG("idtracks size: " << idtracks.size()); for (unsigned int i = 0; i< outputSAs.size(); i++){ xAOD::L2StandAloneMuon* outputSA = outputSAs[i]; ATH_MSG_DEBUG("outputSA pt/eta/phi: " << outputSA->pt() << "/" << outputSA->eta() << "/" << outputSA->phi()); - ATH_MSG_DEBUG("idtrack pt/eta/phi: " << (idtracks[i]->pt())/1000. << "/" << idtracks[i]->eta() << "/" << idtracks[i]->phi()); - xAOD::L2CombinedMuon* muonCB = new xAOD::L2CombinedMuon(); - muonCB->makePrivateStore(); - muonCB->setStrategy(-9); - muonCB->setErrorFlag(-9); - muonCB->setPt((idtracks[i]->pt())/1000.); - muonCB->setEta(idtracks[i]->eta()); - muonCB->setPhi(idtracks[i]->phi()); - ElementLink<xAOD::L2StandAloneMuonContainer> muonSAEL(outputSAs, i); - muonCB->setMuSATrackLink(muonSAEL); - - outputCBs.push_back(muonCB); } ATH_MSG_DEBUG("outputCBs size: " << outputCBs.size()); @@ -1387,7 +1383,7 @@ bool MuFastSteering::updateOutputObjects(const LVL1::RecMuonRoI* if( trackPatterns.size() > 0 ) { - const TrigL2MuonSA::TrackPattern& pattern = trackPatterns[0]; + const TrigL2MuonSA::TrackPattern& pattern = trackPatterns.back(); // Update output trigger element storeMuonSA(roi, roids, muonRoad, mdtRegion, rpcHits, tgcHits, diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastSteering.h b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastSteering.h index e61add892ec8fd8de12b0183e49fa950bbd94705..d18c6c34ba9319a9b7769f7843d8eeeed05937f4 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastSteering.h +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastSteering.h @@ -91,9 +91,7 @@ class MuFastSteering : public HLT::FexAlgo, const std::vector<const TrigRoiDescriptor*> roids, const std::vector<const LVL1::RecMuonRoI*> muonRoIs, DataVector<xAOD::L2CombinedMuon>& outputCBs, - DataVector<xAOD::L2StandAloneMuon>& outputSAs, - TrigRoiDescriptorCollection& outputID, - TrigRoiDescriptorCollection& outputMS ); + DataVector<xAOD::L2StandAloneMuon>& outputSAs ); int L2MuonAlgoMap(const std::string& name); @@ -245,6 +243,7 @@ class MuFastSteering : public HLT::FexAlgo, Gaudi::Property< double > m_winPt { this, "WinPt", 4.0 }; Gaudi::Property< bool > m_insideOut { this, "InsideOutMode", false, "" }; + Gaudi::Property< float > m_ftfminPt { this, "FTFminPt", 3500, "pT [MeV] threshold to FTF tracks for L2Muon Inside-out mode" }; Gaudi::Property< bool > m_topoRoad { this, "topoRoad", false, "create road in barrel not to highly overlap surrounding L1 RoIs" }; Gaudi::Property< float > m_dPhisurrRoI { this, "dPhisurrRoI", 99, "phi range to find surrounding L1 RoIs" }; Gaudi::Property< float > m_dEtasurrRoI { this, "dEtasurrRoI", 99, "eta range to find surrounding L1 RoIs" }; diff --git a/Trigger/TrigHypothesis/TrigMuonHypoMT/python/TrigMuonHypoMTConfig.py b/Trigger/TrigHypothesis/TrigMuonHypoMT/python/TrigMuonHypoMTConfig.py index b9b828cecc8e399fcda815ea6f84cc13d2aa9a3f..7799576285c8f14cd7a19a99b816685fba7aef81 100755 --- a/Trigger/TrigHypothesis/TrigMuonHypoMT/python/TrigMuonHypoMTConfig.py +++ b/Trigger/TrigHypothesis/TrigMuonHypoMT/python/TrigMuonHypoMTConfig.py @@ -402,6 +402,36 @@ def TrigmuCombHypoToolwORFromDict( chainDict ): return tool + +def Trigl2IOHypoToolwORFromDict( chainDict ): + + thresholds = getThresholdsFromDict( chainDict ) + + config = TrigmuCombHypoConfig() + + tight = False # can be probably decoded from some of the proprties of the chain, expert work + + acceptAll = False + + tool=config.ConfigurationHypoTool( chainDict['chainName'], thresholds, tight, acceptAll ) + + # Overlap Removal + tool.ApplyOR = True + tool.RequireDR = True + tool.RequireMufastDR = False + tool.RequireMass = True + tool.RequireSameSign = True + tool.EtaBins = [0, 0.9, 1.1, 1.9, 2.1, 9.9] + tool.DRThres = [0.002, 0.001, 0.002, 0.002, 0.002] + tool.MufastDRThres = [0] + tool.MassThres = [0.004, 0.002, 0.006, 0.006, 0.006] + + # addMonitoring( tool, TrigL2MuonOverlapRemoverMonitoringMucomb, "TrigmuCombHypoTool", chainDict['chainName'] ) + + return tool + + + class TrigmuCombHypoConfig(object): log = logging.getLogger('TrigmuCombHypoConfig') diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSequenceSetup.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSequenceSetup.py index d7c9336515dcb78c59925b448fc47867b973bc98..b2def1d49154c3016ed6f6115f5ec0e83a933b0e 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSequenceSetup.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSequenceSetup.py @@ -219,18 +219,13 @@ def mul2IOOvlpRmSequence(): trigmuCombHypo = TrigmuCombHypoAlg("TrigL2MuCBIOHypoAlg") trigmuCombHypo.MuonL2CBInfoFromMuCombAlg = muNames.L2CBName+"IOmode" - ### set up L2muOverlapRemoval ### - # from TrigMuonHypoMT.TrigMuonHypoMTConfig import TrigL2MuonOverlapRemoverMucombAlg - # trigL2MuonOverlapRemover = TrigL2MuonOverlapRemoverMucombAlg("TrigL2MuonIOOverlapRemoverMucombAlg") - # trigL2MuonOverlapRemover.L2MuonOverlapInfoFromMuCombAlg = muNames.L2CBName+"IOmode" - # from TrigMuonHypoMT.TrigMuonHypoMTConfig import TrigL2MuonOverlapRemoverMucombToolFromDict - from TrigMuonHypoMT.TrigMuonHypoMTConfig import TrigmuCombHypoToolwORFromDict + from TrigMuonHypoMT.TrigMuonHypoMTConfig import Trigl2IOHypoToolwORFromDict return MenuSequence( Sequence = l2muCombSequence, Maker = l2muCombViewsMaker, Hypo = trigmuCombHypo, - HypoToolGen = TrigmuCombHypoToolwORFromDict ) + HypoToolGen = Trigl2IOHypoToolwORFromDict )