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>()));
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() 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(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() );
700 return StatusCode::FAILURE;
703 tc->setDetail(
"muCalibDS", localBuffer );
709 if (p_roids==roids.end())
break;
712 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMuonSignature success");
713 return StatusCode::SUCCESS;
722 const std::vector<const TrigRoiDescriptor*>& roids,
723 const std::vector<const xAOD::MuonRoI*>& muonRoIs,
726 const bool dynamicDeltaRpc,
727 const EventContext& ctx)
const
729 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMuonSignatureIO start");
730 StatusCode
sc = StatusCode::SUCCESS;
741 trackFitterTimer, trackExtraTimer, calibrationTimer );
756 p_roids = roids.begin();
757 for (
const auto p_roi : muonRoIs) {
758 ATH_MSG_DEBUG(
"roi eta/phi: " << (*p_roi).eta() <<
"/" << (*p_roi).phi());
761 if ( (idtracks).
empty() )
ATH_MSG_DEBUG(
"IO TEST: xAOD::TrackParticleContainer has 0 tracks --> Can not use FTF tracks...");
762 else ATH_MSG_DEBUG(
"IO TEST: xAOD::TrackParticleContainer has " << (idtracks).size() <<
" tracks --> Start inside-out mode!");
764 std::vector<TrigL2MuonSA::TrackPattern> trackPatterns;
765 int idtrack_idx = -1;
766 for (
auto idtrack : idtracks) {
782 rpcFitResult.
Clear();
783 tgcFitResult.
Clear();
788 trackPatterns.clear();
791 if (!
sc.isSuccess()) {
798 if ( std::abs(idtrack->eta()) < 1.05 ){
799 ATH_MSG_DEBUG(
"FTF track at IP is in Barrel: " << idtrack->eta());
801 ATH_MSG_DEBUG(
"FTF track at IP is in Endcap: " << idtrack->eta());
824 if (!
sc.isSuccess()) {
833 patternTimer.start();
838 if (!
sc.isSuccess()) {
845 stationFitterTimer.start();
849 if (!
sc.isSuccess()) {
853 stationFitterTimer.stop();
856 trackFitterTimer.start();
860 if (!
sc.isSuccess()) {
864 trackFitterTimer.stop();
884 if (!
sc.isSuccess()) {
893 patternTimer.start();
900 if (!
sc.isSuccess()) {
907 stationFitterTimer.start();
915 m_cscsegmaker->FindSuperPointCsc(cscHits,trackPatterns,tgcFitResult,muonRoad);
916 if (!
sc.isSuccess()) {
920 stationFitterTimer.stop();
923 trackFitterTimer.start();
928 if (!
sc.isSuccess()) {
932 trackFitterTimer.stop();
938 const float ETA_LIMIT = 2.8;
939 const float DELTA_ETA_LIMIT = 1.0;
940 float roiEta = (*p_roi).eta();
942 && ( std::abs(track.etaMap) > ETA_LIMIT || std::abs(track.etaMap-roiEta) > DELTA_ETA_LIMIT ) ) {
943 trackPatterns.back().etaMap = roiEta;
948 if (
sc != StatusCode::SUCCESS) {
953 if ( std::abs(trackPatterns.back().pt) >
ZERO_LIMIT ) {
954 storeMuonSA(p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
955 rpcFitResult, tgcFitResult, mdtHits, cscHits,
957 trackPatterns.back(), outputSAs, ctx);
962 muonCB->
setPt(idtrack->pt());
963 muonCB->
setEta(idtrack->eta());
964 muonCB->
setPhi(idtrack->phi());
975 if(outputSAs.
size()==0) {
981 rpcFitResult.
Clear();
982 tgcFitResult.
Clear();
987 trackPatterns.clear();
989 storeMuonSA(p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
990 rpcFitResult, tgcFitResult, mdtHits, cscHits,
992 trackPattern, outputSAs, ctx);
1008 for (
auto outputSA : outputSAs){
1009 ATH_MSG_DEBUG(
"outputSA pt/eta/phi: " << outputSA->pt() <<
"/" << outputSA->etaMS() <<
"/" << outputSA->phiMS());
1013 for (
auto outputCB : outputCBs){
1014 ATH_MSG_DEBUG(
"outputCB pt/eta/phi: " << outputCB->pt() <<
"/" << outputCB->eta() <<
"/" << outputCB->phi());
1018 if (p_roids==roids.end())
break;
1021 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMuonSignatureIO success");
1022 return StatusCode::SUCCESS;
1030 const std::vector<const xAOD::MuonRoI*>& muonRoIs,
1032 const bool dynamicDeltaRpc,
1033 const EventContext& ctx)
const
1035 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMultiTrackSignature start");
1036 StatusCode
sc = StatusCode::SUCCESS;
1040 std::vector<TrigL2MuonSA::RpcFitResult> clusterFitResults;
1041 std::vector< TrigL2MuonSA::MuonRoad > clusterRoad;
1042 std::vector<TrigL2MuonSA::MdtHits> mdtHits_cluster_normal;
1053 trackFitterTimer, trackExtraTimer, calibrationTimer );
1070 p_roids = roids.begin();
1071 for (p_roi=(muonRoIs).begin(); p_roi!=(muonRoIs).end(); ++p_roi) {
1074 std::vector<TrigL2MuonSA::TrackPattern> trackPatterns;
1079 rpcFitResult.
Clear();
1080 tgcFitResult.
Clear();
1086 clusterFitResults.clear();
1087 clusterRoad.clear();
1088 mdtHits_cluster_normal.clear();
1104 mdtHits_cluster_normal,
1107 if (!
sc.isSuccess()) {
1115 for(
unsigned int i_road = 0; i_road < clusterRoad.size(); i_road++){
1117 std::vector<TrigL2MuonSA::TrackPattern> tmp_trkPats; tmp_trkPats.clear();
1119 patternTimer.start();
1121 clusterRoad.at(i_road),
1122 mdtHits_cluster_normal.at(i_road),
1124 if (!
sc.isSuccess()) {
1128 patternTimer.stop();
1131 stationFitterTimer.start();
1133 clusterFitResults.at(i_road),
1135 if (!
sc.isSuccess()) {
1140 stationFitterTimer.stop();
1143 trackFitterTimer.start();
1145 clusterFitResults.at(i_road),
1148 if (!
sc.isSuccess()) {
1152 trackFitterTimer.stop();
1155 const float ETA_LIMIT = 2.8;
1156 const float DELTA_ETA_LIMIT = 1.0;
1158 float roiEta = (*p_roi)->eta();
1160 && ( std::abs(track.etaMap) > ETA_LIMIT || std::abs(track.etaMap-roiEta) > DELTA_ETA_LIMIT ) ) {
1161 track.etaMap = roiEta;
1166 trackExtraTimer.start();
1171 if (
sc != StatusCode::SUCCESS) {
1176 trackExtraTimer.stop();
1178 if(tmp_trkPats.size() > 0){
1179 ATH_MSG_DEBUG(
"temp pT calculated 2mu-in-1RoI alg = " << tmp_trkPats[0].pt <<
" GeV");
1180 if( (std::abs(tmp_trkPats[0].barrelSagitta) <
ZERO_LIMIT &&
1181 std::abs(tmp_trkPats[0].barrelRadius) <
ZERO_LIMIT) ||
1184 trackPatterns.push_back(tmp_trkPats[0]);
1187 storeMuonSA(*p_roi, *p_roids, clusterRoad.at(i_road), mdtRegion, rpcHits, tgcHits,
1188 clusterFitResults.at(i_road), tgcFitResult, mdtHits_cluster_normal.at(i_road), cscHits,
1189 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1192 if(trackPatterns.empty()){
1193 ATH_MSG_DEBUG(
"multi-track SA falied to reconstruct muons");
1195 trackPatterns.push_back(trackPattern);
1196 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1197 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1198 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1205 ATH_MSG_DEBUG(
"multi-track SA does nothings and skips for EndcapRoI");
1221 if (!
sc.isSuccess()) {
1224 trackPatterns.push_back(trackPattern);
1226 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1227 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1228 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1234 patternTimer.start();
1244 if (!
sc.isSuccess()) {
1247 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1248 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1249 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1252 patternTimer.stop();
1255 stationFitterTimer.start();
1272 m_cscsegmaker->FindSuperPointCsc(cscHits,trackPatterns,tgcFitResult,muonRoad);
1274 if (!
sc.isSuccess()) {
1276 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1277 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1278 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1282 stationFitterTimer.stop();
1285 trackFitterTimer.start();
1291 if (!
sc.isSuccess()) {
1293 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1294 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1295 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1298 trackFitterTimer.stop();
1301 const float ETA_LIMIT = 2.8;
1302 const float DELTA_ETA_LIMIT = 1.0;
1304 float roiEta = (*p_roi)->eta();
1306 && ( std::abs(track.etaMap) > ETA_LIMIT || std::abs(track.etaMap-roiEta) > DELTA_ETA_LIMIT ) ) {
1307 track.etaMap = roiEta;
1312 trackExtraTimer.start();
1316 if (
sc != StatusCode::SUCCESS) {
1318 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1319 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1320 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1323 trackExtraTimer.stop();
1325 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1326 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1327 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1332 if (
sc != StatusCode::SUCCESS) {
1337 if (p_roids==roids.end())
break;
1340 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMultiTrackSignature success");
1341 return StatusCode::SUCCESS;
1359 const std::vector<TrigL2MuonSA::TrackPattern>& trackPatterns,
1363 const EventContext& ctx)
const
1366 if( trackPatterns.size() > 0 ) {
1371 storeMuonSA(roi, roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1372 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1374 pattern, outputTracks, ctx);
1379 ATH_MSG_DEBUG(
"Not update output objects because trackPatterns has no object");
1399 const EventContext& ctx )
const
1403 const int currentRoIId = roids->
roiId();
1405 const EventIDBase& eventID = ctx.eventID();
1407 if (!eventInfo.isValid()) {
1417 int barrelinner = 0;
1418 int endcapinner = 3;
1424 if (pattern.s_address==-1) {
1439 ATH_MSG_DEBUG(
"### Hit patterns at the Muon Spectrometer ###");
1440 ATH_MSG_DEBUG(
"pattern#0: # of hits at inner =" << pattern.mdtSegments[inner].size());
1441 ATH_MSG_DEBUG(
"pattern#0: # of hits at middle =" << pattern.mdtSegments[middle].size());
1442 ATH_MSG_DEBUG(
"pattern#0: # of hits at outer =" << pattern.mdtSegments[outer].size());
1443 if (pattern.s_address==-1){
1444 ATH_MSG_DEBUG(
"pattern#0: # of hits at ee =" << pattern.mdtSegments[ee].size());
1445 ATH_MSG_DEBUG(
"pattern#0: # of hits at endcap barrel inner =" << pattern.mdtSegments[barrelinner].size());
1446 ATH_MSG_DEBUG(
"pattern#0: # of hits at BEE =" << pattern.mdtSegments[bee].size());
1448 ATH_MSG_DEBUG(
"pattern#0: # of hits at BME =" << pattern.mdtSegments[bme].size());
1449 ATH_MSG_DEBUG(
"pattern#0: # of hits at barrel endcap inner =" << pattern.mdtSegments[endcapinner].size());
1451 ATH_MSG_DEBUG(
"### ************************************* ###");
1452 ATH_MSG_DEBUG(
"Estimated muon pt = " << pattern.pt <<
" GeV");
1461 muonSA->
setPt(pattern.pt*pattern.charge);
1465 muonSA->
setPtCSC(pattern.ptCSC*pattern.charge);
1467 muonSA->
setEta(pattern.etaVtx);
1468 muonSA->
setPhi(pattern.phiVtx);
1480 muonSA->
setRMS(pattern.superPoints[inner].R);
1481 muonSA->
setZMS(pattern.superPoints[inner].Z);
1482 muonSA->
setDirZMS(pattern.superPoints[inner].Alin);
1504 muonSA->
setSuperPoint(inner, pattern.superPoints[inner].R, pattern.superPoints[inner].Z,
1505 pattern.superPoints[inner].Alin, pattern.superPoints[inner].Blin, pattern.superPoints[inner].Chi2);
1506 muonSA->
setSuperPoint(middle, pattern.superPoints[middle].R, pattern.superPoints[middle].Z,
1507 pattern.superPoints[middle].Alin, pattern.superPoints[middle].Blin, pattern.superPoints[middle].Chi2);
1508 muonSA->
setSuperPoint(outer, pattern.superPoints[outer].R, pattern.superPoints[outer].Z,
1509 pattern.superPoints[outer].Alin, pattern.superPoints[outer].Blin, pattern.superPoints[outer].Chi2);
1510 if (pattern.s_address==-1){
1511 muonSA->
setSuperPoint(ee, pattern.superPoints[ee].R, pattern.superPoints[ee].Z,
1512 pattern.superPoints[ee].Alin, pattern.superPoints[ee].Blin, pattern.superPoints[ee].Chi2);
1513 muonSA->
setSuperPoint(barrelinner, pattern.superPoints[barrelinner].R, pattern.superPoints[barrelinner].Z,
1514 pattern.superPoints[barrelinner].Alin, pattern.superPoints[barrelinner].Blin, pattern.superPoints[barrelinner].Chi2);
1515 muonSA->
setSuperPoint(csc, pattern.superPoints[csc].R, pattern.superPoints[csc].Z,
1516 pattern.superPoints[csc].Alin, pattern.superPoints[csc].Blin, pattern.superPoints[csc].Chi2);
1518 muonSA->
setSuperPoint(endcapinner, pattern.superPoints[endcapinner].R, pattern.superPoints[endcapinner].Z,
1519 pattern.superPoints[endcapinner].Alin, pattern.superPoints[endcapinner].Blin, pattern.superPoints[endcapinner].Chi2);
1525 uint32_t muondetmask = 0;
1532 muonSA->
setLvl1Id( eventInfo->extendedLevel1ID() );
1565 std::vector<std::string> mdtId;
1567 if ( mdtHit.isOutlier==0 || mdtHit.isOutlier==1 ) {
1568 muonSA->
setMdtHit(mdtHit.OnlineId, mdtHit.isOutlier, mdtHit.Chamber,
1569 mdtHit.R, mdtHit.Z, mdtHit.cPhi0, mdtHit.Residual,
1570 mdtHit.DriftTime, mdtHit.DriftSpace, mdtHit.DriftSigma);
1571 mdtId.push_back(mdtHit.Id.getString());
1575 accessor_mdthitid( *muonSA ) = mdtId;
1578 std::vector<float> cscResol;
1581 if ( cscHit.isOutlier==0 || cscHit.isOutlier==1 ) {
1582 muonSA->
setCscHit(cscHit.isOutlier, cscHit.Chamber, cscHit.StationName,
1583 cscHit.StationEta, cscHit.StationPhi,
1584 cscHit.ChamberLayer, cscHit.WireLayer, cscHit.MeasuresPhi, cscHit.Strip,
1585 cscHit.eta, cscHit.phi, cscHit.r, cscHit.z,
1586 cscHit.charge, cscHit.time, cscHit.Residual);
1587 cscResol.push_back(cscHit.resolution);
1589 <<
"OL=" << cscHit.isOutlier <<
","
1590 <<
"Ch=" << cscHit.Chamber <<
","
1591 <<
"StationName=" << cscHit.StationName <<
","
1592 <<
"StationEta=" << cscHit.StationEta <<
","
1593 <<
"StationPhi=" << cscHit.StationPhi <<
","
1594 <<
"ChamberLayer=" << cscHit.ChamberLayer <<
","
1595 <<
"WireLayer=" << cscHit.WireLayer <<
","
1596 <<
"MeasuresPhi=" << cscHit.MeasuresPhi <<
","
1597 <<
"Strip=" << cscHit.Strip <<
","
1598 <<
"eta=" << cscHit.eta <<
","
1599 <<
"phi=" << cscHit.phi <<
","
1600 <<
"r=" << cscHit.r <<
","
1601 <<
"z=" << cscHit.z <<
","
1602 <<
"charge=" << cscHit.charge <<
","
1603 <<
"Rs=" << cscHit.Residual <<
","
1604 <<
"t=" << cscHit.time);
1609 accessor_cschitresol( *muonSA ) = cscResol;
1612 float sumbeta[8]={0};
1613 float nhit_layer[8]={0};
1615 muonSA->
setRpcHit(rpcHit.layer, rpcHit.measuresPhi,
1616 rpcHit.x, rpcHit.y, rpcHit.z,
1617 rpcHit.time, rpcHit.distToEtaReadout, rpcHit.distToPhiReadout,
1618 rpcHit.stationName);
1620 <<
"stationName=" << rpcHit.stationName <<
","
1621 <<
"layer=" << rpcHit.layer <<
","
1622 <<
"measuresPhi=" << rpcHit.measuresPhi <<
","
1623 <<
"x=" << rpcHit.x <<
","
1624 <<
"y=" << rpcHit.y <<
","
1625 <<
"y=" << rpcHit.z);
1627 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)) );
1628 if(dRMS>0.05)
continue;
1629 float muToF = rpcHit.l/1000/(CLHEP::c_light/1000);
1630 float Tprop = rpcHit.distToPhiReadout/1000*4.8;
1631 float beta = rpcHit.l/1000/(muToF+rpcHit.time-Tprop+3.125/2)/(CLHEP::c_light/1000);
1632 sumbeta[rpcHit.layer]=sumbeta[rpcHit.layer]+beta;
1633 nhit_layer[rpcHit.layer]=nhit_layer[rpcHit.layer]+1;
1636 std::vector<float> Avebeta_layer;
1637 for(
int i_layer=0;i_layer<8;i_layer++){
1638 if(nhit_layer[i_layer]!=0)Avebeta_layer.push_back( sumbeta[i_layer]/nhit_layer[i_layer] );
1640 if(Avebeta_layer.size()>0) muonSA->
setBeta( std::accumulate(Avebeta_layer.begin(),Avebeta_layer.end(),0.0)/Avebeta_layer.size() );
1642 Avebeta_layer.clear();
1646 muonSA->
setTgcHit(tgcHit.eta, tgcHit.phi, tgcHit.r, tgcHit.z,
1647 tgcHit.width, tgcHit.sta, tgcHit.isStrip,
1648 tgcHit.bcTag, tgcHit.inRoad);
1650 <<
"eta=" << tgcHit.eta <<
","
1651 <<
"phi=" << tgcHit.phi <<
","
1652 <<
"r=" << tgcHit.r <<
","
1653 <<
"z=" << tgcHit.z <<
","
1654 <<
"width=" << tgcHit.width <<
","
1655 <<
"stationNum=" << tgcHit.sta <<
","
1656 <<
"isStrip=" << tgcHit.isStrip <<
","
1657 <<
"bcTag=" << tgcHit.bcTag <<
","
1658 <<
"inRoad=" << tgcHit.inRoad);
1663 for(
unsigned int i_hit=0; i_hit<stgcHits.size(); i_hit++) {
1664 if ( stgcHits[i_hit].isOutlier==0 || stgcHits[i_hit].isOutlier==1 ) {
1667 muonSA->
setStgcCluster(stgcHits[i_hit].layerNumber, stgcHits[i_hit].isOutlier, stgcHits[i_hit].channelType,
1668 stgcHits[i_hit].
eta, stgcHits[i_hit].
phi, stgcHits[i_hit].
r, stgcHits[i_hit].
z,
1669 stgcHits[i_hit].ResidualR, stgcHits[i_hit].ResidualPhi,
1670 stgcHits[i_hit].stationEta, stgcHits[i_hit].stationPhi, stgcHits[i_hit].stationName);
1673 <<
"eta=" << stgcHits[i_hit].
eta <<
","
1674 <<
"phi=" << stgcHits[i_hit].
phi <<
","
1675 <<
"r=" << stgcHits[i_hit].
r <<
","
1676 <<
"z=" << stgcHits[i_hit].
z <<
","
1677 <<
"z=" << stgcHits[i_hit].ResidualR <<
","
1678 <<
"z=" << stgcHits[i_hit].ResidualPhi);
1683 for(
unsigned int i_hit=0; i_hit<mmHits.size(); i_hit++) {
1684 if ( mmHits[i_hit].isOutlier==0 || mmHits[i_hit].isOutlier==1 ) {
1687 muonSA->
setMmCluster(mmHits[i_hit].layerNumber, mmHits[i_hit].isOutlier,
1688 mmHits[i_hit].
eta, mmHits[i_hit].
phi, mmHits[i_hit].
r, mmHits[i_hit].
z,
1689 mmHits[i_hit].ResidualR, mmHits[i_hit].ResidualPhi,
1690 mmHits[i_hit].stationEta, mmHits[i_hit].stationPhi, mmHits[i_hit].stationName);
1693 <<
"eta=" << tgcHits[i_hit].
eta <<
","
1694 <<
"phi=" << tgcHits[i_hit].
phi <<
","
1695 <<
"r=" << tgcHits[i_hit].
r <<
","
1696 <<
"z=" << tgcHits[i_hit].
z <<
","
1697 <<
"width=" << tgcHits[i_hit].
width <<
","
1698 <<
"stationNum=" << tgcHits[i_hit].sta <<
","
1699 <<
"isStrip=" << tgcHits[i_hit].isStrip <<
","
1700 <<
"bcTag=" << tgcHits[i_hit].
bcTag <<
","
1701 <<
"inRoad=" << tgcHits[i_hit].inRoad);
1706 for (
int i_station=0; i_station<8; i_station++) {
1707 for (
int i_sector=0; i_sector<2; i_sector++) {
1708 muonSA->
setRoad(i_station, i_sector, muonRoad.
aw[i_station][i_sector], muonRoad.
bw[i_station][i_sector]);
1709 muonSA->
setRegionZ(i_station, i_sector, mdtRegion.
zMin[i_station][i_sector], mdtRegion.
zMax[i_station][i_sector]);
1710 muonSA->
setRegionR(i_station, i_sector, mdtRegion.
rMin[i_station][i_sector], mdtRegion.
rMax[i_station][i_sector]);
1711 muonSA->
setRegionEta(i_station, i_sector, mdtRegion.
etaMin[i_station][i_sector], mdtRegion.
etaMax[i_station][i_sector]);
1746 if (pattern.s_address==-1) {
1749 if ( std::abs(pattern.superPoints[inner].R) >
ZERO_LIMIT && std::abs(pattern.superPoints[inner].Z) >
ZERO_LIMIT ) {
1751 float theta = std::atan(pattern.superPoints[inner].R/std::abs(pattern.superPoints[inner].Z));
1752 float eta = (std::tan(
theta/2.)!=0.)? -std::log(std::tan(
theta/2.))*pattern.superPoints[inner].Z/std::abs(pattern.superPoints[inner].Z): 0.;
1758 if ( std::abs(pattern.superPoints[middle].R) >
ZERO_LIMIT && std::abs(pattern.superPoints[middle].Z) >
ZERO_LIMIT ) {
1761 double phi1 = tgcFitResult.
tgcMid1[1];
1762 double phi2 = tgcFitResult.
tgcMid2[1];
1763 if ( tgcFitResult.
tgcMid1[3]==0. || tgcFitResult.
tgcMid2[3]==0. ) {
1766 }
else if( phi1*phi2 < 0 && std::abs(phi1)>(
M_PI/2.) ) {
1767 double tmp1 = (phi1>0)? phi1 -
M_PI : phi1 +
M_PI;
1768 double tmp2 = (phi2>0)? phi2 -
M_PI : phi2 +
M_PI;
1769 double tmp = (tmp1+tmp2)/2.;
1772 phi = (phi2+phi1)/2.;
1777 float theta = std::atan(pattern.superPoints[middle].R/std::abs(pattern.superPoints[middle].Z));
1778 float eta = (std::tan(
theta/2.)!=0.)? -std::log(std::tan(
theta/2.))*pattern.superPoints[middle].Z/std::abs(pattern.superPoints[middle].Z): 0.;
1785 if ( std::abs(pattern.superPoints[middle].R) >
ZERO_LIMIT && std::abs(pattern.superPoints[middle].Z) >
ZERO_LIMIT ) {
1792 float theta = std::atan(pattern.superPoints[middle].R/std::abs(pattern.superPoints[middle].Z));
1793 float eta = (std::tan(
theta/2.)!=0.)? -std::log(std::tan(
theta/2.))*pattern.superPoints[middle].Z/std::abs(pattern.superPoints[middle].Z): 0.;
1815 float mseta = pattern.etaMap;
1816 float msphi = pattern.phiMS;
1820 mseta = roids->
eta();
1821 msphi = roids->
phi();
1825 const float phiHalfWidth = 0.1;
1826 const float etaHalfWidth = 0.1;
1832 mseta - etaHalfWidth,
1833 mseta + etaHalfWidth,
1835 msphi - phiHalfWidth,
1836 msphi + phiHalfWidth);
1840 << mseta <<
"/" << msphi);
1843 <<
" phi=" << MSroiDescriptor->
phi()
1844 <<
", eta=" << MSroiDescriptor->
eta());
1866 const double scalePhiWidthForFailure = 2;
1867 const double scaleRoIforZeroPt = 2;
1875 float phiHalfWidth = 0.1;
1876 float etaHalfWidth = 0.1;
1891 if (pattern.isTgcFailure || pattern.isRpcFailure)
1892 phiHalfWidth *= scalePhiWidthForFailure;
1898 pattern.etaVtx - etaHalfWidth,
1899 pattern.etaVtx + etaHalfWidth,
1901 pattern.phiVtx - phiHalfWidth,
1902 pattern.phiVtx + phiHalfWidth);
1905 <<
"pattern.etaVtx/pattern.phiVtx="
1906 << pattern.etaVtx <<
"/" << pattern.phiVtx);
1909 <<
" phi=" << IDroiDescriptor->
phi()
1910 <<
", eta=" << IDroiDescriptor->
eta());
1920 roids->
eta() - (roids->
eta() - roids->
etaMinus()) * scaleRoIforZeroPt,
1921 roids->
eta() + (roids->
etaPlus() - roids->
eta()) * scaleRoIforZeroPt,
1926 ATH_MSG_VERBOSE(
"will Record an RoiDescriptor for Inner Detector in case with zero pT:"
1927 <<
" phi=" << IDroiDescriptor->
phi()
1928 <<
", phi min=" << IDroiDescriptor->
phiMinus()
1929 <<
", phi max=" << IDroiDescriptor->
phiPlus()
1930 <<
", eta=" << IDroiDescriptor->
eta()
1931 <<
", eta min=" << IDroiDescriptor->
etaMinus()
1932 <<
", eta max=" << IDroiDescriptor->
etaPlus());
1947 if (name ==
"MuFastSteering_Muon") {
1949 }
else if (name ==
"MuFastSteering_900GeV") {
1963 bool isBarrel = (muonSA->
sAddress()==-1) ? true :
false;
1966 float pt = muonSA->
pt();
1969 const int N_PARAMS = 2;
1972 const float etaMinWin_brl = 0.10;
1973 const float etaMinWin_ec1 = 0.10;
1974 const float etaMinWin_ec2 = 0.10;
1975 const float etaMinWin_ec3 = 0.10;
1976 const float etaMinWin_ecA = 0.10;
1977 const float etaMinWin_ecB = 0.10;
1979 const float etaMaxWin_brl = 0.20;
1980 const float etaMaxWin_ec1 = 0.20;
1981 const float etaMaxWin_ec2 = 0.20;
1982 const float etaMaxWin_ec3 = 0.20;
1983 const float etaMaxWin_ecA = 0.20;
1984 const float etaMaxWin_ecB = 0.20;
1986 const float etaParams_brl[N_PARAMS] = { 0.038, 0.284};
1987 const float etaParams_ec1[N_PARAMS] = { 0.011, 0.519};
1988 const float etaParams_ec2[N_PARAMS] = { 0.023, 0.253};
1989 const float etaParams_ec3[N_PARAMS] = { 0.018, 0.519};
1990 const float etaParams_ecA[N_PARAMS] = { 0.010, 0.431};
1991 const float etaParams_ecB[N_PARAMS] = { 0.023, 0.236};
1994 const float phiMinWin_brl = 0.125;
1995 const float phiMinWin_ec1 = 0.125;
1996 const float phiMinWin_ec2 = 0.125;
1997 const float phiMinWin_ec3 = 0.10;
1998 const float phiMinWin_ecA = 0.15;
1999 const float phiMinWin_ecB = 0.15;
2001 const float phiMaxWin_brl = 0.20;
2002 const float phiMaxWin_ec1 = 0.20;
2003 const float phiMaxWin_ec2 = 0.20;
2004 const float phiMaxWin_ec3 = 0.20;
2005 const float phiMaxWin_ecA = 0.25;
2006 const float phiMaxWin_ecB = 0.20;
2008 const float phiParams_brl[N_PARAMS] = { 0.000, 0.831};
2009 const float phiParams_ec1[N_PARAMS] = { 0.000, 0.885};
2010 const float phiParams_ec2[N_PARAMS] = { 0.015, 0.552};
2011 const float phiParams_ec3[N_PARAMS] = { 0.008, 0.576};
2012 const float phiParams_ecA[N_PARAMS] = { 0.000, 0.830};
2013 const float phiParams_ecB[N_PARAMS] = { 0.006, 1.331};
2018 float params[N_PARAMS];
2021 memcpy(params,etaParams_brl,
sizeof(params));
2022 minWin = etaMinWin_brl;
2023 maxWin = etaMaxWin_brl;
2026 memcpy(params,phiParams_brl,
sizeof(params));
2027 minWin = phiMinWin_brl;
2028 maxWin = phiMaxWin_brl;
2036 memcpy(params,etaParams_ecA,
sizeof(params));
2037 minWin = etaMinWin_ecA;
2038 maxWin = etaMaxWin_ecA;
2041 memcpy(params,phiParams_ecA,
sizeof(params));
2042 minWin = phiMinWin_ecA;
2043 maxWin = phiMaxWin_ecA;
2048 memcpy(params,etaParams_ecB,
sizeof(params));
2049 minWin = etaMinWin_ecB;
2050 maxWin = etaMaxWin_ecB;
2053 memcpy(params,phiParams_ecB,
sizeof(params));
2054 minWin = phiMinWin_ecB;
2055 maxWin = phiMaxWin_ecB;
2059 if( std::abs(
eta) < 1.5 ) {
2061 memcpy(params,etaParams_ec1,
sizeof(params));
2062 minWin = etaMinWin_ec1;
2063 maxWin = etaMaxWin_ec1;
2066 memcpy(params,phiParams_ec1,
sizeof(params));
2067 minWin = phiMinWin_ec1;
2068 maxWin = phiMaxWin_ec1;
2071 else if( std::abs(
eta) < 2.0 ) {
2073 memcpy(params,etaParams_ec2,
sizeof(params));
2074 minWin = etaMinWin_ec2;
2075 maxWin = etaMaxWin_ec2;
2078 memcpy(params,phiParams_ec2,
sizeof(params));
2079 minWin = phiMinWin_ec2;
2080 maxWin = phiMaxWin_ec2;
2085 memcpy(params,etaParams_ec3,
sizeof(params));
2086 minWin = etaMinWin_ec3;
2087 maxWin = etaMaxWin_ec3;
2090 memcpy(params,phiParams_ec3,
sizeof(params));
2091 minWin = phiMinWin_ec3;
2092 maxWin = phiMaxWin_ec3;
2099 float x = params[0] + params[1] / pt;
2101 if(
x < minWin ) retval = minWin;
2102 if(
x > maxWin ) retval = maxWin;
2112 std::vector<TrigL2MuonSA::TrackPattern>& trackPatterns )
const
2127 std::vector<float> t_eta, t_phi;
2128 std::vector<float> f_eta, f_phi;
2129 std::vector<float> r_inner, r_middle, r_outer;
2130 std::vector<float> f_residuals;
2142 invalid_rpc_roi_number,
2143 efficiency, sag_inverse, address, absolute_pt, sagitta, track_pt,
2144 track_eta, track_phi, failed_eta, failed_phi,
2145 res_inner, res_middle, res_outer, fit_residuals );
2149 if( !trackPatterns.empty() ) {
2156 float count_inner = 0;
2157 float count_middle = 0;
2158 float count_outer = 0;
2162 if (std::abs(mdtHit.DriftSpace) <
ZERO_LIMIT)
continue;
2164 char st = mdtHit.cType[1];
2168 r_inner.push_back(mdtHit.Residual/norm);
2169 if (mdtHit.isOutlier==0) f_residuals.push_back(mdtHit.Residual/norm);
2174 r_middle.push_back(mdtHit.Residual/norm);
2175 if (mdtHit.isOutlier==0) f_residuals.push_back(mdtHit.Residual/norm);
2180 r_outer.push_back(mdtHit.Residual/norm);
2181 if (mdtHit.isOutlier==0) f_residuals.push_back(mdtHit.Residual/norm);
2185 inner_mdt_hits = count_inner;
2186 middle_mdt_hits = count_middle;
2187 outer_mdt_hits = count_outer;
2189 track_pt = (std::abs(pattern.pt ) >
ZERO_LIMIT)? pattern.charge*pattern.pt: 9999.;
2190 absolute_pt = std::abs(track_pt);
2193 t_eta.push_back(pattern.etaMap);
2194 t_phi.push_back(pattern.phiMS);
2197 f_eta.push_back(roi->
eta());
2198 f_phi.push_back(roi->
phi());
2201 sagitta = (std::abs(pattern.barrelSagitta) >
ZERO_LIMIT)? pattern.barrelSagitta: 9999.;
2202 sag_inverse = (std::abs(pattern.barrelSagitta) >
ZERO_LIMIT)? 1./pattern.barrelSagitta: 9999.;
2203 address = pattern.s_address;
2206 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.
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.