17 #include "GaudiKernel/IIncidentSvc.h"
119 if (
m_jobOptionsSvc->has(
"MuonHltCalibrationConfig.MuonCalBufferName")) {
124 ATH_MSG_DEBUG(
"Could not parse MuonHltCalibrationConfig.MuonCalBufferName from JobOptionsSvc");
126 if (
m_jobOptionsSvc->has(
"MuonHltCalibrationConfig.MuonCalBufferSize")) {
132 ATH_MSG_DEBUG(
"Could not parse MuonHltCalibrationConfig.MuonCalBufferSize from JobOptionsSvc");
149 return StatusCode::SUCCESS;
158 if (
sc != StatusCode::SUCCESS ) {
165 return StatusCode::SUCCESS;
182 ATH_MSG_DEBUG(
"=================================================");
206 for (
auto recRoI: collection ) {
207 if ( recRoI->roiWord() ==
roiWord ){
220 for (
auto recRoI: collection ) {
221 if ( recRoI->roiWord() ==
roiWord ){
234 ATH_MSG_ERROR(
"You are not supposed to run trigger on RUN2 layout anymore.");
235 return StatusCode::FAILURE;
244 if (!roiCollectionHandle.isValid()){
246 return StatusCode::FAILURE;
251 if (!recRoiCollectionHandle.isValid()){
253 return StatusCode::FAILURE;
256 std::vector< const TrigRoiDescriptor* > internalRoI;
260 for(; p_roids != p_roidsEn; ++p_roids ) {
261 internalRoI.push_back(*p_roids);
262 ATH_MSG_DEBUG(
"REGTEST: " <<
m_roiCollectionKey.
key() <<
" eta = " <<
"(" << (*p_roids)->etaMinus() <<
")" << (*p_roids)->eta() <<
"(" << (*p_roids)->etaPlus() <<
")");
263 ATH_MSG_DEBUG(
"REGTEST: " <<
m_roiCollectionKey.
key() <<
" phi = " <<
"(" << (*p_roids)->phiMinus() <<
")" << (*p_roids)->phi() <<
"(" << (*p_roids)->phiPlus() <<
")");
264 ATH_MSG_DEBUG(
"REGTEST: " <<
m_roiCollectionKey.
key() <<
" zed = " <<
"(" << (*p_roids)->zedMinus() <<
")" << (*p_roids)->zed() <<
"(" << (*p_roids)->zedPlus() <<
")");
269 std::vector< const xAOD::MuonRoI* > recRoIVector;
270 std::vector< const xAOD::MuonRoI* > surrRoIs;
274 if( recRoI ==
nullptr )
continue;
275 recRoIVector.push_back(recRoI);
280 bool dynamicDeltaRpc =
false;
281 int nPassedBarrelSurrRoi = 0;
283 for(
const auto recRoI: *recRoiCollection ){
284 if(
std::find(recRoIVector.begin(), recRoIVector.end(), recRoI) != recRoIVector.end())
continue;
286 bool surrounding =
false;
287 for(
const auto matchedRoI: recRoIVector ){
288 float deta = std::abs(recRoI->eta() - matchedRoI->eta());
289 float dphi = std::abs(recRoI->phi() - matchedRoI->phi());
290 if( dphi >
M_PI )dphi = 2.*
M_PI - dphi;
296 surrRoIs.push_back(recRoI);
300 for(
const auto recRoI: surrRoIs ){
302 if( std::abs((recRoI)->
eta()) <= 1.05 && (recRoI)->getThrNumber() >= 1 )nPassedBarrelSurrRoi++;
304 ATH_MSG_DEBUG(
"nPassedBarrelSurrRoi = " << nPassedBarrelSurrRoi);
306 if( nPassedBarrelSurrRoi >= 1 )
307 dynamicDeltaRpc =
true;
312 ATH_CHECK(muFastContainer.record(std::make_unique<xAOD::L2StandAloneMuonContainer>(), std::make_unique<xAOD::L2StandAloneMuonAuxContainer>()));
317 ATH_CHECK(wh_muCompositeCont.
record(std::make_unique<xAOD::TrigCompositeContainer>(), std::make_unique<xAOD::TrigCompositeAuxContainer>()));
318 muCompositeContainer = wh_muCompositeCont.
ptr();
322 ATH_CHECK(muIdContainer.record(std::make_unique<TrigRoiDescriptorCollection>()));
325 ATH_CHECK(muMsContainer.record(std::make_unique<TrigRoiDescriptorCollection>()));
333 ATH_CHECK( muonCBColl.record (std::make_unique<xAOD::L2CombinedMuonContainer>(),
334 std::make_unique<xAOD::L2CombinedMuonAuxContainer>()) );
337 if (!trackHandle.isValid()){
339 return StatusCode::FAILURE;
344 *muonCBColl, *muFastContainer, dynamicDeltaRpc, ctx ));
348 for (
const auto p_CBmuon : *muonCBColl){
360 *muFastContainer, muCompositeContainer, *muIdContainer, *muMsContainer, dynamicDeltaRpc, ctx));
368 for (
auto p_muon : *muFastContainer) {
374 for (
auto p_muonID : *muIdContainer) {
379 for (
auto p_muonMS : *muMsContainer) {
384 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::execute() success");
385 return StatusCode::SUCCESS;
392 const std::vector<const xAOD::MuonRoI*>& muonRoIs,
397 const bool dynamicDeltaRpc,
398 const EventContext& ctx)
const
400 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMuonSignature start");
411 trackFitterTimer, trackExtraTimer, calibrationTimer );
428 p_roids = roids.begin();
429 for (p_roi=(muonRoIs).
begin(); p_roi!=(muonRoIs).
end(); ++p_roi) {
432 std::vector<TrigL2MuonSA::TrackPattern> trackPatterns;
437 rpcFitResult.
Clear();
438 tgcFitResult.
Clear();
462 if (!
sc.isSuccess()) {
465 trackPatterns.push_back(std::move(trackPattern));
468 rpcFitResult, tgcFitResult, mdtHits, cscHits,
470 trackPatterns, outputTracks, outputID, outputMS, ctx);
476 patternTimer.start();
481 if (!
sc.isSuccess()) {
485 rpcFitResult, tgcFitResult, mdtHits, cscHits,
487 trackPatterns, outputTracks, outputID, outputMS, ctx);
493 stationFitterTimer.start();
497 if (!
sc.isSuccess()) {
501 rpcFitResult, tgcFitResult, mdtHits, cscHits,
503 trackPatterns, outputTracks, outputID, outputMS, ctx);
506 stationFitterTimer.stop();
509 trackFitterTimer.start();
514 if (!
sc.isSuccess()) {
518 rpcFitResult, tgcFitResult, mdtHits, cscHits,
520 trackPatterns, outputTracks, outputID, outputMS, ctx);
523 trackFitterTimer.stop();
543 if (!
sc.isSuccess()) {
546 trackPatterns.push_back(trackPattern);
549 rpcFitResult, tgcFitResult, mdtHits, cscHits,
551 trackPatterns, outputTracks, outputID, outputMS, ctx);
557 patternTimer.start();
565 if (!
sc.isSuccess()) {
569 rpcFitResult, tgcFitResult, mdtHits, cscHits,
571 trackPatterns, outputTracks, outputID, outputMS, ctx);
577 stationFitterTimer.start();
595 m_cscsegmaker->FindSuperPointCsc(cscHits,trackPatterns,tgcFitResult,muonRoad);
597 if (!
sc.isSuccess()) {
601 rpcFitResult, tgcFitResult, mdtHits, cscHits,
603 trackPatterns, outputTracks, outputID, outputMS, ctx);
607 stationFitterTimer.stop();
610 trackFitterTimer.start();
616 if (!
sc.isSuccess()) {
620 rpcFitResult, tgcFitResult, mdtHits, cscHits,
622 trackPatterns, outputTracks, outputID, outputMS, ctx);
625 trackFitterTimer.stop();
629 const float ETA_LIMIT = 2.8;
630 const float DELTA_ETA_LIMIT = 1.0;
633 float roiEta = (*p_roi)->eta();
635 ( std::abs(
track.etaMap) > ETA_LIMIT || std::abs(
track.etaMap-
roiEta) > DELTA_ETA_LIMIT ) ) {
641 trackExtraTimer.start();
645 if (
sc != StatusCode::SUCCESS) {
649 rpcFitResult, tgcFitResult, mdtHits, cscHits,
651 trackPatterns, outputTracks, outputID, outputMS, ctx);
654 trackExtraTimer.stop();
658 if (
sc != StatusCode::SUCCESS) {
662 rpcFitResult, tgcFitResult, mdtHits, cscHits,
664 trackPatterns, outputTracks, outputID, outputMS, ctx);
670 rpcFitResult, tgcFitResult, mdtHits, cscHits,
672 trackPatterns, outputTracks, outputID, outputMS, ctx);
680 std::vector<uint32_t> localBuffer;
687 if (
sc != StatusCode::SUCCESS ) {
693 ATH_MSG_DEBUG(
"Retrieved the buffer, with size: " << localBuffer.size());
700 ATH_MSG_DEBUG(
"The size of the TrigCompositeContainer is: " << outputMuonCal->
size() );
703 return StatusCode::FAILURE;
708 tc->setDetail(
"muCalibDS", localBuffer );
713 if (p_roids==roids.end())
break;
716 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMuonSignature success");
717 return StatusCode::SUCCESS;
726 const std::vector<const TrigRoiDescriptor*>& roids,
727 const std::vector<const xAOD::MuonRoI*>& muonRoIs,
730 const bool dynamicDeltaRpc,
731 const EventContext& ctx)
const
733 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMuonSignatureIO start");
745 trackFitterTimer, trackExtraTimer, calibrationTimer );
760 p_roids = roids.begin();
761 for (
const auto p_roi : muonRoIs) {
762 ATH_MSG_DEBUG(
"roi eta/phi: " << (*p_roi).eta() <<
"/" << (*p_roi).phi());
765 if ( (idtracks).empty() )
ATH_MSG_DEBUG(
"IO TEST: xAOD::TrackParticleContainer has 0 tracks --> Can not use FTF tracks...");
766 else ATH_MSG_DEBUG(
"IO TEST: xAOD::TrackParticleContainer has " << (idtracks).
size() <<
" tracks --> Start inside-out mode!");
768 std::vector<TrigL2MuonSA::TrackPattern> trackPatterns;
769 int idtrack_idx = -1;
770 for (
auto idtrack : idtracks) {
786 rpcFitResult.
Clear();
787 tgcFitResult.
Clear();
792 trackPatterns.clear();
795 if (!
sc.isSuccess()) {
802 if ( std::abs(idtrack->eta()) < 1.05 ){
803 ATH_MSG_DEBUG(
"FTF track at IP is in Barrel: " << idtrack->eta());
805 ATH_MSG_DEBUG(
"FTF track at IP is in Endcap: " << idtrack->eta());
828 if (!
sc.isSuccess()) {
837 patternTimer.start();
842 if (!
sc.isSuccess()) {
849 stationFitterTimer.start();
853 if (!
sc.isSuccess()) {
857 stationFitterTimer.stop();
860 trackFitterTimer.start();
864 if (!
sc.isSuccess()) {
868 trackFitterTimer.stop();
888 if (!
sc.isSuccess()) {
897 patternTimer.start();
904 if (!
sc.isSuccess()) {
911 stationFitterTimer.start();
919 m_cscsegmaker->FindSuperPointCsc(cscHits,trackPatterns,tgcFitResult,muonRoad);
920 if (!
sc.isSuccess()) {
924 stationFitterTimer.stop();
927 trackFitterTimer.start();
932 if (!
sc.isSuccess()) {
936 trackFitterTimer.stop();
942 const float ETA_LIMIT = 2.8;
943 const float DELTA_ETA_LIMIT = 1.0;
944 float roiEta = (*p_roi).eta();
946 && ( std::abs(
track.etaMap) > ETA_LIMIT || std::abs(
track.etaMap-
roiEta) > DELTA_ETA_LIMIT ) ) {
947 trackPatterns.back().etaMap =
roiEta;
952 if (
sc != StatusCode::SUCCESS) {
957 if ( std::abs(trackPatterns.back().pt) >
ZERO_LIMIT ) {
958 storeMuonSA(p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
959 rpcFitResult, tgcFitResult, mdtHits, cscHits,
961 trackPatterns.back(), outputSAs, ctx);
966 muonCB->
setPt(idtrack->pt());
967 muonCB->
setEta(idtrack->eta());
968 muonCB->
setPhi(idtrack->phi());
979 if(outputSAs.
size()==0) {
985 rpcFitResult.
Clear();
986 tgcFitResult.
Clear();
991 trackPatterns.clear();
993 storeMuonSA(p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
994 rpcFitResult, tgcFitResult, mdtHits, cscHits,
996 trackPattern, outputSAs, ctx);
1012 for (
auto outputSA : outputSAs){
1013 ATH_MSG_DEBUG(
"outputSA pt/eta/phi: " << outputSA->pt() <<
"/" << outputSA->etaMS() <<
"/" << outputSA->phiMS());
1017 for (
auto outputCB : outputCBs){
1018 ATH_MSG_DEBUG(
"outputCB pt/eta/phi: " << outputCB->pt() <<
"/" << outputCB->eta() <<
"/" << outputCB->phi());
1022 if (p_roids==roids.end())
break;
1025 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMuonSignatureIO success");
1026 return StatusCode::SUCCESS;
1034 const std::vector<const xAOD::MuonRoI*>& muonRoIs,
1036 const bool dynamicDeltaRpc,
1037 const EventContext& ctx)
const
1039 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMultiTrackSignature start");
1044 std::vector<TrigL2MuonSA::RpcFitResult> clusterFitResults;
1045 std::vector< TrigL2MuonSA::MuonRoad > clusterRoad;
1046 std::vector<TrigL2MuonSA::MdtHits> mdtHits_cluster_normal;
1057 trackFitterTimer, trackExtraTimer, calibrationTimer );
1074 p_roids = roids.begin();
1075 for (p_roi=(muonRoIs).
begin(); p_roi!=(muonRoIs).
end(); ++p_roi) {
1078 std::vector<TrigL2MuonSA::TrackPattern> trackPatterns;
1083 rpcFitResult.
Clear();
1084 tgcFitResult.
Clear();
1090 clusterFitResults.clear();
1091 clusterRoad.clear();
1092 mdtHits_cluster_normal.clear();
1108 mdtHits_cluster_normal,
1111 if (!
sc.isSuccess()) {
1119 for(
unsigned int i_road = 0; i_road < clusterRoad.size(); i_road++){
1121 std::vector<TrigL2MuonSA::TrackPattern> tmp_trkPats; tmp_trkPats.clear();
1123 patternTimer.start();
1125 clusterRoad.at(i_road),
1126 mdtHits_cluster_normal.at(i_road),
1128 if (!
sc.isSuccess()) {
1132 patternTimer.stop();
1135 stationFitterTimer.start();
1137 clusterFitResults.at(i_road),
1139 if (!
sc.isSuccess()) {
1144 stationFitterTimer.stop();
1147 trackFitterTimer.start();
1149 clusterFitResults.at(i_road),
1152 if (!
sc.isSuccess()) {
1156 trackFitterTimer.stop();
1159 const float ETA_LIMIT = 2.8;
1160 const float DELTA_ETA_LIMIT = 1.0;
1162 float roiEta = (*p_roi)->eta();
1164 && ( std::abs(
track.etaMap) > ETA_LIMIT || std::abs(
track.etaMap-
roiEta) > DELTA_ETA_LIMIT ) ) {
1170 trackExtraTimer.start();
1175 if (
sc != StatusCode::SUCCESS) {
1180 trackExtraTimer.stop();
1182 if(tmp_trkPats.size() > 0){
1183 ATH_MSG_DEBUG(
"temp pT calculated 2mu-in-1RoI alg = " << tmp_trkPats[0].
pt <<
" GeV");
1184 if( (std::abs(tmp_trkPats[0].barrelSagitta) <
ZERO_LIMIT &&
1188 trackPatterns.push_back(tmp_trkPats[0]);
1191 storeMuonSA(*p_roi, *p_roids, clusterRoad.at(i_road), mdtRegion, rpcHits, tgcHits,
1192 clusterFitResults.at(i_road), tgcFitResult, mdtHits_cluster_normal.at(i_road), cscHits,
1193 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1196 if(trackPatterns.empty()){
1197 ATH_MSG_DEBUG(
"multi-track SA falied to reconstruct muons");
1199 trackPatterns.push_back(trackPattern);
1200 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1201 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1202 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1209 ATH_MSG_DEBUG(
"multi-track SA does nothings and skips for EndcapRoI");
1225 if (!
sc.isSuccess()) {
1228 trackPatterns.push_back(trackPattern);
1230 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1231 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1232 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1238 patternTimer.start();
1248 if (!
sc.isSuccess()) {
1251 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1252 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1253 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1256 patternTimer.stop();
1259 stationFitterTimer.start();
1276 m_cscsegmaker->FindSuperPointCsc(cscHits,trackPatterns,tgcFitResult,muonRoad);
1278 if (!
sc.isSuccess()) {
1280 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1281 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1282 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1286 stationFitterTimer.stop();
1289 trackFitterTimer.start();
1295 if (!
sc.isSuccess()) {
1297 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1298 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1299 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1302 trackFitterTimer.stop();
1305 const float ETA_LIMIT = 2.8;
1306 const float DELTA_ETA_LIMIT = 1.0;
1308 float roiEta = (*p_roi)->eta();
1310 && ( std::abs(
track.etaMap) > ETA_LIMIT || std::abs(
track.etaMap-
roiEta) > DELTA_ETA_LIMIT ) ) {
1316 trackExtraTimer.start();
1320 if (
sc != StatusCode::SUCCESS) {
1322 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1323 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1324 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1327 trackExtraTimer.stop();
1329 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1330 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1331 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1336 if (
sc != StatusCode::SUCCESS) {
1341 if (p_roids==roids.end())
break;
1344 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMultiTrackSignature success");
1345 return StatusCode::SUCCESS;
1363 const std::vector<TrigL2MuonSA::TrackPattern>& trackPatterns,
1367 const EventContext& ctx)
const
1370 if( trackPatterns.size() > 0 ) {
1375 storeMuonSA(roi, roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1376 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1383 ATH_MSG_DEBUG(
"Not update output objects because trackPatterns has no object");
1403 const EventContext& ctx )
const
1407 const int currentRoIId = roids->
roiId();
1409 const EventIDBase& eventID = ctx.eventID();
1411 if (!eventInfo.isValid()) {
1421 int barrelinner = 0;
1422 int endcapinner = 3;
1443 ATH_MSG_DEBUG(
"### Hit patterns at the Muon Spectrometer ###");
1449 ATH_MSG_DEBUG(
"pattern#0: # of hits at endcap barrel inner =" <<
pattern.mdtSegments[barrelinner].size());
1453 ATH_MSG_DEBUG(
"pattern#0: # of hits at barrel endcap inner =" <<
pattern.mdtSegments[endcapinner].size());
1455 ATH_MSG_DEBUG(
"### ************************************* ###");
1511 pattern.superPoints[middle].Alin,
pattern.superPoints[middle].Blin,
pattern.superPoints[middle].Chi2);
1518 pattern.superPoints[barrelinner].Alin,
pattern.superPoints[barrelinner].Blin,
pattern.superPoints[barrelinner].Chi2);
1523 pattern.superPoints[endcapinner].Alin,
pattern.superPoints[endcapinner].Blin,
pattern.superPoints[endcapinner].Chi2);
1536 muonSA->
setLvl1Id( eventInfo->extendedLevel1ID() );
1569 std::vector<std::string> mdtId;
1571 if ( mdtHit.isOutlier==0 || mdtHit.isOutlier==1 ) {
1572 muonSA->
setMdtHit(mdtHit.OnlineId, mdtHit.isOutlier, mdtHit.Chamber,
1573 mdtHit.R, mdtHit.Z, mdtHit.cPhi0, mdtHit.Residual,
1574 mdtHit.DriftTime, mdtHit.DriftSpace, mdtHit.DriftSigma);
1575 mdtId.push_back(mdtHit.Id.getString());
1579 accessor_mdthitid( *muonSA ) = mdtId;
1582 std::vector<float> cscResol;
1585 if ( cscHit.isOutlier==0 || cscHit.isOutlier==1 ) {
1586 muonSA->
setCscHit(cscHit.isOutlier, cscHit.Chamber, cscHit.StationName,
1587 cscHit.StationEta, cscHit.StationPhi,
1588 cscHit.ChamberLayer, cscHit.WireLayer, cscHit.MeasuresPhi, cscHit.Strip,
1589 cscHit.eta, cscHit.phi, cscHit.r, cscHit.z,
1590 cscHit.charge, cscHit.time, cscHit.Residual);
1591 cscResol.push_back(cscHit.resolution);
1593 <<
"OL=" << cscHit.isOutlier <<
","
1594 <<
"Ch=" << cscHit.Chamber <<
","
1595 <<
"StationName=" << cscHit.StationName <<
","
1596 <<
"StationEta=" << cscHit.StationEta <<
","
1597 <<
"StationPhi=" << cscHit.StationPhi <<
","
1598 <<
"ChamberLayer=" << cscHit.ChamberLayer <<
","
1599 <<
"WireLayer=" << cscHit.WireLayer <<
","
1600 <<
"MeasuresPhi=" << cscHit.MeasuresPhi <<
","
1601 <<
"Strip=" << cscHit.Strip <<
","
1602 <<
"eta=" << cscHit.eta <<
","
1603 <<
"phi=" << cscHit.phi <<
","
1604 <<
"r=" << cscHit.r <<
","
1605 <<
"z=" << cscHit.z <<
","
1606 <<
"charge=" << cscHit.charge <<
","
1607 <<
"Rs=" << cscHit.Residual <<
","
1608 <<
"t=" << cscHit.time);
1613 accessor_cschitresol( *muonSA ) = cscResol;
1616 float sumbeta[8]={0};
1617 float nhit_layer[8]={0};
1619 muonSA->
setRpcHit(rpcHit.layer, rpcHit.measuresPhi,
1620 rpcHit.x, rpcHit.y, rpcHit.z,
1621 rpcHit.time, rpcHit.distToEtaReadout, rpcHit.distToPhiReadout,
1622 rpcHit.stationName);
1624 <<
"stationName=" << rpcHit.stationName <<
","
1625 <<
"layer=" << rpcHit.layer <<
","
1626 <<
"measuresPhi=" << rpcHit.measuresPhi <<
","
1627 <<
"x=" << rpcHit.x <<
","
1628 <<
"y=" << rpcHit.y <<
","
1629 <<
"y=" << rpcHit.z);
1632 if(dRMS>0.05)
continue;
1634 float Tprop = rpcHit.distToPhiReadout/1000*4.8;
1636 sumbeta[rpcHit.layer]=sumbeta[rpcHit.layer]+
beta;
1637 nhit_layer[rpcHit.layer]=nhit_layer[rpcHit.layer]+1;
1640 std::vector<float> Avebeta_layer;
1641 for(
int i_layer=0;i_layer<8;i_layer++){
1642 if(nhit_layer[i_layer]!=0)Avebeta_layer.push_back( sumbeta[i_layer]/nhit_layer[i_layer] );
1644 if(Avebeta_layer.size()>0) muonSA->
setBeta(
std::accumulate(Avebeta_layer.begin(),Avebeta_layer.end(),0.0)/Avebeta_layer.size() );
1646 Avebeta_layer.clear();
1650 muonSA->
setTgcHit(tgcHit.eta, tgcHit.phi, tgcHit.r, tgcHit.z,
1651 tgcHit.width, tgcHit.sta, tgcHit.isStrip,
1652 tgcHit.bcTag, tgcHit.inRoad);
1654 <<
"eta=" << tgcHit.eta <<
","
1655 <<
"phi=" << tgcHit.phi <<
","
1656 <<
"r=" << tgcHit.r <<
","
1657 <<
"z=" << tgcHit.z <<
","
1658 <<
"width=" << tgcHit.width <<
","
1659 <<
"stationNum=" << tgcHit.sta <<
","
1660 <<
"isStrip=" << tgcHit.isStrip <<
","
1661 <<
"bcTag=" << tgcHit.bcTag <<
","
1662 <<
"inRoad=" << tgcHit.inRoad);
1667 for(
unsigned int i_hit=0; i_hit<stgcHits.size(); i_hit++) {
1668 if ( stgcHits[i_hit].isOutlier==0 || stgcHits[i_hit].isOutlier==1 ) {
1671 muonSA->
setStgcCluster(stgcHits[i_hit].layerNumber, stgcHits[i_hit].isOutlier, stgcHits[i_hit].channelType,
1672 stgcHits[i_hit].
eta, stgcHits[i_hit].
phi, stgcHits[i_hit].
r, stgcHits[i_hit].
z,
1673 stgcHits[i_hit].ResidualR, stgcHits[i_hit].ResidualPhi,
1677 <<
"eta=" << stgcHits[i_hit].
eta <<
","
1678 <<
"phi=" << stgcHits[i_hit].
phi <<
","
1679 <<
"r=" << stgcHits[i_hit].
r <<
","
1680 <<
"z=" << stgcHits[i_hit].
z <<
","
1681 <<
"z=" << stgcHits[i_hit].ResidualR <<
","
1682 <<
"z=" << stgcHits[i_hit].ResidualPhi);
1687 for(
unsigned int i_hit=0; i_hit<mmHits.size(); i_hit++) {
1688 if ( mmHits[i_hit].isOutlier==0 || mmHits[i_hit].isOutlier==1 ) {
1691 muonSA->
setMmCluster(mmHits[i_hit].layerNumber, mmHits[i_hit].isOutlier,
1692 mmHits[i_hit].
eta, mmHits[i_hit].
phi, mmHits[i_hit].
r, mmHits[i_hit].
z,
1693 mmHits[i_hit].ResidualR, mmHits[i_hit].ResidualPhi,
1697 <<
"eta=" << tgcHits[i_hit].
eta <<
","
1698 <<
"phi=" << tgcHits[i_hit].
phi <<
","
1699 <<
"r=" << tgcHits[i_hit].
r <<
","
1700 <<
"z=" << tgcHits[i_hit].
z <<
","
1701 <<
"width=" << tgcHits[i_hit].
width <<
","
1702 <<
"stationNum=" << tgcHits[i_hit].sta <<
","
1703 <<
"isStrip=" << tgcHits[i_hit].
isStrip <<
","
1704 <<
"bcTag=" << tgcHits[i_hit].
bcTag <<
","
1705 <<
"inRoad=" << tgcHits[i_hit].inRoad);
1710 for (
int i_station=0; i_station<8; i_station++) {
1711 for (
int i_sector=0; i_sector<2; i_sector++) {
1712 muonSA->
setRoad(i_station, i_sector, muonRoad.
aw[i_station][i_sector], muonRoad.
bw[i_station][i_sector]);
1713 muonSA->
setRegionZ(i_station, i_sector, mdtRegion.
zMin[i_station][i_sector], mdtRegion.
zMax[i_station][i_sector]);
1714 muonSA->
setRegionR(i_station, i_sector, mdtRegion.
rMin[i_station][i_sector], mdtRegion.
rMax[i_station][i_sector]);
1715 muonSA->
setRegionEta(i_station, i_sector, mdtRegion.
etaMin[i_station][i_sector], mdtRegion.
etaMax[i_station][i_sector]);
1765 double phi1 = tgcFitResult.
tgcMid1[1];
1766 double phi2 = tgcFitResult.
tgcMid2[1];
1767 if ( tgcFitResult.
tgcMid1[3]==0. || tgcFitResult.
tgcMid2[3]==0. ) {
1770 }
else if( phi1*phi2 < 0 && std::abs(phi1)>(
M_PI/2.) ) {
1771 double tmp1 = (phi1>0)? phi1 -
M_PI : phi1 +
M_PI;
1776 phi = (phi2+phi1)/2.;
1824 mseta = roids->
eta();
1825 msphi = roids->
phi();
1829 const float phiHalfWidth = 0.1;
1830 const float etaHalfWidth = 0.1;
1836 mseta - etaHalfWidth,
1837 mseta + etaHalfWidth,
1839 msphi - phiHalfWidth,
1840 msphi + phiHalfWidth);
1844 << mseta <<
"/" << msphi);
1847 <<
" phi=" << MSroiDescriptor->
phi()
1848 <<
", eta=" << MSroiDescriptor->
eta());
1870 const double scalePhiWidthForFailure = 2;
1871 const double scaleRoIforZeroPt = 2;
1879 float phiHalfWidth = 0.1;
1880 float etaHalfWidth = 0.1;
1896 phiHalfWidth *= scalePhiWidthForFailure;
1902 pattern.etaVtx - etaHalfWidth,
1903 pattern.etaVtx + etaHalfWidth,
1905 pattern.phiVtx - phiHalfWidth,
1906 pattern.phiVtx + phiHalfWidth);
1909 <<
"pattern.etaVtx/pattern.phiVtx="
1913 <<
" phi=" << IDroiDescriptor->
phi()
1914 <<
", eta=" << IDroiDescriptor->
eta());
1924 roids->
eta() - (roids->
eta() - roids->
etaMinus()) * scaleRoIforZeroPt,
1925 roids->
eta() + (roids->
etaPlus() - roids->
eta()) * scaleRoIforZeroPt,
1930 ATH_MSG_VERBOSE(
"will Record an RoiDescriptor for Inner Detector in case with zero pT:"
1931 <<
" phi=" << IDroiDescriptor->
phi()
1932 <<
", phi min=" << IDroiDescriptor->
phiMinus()
1933 <<
", phi max=" << IDroiDescriptor->
phiPlus()
1934 <<
", eta=" << IDroiDescriptor->
eta()
1935 <<
", eta min=" << IDroiDescriptor->
etaMinus()
1936 <<
", eta max=" << IDroiDescriptor->
etaPlus());
1951 if (
name ==
"MuFastSteering_Muon") {
1953 }
else if (
name ==
"MuFastSteering_900GeV") {
1970 float pt = muonSA->
pt();
1973 const int N_PARAMS = 2;
1976 const float etaMinWin_brl = 0.10;
1977 const float etaMinWin_ec1 = 0.10;
1978 const float etaMinWin_ec2 = 0.10;
1979 const float etaMinWin_ec3 = 0.10;
1980 const float etaMinWin_ecA = 0.10;
1981 const float etaMinWin_ecB = 0.10;
1983 const float etaMaxWin_brl = 0.20;
1984 const float etaMaxWin_ec1 = 0.20;
1985 const float etaMaxWin_ec2 = 0.20;
1986 const float etaMaxWin_ec3 = 0.20;
1987 const float etaMaxWin_ecA = 0.20;
1988 const float etaMaxWin_ecB = 0.20;
1990 const float etaParams_brl[N_PARAMS] = { 0.038, 0.284};
1991 const float etaParams_ec1[N_PARAMS] = { 0.011, 0.519};
1992 const float etaParams_ec2[N_PARAMS] = { 0.023, 0.253};
1993 const float etaParams_ec3[N_PARAMS] = { 0.018, 0.519};
1994 const float etaParams_ecA[N_PARAMS] = { 0.010, 0.431};
1995 const float etaParams_ecB[N_PARAMS] = { 0.023, 0.236};
1998 const float phiMinWin_brl = 0.125;
1999 const float phiMinWin_ec1 = 0.125;
2000 const float phiMinWin_ec2 = 0.125;
2001 const float phiMinWin_ec3 = 0.10;
2002 const float phiMinWin_ecA = 0.15;
2003 const float phiMinWin_ecB = 0.15;
2005 const float phiMaxWin_brl = 0.20;
2006 const float phiMaxWin_ec1 = 0.20;
2007 const float phiMaxWin_ec2 = 0.20;
2008 const float phiMaxWin_ec3 = 0.20;
2009 const float phiMaxWin_ecA = 0.25;
2010 const float phiMaxWin_ecB = 0.20;
2012 const float phiParams_brl[N_PARAMS] = { 0.000, 0.831};
2013 const float phiParams_ec1[N_PARAMS] = { 0.000, 0.885};
2014 const float phiParams_ec2[N_PARAMS] = { 0.015, 0.552};
2015 const float phiParams_ec3[N_PARAMS] = { 0.008, 0.576};
2016 const float phiParams_ecA[N_PARAMS] = { 0.000, 0.830};
2017 const float phiParams_ecB[N_PARAMS] = { 0.006, 1.331};
2026 minWin = etaMinWin_brl;
2027 maxWin = etaMaxWin_brl;
2031 minWin = phiMinWin_brl;
2032 maxWin = phiMaxWin_brl;
2041 minWin = etaMinWin_ecA;
2042 maxWin = etaMaxWin_ecA;
2046 minWin = phiMinWin_ecA;
2047 maxWin = phiMaxWin_ecA;
2053 minWin = etaMinWin_ecB;
2054 maxWin = etaMaxWin_ecB;
2058 minWin = phiMinWin_ecB;
2059 maxWin = phiMaxWin_ecB;
2063 if( std::abs(
eta) < 1.5 ) {
2066 minWin = etaMinWin_ec1;
2067 maxWin = etaMaxWin_ec1;
2071 minWin = phiMinWin_ec1;
2072 maxWin = phiMaxWin_ec1;
2075 else if( std::abs(
eta) < 2.0 ) {
2078 minWin = etaMinWin_ec2;
2079 maxWin = etaMaxWin_ec2;
2083 minWin = phiMinWin_ec2;
2084 maxWin = phiMaxWin_ec2;
2090 minWin = etaMinWin_ec3;
2091 maxWin = etaMaxWin_ec3;
2095 minWin = phiMinWin_ec3;
2096 maxWin = phiMaxWin_ec3;
2105 if(
x < minWin )
retval = minWin;
2106 if(
x > maxWin )
retval = maxWin;
2116 std::vector<TrigL2MuonSA::TrackPattern>& trackPatterns )
const
2131 std::vector<float> t_eta, t_phi;
2132 std::vector<float> f_eta, f_phi;
2133 std::vector<float> r_inner, r_middle, r_outer;
2134 std::vector<float> f_residuals;
2143 f_residuals.clear();
2155 invalid_rpc_roi_number,
2157 track_eta, track_phi, failed_eta, failed_phi,
2158 res_inner, res_middle, res_outer, fit_residuals );
2162 if( trackPatterns.size() > 0 ) {
2169 float count_inner = 0;
2170 float count_middle = 0;
2171 float count_outer = 0;
2175 if (std::abs(mdtHit.DriftSpace) <
ZERO_LIMIT)
continue;
2177 char st = mdtHit.cType[1];
2181 r_inner.push_back(mdtHit.Residual/
norm);
2182 if (mdtHit.isOutlier==0) f_residuals.push_back(mdtHit.Residual/
norm);
2187 r_middle.push_back(mdtHit.Residual/
norm);
2188 if (mdtHit.isOutlier==0) f_residuals.push_back(mdtHit.Residual/
norm);
2193 r_outer.push_back(mdtHit.Residual/
norm);
2194 if (mdtHit.isOutlier==0) f_residuals.push_back(mdtHit.Residual/
norm);
2198 inner_mdt_hits = count_inner;
2199 middle_mdt_hits = count_middle;
2200 outer_mdt_hits = count_outer;
2203 absolute_pt = std::abs(track_pt);
2206 t_eta.push_back(
pattern.etaMap);
2207 t_phi.push_back(
pattern.phiMS);
2210 f_eta.push_back(roi->
eta());
2211 f_phi.push_back(roi->
phi());
2219 return StatusCode::SUCCESS;