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(
"=================================================");
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>()));
314 ATH_CHECK(wh_muCompositeCont.
record(std::make_unique<xAOD::TrigCompositeContainer>(), std::make_unique<xAOD::TrigCompositeAuxContainer>()));
315 muCompositeContainer = wh_muCompositeCont.
ptr();
319 ATH_CHECK(muIdContainer.record(std::make_unique<TrigRoiDescriptorCollection>()));
322 ATH_CHECK(muMsContainer.record(std::make_unique<TrigRoiDescriptorCollection>()));
330 ATH_CHECK( muonCBColl.record (std::make_unique<xAOD::L2CombinedMuonContainer>(),
331 std::make_unique<xAOD::L2CombinedMuonAuxContainer>()) );
334 if (!trackHandle.isValid()){
336 return StatusCode::FAILURE;
341 *muonCBColl, *muFastContainer, dynamicDeltaRpc, ctx ));
345 for (
const auto p_CBmuon : *muonCBColl){
357 *muFastContainer, muCompositeContainer, *muIdContainer, *muMsContainer, dynamicDeltaRpc, ctx));
365 for (
auto p_muon : *muFastContainer) {
371 for (
auto p_muonID : *muIdContainer) {
376 for (
auto p_muonMS : *muMsContainer) {
381 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::execute() success");
382 return StatusCode::SUCCESS;
389 const std::vector<const xAOD::MuonRoI*>& muonRoIs,
394 const bool dynamicDeltaRpc,
395 const EventContext& ctx)
const
397 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMuonSignature start");
408 trackFitterTimer, trackExtraTimer, calibrationTimer );
425 p_roids = roids.begin();
426 for (p_roi=(muonRoIs).
begin(); p_roi!=(muonRoIs).
end(); ++p_roi) {
429 std::vector<TrigL2MuonSA::TrackPattern> trackPatterns;
434 rpcFitResult.
Clear();
435 tgcFitResult.
Clear();
459 if (!
sc.isSuccess()) {
462 trackPatterns.push_back(std::move(trackPattern));
465 rpcFitResult, tgcFitResult, mdtHits, cscHits,
467 trackPatterns, outputTracks, outputID, outputMS, ctx);
473 patternTimer.start();
478 if (!
sc.isSuccess()) {
482 rpcFitResult, tgcFitResult, mdtHits, cscHits,
484 trackPatterns, outputTracks, outputID, outputMS, ctx);
490 stationFitterTimer.start();
494 if (!
sc.isSuccess()) {
498 rpcFitResult, tgcFitResult, mdtHits, cscHits,
500 trackPatterns, outputTracks, outputID, outputMS, ctx);
503 stationFitterTimer.stop();
506 trackFitterTimer.start();
511 if (!
sc.isSuccess()) {
515 rpcFitResult, tgcFitResult, mdtHits, cscHits,
517 trackPatterns, outputTracks, outputID, outputMS, ctx);
520 trackFitterTimer.stop();
540 if (!
sc.isSuccess()) {
543 trackPatterns.push_back(trackPattern);
546 rpcFitResult, tgcFitResult, mdtHits, cscHits,
548 trackPatterns, outputTracks, outputID, outputMS, ctx);
554 patternTimer.start();
562 if (!
sc.isSuccess()) {
566 rpcFitResult, tgcFitResult, mdtHits, cscHits,
568 trackPatterns, outputTracks, outputID, outputMS, ctx);
574 stationFitterTimer.start();
592 m_cscsegmaker->FindSuperPointCsc(cscHits,trackPatterns,tgcFitResult,muonRoad);
594 if (!
sc.isSuccess()) {
598 rpcFitResult, tgcFitResult, mdtHits, cscHits,
600 trackPatterns, outputTracks, outputID, outputMS, ctx);
604 stationFitterTimer.stop();
607 trackFitterTimer.start();
613 if (!
sc.isSuccess()) {
617 rpcFitResult, tgcFitResult, mdtHits, cscHits,
619 trackPatterns, outputTracks, outputID, outputMS, ctx);
622 trackFitterTimer.stop();
626 const float ETA_LIMIT = 2.8;
627 const float DELTA_ETA_LIMIT = 1.0;
630 float roiEta = (*p_roi)->eta();
632 ( std::abs(
track.etaMap) > ETA_LIMIT || std::abs(
track.etaMap-
roiEta) > DELTA_ETA_LIMIT ) ) {
638 trackExtraTimer.start();
642 if (
sc != StatusCode::SUCCESS) {
646 rpcFitResult, tgcFitResult, mdtHits, cscHits,
648 trackPatterns, outputTracks, outputID, outputMS, ctx);
651 trackExtraTimer.stop();
655 if (
sc != StatusCode::SUCCESS) {
659 rpcFitResult, tgcFitResult, mdtHits, cscHits,
661 trackPatterns, outputTracks, outputID, outputMS, ctx);
667 rpcFitResult, tgcFitResult, mdtHits, cscHits,
669 trackPatterns, outputTracks, outputID, outputMS, ctx);
677 std::vector<uint32_t> localBuffer;
684 if (
sc != StatusCode::SUCCESS ) {
690 ATH_MSG_DEBUG(
"Retrieved the buffer, with size: " << localBuffer.size());
697 ATH_MSG_DEBUG(
"The size of the TrigCompositeContainer is: " << outputMuonCal->
size() );
700 return StatusCode::FAILURE;
705 tc->setDetail(
"muCalibDS", localBuffer );
710 if (p_roids==roids.end())
break;
713 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMuonSignature success");
714 return StatusCode::SUCCESS;
723 const std::vector<const TrigRoiDescriptor*>& roids,
724 const std::vector<const xAOD::MuonRoI*>& muonRoIs,
727 const bool dynamicDeltaRpc,
728 const EventContext& ctx)
const
730 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMuonSignatureIO start");
742 trackFitterTimer, trackExtraTimer, calibrationTimer );
757 p_roids = roids.begin();
758 for (
const auto p_roi : muonRoIs) {
759 ATH_MSG_DEBUG(
"roi eta/phi: " << (*p_roi).eta() <<
"/" << (*p_roi).phi());
762 if ( (idtracks).empty() )
ATH_MSG_DEBUG(
"IO TEST: xAOD::TrackParticleContainer has 0 tracks --> Can not use FTF tracks...");
763 else ATH_MSG_DEBUG(
"IO TEST: xAOD::TrackParticleContainer has " << (idtracks).
size() <<
" tracks --> Start inside-out mode!");
765 std::vector<TrigL2MuonSA::TrackPattern> trackPatterns;
766 int idtrack_idx = -1;
767 for (
auto idtrack : idtracks) {
783 rpcFitResult.
Clear();
784 tgcFitResult.
Clear();
789 trackPatterns.clear();
792 if (!
sc.isSuccess()) {
799 if ( std::abs(idtrack->eta()) < 1.05 ){
800 ATH_MSG_DEBUG(
"FTF track at IP is in Barrel: " << idtrack->eta());
802 ATH_MSG_DEBUG(
"FTF track at IP is in Endcap: " << idtrack->eta());
825 if (!
sc.isSuccess()) {
834 patternTimer.start();
839 if (!
sc.isSuccess()) {
846 stationFitterTimer.start();
850 if (!
sc.isSuccess()) {
854 stationFitterTimer.stop();
857 trackFitterTimer.start();
861 if (!
sc.isSuccess()) {
865 trackFitterTimer.stop();
885 if (!
sc.isSuccess()) {
894 patternTimer.start();
901 if (!
sc.isSuccess()) {
908 stationFitterTimer.start();
916 m_cscsegmaker->FindSuperPointCsc(cscHits,trackPatterns,tgcFitResult,muonRoad);
917 if (!
sc.isSuccess()) {
921 stationFitterTimer.stop();
924 trackFitterTimer.start();
929 if (!
sc.isSuccess()) {
933 trackFitterTimer.stop();
939 const float ETA_LIMIT = 2.8;
940 const float DELTA_ETA_LIMIT = 1.0;
941 float roiEta = (*p_roi).eta();
943 && ( std::abs(
track.etaMap) > ETA_LIMIT || std::abs(
track.etaMap-
roiEta) > DELTA_ETA_LIMIT ) ) {
944 trackPatterns.back().etaMap =
roiEta;
949 if (
sc != StatusCode::SUCCESS) {
954 if ( std::abs(trackPatterns.back().pt) >
ZERO_LIMIT ) {
955 storeMuonSA(p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
956 rpcFitResult, tgcFitResult, mdtHits, cscHits,
958 trackPatterns.back(), outputSAs, ctx);
963 muonCB->
setPt(idtrack->pt());
964 muonCB->
setEta(idtrack->eta());
965 muonCB->
setPhi(idtrack->phi());
976 if(outputSAs.
size()==0) {
982 rpcFitResult.
Clear();
983 tgcFitResult.
Clear();
988 trackPatterns.clear();
990 storeMuonSA(p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
991 rpcFitResult, tgcFitResult, mdtHits, cscHits,
993 trackPattern, outputSAs, ctx);
1009 for (
auto outputSA : outputSAs){
1010 ATH_MSG_DEBUG(
"outputSA pt/eta/phi: " << outputSA->pt() <<
"/" << outputSA->etaMS() <<
"/" << outputSA->phiMS());
1014 for (
auto outputCB : outputCBs){
1015 ATH_MSG_DEBUG(
"outputCB pt/eta/phi: " << outputCB->pt() <<
"/" << outputCB->eta() <<
"/" << outputCB->phi());
1019 if (p_roids==roids.end())
break;
1022 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMuonSignatureIO success");
1023 return StatusCode::SUCCESS;
1031 const std::vector<const xAOD::MuonRoI*>& muonRoIs,
1033 const bool dynamicDeltaRpc,
1034 const EventContext& ctx)
const
1036 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMultiTrackSignature start");
1041 std::vector<TrigL2MuonSA::RpcFitResult> clusterFitResults;
1042 std::vector< TrigL2MuonSA::MuonRoad > clusterRoad;
1043 std::vector<TrigL2MuonSA::MdtHits> mdtHits_cluster_normal;
1054 trackFitterTimer, trackExtraTimer, calibrationTimer );
1071 p_roids = roids.begin();
1072 for (p_roi=(muonRoIs).
begin(); p_roi!=(muonRoIs).
end(); ++p_roi) {
1075 std::vector<TrigL2MuonSA::TrackPattern> trackPatterns;
1080 rpcFitResult.
Clear();
1081 tgcFitResult.
Clear();
1087 clusterFitResults.clear();
1088 clusterRoad.clear();
1089 mdtHits_cluster_normal.clear();
1105 mdtHits_cluster_normal,
1108 if (!
sc.isSuccess()) {
1116 for(
unsigned int i_road = 0; i_road < clusterRoad.size(); i_road++){
1118 std::vector<TrigL2MuonSA::TrackPattern> tmp_trkPats; tmp_trkPats.clear();
1120 patternTimer.start();
1122 clusterRoad.at(i_road),
1123 mdtHits_cluster_normal.at(i_road),
1125 if (!
sc.isSuccess()) {
1129 patternTimer.stop();
1132 stationFitterTimer.start();
1134 clusterFitResults.at(i_road),
1136 if (!
sc.isSuccess()) {
1141 stationFitterTimer.stop();
1144 trackFitterTimer.start();
1146 clusterFitResults.at(i_road),
1149 if (!
sc.isSuccess()) {
1153 trackFitterTimer.stop();
1156 const float ETA_LIMIT = 2.8;
1157 const float DELTA_ETA_LIMIT = 1.0;
1159 float roiEta = (*p_roi)->eta();
1161 && ( std::abs(
track.etaMap) > ETA_LIMIT || std::abs(
track.etaMap-
roiEta) > DELTA_ETA_LIMIT ) ) {
1167 trackExtraTimer.start();
1172 if (
sc != StatusCode::SUCCESS) {
1177 trackExtraTimer.stop();
1179 if(tmp_trkPats.size() > 0){
1180 ATH_MSG_DEBUG(
"temp pT calculated 2mu-in-1RoI alg = " << tmp_trkPats[0].
pt <<
" GeV");
1181 if( (std::abs(tmp_trkPats[0].barrelSagitta) <
ZERO_LIMIT &&
1185 trackPatterns.push_back(tmp_trkPats[0]);
1188 storeMuonSA(*p_roi, *p_roids, clusterRoad.at(i_road), mdtRegion, rpcHits, tgcHits,
1189 clusterFitResults.at(i_road), tgcFitResult, mdtHits_cluster_normal.at(i_road), cscHits,
1190 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1193 if(trackPatterns.empty()){
1194 ATH_MSG_DEBUG(
"multi-track SA falied to reconstruct muons");
1196 trackPatterns.push_back(trackPattern);
1197 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1198 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1199 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1206 ATH_MSG_DEBUG(
"multi-track SA does nothings and skips for EndcapRoI");
1222 if (!
sc.isSuccess()) {
1225 trackPatterns.push_back(trackPattern);
1227 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1228 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1229 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1235 patternTimer.start();
1245 if (!
sc.isSuccess()) {
1248 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1249 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1250 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1253 patternTimer.stop();
1256 stationFitterTimer.start();
1273 m_cscsegmaker->FindSuperPointCsc(cscHits,trackPatterns,tgcFitResult,muonRoad);
1275 if (!
sc.isSuccess()) {
1277 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1278 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1279 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1283 stationFitterTimer.stop();
1286 trackFitterTimer.start();
1292 if (!
sc.isSuccess()) {
1294 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1295 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1296 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1299 trackFitterTimer.stop();
1302 const float ETA_LIMIT = 2.8;
1303 const float DELTA_ETA_LIMIT = 1.0;
1305 float roiEta = (*p_roi)->eta();
1307 && ( std::abs(
track.etaMap) > ETA_LIMIT || std::abs(
track.etaMap-
roiEta) > DELTA_ETA_LIMIT ) ) {
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,
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;
1440 ATH_MSG_DEBUG(
"### Hit patterns at the Muon Spectrometer ###");
1446 ATH_MSG_DEBUG(
"pattern#0: # of hits at endcap barrel inner =" <<
pattern.mdtSegments[barrelinner].size());
1450 ATH_MSG_DEBUG(
"pattern#0: # of hits at barrel endcap inner =" <<
pattern.mdtSegments[endcapinner].size());
1452 ATH_MSG_DEBUG(
"### ************************************* ###");
1508 pattern.superPoints[middle].Alin,
pattern.superPoints[middle].Blin,
pattern.superPoints[middle].Chi2);
1515 pattern.superPoints[barrelinner].Alin,
pattern.superPoints[barrelinner].Blin,
pattern.superPoints[barrelinner].Chi2);
1520 pattern.superPoints[endcapinner].Alin,
pattern.superPoints[endcapinner].Blin,
pattern.superPoints[endcapinner].Chi2);
1533 muonSA->
setLvl1Id( eventInfo->extendedLevel1ID() );
1566 std::vector<std::string> mdtId;
1568 if ( mdtHit.isOutlier==0 || mdtHit.isOutlier==1 ) {
1569 muonSA->
setMdtHit(mdtHit.OnlineId, mdtHit.isOutlier, mdtHit.Chamber,
1570 mdtHit.R, mdtHit.Z, mdtHit.cPhi0, mdtHit.Residual,
1571 mdtHit.DriftTime, mdtHit.DriftSpace, mdtHit.DriftSigma);
1572 mdtId.push_back(mdtHit.Id.getString());
1576 accessor_mdthitid( *muonSA ) = mdtId;
1579 std::vector<float> cscResol;
1582 if ( cscHit.isOutlier==0 || cscHit.isOutlier==1 ) {
1583 muonSA->
setCscHit(cscHit.isOutlier, cscHit.Chamber, cscHit.StationName,
1584 cscHit.StationEta, cscHit.StationPhi,
1585 cscHit.ChamberLayer, cscHit.WireLayer, cscHit.MeasuresPhi, cscHit.Strip,
1586 cscHit.eta, cscHit.phi, cscHit.r, cscHit.z,
1587 cscHit.charge, cscHit.time, cscHit.Residual);
1588 cscResol.push_back(cscHit.resolution);
1590 <<
"OL=" << cscHit.isOutlier <<
","
1591 <<
"Ch=" << cscHit.Chamber <<
","
1592 <<
"StationName=" << cscHit.StationName <<
","
1593 <<
"StationEta=" << cscHit.StationEta <<
","
1594 <<
"StationPhi=" << cscHit.StationPhi <<
","
1595 <<
"ChamberLayer=" << cscHit.ChamberLayer <<
","
1596 <<
"WireLayer=" << cscHit.WireLayer <<
","
1597 <<
"MeasuresPhi=" << cscHit.MeasuresPhi <<
","
1598 <<
"Strip=" << cscHit.Strip <<
","
1599 <<
"eta=" << cscHit.eta <<
","
1600 <<
"phi=" << cscHit.phi <<
","
1601 <<
"r=" << cscHit.r <<
","
1602 <<
"z=" << cscHit.z <<
","
1603 <<
"charge=" << cscHit.charge <<
","
1604 <<
"Rs=" << cscHit.Residual <<
","
1605 <<
"t=" << cscHit.time);
1610 accessor_cschitresol( *muonSA ) = cscResol;
1613 float sumbeta[8]={0};
1614 float nhit_layer[8]={0};
1616 muonSA->
setRpcHit(rpcHit.layer, rpcHit.measuresPhi,
1617 rpcHit.x, rpcHit.y, rpcHit.z,
1618 rpcHit.time, rpcHit.distToEtaReadout, rpcHit.distToPhiReadout,
1619 rpcHit.stationName);
1621 <<
"stationName=" << rpcHit.stationName <<
","
1622 <<
"layer=" << rpcHit.layer <<
","
1623 <<
"measuresPhi=" << rpcHit.measuresPhi <<
","
1624 <<
"x=" << rpcHit.x <<
","
1625 <<
"y=" << rpcHit.y <<
","
1626 <<
"y=" << rpcHit.z);
1629 if(dRMS>0.05)
continue;
1631 float Tprop = rpcHit.distToPhiReadout/1000*4.8;
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,
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,
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]);
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;
1773 phi = (phi2+phi1)/2.;
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;
1893 phiHalfWidth *= scalePhiWidthForFailure;
1899 pattern.etaVtx - etaHalfWidth,
1900 pattern.etaVtx + etaHalfWidth,
1902 pattern.phiVtx - phiHalfWidth,
1903 pattern.phiVtx + phiHalfWidth);
1906 <<
"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") {
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};
2023 minWin = etaMinWin_brl;
2024 maxWin = etaMaxWin_brl;
2028 minWin = phiMinWin_brl;
2029 maxWin = phiMaxWin_brl;
2038 minWin = etaMinWin_ecA;
2039 maxWin = etaMaxWin_ecA;
2043 minWin = phiMinWin_ecA;
2044 maxWin = phiMaxWin_ecA;
2050 minWin = etaMinWin_ecB;
2051 maxWin = etaMaxWin_ecB;
2055 minWin = phiMinWin_ecB;
2056 maxWin = phiMaxWin_ecB;
2060 if( std::abs(
eta) < 1.5 ) {
2063 minWin = etaMinWin_ec1;
2064 maxWin = etaMaxWin_ec1;
2068 minWin = phiMinWin_ec1;
2069 maxWin = phiMaxWin_ec1;
2072 else if( std::abs(
eta) < 2.0 ) {
2075 minWin = etaMinWin_ec2;
2076 maxWin = etaMaxWin_ec2;
2080 minWin = phiMinWin_ec2;
2081 maxWin = phiMaxWin_ec2;
2087 minWin = etaMinWin_ec3;
2088 maxWin = etaMaxWin_ec3;
2092 minWin = phiMinWin_ec3;
2093 maxWin = phiMaxWin_ec3;
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;
2140 f_residuals.clear();
2152 invalid_rpc_roi_number,
2154 track_eta, track_phi, failed_eta, failed_phi,
2155 res_inner, res_middle, res_outer, fit_residuals );
2159 if( trackPatterns.size() > 0 ) {
2166 float count_inner = 0;
2167 float count_middle = 0;
2168 float count_outer = 0;
2172 if (std::abs(mdtHit.DriftSpace) <
ZERO_LIMIT)
continue;
2174 char st = mdtHit.cType[1];
2178 r_inner.push_back(mdtHit.Residual/
norm);
2179 if (mdtHit.isOutlier==0) f_residuals.push_back(mdtHit.Residual/
norm);
2184 r_middle.push_back(mdtHit.Residual/
norm);
2185 if (mdtHit.isOutlier==0) f_residuals.push_back(mdtHit.Residual/
norm);
2190 r_outer.push_back(mdtHit.Residual/
norm);
2191 if (mdtHit.isOutlier==0) f_residuals.push_back(mdtHit.Residual/
norm);
2195 inner_mdt_hits = count_inner;
2196 middle_mdt_hits = count_middle;
2197 outer_mdt_hits = count_outer;
2200 absolute_pt = std::abs(track_pt);
2203 t_eta.push_back(
pattern.etaMap);
2204 t_phi.push_back(
pattern.phiMS);
2207 f_eta.push_back(roi->
eta());
2208 f_phi.push_back(roi->
phi());
2216 return StatusCode::SUCCESS;