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;
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>()));
311 auto muCompositeContainer = std::make_unique<xAOD::TrigCompositeContainer>();
312 auto muCompositeAuxContainer = std::make_unique<xAOD::TrigCompositeAuxContainer>();
313 muCompositeContainer->setStore(muCompositeAuxContainer.get());
316 ATH_CHECK(muIdContainer.record(std::make_unique<TrigRoiDescriptorCollection>()));
319 ATH_CHECK(muMsContainer.record(std::make_unique<TrigRoiDescriptorCollection>()));
327 ATH_CHECK( muonCBColl.record (std::make_unique<xAOD::L2CombinedMuonContainer>(),
328 std::make_unique<xAOD::L2CombinedMuonAuxContainer>()) );
331 if (!trackHandle.isValid()){
333 return StatusCode::FAILURE;
338 *muonCBColl, *muFastContainer, dynamicDeltaRpc, ctx ));
342 for (
const auto p_CBmuon : *muonCBColl){
354 *muFastContainer, muCompositeContainer.get(), *muIdContainer, *muMsContainer, dynamicDeltaRpc, ctx));
359 ATH_CHECK(wh_muCompositeCont.
record(std::move(muCompositeContainer), std::move(muCompositeAuxContainer)));
367 for (
auto p_muon : *muFastContainer) {
373 for (
auto p_muonID : *muIdContainer) {
374 ATH_MSG_DEBUG(
"REGTEST: TrigRoiDescriptorCollection key:" <<
m_muIdContainerKey.key() <<
" eta/phi = " << (*p_muonID).eta() <<
"/" << (*p_muonID).phi());
378 for (
auto p_muonMS : *muMsContainer) {
379 ATH_MSG_DEBUG(
"REGTEST: TrigRoiDescriptorCollection key:" <<
m_muMsContainerKey.key() <<
" eta/phi = " << (*p_muonMS).eta() <<
"/" << (*p_muonMS).phi());
383 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::execute(const EventContext& ctx) success");
384 return StatusCode::SUCCESS;
391 const std::vector<const xAOD::MuonRoI*>& muonRoIs,
396 const bool dynamicDeltaRpc,
397 const EventContext& ctx)
const
399 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMuonSignature start");
400 StatusCode
sc = StatusCode::SUCCESS;
410 trackFitterTimer, trackExtraTimer, calibrationTimer );
427 p_roids = roids.begin();
428 for (p_roi=(muonRoIs).begin(); p_roi!=(muonRoIs).end(); ++p_roi) {
431 std::vector<TrigL2MuonSA::TrackPattern> trackPatterns;
436 rpcFitResult.
Clear();
437 tgcFitResult.
Clear();
461 if (!
sc.isSuccess()) {
464 trackPatterns.push_back(std::move(trackPattern));
467 rpcFitResult, tgcFitResult, mdtHits, cscHits,
469 trackPatterns, outputTracks, outputID, outputMS, ctx);
475 patternTimer.start();
480 if (!
sc.isSuccess()) {
484 rpcFitResult, tgcFitResult, mdtHits, cscHits,
486 trackPatterns, outputTracks, outputID, outputMS, ctx);
492 stationFitterTimer.start();
496 if (!
sc.isSuccess()) {
500 rpcFitResult, tgcFitResult, mdtHits, cscHits,
502 trackPatterns, outputTracks, outputID, outputMS, ctx);
505 stationFitterTimer.stop();
508 trackFitterTimer.start();
513 if (!
sc.isSuccess()) {
517 rpcFitResult, tgcFitResult, mdtHits, cscHits,
519 trackPatterns, outputTracks, outputID, outputMS, ctx);
522 trackFitterTimer.stop();
542 if (!
sc.isSuccess()) {
545 trackPatterns.push_back(std::move(trackPattern));
548 rpcFitResult, tgcFitResult, mdtHits, cscHits,
550 trackPatterns, outputTracks, outputID, outputMS, ctx);
556 patternTimer.start();
564 if (!
sc.isSuccess()) {
568 rpcFitResult, tgcFitResult, mdtHits, cscHits,
570 trackPatterns, outputTracks, outputID, outputMS, ctx);
576 stationFitterTimer.start();
594 m_cscsegmaker->FindSuperPointCsc(cscHits,trackPatterns,tgcFitResult,muonRoad);
596 if (!
sc.isSuccess()) {
600 rpcFitResult, tgcFitResult, mdtHits, cscHits,
602 trackPatterns, outputTracks, outputID, outputMS, ctx);
606 stationFitterTimer.stop();
609 trackFitterTimer.start();
615 if (!
sc.isSuccess()) {
619 rpcFitResult, tgcFitResult, mdtHits, cscHits,
621 trackPatterns, outputTracks, outputID, outputMS, ctx);
624 trackFitterTimer.stop();
628 const float ETA_LIMIT = 2.8;
629 const float DELTA_ETA_LIMIT = 1.0;
632 float roiEta = (*p_roi)->eta();
634 ( std::abs(track.etaMap) > ETA_LIMIT || std::abs(track.etaMap-roiEta) > DELTA_ETA_LIMIT ) ) {
635 track.etaMap = roiEta;
640 trackExtraTimer.start();
644 if (
sc != StatusCode::SUCCESS) {
648 rpcFitResult, tgcFitResult, mdtHits, cscHits,
650 trackPatterns, outputTracks, outputID, outputMS, ctx);
653 trackExtraTimer.stop();
657 if (
sc != StatusCode::SUCCESS) {
661 rpcFitResult, tgcFitResult, mdtHits, cscHits,
663 trackPatterns, outputTracks, outputID, outputMS, ctx);
669 rpcFitResult, tgcFitResult, mdtHits, cscHits,
671 trackPatterns, outputTracks, outputID, outputMS, ctx);
679 std::vector<uint32_t> localBuffer;
686 if (
sc != StatusCode::SUCCESS ) {
691 ATH_MSG_DEBUG(
"Retrieved the buffer, with size: " << localBuffer.size());
697 ATH_MSG_DEBUG(
"The size of the TrigCompositeContainer is: " << outputMuonCal->
size() );
701 return StatusCode::FAILURE;
703 tc->setDetail(
"muCalibDS", localBuffer );
708 if (p_roids==roids.end())
break;
711 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMuonSignature success");
712 return StatusCode::SUCCESS;
721 const std::vector<const TrigRoiDescriptor*>& roids,
722 const std::vector<const xAOD::MuonRoI*>& muonRoIs,
725 const bool dynamicDeltaRpc,
726 const EventContext& ctx)
const
728 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMuonSignatureIO start");
729 StatusCode
sc = StatusCode::SUCCESS;
740 trackFitterTimer, trackExtraTimer, calibrationTimer );
755 p_roids = roids.begin();
756 for (
const auto p_roi : muonRoIs) {
757 ATH_MSG_DEBUG(
"roi eta/phi: " << (*p_roi).eta() <<
"/" << (*p_roi).phi());
760 if ( (idtracks).
empty() )
ATH_MSG_DEBUG(
"IO TEST: xAOD::TrackParticleContainer has 0 tracks --> Can not use FTF tracks...");
761 else ATH_MSG_DEBUG(
"IO TEST: xAOD::TrackParticleContainer has " << (idtracks).
size() <<
" tracks --> Start inside-out mode!");
763 std::vector<TrigL2MuonSA::TrackPattern> trackPatterns;
764 int idtrack_idx = -1;
765 for (
auto idtrack : idtracks) {
781 rpcFitResult.
Clear();
782 tgcFitResult.
Clear();
787 trackPatterns.clear();
790 if (!
sc.isSuccess()) {
797 if ( std::abs(idtrack->eta()) < 1.05 ){
798 ATH_MSG_DEBUG(
"FTF track at IP is in Barrel: " << idtrack->eta());
800 ATH_MSG_DEBUG(
"FTF track at IP is in Endcap: " << idtrack->eta());
823 if (!
sc.isSuccess()) {
832 patternTimer.start();
837 if (!
sc.isSuccess()) {
844 stationFitterTimer.start();
848 if (!
sc.isSuccess()) {
852 stationFitterTimer.stop();
855 trackFitterTimer.start();
859 if (!
sc.isSuccess()) {
863 trackFitterTimer.stop();
883 if (!
sc.isSuccess()) {
892 patternTimer.start();
899 if (!
sc.isSuccess()) {
906 stationFitterTimer.start();
914 m_cscsegmaker->FindSuperPointCsc(cscHits,trackPatterns,tgcFitResult,muonRoad);
915 if (!
sc.isSuccess()) {
919 stationFitterTimer.stop();
922 trackFitterTimer.start();
927 if (!
sc.isSuccess()) {
931 trackFitterTimer.stop();
937 const float ETA_LIMIT = 2.8;
938 const float DELTA_ETA_LIMIT = 1.0;
939 float roiEta = (*p_roi).eta();
941 && ( std::abs(track.etaMap) > ETA_LIMIT || std::abs(track.etaMap-roiEta) > DELTA_ETA_LIMIT ) ) {
942 trackPatterns.back().etaMap = roiEta;
947 if (
sc != StatusCode::SUCCESS) {
952 if ( std::abs(trackPatterns.back().pt) >
ZERO_LIMIT ) {
953 storeMuonSA(p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
954 rpcFitResult, tgcFitResult, mdtHits, cscHits,
956 trackPatterns.back(), outputSAs, ctx);
958 muonCB->makePrivateStore();
961 muonCB->
setPt(idtrack->pt());
962 muonCB->
setEta(idtrack->eta());
963 muonCB->
setPhi(idtrack->phi());
974 if(outputSAs.
empty()) {
980 rpcFitResult.
Clear();
981 tgcFitResult.
Clear();
986 trackPatterns.clear();
988 storeMuonSA(p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
989 rpcFitResult, tgcFitResult, mdtHits, cscHits,
991 trackPattern, outputSAs, ctx);
993 ATH_MSG_ERROR(
"outputSAs is still empty after attempted dummy store.");
994 return StatusCode::FAILURE;
997 muonCB->makePrivateStore();
1011 for (
auto outputSA : outputSAs){
1012 ATH_MSG_DEBUG(
"outputSA pt/eta/phi: " << outputSA->pt() <<
"/" << outputSA->etaMS() <<
"/" << outputSA->phiMS());
1016 for (
auto outputCB : outputCBs){
1017 ATH_MSG_DEBUG(
"outputCB pt/eta/phi: " << outputCB->pt() <<
"/" << outputCB->eta() <<
"/" << outputCB->phi());
1021 if (p_roids==roids.end())
break;
1024 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMuonSignatureIO success");
1025 return StatusCode::SUCCESS;
1033 const std::vector<const xAOD::MuonRoI*>& muonRoIs,
1035 const bool dynamicDeltaRpc,
1036 const EventContext& ctx)
const
1038 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMultiTrackSignature start");
1039 StatusCode
sc = StatusCode::SUCCESS;
1043 std::vector<TrigL2MuonSA::RpcFitResult> clusterFitResults;
1044 std::vector< TrigL2MuonSA::MuonRoad > clusterRoad;
1045 std::vector<TrigL2MuonSA::MdtHits> mdtHits_cluster_normal;
1056 trackFitterTimer, trackExtraTimer, calibrationTimer );
1073 p_roids = roids.begin();
1074 for (p_roi=(muonRoIs).begin(); p_roi!=(muonRoIs).end(); ++p_roi) {
1077 std::vector<TrigL2MuonSA::TrackPattern> trackPatterns;
1082 rpcFitResult.
Clear();
1083 tgcFitResult.
Clear();
1089 clusterFitResults.clear();
1090 clusterRoad.clear();
1091 mdtHits_cluster_normal.clear();
1107 mdtHits_cluster_normal,
1110 if (!
sc.isSuccess()) {
1118 for(
unsigned int i_road = 0; i_road < clusterRoad.size(); i_road++){
1120 std::vector<TrigL2MuonSA::TrackPattern> tmp_trkPats; tmp_trkPats.clear();
1122 patternTimer.start();
1124 clusterRoad.at(i_road),
1125 mdtHits_cluster_normal.at(i_road),
1127 if (!
sc.isSuccess()) {
1131 patternTimer.stop();
1134 stationFitterTimer.start();
1136 clusterFitResults.at(i_road),
1138 if (!
sc.isSuccess()) {
1143 stationFitterTimer.stop();
1146 trackFitterTimer.start();
1148 clusterFitResults.at(i_road),
1151 if (!
sc.isSuccess()) {
1155 trackFitterTimer.stop();
1158 const float ETA_LIMIT = 2.8;
1159 const float DELTA_ETA_LIMIT = 1.0;
1161 float roiEta = (*p_roi)->eta();
1163 && ( std::abs(track.etaMap) > ETA_LIMIT || std::abs(track.etaMap-roiEta) > DELTA_ETA_LIMIT ) ) {
1164 track.etaMap = roiEta;
1169 trackExtraTimer.start();
1174 if (
sc != StatusCode::SUCCESS) {
1179 trackExtraTimer.stop();
1181 if(tmp_trkPats.size() > 0){
1182 ATH_MSG_DEBUG(
"temp pT calculated 2mu-in-1RoI alg = " << tmp_trkPats[0].pt <<
" GeV");
1183 if( (std::abs(tmp_trkPats[0].barrelSagitta) <
ZERO_LIMIT &&
1184 std::abs(tmp_trkPats[0].barrelRadius) <
ZERO_LIMIT) ||
1187 trackPatterns.push_back(tmp_trkPats[0]);
1190 storeMuonSA(*p_roi, *p_roids, clusterRoad.at(i_road), mdtRegion, rpcHits, tgcHits,
1191 clusterFitResults.at(i_road), tgcFitResult, mdtHits_cluster_normal.at(i_road), cscHits,
1192 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1195 if(trackPatterns.empty()){
1196 ATH_MSG_DEBUG(
"multi-track SA falied to reconstruct muons");
1197 trackPatterns.emplace_back();
1198 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1199 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1200 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1207 ATH_MSG_DEBUG(
"multi-track SA does nothings and skips for EndcapRoI");
1223 if (!
sc.isSuccess()) {
1225 trackPatterns.emplace_back();
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");
1459 muonSA->makePrivateStore();
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 ) = std::move(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 ) = std::move(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_DEBUG(x,...)
#define ATH_MSG_ERROR(x,...)
#define ATH_MSG_WARNING(x,...)
#define ATH_MSG_VERBOSE(x,...)
#define ATH_MSG_INFO(x,...)
Header file to be included by clients of the Monitored infrastructure.
const LVL1::RecMuonRoI * matchingRecRoI(uint32_t roiWord, const DataVector< LVL1::RecMuonRoI > &collection)
size_t size() const
Number of registered mappings.
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.
bool empty() const noexcept
Returns true if the collection is empty.
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.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
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="")
constexpr 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.