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();
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();
479 if (!
sc.isSuccess()) {
483 rpcFitResult, tgcFitResult, mdtHits, cscHits,
485 trackPatterns, outputTracks, outputID, outputMS, ctx);
491 stationFitterTimer.start();
495 if (!
sc.isSuccess()) {
499 rpcFitResult, tgcFitResult, mdtHits, cscHits,
501 trackPatterns, outputTracks, outputID, outputMS, ctx);
504 stationFitterTimer.stop();
507 trackFitterTimer.start();
512 if (!
sc.isSuccess()) {
516 rpcFitResult, tgcFitResult, mdtHits, cscHits,
518 trackPatterns, outputTracks, outputID, outputMS, ctx);
521 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();
561 if (!
sc.isSuccess()) {
565 rpcFitResult, tgcFitResult, mdtHits, cscHits,
567 trackPatterns, outputTracks, outputID, outputMS, ctx);
573 stationFitterTimer.start();
591 m_cscsegmaker->FindSuperPointCsc(cscHits,trackPatterns,tgcFitResult,muonRoad);
593 if (!
sc.isSuccess()) {
597 rpcFitResult, tgcFitResult, mdtHits, cscHits,
599 trackPatterns, outputTracks, outputID, outputMS, ctx);
603 stationFitterTimer.stop();
606 trackFitterTimer.start();
612 if (!
sc.isSuccess()) {
616 rpcFitResult, tgcFitResult, mdtHits, cscHits,
618 trackPatterns, outputTracks, outputID, outputMS, ctx);
621 trackFitterTimer.stop();
625 const float ETA_LIMIT = 2.8;
626 const float DELTA_ETA_LIMIT = 1.0;
629 float roiEta = (*p_roi)->eta();
631 ( std::abs(
track.etaMap) > ETA_LIMIT || std::abs(
track.etaMap-
roiEta) > DELTA_ETA_LIMIT ) ) {
637 trackExtraTimer.start();
641 if (
sc != StatusCode::SUCCESS) {
645 rpcFitResult, tgcFitResult, mdtHits, cscHits,
647 trackPatterns, outputTracks, outputID, outputMS, ctx);
650 trackExtraTimer.stop();
654 if (
sc != StatusCode::SUCCESS) {
658 rpcFitResult, tgcFitResult, mdtHits, cscHits,
660 trackPatterns, outputTracks, outputID, outputMS, ctx);
666 rpcFitResult, tgcFitResult, mdtHits, cscHits,
668 trackPatterns, outputTracks, outputID, outputMS, ctx);
676 std::vector<uint32_t> localBuffer;
683 if (
sc != StatusCode::SUCCESS ) {
689 ATH_MSG_DEBUG(
"Retrieved the buffer, with size: " << localBuffer.size());
696 ATH_MSG_DEBUG(
"The size of the TrigCompositeContainer is: " << outputMuonCal->
size() );
699 return StatusCode::FAILURE;
704 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");
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());
823 if (!
sc.isSuccess()) {
832 patternTimer.start();
836 if (!
sc.isSuccess()) {
843 stationFitterTimer.start();
847 if (!
sc.isSuccess()) {
851 stationFitterTimer.stop();
854 trackFitterTimer.start();
858 if (!
sc.isSuccess()) {
862 trackFitterTimer.stop();
881 if (!
sc.isSuccess()) {
890 patternTimer.start();
896 if (!
sc.isSuccess()) {
903 stationFitterTimer.start();
911 m_cscsegmaker->FindSuperPointCsc(cscHits,trackPatterns,tgcFitResult,muonRoad);
912 if (!
sc.isSuccess()) {
916 stationFitterTimer.stop();
919 trackFitterTimer.start();
924 if (!
sc.isSuccess()) {
928 trackFitterTimer.stop();
934 const float ETA_LIMIT = 2.8;
935 const float DELTA_ETA_LIMIT = 1.0;
936 float roiEta = (*p_roi).eta();
938 && ( std::abs(
track.etaMap) > ETA_LIMIT || std::abs(
track.etaMap-
roiEta) > DELTA_ETA_LIMIT ) ) {
939 trackPatterns.back().etaMap =
roiEta;
944 if (
sc != StatusCode::SUCCESS) {
949 if ( std::abs(trackPatterns.back().pt) >
ZERO_LIMIT ) {
950 storeMuonSA(p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
951 rpcFitResult, tgcFitResult, mdtHits, cscHits,
953 trackPatterns.back(), outputSAs, ctx);
958 muonCB->
setPt(idtrack->pt());
959 muonCB->
setEta(idtrack->eta());
960 muonCB->
setPhi(idtrack->phi());
971 if(outputSAs.
size()==0) {
977 rpcFitResult.
Clear();
978 tgcFitResult.
Clear();
983 trackPatterns.clear();
985 storeMuonSA(p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
986 rpcFitResult, tgcFitResult, mdtHits, cscHits,
988 trackPattern, outputSAs, ctx);
1004 for (
auto outputSA : outputSAs){
1005 ATH_MSG_DEBUG(
"outputSA pt/eta/phi: " << outputSA->pt() <<
"/" << outputSA->etaMS() <<
"/" << outputSA->phiMS());
1009 for (
auto outputCB : outputCBs){
1010 ATH_MSG_DEBUG(
"outputCB pt/eta/phi: " << outputCB->pt() <<
"/" << outputCB->eta() <<
"/" << outputCB->phi());
1014 if (p_roids==roids.end())
break;
1017 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMuonSignatureIO success");
1018 return StatusCode::SUCCESS;
1026 const std::vector<const xAOD::MuonRoI*>& muonRoIs,
1028 const bool dynamicDeltaRpc,
1029 const EventContext& ctx)
const
1031 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMultiTrackSignature start");
1036 std::vector<TrigL2MuonSA::RpcFitResult> clusterFitResults;
1037 std::vector< TrigL2MuonSA::MuonRoad > clusterRoad;
1038 std::vector<TrigL2MuonSA::MdtHits> mdtHits_cluster_normal;
1049 trackFitterTimer, trackExtraTimer, calibrationTimer );
1066 p_roids = roids.begin();
1067 for (p_roi=(muonRoIs).
begin(); p_roi!=(muonRoIs).
end(); ++p_roi) {
1070 std::vector<TrigL2MuonSA::TrackPattern> trackPatterns;
1075 rpcFitResult.
Clear();
1076 tgcFitResult.
Clear();
1082 clusterFitResults.clear();
1083 clusterRoad.clear();
1084 mdtHits_cluster_normal.clear();
1099 mdtHits_cluster_normal,
1102 if (!
sc.isSuccess()) {
1110 for(
unsigned int i_road = 0; i_road < clusterRoad.size(); i_road++){
1112 std::vector<TrigL2MuonSA::TrackPattern> tmp_trkPats; tmp_trkPats.clear();
1114 patternTimer.start();
1116 mdtHits_cluster_normal.at(i_road),
1118 if (!
sc.isSuccess()) {
1122 patternTimer.stop();
1125 stationFitterTimer.start();
1127 clusterFitResults.at(i_road),
1129 if (!
sc.isSuccess()) {
1134 stationFitterTimer.stop();
1137 trackFitterTimer.start();
1139 clusterFitResults.at(i_road),
1142 if (!
sc.isSuccess()) {
1146 trackFitterTimer.stop();
1149 const float ETA_LIMIT = 2.8;
1150 const float DELTA_ETA_LIMIT = 1.0;
1152 float roiEta = (*p_roi)->eta();
1154 && ( std::abs(
track.etaMap) > ETA_LIMIT || std::abs(
track.etaMap-
roiEta) > DELTA_ETA_LIMIT ) ) {
1160 trackExtraTimer.start();
1165 if (
sc != StatusCode::SUCCESS) {
1170 trackExtraTimer.stop();
1172 if(tmp_trkPats.size() > 0){
1173 ATH_MSG_DEBUG(
"temp pT calculated 2mu-in-1RoI alg = " << tmp_trkPats[0].
pt <<
" GeV");
1174 if( (std::abs(tmp_trkPats[0].barrelSagitta) <
ZERO_LIMIT &&
1178 trackPatterns.push_back(tmp_trkPats[0]);
1181 storeMuonSA(*p_roi, *p_roids, clusterRoad.at(i_road), mdtRegion, rpcHits, tgcHits,
1182 clusterFitResults.at(i_road), tgcFitResult, mdtHits_cluster_normal.at(i_road), cscHits,
1183 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1186 if(trackPatterns.empty()){
1187 ATH_MSG_DEBUG(
"multi-track SA falied to reconstruct muons");
1189 trackPatterns.push_back(trackPattern);
1190 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1191 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1192 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1199 ATH_MSG_DEBUG(
"multi-track SA does nothings and skips for EndcapRoI");
1214 if (!
sc.isSuccess()) {
1217 trackPatterns.push_back(trackPattern);
1219 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1220 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1221 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1227 patternTimer.start();
1236 if (!
sc.isSuccess()) {
1239 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1240 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1241 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1244 patternTimer.stop();
1247 stationFitterTimer.start();
1264 m_cscsegmaker->FindSuperPointCsc(cscHits,trackPatterns,tgcFitResult,muonRoad);
1266 if (!
sc.isSuccess()) {
1268 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1269 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1270 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1274 stationFitterTimer.stop();
1277 trackFitterTimer.start();
1283 if (!
sc.isSuccess()) {
1285 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1286 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1287 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1290 trackFitterTimer.stop();
1293 const float ETA_LIMIT = 2.8;
1294 const float DELTA_ETA_LIMIT = 1.0;
1296 float roiEta = (*p_roi)->eta();
1298 && ( std::abs(
track.etaMap) > ETA_LIMIT || std::abs(
track.etaMap-
roiEta) > DELTA_ETA_LIMIT ) ) {
1304 trackExtraTimer.start();
1308 if (
sc != StatusCode::SUCCESS) {
1310 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1311 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1312 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1315 trackExtraTimer.stop();
1317 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1318 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1319 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1324 if (
sc != StatusCode::SUCCESS) {
1329 if (p_roids==roids.end())
break;
1332 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMultiTrackSignature success");
1333 return StatusCode::SUCCESS;
1351 const std::vector<TrigL2MuonSA::TrackPattern>& trackPatterns,
1355 const EventContext& ctx)
const
1358 if( trackPatterns.size() > 0 ) {
1363 storeMuonSA(roi, roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1364 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1371 ATH_MSG_DEBUG(
"Not update output objects because trackPatterns has no object");
1391 const EventContext& ctx )
const
1395 const int currentRoIId = roids->
roiId();
1397 const EventIDBase& eventID = ctx.eventID();
1399 if (!eventInfo.isValid()) {
1409 int barrelinner = 0;
1410 int endcapinner = 3;
1431 ATH_MSG_DEBUG(
"### Hit patterns at the Muon Spectrometer ###");
1437 ATH_MSG_DEBUG(
"pattern#0: # of hits at endcap barrel inner =" <<
pattern.mdtSegments[barrelinner].size());
1441 ATH_MSG_DEBUG(
"pattern#0: # of hits at barrel endcap inner =" <<
pattern.mdtSegments[endcapinner].size());
1443 ATH_MSG_DEBUG(
"### ************************************* ###");
1499 pattern.superPoints[middle].Alin,
pattern.superPoints[middle].Blin,
pattern.superPoints[middle].Chi2);
1506 pattern.superPoints[barrelinner].Alin,
pattern.superPoints[barrelinner].Blin,
pattern.superPoints[barrelinner].Chi2);
1511 pattern.superPoints[endcapinner].Alin,
pattern.superPoints[endcapinner].Blin,
pattern.superPoints[endcapinner].Chi2);
1524 muonSA->
setLvl1Id( eventInfo->extendedLevel1ID() );
1557 std::vector<std::string> mdtId;
1559 if ( mdtHit.isOutlier==0 || mdtHit.isOutlier==1 ) {
1560 muonSA->
setMdtHit(mdtHit.OnlineId, mdtHit.isOutlier, mdtHit.Chamber,
1561 mdtHit.R, mdtHit.Z, mdtHit.cPhi0, mdtHit.Residual,
1562 mdtHit.DriftTime, mdtHit.DriftSpace, mdtHit.DriftSigma);
1563 mdtId.push_back(mdtHit.Id.getString());
1567 accessor_mdthitid( *muonSA ) = mdtId;
1570 std::vector<float> cscResol;
1573 if ( cscHit.isOutlier==0 || cscHit.isOutlier==1 ) {
1574 muonSA->
setCscHit(cscHit.isOutlier, cscHit.Chamber, cscHit.StationName,
1575 cscHit.StationEta, cscHit.StationPhi,
1576 cscHit.ChamberLayer, cscHit.WireLayer, cscHit.MeasuresPhi, cscHit.Strip,
1577 cscHit.eta, cscHit.phi, cscHit.r, cscHit.z,
1578 cscHit.charge, cscHit.time, cscHit.Residual);
1579 cscResol.push_back(cscHit.resolution);
1581 <<
"OL=" << cscHit.isOutlier <<
","
1582 <<
"Ch=" << cscHit.Chamber <<
","
1583 <<
"StationName=" << cscHit.StationName <<
","
1584 <<
"StationEta=" << cscHit.StationEta <<
","
1585 <<
"StationPhi=" << cscHit.StationPhi <<
","
1586 <<
"ChamberLayer=" << cscHit.ChamberLayer <<
","
1587 <<
"WireLayer=" << cscHit.WireLayer <<
","
1588 <<
"MeasuresPhi=" << cscHit.MeasuresPhi <<
","
1589 <<
"Strip=" << cscHit.Strip <<
","
1590 <<
"eta=" << cscHit.eta <<
","
1591 <<
"phi=" << cscHit.phi <<
","
1592 <<
"r=" << cscHit.r <<
","
1593 <<
"z=" << cscHit.z <<
","
1594 <<
"charge=" << cscHit.charge <<
","
1595 <<
"Rs=" << cscHit.Residual <<
","
1596 <<
"t=" << cscHit.time);
1601 accessor_cschitresol( *muonSA ) = cscResol;
1604 float sumbeta[8]={0};
1605 float nhit_layer[8]={0};
1607 muonSA->
setRpcHit(rpcHit.layer, rpcHit.measuresPhi,
1608 rpcHit.x, rpcHit.y, rpcHit.z,
1609 rpcHit.time, rpcHit.distToEtaReadout, rpcHit.distToPhiReadout,
1610 rpcHit.stationName);
1612 <<
"stationName=" << rpcHit.stationName <<
","
1613 <<
"layer=" << rpcHit.layer <<
","
1614 <<
"measuresPhi=" << rpcHit.measuresPhi <<
","
1615 <<
"x=" << rpcHit.x <<
","
1616 <<
"y=" << rpcHit.y <<
","
1617 <<
"y=" << rpcHit.z);
1620 if(dRMS>0.05)
continue;
1622 float Tprop = rpcHit.distToPhiReadout/1000*4.8;
1624 sumbeta[rpcHit.layer]=sumbeta[rpcHit.layer]+
beta;
1625 nhit_layer[rpcHit.layer]=nhit_layer[rpcHit.layer]+1;
1628 std::vector<float> Avebeta_layer;
1629 for(
int i_layer=0;i_layer<8;i_layer++){
1630 if(nhit_layer[i_layer]!=0)Avebeta_layer.push_back( sumbeta[i_layer]/nhit_layer[i_layer] );
1632 if(Avebeta_layer.size()>0) muonSA->
setBeta(
std::accumulate(Avebeta_layer.begin(),Avebeta_layer.end(),0.0)/Avebeta_layer.size() );
1634 Avebeta_layer.clear();
1638 muonSA->
setTgcHit(tgcHit.eta, tgcHit.phi, tgcHit.r, tgcHit.z,
1639 tgcHit.width, tgcHit.sta, tgcHit.isStrip,
1640 tgcHit.bcTag, tgcHit.inRoad);
1642 <<
"eta=" << tgcHit.eta <<
","
1643 <<
"phi=" << tgcHit.phi <<
","
1644 <<
"r=" << tgcHit.r <<
","
1645 <<
"z=" << tgcHit.z <<
","
1646 <<
"width=" << tgcHit.width <<
","
1647 <<
"stationNum=" << tgcHit.sta <<
","
1648 <<
"isStrip=" << tgcHit.isStrip <<
","
1649 <<
"bcTag=" << tgcHit.bcTag <<
","
1650 <<
"inRoad=" << tgcHit.inRoad);
1655 for(
unsigned int i_hit=0; i_hit<stgcHits.size(); i_hit++) {
1656 if ( stgcHits[i_hit].isOutlier==0 || stgcHits[i_hit].isOutlier==1 ) {
1659 muonSA->
setStgcCluster(stgcHits[i_hit].layerNumber, stgcHits[i_hit].isOutlier, stgcHits[i_hit].channelType,
1660 stgcHits[i_hit].
eta, stgcHits[i_hit].
phi, stgcHits[i_hit].
r, stgcHits[i_hit].
z,
1661 stgcHits[i_hit].ResidualR, stgcHits[i_hit].ResidualPhi,
1665 <<
"eta=" << stgcHits[i_hit].
eta <<
","
1666 <<
"phi=" << stgcHits[i_hit].
phi <<
","
1667 <<
"r=" << stgcHits[i_hit].
r <<
","
1668 <<
"z=" << stgcHits[i_hit].
z <<
","
1669 <<
"z=" << stgcHits[i_hit].ResidualR <<
","
1670 <<
"z=" << stgcHits[i_hit].ResidualPhi);
1675 for(
unsigned int i_hit=0; i_hit<mmHits.size(); i_hit++) {
1676 if ( mmHits[i_hit].isOutlier==0 || mmHits[i_hit].isOutlier==1 ) {
1679 muonSA->
setMmCluster(mmHits[i_hit].layerNumber, mmHits[i_hit].isOutlier,
1680 mmHits[i_hit].
eta, mmHits[i_hit].
phi, mmHits[i_hit].
r, mmHits[i_hit].
z,
1681 mmHits[i_hit].ResidualR, mmHits[i_hit].ResidualPhi,
1685 <<
"eta=" << tgcHits[i_hit].
eta <<
","
1686 <<
"phi=" << tgcHits[i_hit].
phi <<
","
1687 <<
"r=" << tgcHits[i_hit].
r <<
","
1688 <<
"z=" << tgcHits[i_hit].
z <<
","
1689 <<
"width=" << tgcHits[i_hit].
width <<
","
1690 <<
"stationNum=" << tgcHits[i_hit].sta <<
","
1691 <<
"isStrip=" << tgcHits[i_hit].
isStrip <<
","
1692 <<
"bcTag=" << tgcHits[i_hit].
bcTag <<
","
1693 <<
"inRoad=" << tgcHits[i_hit].inRoad);
1698 for (
int i_station=0; i_station<8; i_station++) {
1699 for (
int i_sector=0; i_sector<2; i_sector++) {
1700 muonSA->
setRoad(i_station, i_sector, muonRoad.
aw[i_station][i_sector], muonRoad.
bw[i_station][i_sector]);
1701 muonSA->
setRegionZ(i_station, i_sector, mdtRegion.
zMin[i_station][i_sector], mdtRegion.
zMax[i_station][i_sector]);
1702 muonSA->
setRegionR(i_station, i_sector, mdtRegion.
rMin[i_station][i_sector], mdtRegion.
rMax[i_station][i_sector]);
1703 muonSA->
setRegionEta(i_station, i_sector, mdtRegion.
etaMin[i_station][i_sector], mdtRegion.
etaMax[i_station][i_sector]);
1753 double phi1 = tgcFitResult.
tgcMid1[1];
1754 double phi2 = tgcFitResult.
tgcMid2[1];
1755 if ( tgcFitResult.
tgcMid1[3]==0. || tgcFitResult.
tgcMid2[3]==0. ) {
1758 }
else if( phi1*phi2 < 0 && std::abs(phi1)>(
M_PI/2.) ) {
1759 double tmp1 = (phi1>0)? phi1 -
M_PI : phi1 +
M_PI;
1764 phi = (phi2+phi1)/2.;
1812 mseta = roids->
eta();
1813 msphi = roids->
phi();
1817 const float phiHalfWidth = 0.1;
1818 const float etaHalfWidth = 0.1;
1824 mseta - etaHalfWidth,
1825 mseta + etaHalfWidth,
1827 msphi - phiHalfWidth,
1828 msphi + phiHalfWidth);
1832 << mseta <<
"/" << msphi);
1835 <<
" phi=" << MSroiDescriptor->
phi()
1836 <<
", eta=" << MSroiDescriptor->
eta());
1858 const double scalePhiWidthForFailure = 2;
1859 const double scaleRoIforZeroPt = 2;
1867 float phiHalfWidth = 0.1;
1868 float etaHalfWidth = 0.1;
1884 phiHalfWidth *= scalePhiWidthForFailure;
1890 pattern.etaVtx - etaHalfWidth,
1891 pattern.etaVtx + etaHalfWidth,
1893 pattern.phiVtx - phiHalfWidth,
1894 pattern.phiVtx + phiHalfWidth);
1897 <<
"pattern.etaVtx/pattern.phiVtx="
1901 <<
" phi=" << IDroiDescriptor->
phi()
1902 <<
", eta=" << IDroiDescriptor->
eta());
1912 roids->
eta() - (roids->
eta() - roids->
etaMinus()) * scaleRoIforZeroPt,
1913 roids->
eta() + (roids->
etaPlus() - roids->
eta()) * scaleRoIforZeroPt,
1918 ATH_MSG_VERBOSE(
"will Record an RoiDescriptor for Inner Detector in case with zero pT:"
1919 <<
" phi=" << IDroiDescriptor->
phi()
1920 <<
", phi min=" << IDroiDescriptor->
phiMinus()
1921 <<
", phi max=" << IDroiDescriptor->
phiPlus()
1922 <<
", eta=" << IDroiDescriptor->
eta()
1923 <<
", eta min=" << IDroiDescriptor->
etaMinus()
1924 <<
", eta max=" << IDroiDescriptor->
etaPlus());
1939 if (
name ==
"MuFastSteering_Muon") {
1941 }
else if (
name ==
"MuFastSteering_900GeV") {
1958 float pt = muonSA->
pt();
1961 const int N_PARAMS = 2;
1964 const float etaMinWin_brl = 0.10;
1965 const float etaMinWin_ec1 = 0.10;
1966 const float etaMinWin_ec2 = 0.10;
1967 const float etaMinWin_ec3 = 0.10;
1968 const float etaMinWin_ecA = 0.10;
1969 const float etaMinWin_ecB = 0.10;
1971 const float etaMaxWin_brl = 0.20;
1972 const float etaMaxWin_ec1 = 0.20;
1973 const float etaMaxWin_ec2 = 0.20;
1974 const float etaMaxWin_ec3 = 0.20;
1975 const float etaMaxWin_ecA = 0.20;
1976 const float etaMaxWin_ecB = 0.20;
1978 const float etaParams_brl[N_PARAMS] = { 0.038, 0.284};
1979 const float etaParams_ec1[N_PARAMS] = { 0.011, 0.519};
1980 const float etaParams_ec2[N_PARAMS] = { 0.023, 0.253};
1981 const float etaParams_ec3[N_PARAMS] = { 0.018, 0.519};
1982 const float etaParams_ecA[N_PARAMS] = { 0.010, 0.431};
1983 const float etaParams_ecB[N_PARAMS] = { 0.023, 0.236};
1986 const float phiMinWin_brl = 0.125;
1987 const float phiMinWin_ec1 = 0.125;
1988 const float phiMinWin_ec2 = 0.125;
1989 const float phiMinWin_ec3 = 0.10;
1990 const float phiMinWin_ecA = 0.15;
1991 const float phiMinWin_ecB = 0.15;
1993 const float phiMaxWin_brl = 0.20;
1994 const float phiMaxWin_ec1 = 0.20;
1995 const float phiMaxWin_ec2 = 0.20;
1996 const float phiMaxWin_ec3 = 0.20;
1997 const float phiMaxWin_ecA = 0.25;
1998 const float phiMaxWin_ecB = 0.20;
2000 const float phiParams_brl[N_PARAMS] = { 0.000, 0.831};
2001 const float phiParams_ec1[N_PARAMS] = { 0.000, 0.885};
2002 const float phiParams_ec2[N_PARAMS] = { 0.015, 0.552};
2003 const float phiParams_ec3[N_PARAMS] = { 0.008, 0.576};
2004 const float phiParams_ecA[N_PARAMS] = { 0.000, 0.830};
2005 const float phiParams_ecB[N_PARAMS] = { 0.006, 1.331};
2014 minWin = etaMinWin_brl;
2015 maxWin = etaMaxWin_brl;
2019 minWin = phiMinWin_brl;
2020 maxWin = phiMaxWin_brl;
2029 minWin = etaMinWin_ecA;
2030 maxWin = etaMaxWin_ecA;
2034 minWin = phiMinWin_ecA;
2035 maxWin = phiMaxWin_ecA;
2041 minWin = etaMinWin_ecB;
2042 maxWin = etaMaxWin_ecB;
2046 minWin = phiMinWin_ecB;
2047 maxWin = phiMaxWin_ecB;
2051 if( std::abs(
eta) < 1.5 ) {
2054 minWin = etaMinWin_ec1;
2055 maxWin = etaMaxWin_ec1;
2059 minWin = phiMinWin_ec1;
2060 maxWin = phiMaxWin_ec1;
2063 else if( std::abs(
eta) < 2.0 ) {
2066 minWin = etaMinWin_ec2;
2067 maxWin = etaMaxWin_ec2;
2071 minWin = phiMinWin_ec2;
2072 maxWin = phiMaxWin_ec2;
2078 minWin = etaMinWin_ec3;
2079 maxWin = etaMaxWin_ec3;
2083 minWin = phiMinWin_ec3;
2084 maxWin = phiMaxWin_ec3;
2093 if(
x < minWin )
retval = minWin;
2094 if(
x > maxWin )
retval = maxWin;
2104 std::vector<TrigL2MuonSA::TrackPattern>& trackPatterns )
const
2119 std::vector<float> t_eta, t_phi;
2120 std::vector<float> f_eta, f_phi;
2121 std::vector<float> r_inner, r_middle, r_outer;
2122 std::vector<float> f_residuals;
2131 f_residuals.clear();
2143 invalid_rpc_roi_number,
2145 track_eta, track_phi, failed_eta, failed_phi,
2146 res_inner, res_middle, res_outer, fit_residuals );
2150 if( trackPatterns.size() > 0 ) {
2157 float count_inner = 0;
2158 float count_middle = 0;
2159 float count_outer = 0;
2163 if (std::abs(mdtHit.DriftSpace) <
ZERO_LIMIT)
continue;
2165 char st = mdtHit.cType[1];
2169 r_inner.push_back(mdtHit.Residual/
norm);
2170 if (mdtHit.isOutlier==0) f_residuals.push_back(mdtHit.Residual/
norm);
2175 r_middle.push_back(mdtHit.Residual/
norm);
2176 if (mdtHit.isOutlier==0) f_residuals.push_back(mdtHit.Residual/
norm);
2181 r_outer.push_back(mdtHit.Residual/
norm);
2182 if (mdtHit.isOutlier==0) f_residuals.push_back(mdtHit.Residual/
norm);
2186 inner_mdt_hits = count_inner;
2187 middle_mdt_hits = count_middle;
2188 outer_mdt_hits = count_outer;
2191 absolute_pt = std::abs(track_pt);
2194 t_eta.push_back(
pattern.etaMap);
2195 t_phi.push_back(
pattern.phiMS);
2198 f_eta.push_back(roi->
eta());
2199 f_phi.push_back(roi->
phi());
2207 return StatusCode::SUCCESS;