17#include "GaudiKernel/IIncidentSvc.h"
118 if (
m_jobOptionsSvc->has(
"MuonHltCalibrationConfig.MuonCalBufferName")) {
123 ATH_MSG_DEBUG(
"Could not parse MuonHltCalibrationConfig.MuonCalBufferName from JobOptionsSvc");
125 if (
m_jobOptionsSvc->has(
"MuonHltCalibrationConfig.MuonCalBufferSize")) {
131 ATH_MSG_DEBUG(
"Could not parse MuonHltCalibrationConfig.MuonCalBufferSize from JobOptionsSvc");
146 return StatusCode::SUCCESS;
155 if (
sc != StatusCode::SUCCESS ) {
162 return StatusCode::SUCCESS;
179 ATH_MSG_DEBUG(
"=================================================");
182 std::string worker_name=std::to_string(updinc.
workerID());
203 for (
auto recRoI: collection ) {
204 if ( recRoI->roiWord() == roiWord ){
217 for (
auto recRoI: collection ) {
218 if ( recRoI->roiWord() == roiWord ){
231 ATH_MSG_ERROR(
"You are not supposed to run trigger on RUN2 layout anymore.");
232 return StatusCode::FAILURE;
241 if (!roiCollectionHandle.isValid()){
243 return StatusCode::FAILURE;
248 if (!recRoiCollectionHandle.isValid()){
250 return StatusCode::FAILURE;
253 std::vector< const TrigRoiDescriptor* > internalRoI;
257 for(; p_roids != p_roidsEn; ++p_roids ) {
258 internalRoI.push_back(*p_roids);
259 ATH_MSG_DEBUG(
"REGTEST: " <<
m_roiCollectionKey.key() <<
" eta = " <<
"(" << (*p_roids)->etaMinus() <<
")" << (*p_roids)->eta() <<
"(" << (*p_roids)->etaPlus() <<
")");
260 ATH_MSG_DEBUG(
"REGTEST: " <<
m_roiCollectionKey.key() <<
" phi = " <<
"(" << (*p_roids)->phiMinus() <<
")" << (*p_roids)->phi() <<
"(" << (*p_roids)->phiPlus() <<
")");
261 ATH_MSG_DEBUG(
"REGTEST: " <<
m_roiCollectionKey.key() <<
" zed = " <<
"(" << (*p_roids)->zedMinus() <<
")" << (*p_roids)->zed() <<
"(" << (*p_roids)->zedPlus() <<
")");
266 std::vector< const xAOD::MuonRoI* > recRoIVector;
267 std::vector< const xAOD::MuonRoI* > surrRoIs;
269 for (
size_t size=0; size<roiCollection->
size(); size++){
271 if( recRoI ==
nullptr )
continue;
272 recRoIVector.push_back(recRoI);
277 bool dynamicDeltaRpc =
false;
278 int nPassedBarrelSurrRoi = 0;
280 for(
const auto recRoI: *recRoiCollection ){
281 if(std::find(recRoIVector.begin(), recRoIVector.end(), recRoI) != recRoIVector.end())
continue;
283 bool surrounding =
false;
284 for(
const auto matchedRoI: recRoIVector ){
285 float deta = std::abs(recRoI->eta() - matchedRoI->eta());
286 float dphi = std::abs(recRoI->phi() - matchedRoI->phi());
287 if( dphi >
M_PI )dphi = 2.*
M_PI - dphi;
293 surrRoIs.push_back(recRoI);
297 for(
const auto recRoI: surrRoIs ){
299 if( std::abs((recRoI)->
eta()) <= 1.05 && (recRoI)->getThrNumber() >= 1 )nPassedBarrelSurrRoi++;
301 ATH_MSG_DEBUG(
"nPassedBarrelSurrRoi = " << nPassedBarrelSurrRoi);
303 if( nPassedBarrelSurrRoi >= 1 )
304 dynamicDeltaRpc =
true;
309 ATH_CHECK(muFastContainer.record(std::make_unique<xAOD::L2StandAloneMuonContainer>(), std::make_unique<xAOD::L2StandAloneMuonAuxContainer>()));
314 ATH_CHECK(wh_muCompositeCont.
record(std::make_unique<xAOD::TrigCompositeContainer>(), std::make_unique<xAOD::TrigCompositeAuxContainer>()));
315 muCompositeContainer = wh_muCompositeCont.
ptr();
319 ATH_CHECK(muIdContainer.record(std::make_unique<TrigRoiDescriptorCollection>()));
322 ATH_CHECK(muMsContainer.record(std::make_unique<TrigRoiDescriptorCollection>()));
330 ATH_CHECK( muonCBColl.record (std::make_unique<xAOD::L2CombinedMuonContainer>(),
331 std::make_unique<xAOD::L2CombinedMuonAuxContainer>()) );
334 if (!trackHandle.isValid()){
336 return StatusCode::FAILURE;
341 *muonCBColl, *muFastContainer, dynamicDeltaRpc, ctx ));
345 for (
const auto p_CBmuon : *muonCBColl){
357 *muFastContainer, muCompositeContainer, *muIdContainer, *muMsContainer, dynamicDeltaRpc, ctx));
365 for (
auto p_muon : *muFastContainer) {
371 for (
auto p_muonID : *muIdContainer) {
372 ATH_MSG_DEBUG(
"REGTEST: TrigRoiDescriptorCollection key:" <<
m_muIdContainerKey.key() <<
" eta/phi = " << (*p_muonID).eta() <<
"/" << (*p_muonID).phi());
376 for (
auto p_muonMS : *muMsContainer) {
377 ATH_MSG_DEBUG(
"REGTEST: TrigRoiDescriptorCollection key:" <<
m_muMsContainerKey.key() <<
" eta/phi = " << (*p_muonMS).eta() <<
"/" << (*p_muonMS).phi());
381 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::execute() success");
382 return StatusCode::SUCCESS;
389 const std::vector<const xAOD::MuonRoI*>& muonRoIs,
394 const bool dynamicDeltaRpc,
395 const EventContext& ctx)
const
397 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMuonSignature start");
398 StatusCode
sc = StatusCode::SUCCESS;
408 trackFitterTimer, trackExtraTimer, calibrationTimer );
425 p_roids = roids.begin();
426 for (p_roi=(muonRoIs).begin(); p_roi!=(muonRoIs).end(); ++p_roi) {
429 std::vector<TrigL2MuonSA::TrackPattern> trackPatterns;
434 rpcFitResult.
Clear();
435 tgcFitResult.
Clear();
459 if (!
sc.isSuccess()) {
462 trackPatterns.push_back(std::move(trackPattern));
465 rpcFitResult, tgcFitResult, mdtHits, cscHits,
467 trackPatterns, outputTracks, outputID, outputMS, ctx);
473 patternTimer.start();
478 if (!
sc.isSuccess()) {
482 rpcFitResult, tgcFitResult, mdtHits, cscHits,
484 trackPatterns, outputTracks, outputID, outputMS, ctx);
490 stationFitterTimer.start();
494 if (!
sc.isSuccess()) {
498 rpcFitResult, tgcFitResult, mdtHits, cscHits,
500 trackPatterns, outputTracks, outputID, outputMS, ctx);
503 stationFitterTimer.stop();
506 trackFitterTimer.start();
511 if (!
sc.isSuccess()) {
515 rpcFitResult, tgcFitResult, mdtHits, cscHits,
517 trackPatterns, outputTracks, outputID, outputMS, ctx);
520 trackFitterTimer.stop();
540 if (!
sc.isSuccess()) {
543 trackPatterns.push_back(trackPattern);
546 rpcFitResult, tgcFitResult, mdtHits, cscHits,
548 trackPatterns, outputTracks, outputID, outputMS, ctx);
554 patternTimer.start();
562 if (!
sc.isSuccess()) {
566 rpcFitResult, tgcFitResult, mdtHits, cscHits,
568 trackPatterns, outputTracks, outputID, outputMS, ctx);
574 stationFitterTimer.start();
592 m_cscsegmaker->FindSuperPointCsc(cscHits,trackPatterns,tgcFitResult,muonRoad);
594 if (!
sc.isSuccess()) {
598 rpcFitResult, tgcFitResult, mdtHits, cscHits,
600 trackPatterns, outputTracks, outputID, outputMS, ctx);
604 stationFitterTimer.stop();
607 trackFitterTimer.start();
613 if (!
sc.isSuccess()) {
617 rpcFitResult, tgcFitResult, mdtHits, cscHits,
619 trackPatterns, outputTracks, outputID, outputMS, ctx);
622 trackFitterTimer.stop();
626 const float ETA_LIMIT = 2.8;
627 const float DELTA_ETA_LIMIT = 1.0;
630 float roiEta = (*p_roi)->eta();
632 ( std::abs(track.etaMap) > ETA_LIMIT || std::abs(track.etaMap-roiEta) > DELTA_ETA_LIMIT ) ) {
633 track.etaMap = roiEta;
638 trackExtraTimer.start();
642 if (
sc != StatusCode::SUCCESS) {
646 rpcFitResult, tgcFitResult, mdtHits, cscHits,
648 trackPatterns, outputTracks, outputID, outputMS, ctx);
651 trackExtraTimer.stop();
655 if (
sc != StatusCode::SUCCESS) {
659 rpcFitResult, tgcFitResult, mdtHits, cscHits,
661 trackPatterns, outputTracks, outputID, outputMS, ctx);
667 rpcFitResult, tgcFitResult, mdtHits, cscHits,
669 trackPatterns, outputTracks, outputID, outputMS, ctx);
677 std::vector<uint32_t> localBuffer;
684 if (
sc != StatusCode::SUCCESS ) {
690 ATH_MSG_DEBUG(
"Retrieved the buffer, with size: " << localBuffer.size());
697 ATH_MSG_DEBUG(
"The size of the TrigCompositeContainer is: " << outputMuonCal->
size() );
700 return StatusCode::FAILURE;
705 tc->setDetail(
"muCalibDS", localBuffer );
710 if (p_roids==roids.end())
break;
713 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMuonSignature success");
714 return StatusCode::SUCCESS;
723 const std::vector<const TrigRoiDescriptor*>& roids,
724 const std::vector<const xAOD::MuonRoI*>& muonRoIs,
727 const bool dynamicDeltaRpc,
728 const EventContext& ctx)
const
730 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMuonSignatureIO start");
731 StatusCode
sc = StatusCode::SUCCESS;
742 trackFitterTimer, trackExtraTimer, calibrationTimer );
757 p_roids = roids.begin();
758 for (
const auto p_roi : muonRoIs) {
759 ATH_MSG_DEBUG(
"roi eta/phi: " << (*p_roi).eta() <<
"/" << (*p_roi).phi());
762 if ( (idtracks).
empty() )
ATH_MSG_DEBUG(
"IO TEST: xAOD::TrackParticleContainer has 0 tracks --> Can not use FTF tracks...");
763 else ATH_MSG_DEBUG(
"IO TEST: xAOD::TrackParticleContainer has " << (idtracks).size() <<
" tracks --> Start inside-out mode!");
765 std::vector<TrigL2MuonSA::TrackPattern> trackPatterns;
766 int idtrack_idx = -1;
767 for (
auto idtrack : idtracks) {
783 rpcFitResult.
Clear();
784 tgcFitResult.
Clear();
789 trackPatterns.clear();
792 if (!
sc.isSuccess()) {
799 if ( std::abs(idtrack->eta()) < 1.05 ){
800 ATH_MSG_DEBUG(
"FTF track at IP is in Barrel: " << idtrack->eta());
802 ATH_MSG_DEBUG(
"FTF track at IP is in Endcap: " << idtrack->eta());
825 if (!
sc.isSuccess()) {
834 patternTimer.start();
839 if (!
sc.isSuccess()) {
846 stationFitterTimer.start();
850 if (!
sc.isSuccess()) {
854 stationFitterTimer.stop();
857 trackFitterTimer.start();
861 if (!
sc.isSuccess()) {
865 trackFitterTimer.stop();
885 if (!
sc.isSuccess()) {
894 patternTimer.start();
901 if (!
sc.isSuccess()) {
908 stationFitterTimer.start();
916 m_cscsegmaker->FindSuperPointCsc(cscHits,trackPatterns,tgcFitResult,muonRoad);
917 if (!
sc.isSuccess()) {
921 stationFitterTimer.stop();
924 trackFitterTimer.start();
929 if (!
sc.isSuccess()) {
933 trackFitterTimer.stop();
939 const float ETA_LIMIT = 2.8;
940 const float DELTA_ETA_LIMIT = 1.0;
941 float roiEta = (*p_roi).eta();
943 && ( std::abs(track.etaMap) > ETA_LIMIT || std::abs(track.etaMap-roiEta) > DELTA_ETA_LIMIT ) ) {
944 trackPatterns.back().etaMap = roiEta;
949 if (
sc != StatusCode::SUCCESS) {
954 if ( std::abs(trackPatterns.back().pt) >
ZERO_LIMIT ) {
955 storeMuonSA(p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
956 rpcFitResult, tgcFitResult, mdtHits, cscHits,
958 trackPatterns.back(), outputSAs, ctx);
963 muonCB->
setPt(idtrack->pt());
964 muonCB->
setEta(idtrack->eta());
965 muonCB->
setPhi(idtrack->phi());
976 if(outputSAs.
size()==0) {
982 rpcFitResult.
Clear();
983 tgcFitResult.
Clear();
988 trackPatterns.clear();
990 storeMuonSA(p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
991 rpcFitResult, tgcFitResult, mdtHits, cscHits,
993 trackPattern, outputSAs, ctx);
1009 for (
auto outputSA : outputSAs){
1010 ATH_MSG_DEBUG(
"outputSA pt/eta/phi: " << outputSA->pt() <<
"/" << outputSA->etaMS() <<
"/" << outputSA->phiMS());
1014 for (
auto outputCB : outputCBs){
1015 ATH_MSG_DEBUG(
"outputCB pt/eta/phi: " << outputCB->pt() <<
"/" << outputCB->eta() <<
"/" << outputCB->phi());
1019 if (p_roids==roids.end())
break;
1022 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMuonSignatureIO success");
1023 return StatusCode::SUCCESS;
1031 const std::vector<const xAOD::MuonRoI*>& muonRoIs,
1033 const bool dynamicDeltaRpc,
1034 const EventContext& ctx)
const
1036 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMultiTrackSignature start");
1037 StatusCode
sc = StatusCode::SUCCESS;
1041 std::vector<TrigL2MuonSA::RpcFitResult> clusterFitResults;
1042 std::vector< TrigL2MuonSA::MuonRoad > clusterRoad;
1043 std::vector<TrigL2MuonSA::MdtHits> mdtHits_cluster_normal;
1054 trackFitterTimer, trackExtraTimer, calibrationTimer );
1071 p_roids = roids.begin();
1072 for (p_roi=(muonRoIs).begin(); p_roi!=(muonRoIs).end(); ++p_roi) {
1075 std::vector<TrigL2MuonSA::TrackPattern> trackPatterns;
1080 rpcFitResult.
Clear();
1081 tgcFitResult.
Clear();
1087 clusterFitResults.clear();
1088 clusterRoad.clear();
1089 mdtHits_cluster_normal.clear();
1105 mdtHits_cluster_normal,
1108 if (!
sc.isSuccess()) {
1116 for(
unsigned int i_road = 0; i_road < clusterRoad.size(); i_road++){
1118 std::vector<TrigL2MuonSA::TrackPattern> tmp_trkPats; tmp_trkPats.clear();
1120 patternTimer.start();
1122 clusterRoad.at(i_road),
1123 mdtHits_cluster_normal.at(i_road),
1125 if (!
sc.isSuccess()) {
1129 patternTimer.stop();
1132 stationFitterTimer.start();
1134 clusterFitResults.at(i_road),
1136 if (!
sc.isSuccess()) {
1141 stationFitterTimer.stop();
1144 trackFitterTimer.start();
1146 clusterFitResults.at(i_road),
1149 if (!
sc.isSuccess()) {
1153 trackFitterTimer.stop();
1156 const float ETA_LIMIT = 2.8;
1157 const float DELTA_ETA_LIMIT = 1.0;
1159 float roiEta = (*p_roi)->eta();
1161 && ( std::abs(track.etaMap) > ETA_LIMIT || std::abs(track.etaMap-roiEta) > DELTA_ETA_LIMIT ) ) {
1162 track.etaMap = roiEta;
1167 trackExtraTimer.start();
1172 if (
sc != StatusCode::SUCCESS) {
1177 trackExtraTimer.stop();
1179 if(tmp_trkPats.size() > 0){
1180 ATH_MSG_DEBUG(
"temp pT calculated 2mu-in-1RoI alg = " << tmp_trkPats[0].pt <<
" GeV");
1181 if( (std::abs(tmp_trkPats[0].barrelSagitta) <
ZERO_LIMIT &&
1182 std::abs(tmp_trkPats[0].barrelRadius) <
ZERO_LIMIT) ||
1185 trackPatterns.push_back(tmp_trkPats[0]);
1188 storeMuonSA(*p_roi, *p_roids, clusterRoad.at(i_road), mdtRegion, rpcHits, tgcHits,
1189 clusterFitResults.at(i_road), tgcFitResult, mdtHits_cluster_normal.at(i_road), cscHits,
1190 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1193 if(trackPatterns.empty()){
1194 ATH_MSG_DEBUG(
"multi-track SA falied to reconstruct muons");
1196 trackPatterns.push_back(trackPattern);
1197 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1198 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1199 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1206 ATH_MSG_DEBUG(
"multi-track SA does nothings and skips for EndcapRoI");
1222 if (!
sc.isSuccess()) {
1225 trackPatterns.push_back(trackPattern);
1227 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1228 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1229 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1235 patternTimer.start();
1245 if (!
sc.isSuccess()) {
1248 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1249 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1250 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1253 patternTimer.stop();
1256 stationFitterTimer.start();
1273 m_cscsegmaker->FindSuperPointCsc(cscHits,trackPatterns,tgcFitResult,muonRoad);
1275 if (!
sc.isSuccess()) {
1277 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1278 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1279 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1283 stationFitterTimer.stop();
1286 trackFitterTimer.start();
1292 if (!
sc.isSuccess()) {
1294 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1295 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1296 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1299 trackFitterTimer.stop();
1302 const float ETA_LIMIT = 2.8;
1303 const float DELTA_ETA_LIMIT = 1.0;
1305 float roiEta = (*p_roi)->eta();
1307 && ( std::abs(track.etaMap) > ETA_LIMIT || std::abs(track.etaMap-roiEta) > DELTA_ETA_LIMIT ) ) {
1308 track.etaMap = roiEta;
1313 trackExtraTimer.start();
1317 if (
sc != StatusCode::SUCCESS) {
1319 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1320 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1321 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1324 trackExtraTimer.stop();
1326 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1327 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1328 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1333 if (
sc != StatusCode::SUCCESS) {
1338 if (p_roids==roids.end())
break;
1341 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMultiTrackSignature success");
1342 return StatusCode::SUCCESS;
1360 const std::vector<TrigL2MuonSA::TrackPattern>& trackPatterns,
1364 const EventContext& ctx)
const
1367 if( trackPatterns.size() > 0 ) {
1372 storeMuonSA(roi, roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1373 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1375 pattern, outputTracks, ctx);
1380 ATH_MSG_DEBUG(
"Not update output objects because trackPatterns has no object");
1400 const EventContext& ctx )
const
1404 const int currentRoIId = roids->
roiId();
1406 const EventIDBase& eventID = ctx.eventID();
1408 if (!eventInfo.isValid()) {
1418 int barrelinner = 0;
1419 int endcapinner = 3;
1425 if (pattern.s_address==-1) {
1440 ATH_MSG_DEBUG(
"### Hit patterns at the Muon Spectrometer ###");
1441 ATH_MSG_DEBUG(
"pattern#0: # of hits at inner =" << pattern.mdtSegments[inner].size());
1442 ATH_MSG_DEBUG(
"pattern#0: # of hits at middle =" << pattern.mdtSegments[middle].size());
1443 ATH_MSG_DEBUG(
"pattern#0: # of hits at outer =" << pattern.mdtSegments[outer].size());
1444 if (pattern.s_address==-1){
1445 ATH_MSG_DEBUG(
"pattern#0: # of hits at ee =" << pattern.mdtSegments[ee].size());
1446 ATH_MSG_DEBUG(
"pattern#0: # of hits at endcap barrel inner =" << pattern.mdtSegments[barrelinner].size());
1447 ATH_MSG_DEBUG(
"pattern#0: # of hits at BEE =" << pattern.mdtSegments[bee].size());
1449 ATH_MSG_DEBUG(
"pattern#0: # of hits at BME =" << pattern.mdtSegments[bme].size());
1450 ATH_MSG_DEBUG(
"pattern#0: # of hits at barrel endcap inner =" << pattern.mdtSegments[endcapinner].size());
1452 ATH_MSG_DEBUG(
"### ************************************* ###");
1453 ATH_MSG_DEBUG(
"Estimated muon pt = " << pattern.pt <<
" GeV");
1462 muonSA->
setPt(pattern.pt*pattern.charge);
1466 muonSA->
setPtCSC(pattern.ptCSC*pattern.charge);
1468 muonSA->
setEta(pattern.etaVtx);
1469 muonSA->
setPhi(pattern.phiVtx);
1481 muonSA->
setRMS(pattern.superPoints[inner].R);
1482 muonSA->
setZMS(pattern.superPoints[inner].Z);
1483 muonSA->
setDirZMS(pattern.superPoints[inner].Alin);
1505 muonSA->
setSuperPoint(inner, pattern.superPoints[inner].R, pattern.superPoints[inner].Z,
1506 pattern.superPoints[inner].Alin, pattern.superPoints[inner].Blin, pattern.superPoints[inner].Chi2);
1507 muonSA->
setSuperPoint(middle, pattern.superPoints[middle].R, pattern.superPoints[middle].Z,
1508 pattern.superPoints[middle].Alin, pattern.superPoints[middle].Blin, pattern.superPoints[middle].Chi2);
1509 muonSA->
setSuperPoint(outer, pattern.superPoints[outer].R, pattern.superPoints[outer].Z,
1510 pattern.superPoints[outer].Alin, pattern.superPoints[outer].Blin, pattern.superPoints[outer].Chi2);
1511 if (pattern.s_address==-1){
1512 muonSA->
setSuperPoint(ee, pattern.superPoints[ee].R, pattern.superPoints[ee].Z,
1513 pattern.superPoints[ee].Alin, pattern.superPoints[ee].Blin, pattern.superPoints[ee].Chi2);
1514 muonSA->
setSuperPoint(barrelinner, pattern.superPoints[barrelinner].R, pattern.superPoints[barrelinner].Z,
1515 pattern.superPoints[barrelinner].Alin, pattern.superPoints[barrelinner].Blin, pattern.superPoints[barrelinner].Chi2);
1516 muonSA->
setSuperPoint(csc, pattern.superPoints[csc].R, pattern.superPoints[csc].Z,
1517 pattern.superPoints[csc].Alin, pattern.superPoints[csc].Blin, pattern.superPoints[csc].Chi2);
1519 muonSA->
setSuperPoint(endcapinner, pattern.superPoints[endcapinner].R, pattern.superPoints[endcapinner].Z,
1520 pattern.superPoints[endcapinner].Alin, pattern.superPoints[endcapinner].Blin, pattern.superPoints[endcapinner].Chi2);
1526 uint32_t muondetmask = 0;
1533 muonSA->
setLvl1Id( eventInfo->extendedLevel1ID() );
1566 std::vector<std::string> mdtId;
1568 if ( mdtHit.isOutlier==0 || mdtHit.isOutlier==1 ) {
1569 muonSA->
setMdtHit(mdtHit.OnlineId, mdtHit.isOutlier, mdtHit.Chamber,
1570 mdtHit.R, mdtHit.Z, mdtHit.cPhi0, mdtHit.Residual,
1571 mdtHit.DriftTime, mdtHit.DriftSpace, mdtHit.DriftSigma);
1572 mdtId.push_back(mdtHit.Id.getString());
1576 accessor_mdthitid( *muonSA ) = mdtId;
1579 std::vector<float> cscResol;
1582 if ( cscHit.isOutlier==0 || cscHit.isOutlier==1 ) {
1583 muonSA->
setCscHit(cscHit.isOutlier, cscHit.Chamber, cscHit.StationName,
1584 cscHit.StationEta, cscHit.StationPhi,
1585 cscHit.ChamberLayer, cscHit.WireLayer, cscHit.MeasuresPhi, cscHit.Strip,
1586 cscHit.eta, cscHit.phi, cscHit.r, cscHit.z,
1587 cscHit.charge, cscHit.time, cscHit.Residual);
1588 cscResol.push_back(cscHit.resolution);
1590 <<
"OL=" << cscHit.isOutlier <<
","
1591 <<
"Ch=" << cscHit.Chamber <<
","
1592 <<
"StationName=" << cscHit.StationName <<
","
1593 <<
"StationEta=" << cscHit.StationEta <<
","
1594 <<
"StationPhi=" << cscHit.StationPhi <<
","
1595 <<
"ChamberLayer=" << cscHit.ChamberLayer <<
","
1596 <<
"WireLayer=" << cscHit.WireLayer <<
","
1597 <<
"MeasuresPhi=" << cscHit.MeasuresPhi <<
","
1598 <<
"Strip=" << cscHit.Strip <<
","
1599 <<
"eta=" << cscHit.eta <<
","
1600 <<
"phi=" << cscHit.phi <<
","
1601 <<
"r=" << cscHit.r <<
","
1602 <<
"z=" << cscHit.z <<
","
1603 <<
"charge=" << cscHit.charge <<
","
1604 <<
"Rs=" << cscHit.Residual <<
","
1605 <<
"t=" << cscHit.time);
1610 accessor_cschitresol( *muonSA ) = cscResol;
1613 float sumbeta[8]={0};
1614 float nhit_layer[8]={0};
1616 muonSA->
setRpcHit(rpcHit.layer, rpcHit.measuresPhi,
1617 rpcHit.x, rpcHit.y, rpcHit.z,
1618 rpcHit.time, rpcHit.distToEtaReadout, rpcHit.distToPhiReadout,
1619 rpcHit.stationName);
1621 <<
"stationName=" << rpcHit.stationName <<
","
1622 <<
"layer=" << rpcHit.layer <<
","
1623 <<
"measuresPhi=" << rpcHit.measuresPhi <<
","
1624 <<
"x=" << rpcHit.x <<
","
1625 <<
"y=" << rpcHit.y <<
","
1626 <<
"y=" << rpcHit.z);
1628 float dRMS = std::sqrt( std::abs(pattern.etaMap-rpcHit.eta)*std::abs(pattern.etaMap-rpcHit.eta) + std::acos(std::cos(pattern.phiMS-rpcHit.phi))*std::acos(std::cos(pattern.phiMS-rpcHit.phi)) );
1629 if(dRMS>0.05)
continue;
1630 float muToF = rpcHit.l/1000/(CLHEP::c_light/1000);
1631 float Tprop = rpcHit.distToPhiReadout/1000*4.8;
1632 float beta = rpcHit.l/1000/(muToF+rpcHit.time-Tprop+3.125/2)/(CLHEP::c_light/1000);
1633 sumbeta[rpcHit.layer]=sumbeta[rpcHit.layer]+beta;
1634 nhit_layer[rpcHit.layer]=nhit_layer[rpcHit.layer]+1;
1637 std::vector<float> Avebeta_layer;
1638 for(
int i_layer=0;i_layer<8;i_layer++){
1639 if(nhit_layer[i_layer]!=0)Avebeta_layer.push_back( sumbeta[i_layer]/nhit_layer[i_layer] );
1641 if(Avebeta_layer.size()>0) muonSA->
setBeta( std::accumulate(Avebeta_layer.begin(),Avebeta_layer.end(),0.0)/Avebeta_layer.size() );
1643 Avebeta_layer.clear();
1647 muonSA->
setTgcHit(tgcHit.eta, tgcHit.phi, tgcHit.r, tgcHit.z,
1648 tgcHit.width, tgcHit.sta, tgcHit.isStrip,
1649 tgcHit.bcTag, tgcHit.inRoad);
1651 <<
"eta=" << tgcHit.eta <<
","
1652 <<
"phi=" << tgcHit.phi <<
","
1653 <<
"r=" << tgcHit.r <<
","
1654 <<
"z=" << tgcHit.z <<
","
1655 <<
"width=" << tgcHit.width <<
","
1656 <<
"stationNum=" << tgcHit.sta <<
","
1657 <<
"isStrip=" << tgcHit.isStrip <<
","
1658 <<
"bcTag=" << tgcHit.bcTag <<
","
1659 <<
"inRoad=" << tgcHit.inRoad);
1664 for(
unsigned int i_hit=0; i_hit<stgcHits.size(); i_hit++) {
1665 if ( stgcHits[i_hit].isOutlier==0 || stgcHits[i_hit].isOutlier==1 ) {
1668 muonSA->
setStgcCluster(stgcHits[i_hit].layerNumber, stgcHits[i_hit].isOutlier, stgcHits[i_hit].channelType,
1669 stgcHits[i_hit].
eta, stgcHits[i_hit].
phi, stgcHits[i_hit].
r, stgcHits[i_hit].
z,
1670 stgcHits[i_hit].ResidualR, stgcHits[i_hit].ResidualPhi,
1671 stgcHits[i_hit].stationEta, stgcHits[i_hit].stationPhi, stgcHits[i_hit].stationName);
1674 <<
"eta=" << stgcHits[i_hit].
eta <<
","
1675 <<
"phi=" << stgcHits[i_hit].
phi <<
","
1676 <<
"r=" << stgcHits[i_hit].
r <<
","
1677 <<
"z=" << stgcHits[i_hit].
z <<
","
1678 <<
"z=" << stgcHits[i_hit].ResidualR <<
","
1679 <<
"z=" << stgcHits[i_hit].ResidualPhi);
1684 for(
unsigned int i_hit=0; i_hit<mmHits.size(); i_hit++) {
1685 if ( mmHits[i_hit].isOutlier==0 || mmHits[i_hit].isOutlier==1 ) {
1688 muonSA->
setMmCluster(mmHits[i_hit].layerNumber, mmHits[i_hit].isOutlier,
1689 mmHits[i_hit].
eta, mmHits[i_hit].
phi, mmHits[i_hit].
r, mmHits[i_hit].
z,
1690 mmHits[i_hit].ResidualR, mmHits[i_hit].ResidualPhi,
1691 mmHits[i_hit].stationEta, mmHits[i_hit].stationPhi, mmHits[i_hit].stationName);
1694 <<
"eta=" << tgcHits[i_hit].
eta <<
","
1695 <<
"phi=" << tgcHits[i_hit].
phi <<
","
1696 <<
"r=" << tgcHits[i_hit].
r <<
","
1697 <<
"z=" << tgcHits[i_hit].
z <<
","
1698 <<
"width=" << tgcHits[i_hit].
width <<
","
1699 <<
"stationNum=" << tgcHits[i_hit].sta <<
","
1700 <<
"isStrip=" << tgcHits[i_hit].isStrip <<
","
1701 <<
"bcTag=" << tgcHits[i_hit].
bcTag <<
","
1702 <<
"inRoad=" << tgcHits[i_hit].inRoad);
1707 for (
int i_station=0; i_station<8; i_station++) {
1708 for (
int i_sector=0; i_sector<2; i_sector++) {
1709 muonSA->
setRoad(i_station, i_sector, muonRoad.
aw[i_station][i_sector], muonRoad.
bw[i_station][i_sector]);
1710 muonSA->
setRegionZ(i_station, i_sector, mdtRegion.
zMin[i_station][i_sector], mdtRegion.
zMax[i_station][i_sector]);
1711 muonSA->
setRegionR(i_station, i_sector, mdtRegion.
rMin[i_station][i_sector], mdtRegion.
rMax[i_station][i_sector]);
1712 muonSA->
setRegionEta(i_station, i_sector, mdtRegion.
etaMin[i_station][i_sector], mdtRegion.
etaMax[i_station][i_sector]);
1747 if (pattern.s_address==-1) {
1750 if ( std::abs(pattern.superPoints[inner].R) >
ZERO_LIMIT && std::abs(pattern.superPoints[inner].Z) >
ZERO_LIMIT ) {
1752 float theta = std::atan(pattern.superPoints[inner].R/std::abs(pattern.superPoints[inner].Z));
1753 float eta = (std::tan(
theta/2.)!=0.)? -std::log(std::tan(
theta/2.))*pattern.superPoints[inner].Z/std::abs(pattern.superPoints[inner].Z): 0.;
1759 if ( std::abs(pattern.superPoints[middle].R) >
ZERO_LIMIT && std::abs(pattern.superPoints[middle].Z) >
ZERO_LIMIT ) {
1762 double phi1 = tgcFitResult.
tgcMid1[1];
1763 double phi2 = tgcFitResult.
tgcMid2[1];
1764 if ( tgcFitResult.
tgcMid1[3]==0. || tgcFitResult.
tgcMid2[3]==0. ) {
1767 }
else if( phi1*phi2 < 0 && std::abs(phi1)>(
M_PI/2.) ) {
1768 double tmp1 = (phi1>0)? phi1 -
M_PI : phi1 +
M_PI;
1769 double tmp2 = (phi2>0)? phi2 -
M_PI : phi2 +
M_PI;
1770 double tmp = (tmp1+tmp2)/2.;
1773 phi = (phi2+phi1)/2.;
1778 float theta = std::atan(pattern.superPoints[middle].R/std::abs(pattern.superPoints[middle].Z));
1779 float eta = (std::tan(
theta/2.)!=0.)? -std::log(std::tan(
theta/2.))*pattern.superPoints[middle].Z/std::abs(pattern.superPoints[middle].Z): 0.;
1786 if ( std::abs(pattern.superPoints[middle].R) >
ZERO_LIMIT && std::abs(pattern.superPoints[middle].Z) >
ZERO_LIMIT ) {
1793 float theta = std::atan(pattern.superPoints[middle].R/std::abs(pattern.superPoints[middle].Z));
1794 float eta = (std::tan(
theta/2.)!=0.)? -std::log(std::tan(
theta/2.))*pattern.superPoints[middle].Z/std::abs(pattern.superPoints[middle].Z): 0.;
1816 float mseta = pattern.etaMap;
1817 float msphi = pattern.phiMS;
1821 mseta = roids->
eta();
1822 msphi = roids->
phi();
1826 const float phiHalfWidth = 0.1;
1827 const float etaHalfWidth = 0.1;
1833 mseta - etaHalfWidth,
1834 mseta + etaHalfWidth,
1836 msphi - phiHalfWidth,
1837 msphi + phiHalfWidth);
1841 << mseta <<
"/" << msphi);
1844 <<
" phi=" << MSroiDescriptor->
phi()
1845 <<
", eta=" << MSroiDescriptor->
eta());
1867 const double scalePhiWidthForFailure = 2;
1868 const double scaleRoIforZeroPt = 2;
1876 float phiHalfWidth = 0.1;
1877 float etaHalfWidth = 0.1;
1892 if (pattern.isTgcFailure || pattern.isRpcFailure)
1893 phiHalfWidth *= scalePhiWidthForFailure;
1899 pattern.etaVtx - etaHalfWidth,
1900 pattern.etaVtx + etaHalfWidth,
1902 pattern.phiVtx - phiHalfWidth,
1903 pattern.phiVtx + phiHalfWidth);
1906 <<
"pattern.etaVtx/pattern.phiVtx="
1907 << pattern.etaVtx <<
"/" << pattern.phiVtx);
1910 <<
" phi=" << IDroiDescriptor->
phi()
1911 <<
", eta=" << IDroiDescriptor->
eta());
1921 roids->
eta() - (roids->
eta() - roids->
etaMinus()) * scaleRoIforZeroPt,
1922 roids->
eta() + (roids->
etaPlus() - roids->
eta()) * scaleRoIforZeroPt,
1927 ATH_MSG_VERBOSE(
"will Record an RoiDescriptor for Inner Detector in case with zero pT:"
1928 <<
" phi=" << IDroiDescriptor->
phi()
1929 <<
", phi min=" << IDroiDescriptor->
phiMinus()
1930 <<
", phi max=" << IDroiDescriptor->
phiPlus()
1931 <<
", eta=" << IDroiDescriptor->
eta()
1932 <<
", eta min=" << IDroiDescriptor->
etaMinus()
1933 <<
", eta max=" << IDroiDescriptor->
etaPlus());
1948 if (name ==
"MuFastSteering_Muon") {
1950 }
else if (name ==
"MuFastSteering_900GeV") {
1964 bool isBarrel = (muonSA->
sAddress()==-1) ? true :
false;
1967 float pt = muonSA->
pt();
1970 const int N_PARAMS = 2;
1973 const float etaMinWin_brl = 0.10;
1974 const float etaMinWin_ec1 = 0.10;
1975 const float etaMinWin_ec2 = 0.10;
1976 const float etaMinWin_ec3 = 0.10;
1977 const float etaMinWin_ecA = 0.10;
1978 const float etaMinWin_ecB = 0.10;
1980 const float etaMaxWin_brl = 0.20;
1981 const float etaMaxWin_ec1 = 0.20;
1982 const float etaMaxWin_ec2 = 0.20;
1983 const float etaMaxWin_ec3 = 0.20;
1984 const float etaMaxWin_ecA = 0.20;
1985 const float etaMaxWin_ecB = 0.20;
1987 const float etaParams_brl[N_PARAMS] = { 0.038, 0.284};
1988 const float etaParams_ec1[N_PARAMS] = { 0.011, 0.519};
1989 const float etaParams_ec2[N_PARAMS] = { 0.023, 0.253};
1990 const float etaParams_ec3[N_PARAMS] = { 0.018, 0.519};
1991 const float etaParams_ecA[N_PARAMS] = { 0.010, 0.431};
1992 const float etaParams_ecB[N_PARAMS] = { 0.023, 0.236};
1995 const float phiMinWin_brl = 0.125;
1996 const float phiMinWin_ec1 = 0.125;
1997 const float phiMinWin_ec2 = 0.125;
1998 const float phiMinWin_ec3 = 0.10;
1999 const float phiMinWin_ecA = 0.15;
2000 const float phiMinWin_ecB = 0.15;
2002 const float phiMaxWin_brl = 0.20;
2003 const float phiMaxWin_ec1 = 0.20;
2004 const float phiMaxWin_ec2 = 0.20;
2005 const float phiMaxWin_ec3 = 0.20;
2006 const float phiMaxWin_ecA = 0.25;
2007 const float phiMaxWin_ecB = 0.20;
2009 const float phiParams_brl[N_PARAMS] = { 0.000, 0.831};
2010 const float phiParams_ec1[N_PARAMS] = { 0.000, 0.885};
2011 const float phiParams_ec2[N_PARAMS] = { 0.015, 0.552};
2012 const float phiParams_ec3[N_PARAMS] = { 0.008, 0.576};
2013 const float phiParams_ecA[N_PARAMS] = { 0.000, 0.830};
2014 const float phiParams_ecB[N_PARAMS] = { 0.006, 1.331};
2019 float params[N_PARAMS];
2022 memcpy(params,etaParams_brl,
sizeof(params));
2023 minWin = etaMinWin_brl;
2024 maxWin = etaMaxWin_brl;
2027 memcpy(params,phiParams_brl,
sizeof(params));
2028 minWin = phiMinWin_brl;
2029 maxWin = phiMaxWin_brl;
2037 memcpy(params,etaParams_ecA,
sizeof(params));
2038 minWin = etaMinWin_ecA;
2039 maxWin = etaMaxWin_ecA;
2042 memcpy(params,phiParams_ecA,
sizeof(params));
2043 minWin = phiMinWin_ecA;
2044 maxWin = phiMaxWin_ecA;
2049 memcpy(params,etaParams_ecB,
sizeof(params));
2050 minWin = etaMinWin_ecB;
2051 maxWin = etaMaxWin_ecB;
2054 memcpy(params,phiParams_ecB,
sizeof(params));
2055 minWin = phiMinWin_ecB;
2056 maxWin = phiMaxWin_ecB;
2060 if( std::abs(
eta) < 1.5 ) {
2062 memcpy(params,etaParams_ec1,
sizeof(params));
2063 minWin = etaMinWin_ec1;
2064 maxWin = etaMaxWin_ec1;
2067 memcpy(params,phiParams_ec1,
sizeof(params));
2068 minWin = phiMinWin_ec1;
2069 maxWin = phiMaxWin_ec1;
2072 else if( std::abs(
eta) < 2.0 ) {
2074 memcpy(params,etaParams_ec2,
sizeof(params));
2075 minWin = etaMinWin_ec2;
2076 maxWin = etaMaxWin_ec2;
2079 memcpy(params,phiParams_ec2,
sizeof(params));
2080 minWin = phiMinWin_ec2;
2081 maxWin = phiMaxWin_ec2;
2086 memcpy(params,etaParams_ec3,
sizeof(params));
2087 minWin = etaMinWin_ec3;
2088 maxWin = etaMaxWin_ec3;
2091 memcpy(params,phiParams_ec3,
sizeof(params));
2092 minWin = phiMinWin_ec3;
2093 maxWin = phiMaxWin_ec3;
2100 float x = params[0] + params[1] / pt;
2102 if(
x < minWin ) retval = minWin;
2103 if(
x > maxWin ) retval = maxWin;
2113 std::vector<TrigL2MuonSA::TrackPattern>& trackPatterns )
const
2128 std::vector<float> t_eta, t_phi;
2129 std::vector<float> f_eta, f_phi;
2130 std::vector<float> r_inner, r_middle, r_outer;
2131 std::vector<float> f_residuals;
2143 invalid_rpc_roi_number,
2144 efficiency, sag_inverse, address, absolute_pt, sagitta, track_pt,
2145 track_eta, track_phi, failed_eta, failed_phi,
2146 res_inner, res_middle, res_outer, fit_residuals );
2150 if( !trackPatterns.empty() ) {
2157 float count_inner = 0;
2158 float count_middle = 0;
2159 float count_outer = 0;
2163 if (std::abs(mdtHit.DriftSpace) <
ZERO_LIMIT)
continue;
2165 char st = mdtHit.cType[1];
2169 r_inner.push_back(mdtHit.Residual/norm);
2170 if (mdtHit.isOutlier==0) f_residuals.push_back(mdtHit.Residual/norm);
2175 r_middle.push_back(mdtHit.Residual/norm);
2176 if (mdtHit.isOutlier==0) f_residuals.push_back(mdtHit.Residual/norm);
2181 r_outer.push_back(mdtHit.Residual/norm);
2182 if (mdtHit.isOutlier==0) f_residuals.push_back(mdtHit.Residual/norm);
2186 inner_mdt_hits = count_inner;
2187 middle_mdt_hits = count_middle;
2188 outer_mdt_hits = count_outer;
2190 track_pt = (std::abs(pattern.pt ) >
ZERO_LIMIT)? pattern.charge*pattern.pt: 9999.;
2191 absolute_pt = std::abs(track_pt);
2194 t_eta.push_back(pattern.etaMap);
2195 t_phi.push_back(pattern.phiMS);
2198 f_eta.push_back(roi->
eta());
2199 f_phi.push_back(roi->
phi());
2202 sagitta = (std::abs(pattern.barrelSagitta) >
ZERO_LIMIT)? pattern.barrelSagitta: 9999.;
2203 sag_inverse = (std::abs(pattern.barrelSagitta) >
ZERO_LIMIT)? 1./pattern.barrelSagitta: 9999.;
2204 address = pattern.s_address;
2207 return StatusCode::SUCCESS;
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
Scalar theta() const
theta method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
Header file to be included by clients of the Monitored infrastructure.
const LVL1::RecMuonRoI * matchingRecRoI(uint32_t roiWord, const DataVector< LVL1::RecMuonRoI > &collection)
unsigned bcTag(unsigned bcBitMap)
Athena::TPCnvVers::Current TrigRoiDescriptor
static const Attributes_t empty
bool msgLvl(const MSG::Level lvl) const
An algorithm that can be simultaneously executed in multiple threads.
static const std::string & type()
Incident type.
int workerID() const
assigned worker ID from processing unit
DataModel_detail::const_iterator< DataVector > const_iterator
const T * at(size_type n) const
Access an element, as an rvalue.
value_type push_back(value_type pElem)
Add an element to the end of the collection.
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
ElementLink implementation for ROOT usage.
This class defines the reconstructed Muon ROI.
Group of local monitoring quantities and retain correlation when filling histograms
Declare a monitored scalar variable.
int L2MuonAlgoMap(const std::string &name) const
ToolHandle< GenericMonitoringTool > m_monTool
SG::WriteHandleKey< TrigRoiDescriptorCollection > m_muIdContainerKey
Gaudi::Property< float > m_scaleRoadBarrelMiddle
Gaudi::Property< int > m_calBufferSize
SG::ReadHandleKey< xAOD::MuonRoIContainer > m_recRoiCollectionKey
Gaudi::Property< bool > m_use_new_segmentfit
Gaudi::Property< bool > m_use_RoIBasedDataAccess_RPC
Gaudi::Property< int > m_esd_mm_size
Gaudi::Property< float > m_dPhisurrRoI
ToolHandle< TrigL2MuonSA::MuCalStreamerTool > m_calStreamer
SG::ReadHandleKey< TrigRoiDescriptorCollection > m_roiCollectionKey
virtual StatusCode initialize() override
ServiceHandle< Gaudi::Interfaces::IOptionsSvc > m_jobOptionsSvc
Gaudi::Property< int > m_esd_rpc_size
Gaudi::Property< std::string > m_calBufferName
Gaudi::Property< bool > m_use_RoIBasedDataAccess_TGC
Gaudi::Property< bool > m_use_mm
virtual void handle(const Incident &incident) override
Gaudi::Property< bool > m_fill_FSIDRoI
SG::WriteHandleKey< xAOD::TrigCompositeContainer > m_muCompositeContainerKey
virtual StatusCode stop() override
SG::WriteHandleKey< xAOD::L2StandAloneMuonContainer > m_muFastContainerKey
StatusCode findMultiTrackSignature(const std::vector< const TrigRoiDescriptor * > &roi, const std::vector< const xAOD::MuonRoI * > &muonRoIs, DataVector< xAOD::L2StandAloneMuon > &outputTracks, const bool dynamicDeltaRpc, const EventContext &ctx) const
findMultiTrackSignature(), includes reconstract algorithms for multi-track mode
Gaudi::Property< bool > m_insideOut
Gaudi::Property< int > m_esd_csc_size
StatusCode findMuonSignatureIO(const xAOD::TrackParticleContainer &idtracks, const std::vector< const TrigRoiDescriptor * > &roids, const std::vector< const xAOD::MuonRoI * > &muonRoIs, DataVector< xAOD::L2CombinedMuon > &outputCBs, DataVector< xAOD::L2StandAloneMuon > &outputSAs, const bool dynamicDeltaRpc, const EventContext &ctx) const
findMuonSignatureIO(), includes reconstract algorithms for inside-out mode
Gaudi::Property< bool > m_use_RoIBasedDataAccess_MM
Gaudi::Property< bool > m_multiTrack
Gaudi::Property< double > m_rWidth_RPC_Failed
Gaudi::Property< bool > m_use_RoIBasedDataAccess_STGC
Gaudi::Property< float > m_ftfminPt
ServiceHandle< IIncidentSvc > m_incidentSvc
Gaudi::Property< bool > m_doCalStream
ToolHandle< TrigL2MuonSA::MuFastTrackFitter > m_trackFitter
Gaudi::Property< float > m_scaleRoadBarrelInner
ToolHandle< TrigL2MuonSA::FtfRoadDefiner > m_ftfRoadDefiner
Gaudi::Property< bool > m_use_endcapInnerFromBarrel
Gaudi::Property< int > m_esd_tgc_size
bool storeIDRoiDescriptor(const TrigRoiDescriptor *roids, const TrigL2MuonSA::TrackPattern &pattern, const DataVector< xAOD::L2StandAloneMuon > &outputTracks, TrigRoiDescriptorCollection &outputID) const
Gaudi::Property< float > m_dEtasurrRoI
Gaudi::Property< int > m_esd_mdt_size
ToolHandle< TrigL2MuonSA::MuFastPatternFinder > m_patternFinder
SG::WriteHandleKey< TrigRoiDescriptorCollection > m_muMsContainerKey
Gaudi::Property< bool > m_calDataScouting
Gaudi::Property< bool > m_use_RoIBasedDataAccess_CSC
ToolHandle< ITrigMuonBackExtrapolator > m_backExtrapolatorTool
Handle to MuonBackExtrapolator tool.
ToolHandle< TrigL2MuonSA::MuFastDataPreparator > m_dataPreparator
Gaudi::Property< bool > m_use_mcLUT
TrigL2MuonSA::RecMuonRoIUtils m_recMuonRoIUtils
ToolHandle< TrigL2MuonSA::CscSegmentMaker > m_cscsegmaker
Gaudi::Property< bool > m_use_rpc
Gaudi::Property< bool > m_topoRoad
SG::ReadHandleKey< DataVector< LVL1::RecMuonRoI > > m_run2recRoiCollectionKey
Gaudi::Property< int > m_esd_stgc_size
SG::WriteHandleKey< xAOD::L2CombinedMuonContainer > m_outputCBmuonCollKey
float getRoiSizeForID(bool isEta, const xAOD::L2StandAloneMuon *muonSA) const
bool updateOutputObjects(const xAOD::MuonRoI *roi, const TrigRoiDescriptor *roids, const TrigL2MuonSA::MuonRoad &muonRoad, const TrigL2MuonSA::MdtRegion &mdtRegion, const TrigL2MuonSA::RpcHits &rpcHits, const TrigL2MuonSA::TgcHits &tgcHits, const TrigL2MuonSA::RpcFitResult &rpcFitResult, const TrigL2MuonSA::TgcFitResult &tgcFitResult, const TrigL2MuonSA::MdtHits &mdtHits, const TrigL2MuonSA::CscHits &cscHits, const TrigL2MuonSA::StgcHits &stgcHits, const TrigL2MuonSA::MmHits &mmHits, const std::vector< TrigL2MuonSA::TrackPattern > &trackPatterns, DataVector< xAOD::L2StandAloneMuon > &outputTracks, TrigRoiDescriptorCollection &outputID, TrigRoiDescriptorCollection &outputMS, const EventContext &ctx) const
Called at the end of the algorithm processing to set the steering navigation properly.
Gaudi::Property< bool > m_use_stgc
Gaudi::Property< float > m_scaleRoadBarrelOuter
Gaudi::Property< bool > m_useRun3Config
Gaudi::Property< double > m_rWidth_TGC_Failed
ToolHandle< TrigL2MuonSA::MuFastTrackExtrapolator > m_trackExtrapolator
ToolHandle< TrigL2MuonSA::MuFastStationFitter > m_stationFitter
StatusCode updateMonitor(const xAOD::MuonRoI *roi, const TrigL2MuonSA::MdtHits &mdtHits, std::vector< TrigL2MuonSA::TrackPattern > &trackPatterns) const
Update monitoring variables.
MuFastSteering(const std::string &name, ISvcLocator *svc)
Constructor.
bool storeMuonSA(const xAOD::MuonRoI *roi, const TrigRoiDescriptor *roids, const TrigL2MuonSA::MuonRoad &muonRoad, const TrigL2MuonSA::MdtRegion &mdtRegion, const TrigL2MuonSA::RpcHits &rpcHits, const TrigL2MuonSA::TgcHits &tgcHits, const TrigL2MuonSA::RpcFitResult &rpcFitResult, const TrigL2MuonSA::TgcFitResult &tgcFitResult, const TrigL2MuonSA::MdtHits &mdtHits, const TrigL2MuonSA::CscHits &cscHits, const TrigL2MuonSA::StgcHits &stgcHits, const TrigL2MuonSA::MmHits &mmHits, const TrigL2MuonSA::TrackPattern &pattern, DataVector< xAOD::L2StandAloneMuon > &outputTracks, const EventContext &ctx) const
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
Gaudi::Property< bool > m_use_RoIBasedDataAccess_MDT
Gaudi::Property< double > m_winPt
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_FTFtrackKey
StatusCode findMuonSignature(const std::vector< const TrigRoiDescriptor * > &roi, const std::vector< const xAOD::MuonRoI * > &muonRoIs, DataVector< xAOD::L2StandAloneMuon > &outputTracks, xAOD::TrigCompositeContainer *outputMuonCal, TrigRoiDescriptorCollection &outputID, TrigRoiDescriptorCollection &outputMS, const bool dynamicDeltaRpc, const EventContext &ctx) const
findMuonSignature(), includes reconstract algorithms
bool storeMSRoiDescriptor(const TrigRoiDescriptor *roids, const TrigL2MuonSA::TrackPattern &pattern, const DataVector< xAOD::L2StandAloneMuon > &outputTracks, TrigRoiDescriptorCollection &outputMS) const
virtual StatusCode execute(const EventContext &ctx) const override
execute(), main code of the algorithm for AthenaMT
Gaudi::Property< bool > m_doEndcapForl2mt
virtual double etaMinus() const override final
gets eta at zMinus
virtual double etaPlus() const override final
gets eta at zedPlus
virtual double phi() const override final
Methods to retrieve data members.
virtual double phiMinus() const override final
gets phiMinus
virtual double eta() const override final
virtual double phiPlus() const override final
gets phiPlus
Helper class to provide type-safe access to aux data.
void makePrivateStore()
Create a new (empty) private store for this object.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
pointer_type ptr()
Dereference the pointer.
double zMin[N_STATION][N_SECTOR]
double rMin[N_STATION][N_SECTOR]
double zMax[N_STATION][N_SECTOR]
double etaMax[N_STATION][N_SECTOR]
double etaMin[N_STATION][N_SECTOR]
int chamberType[N_STATION][N_SECTOR][2]
double rMax[N_STATION][N_SECTOR]
double aw[N_STATION][N_SECTOR]
void setScales(double inner, double middle, double outer)
double bw[N_STATION][N_SECTOR]
nope - should be used for standalone also, perhaps need to protect the class def bits ifndef XAOD_ANA...
virtual unsigned int roiWord() const override final
virtual unsigned int roiId() const override final
these quantities probably don't need to be used any more
virtual unsigned int l1Id() const override final
void setPt(float pt)
Set the transverse momentum ( ) of the muon.
void setStrategy(int value)
set algorithm strategy flag
void setErrorFlag(int value)
set algorithm error flag
void setIdTrackLink(const ElementLink< xAOD::TrackParticleContainer > &link)
set ID track used to make the CB muon
void setMuSATrackLink(const ElementLink< xAOD::L2StandAloneMuonContainer > &link)
set SA muon used to make the CB muon
void setPhi(float phi)
Set the azimuthal angle ( ) of the muon.
void setEta(float eta)
Set the pseudorapidity ( ) of the muon.
void setCharge(float value)
set seeding muon charge
void setRegionR(int station, int sector, float min, float max)
R range.
void setEta(float eta)
Set the pseudorapidity ( ) of the muon.
void setStgcCluster(const unsigned int layer, const int isOutlier, const int type, const float eta, const float phi, const float r, const float z, const float residualR, const float residualPhi, const int stationEta, const int stationPhi, const int stationName)
Set sTGC hits.
void setBeta(float value)
Set beta.
void setRpcFitInn(float phi, float slope, float offset)
Set the results of RPC fit.
void setPhi(float phi)
Set the azimuthal angle ( ) of the muon.
void setRpcHit(uint32_t layer, uint32_t measuresPhi, float x, float y, float z, float time, float distEta, float distPhi, const std::string &stationName)
Set RPC hits.
void setCscHit(int isOutlier, int chamber, uint32_t stationName, int stationEta, int stationPhi, int chamberLayer, int wireLayer, int measuresPhi, int strip, float eta, float phi, float r, float z, int charge, float time, float residual)
Set the properties of each CSC tube.
void setBarrelSagitta(float value)
Set the fitted sagitta of the muon in the barrel.
int sAddress() const
Get the station address of the muon.
void setDeltaPt(float value)
Set error of pT.
void setEtaMS(float value)
Set the eta at muon spectrometer.
void setMdtHit(uint32_t onlineId, int isOutier, int chamber, float r, float z, float phi, float residual, float time, float space, float sigma)
Set the properties of each MDT tube.
void setTgcInn(float eta, float phi, float r, float z)
Set the results of TGC fit.
void setMmClustersCapacity(const int value)
Set size of storage for MM clusters.
void setDeltaEta(float value)
Set error of eta.
void setRoiSystem(uint32_t value)
void setRoad(int station, int sector, float aw, float bw)
Road.
void setTgcHit(float eta, float phi, float r, float z, float width, int stationNum, bool isStrip, int bcTag, bool inRoad)
Set TGC hits.
void setRoiNumber(uint32_t value)
void setDeltaPhi(float value)
Set error of phi.
void setPtEndcapRadius(float value)
void setTgcMid2(float eta, float phi, float r, float z)
float etaMS() const
Get the eta at muon spectrometer.
float phiMS() const
Get the phi at muon spectrometer.
void setStgcClustersCapacity(const int value)
Set size of storage for sTGC clusters.
void setTrackPosition(float r, float z, float eta, float phi)
Set position of muon track.
void setRMS(float value)
Set the R at muon spectrometer.
void setPtCSC(float value)
void setLumiBlock(uint32_t value)
void setRoiThreshold(uint32_t value)
void setTgcMidF(float rhoChi2, long rhoN, float phiChi2, long phiN)
void setPhiMap(float value)
Set phi used to refer pT LUT.
void setIsTgcFailure(int value)
Set flag to record if TGC is properly read.
void setRoiSubsystem(uint32_t value)
void setRpcHitsCapacity(int value)
Size of storage to be reserved.
virtual double pt() const
The transverse momentum ( ) of the particle.
void setRoiSector(uint32_t value)
void setRpcFitOut(float phi, float slope, float offset)
void setLvl1Id(uint32_t value)
void setChamberType2(int station, int sector, int chamberType)
void setMmCluster(const unsigned int layer, const int isOutlier, const float eta, const float phi, const float r, const float z, const float residualR, const float residualPhi, const int stationEta, const int stationPhi, const int stationName)
Set MM hits.
void setEtaBin(int value)
Set eta bin of pT LUT.
void setEtaMap(float value)
Set eta used to refer pT LUT.
void setMuonDetMask(uint32_t value)
void setDirPhiMS(float value)
Set tan phi at muon spectrometer.
void setPtEndcapBeta(float value)
void setCscHitsCapacity(int value)
Set size of storage for CSC hits.
void setRegionZ(int station, int sector, float min, float max)
Z range.
void setEndcapRadius(float value)
Set the fitted radius of the muon in the endcap.
void setEndcapBeta(float value)
Set the fitted value in the endcap.
void setChamberType1(int station, int sector, int chamberType)
Set the muon road information.
void setSAddress(int value)
Set the station address of the muon.
void setRpcFitMid(float phi, float slope, float offset)
void setPhiMS(float value)
Set the phi at muon spectrometer.
void setEndcapAlpha(float value)
Set the fitted value in the endcap.
void setRoIWord(uint32_t value)
Set the RoI ID of the seeding LVL1 muon.
void setRoiId(uint32_t value)
void setTgcHitsCapacity(int value)
Set size of storage for TGC hits.
void setRoiEta(float value)
void setTgcMid1(float eta, float phi, float r, float z)
void setRegionEta(int station, int sector, float min, float max)
Eta range.
void setIsRpcFailure(int value)
Set flag to record if RPC is properly read.
void setPt(float pt)
Set the transverse momentum ( ) of the muon.
void setRoiPhi(float value)
void setSuperPoint(int chamber, float r, float z, float slope, float intercept=0., float chi2=0.)
Set the properties of one particular super point measurement.
void setMdtHitsCapacity(int value)
Set size of storage for MDT hits.
void setDirZMS(float value)
Set dRdZ at muon spectrometer.
void setAlgoId(int value)
void setPhiBin(int value)
Set phi bin of pT LUT.
void setZMS(float value)
Set the Z at muon spectrometer.
void setBarrelRadius(float value)
Set the fitted radius of the muon in the barrel.
void setPtEndcapAlpha(float value)
void setTgcPt(float value)
void setTgcInnF(float rhoStd, long rhoN, float phiStd, long phiN)
float eta() const
The pseudorapidity ( ) of the muon candidate.
Hemisphere getHemisphere() const
Returns the hemisphere that detected the muon candidate.
RoISource getSource() const
Returns the system that detected the muon candidate.
uint32_t roiWord() const
The "raw" RoI word describing the muon candidate.
int getThrNumber() const
Get the logic number of the highest threshold this RoI passed.
float phi() const
The azimuthal angle ( ) of the muon candidate.
int getSectorID() const
Get the sector ID number.
int getRoI() const
Get the "RoI number" (position inside the sector)
void efficiency(std::vector< double > &bins, std::vector< double > &values, const std::vector< std::string > &files, const std::string &histname, const std::string &tplotname, const std::string &label="")
T wrapToPi(T phi)
Wrap angle in radians to [-pi, pi].
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
std::vector< StgcHitData > StgcHits
std::vector< MdtHitData > MdtHits
std::vector< MmHitData > MmHits
std::vector< CscHitData > CscHits
std::vector< RpcHitData > RpcHits
std::vector< TgcHitData > TgcHits
@ BarrelInner
Inner station in the barrel spectrometer.
@ EndcapOuter
Outer station in the endcap spectrometer.
@ BarrelMiddle
Middle station in the barrel spectrometer.
@ EndcapMiddle
Middle station in the endcap spectrometer.
@ BEE
BEE measurement point.
@ EndcapExtra
Extra station in the endcap spectrometer.
@ BarrelOuter
Outer station in the barrel spectrometer.
@ BME
BME measurement point.
@ EndcapInner
Inner station in the endcap spectrometer.
ECRegions whichECRegion(const float eta, const float phi)
TrigCompositeContainer_v1 TrigCompositeContainer
Declare the latest version of the container.
MuonRoIContainer_v1 MuonRoIContainer
L2CombinedMuon_v1 L2CombinedMuon
Define the latest version of the muon CB class.
TrigComposite_v1 TrigComposite
Declare the latest version of the class.
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".
L2StandAloneMuon_v2 L2StandAloneMuon
Define the latest version of the muon SA class.
Helper for azimuthal angle calculations.