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");
148 return StatusCode::SUCCESS;
157 if (
sc != StatusCode::SUCCESS ) {
164 return StatusCode::SUCCESS;
181 ATH_MSG_DEBUG(
"=================================================");
208 for (
auto recRoI: collection ) {
209 if ( recRoI->roiWord() ==
roiWord ){
222 for (
auto recRoI: collection ) {
223 if ( recRoI->roiWord() ==
roiWord ){
236 ATH_MSG_ERROR(
"You are not supposed to run trigger on RUN2 layout anymore.");
237 return StatusCode::FAILURE;
246 if (!roiCollectionHandle.isValid()){
248 return StatusCode::FAILURE;
253 if (!recRoiCollectionHandle.isValid()){
255 return StatusCode::FAILURE;
258 std::vector< const TrigRoiDescriptor* > internalRoI;
262 for(; p_roids != p_roidsEn; ++p_roids ) {
263 internalRoI.push_back(*p_roids);
264 ATH_MSG_DEBUG(
"REGTEST: " <<
m_roiCollectionKey.
key() <<
" eta = " <<
"(" << (*p_roids)->etaMinus() <<
")" << (*p_roids)->eta() <<
"(" << (*p_roids)->etaPlus() <<
")");
265 ATH_MSG_DEBUG(
"REGTEST: " <<
m_roiCollectionKey.
key() <<
" phi = " <<
"(" << (*p_roids)->phiMinus() <<
")" << (*p_roids)->phi() <<
"(" << (*p_roids)->phiPlus() <<
")");
266 ATH_MSG_DEBUG(
"REGTEST: " <<
m_roiCollectionKey.
key() <<
" zed = " <<
"(" << (*p_roids)->zedMinus() <<
")" << (*p_roids)->zed() <<
"(" << (*p_roids)->zedPlus() <<
")");
271 std::vector< const xAOD::MuonRoI* > recRoIVector;
272 std::vector< const xAOD::MuonRoI* > surrRoIs;
276 if( recRoI ==
nullptr )
continue;
277 recRoIVector.push_back(recRoI);
282 bool dynamicDeltaRpc =
false;
283 int nPassedBarrelSurrRoi = 0;
285 for(
const auto recRoI: *recRoiCollection ){
286 if(
std::find(recRoIVector.begin(), recRoIVector.end(), recRoI) != recRoIVector.end())
continue;
288 bool surrounding =
false;
289 for(
const auto matchedRoI: recRoIVector ){
290 float deta = std::abs(recRoI->eta() - matchedRoI->eta());
291 float dphi = std::abs(recRoI->phi() - matchedRoI->phi());
292 if( dphi >
M_PI )dphi = 2.*
M_PI - dphi;
298 surrRoIs.push_back(recRoI);
302 for(
const auto recRoI: surrRoIs ){
304 if( std::abs((recRoI)->
eta()) <= 1.05 && (recRoI)->getThrNumber() >= 1 )nPassedBarrelSurrRoi++;
306 ATH_MSG_DEBUG(
"nPassedBarrelSurrRoi = " << nPassedBarrelSurrRoi);
308 if( nPassedBarrelSurrRoi >= 1 )
309 dynamicDeltaRpc =
true;
314 ATH_CHECK(muFastContainer.record(std::make_unique<xAOD::L2StandAloneMuonContainer>(), std::make_unique<xAOD::L2StandAloneMuonAuxContainer>()));
317 ATH_CHECK(muCompositeContainer.record(std::make_unique<xAOD::TrigCompositeContainer>(), std::make_unique<xAOD::TrigCompositeAuxContainer>()));
320 ATH_CHECK(muIdContainer.record(std::make_unique<TrigRoiDescriptorCollection>()));
323 ATH_CHECK(muMsContainer.record(std::make_unique<TrigRoiDescriptorCollection>()));
331 ATH_CHECK( muonCBColl.record (std::make_unique<xAOD::L2CombinedMuonContainer>(),
332 std::make_unique<xAOD::L2CombinedMuonAuxContainer>()) );
335 if (!trackHandle.isValid()){
337 return StatusCode::FAILURE;
342 *muonCBColl, *muFastContainer, dynamicDeltaRpc, ctx ));
346 for (
const auto p_CBmuon : *muonCBColl){
358 *muFastContainer, *muCompositeContainer, *muIdContainer, *muMsContainer, dynamicDeltaRpc, ctx));
366 for (
auto p_muon : *muFastContainer) {
372 for (
auto p_muonID : *muIdContainer) {
377 for (
auto p_muonMS : *muMsContainer) {
382 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::execute() success");
383 return StatusCode::SUCCESS;
390 const std::vector<const xAOD::MuonRoI*>& muonRoIs,
395 const bool dynamicDeltaRpc,
396 const EventContext& ctx)
const
398 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMuonSignature start");
409 trackFitterTimer, trackExtraTimer, calibrationTimer );
426 p_roids = roids.begin();
427 for (p_roi=(muonRoIs).
begin(); p_roi!=(muonRoIs).
end(); ++p_roi) {
430 std::vector<TrigL2MuonSA::TrackPattern> trackPatterns;
435 rpcFitResult.
Clear();
436 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();
477 if (!
sc.isSuccess()) {
481 rpcFitResult, tgcFitResult, mdtHits, cscHits,
483 trackPatterns, outputTracks, outputID, outputMS, ctx);
489 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();
538 if (!
sc.isSuccess()) {
541 trackPatterns.push_back(trackPattern);
544 rpcFitResult, tgcFitResult, mdtHits, cscHits,
546 trackPatterns, outputTracks, outputID, outputMS, ctx);
552 patternTimer.start();
561 if (!
sc.isSuccess()) {
565 rpcFitResult, tgcFitResult, mdtHits, cscHits,
567 trackPatterns, outputTracks, outputID, outputMS, ctx);
573 stationFitterTimer.start();
590 m_cscsegmaker->FindSuperPointCsc(cscHits,trackPatterns,tgcFitResult,muonRoad);
592 if (!
sc.isSuccess()) {
596 rpcFitResult, tgcFitResult, mdtHits, cscHits,
598 trackPatterns, outputTracks, outputID, outputMS, ctx);
602 stationFitterTimer.stop();
605 trackFitterTimer.start();
611 if (!
sc.isSuccess()) {
615 rpcFitResult, tgcFitResult, mdtHits, cscHits,
617 trackPatterns, outputTracks, outputID, outputMS, ctx);
620 trackFitterTimer.stop();
624 const float ETA_LIMIT = 2.8;
625 const float DELTA_ETA_LIMIT = 1.0;
628 float roiEta = (*p_roi)->eta();
630 && ( std::abs(
track.etaMap) > ETA_LIMIT || std::abs(
track.etaMap-
roiEta) > DELTA_ETA_LIMIT ) ) {
636 trackExtraTimer.start();
640 if (
sc != StatusCode::SUCCESS) {
644 rpcFitResult, tgcFitResult, mdtHits, cscHits,
646 trackPatterns, outputTracks, outputID, outputMS, ctx);
649 trackExtraTimer.stop();
653 if (
sc != StatusCode::SUCCESS) {
657 rpcFitResult, tgcFitResult, mdtHits, cscHits,
659 trackPatterns, outputTracks, outputID, outputMS, ctx);
665 rpcFitResult, tgcFitResult, mdtHits, cscHits,
667 trackPatterns, outputTracks, outputID, outputMS, ctx);
675 std::vector<uint32_t> localBuffer;
682 if (
sc != StatusCode::SUCCESS ) {
688 ATH_MSG_DEBUG(
"Retrieved the buffer, with size: " << localBuffer.size());
695 ATH_MSG_DEBUG(
"The size of the TrigCompositeContainer is: " << outputMuonCal.
size() );
698 tc->setDetail(
"MuonCalibrationStream", localBuffer );
708 if (p_roids==roids.end())
break;
711 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMuonSignature success");
712 return StatusCode::SUCCESS;
721 const std::vector<const TrigRoiDescriptor*>& roids,
722 const std::vector<const xAOD::MuonRoI*>& muonRoIs,
725 const bool dynamicDeltaRpc,
726 const EventContext& ctx)
const
728 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMuonSignatureIO start");
740 trackFitterTimer, trackExtraTimer, calibrationTimer );
755 p_roids = roids.begin();
756 for (
const auto p_roi : muonRoIs) {
757 ATH_MSG_DEBUG(
"roi eta/phi: " << (*p_roi).eta() <<
"/" << (*p_roi).phi());
760 if ( (idtracks).empty() )
ATH_MSG_DEBUG(
"IO TEST: xAOD::TrackParticleContainer has 0 tracks --> Can not use FTF tracks...");
761 else ATH_MSG_DEBUG(
"IO TEST: xAOD::TrackParticleContainer has " << (idtracks).
size() <<
" tracks --> Start inside-out mode!");
763 std::vector<TrigL2MuonSA::TrackPattern> trackPatterns;
764 int idtrack_idx = -1;
765 for (
auto idtrack : idtracks) {
781 rpcFitResult.
Clear();
782 tgcFitResult.
Clear();
787 trackPatterns.clear();
790 if (!
sc.isSuccess()) {
797 if ( std::abs(idtrack->eta()) < 1.05 ){
798 ATH_MSG_DEBUG(
"FTF track at IP is in Barrel: " << idtrack->eta());
800 ATH_MSG_DEBUG(
"FTF track at IP is in Endcap: " << idtrack->eta());
822 if (!
sc.isSuccess()) {
831 patternTimer.start();
835 if (!
sc.isSuccess()) {
842 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 clusterRoad.at(i_road),
1128 clusterFitResults.at(i_road),
1130 if (!
sc.isSuccess()) {
1135 stationFitterTimer.stop();
1138 trackFitterTimer.start();
1140 clusterFitResults.at(i_road),
1143 if (!
sc.isSuccess()) {
1147 trackFitterTimer.stop();
1150 const float ETA_LIMIT = 2.8;
1151 const float DELTA_ETA_LIMIT = 1.0;
1153 float roiEta = (*p_roi)->eta();
1155 && ( std::abs(
track.etaMap) > ETA_LIMIT || std::abs(
track.etaMap-
roiEta) > DELTA_ETA_LIMIT ) ) {
1161 trackExtraTimer.start();
1166 if (
sc != StatusCode::SUCCESS) {
1171 trackExtraTimer.stop();
1173 if(tmp_trkPats.size() > 0){
1174 ATH_MSG_DEBUG(
"temp pT calculated 2mu-in-1RoI alg = " << tmp_trkPats[0].
pt <<
" GeV");
1175 if( (std::abs(tmp_trkPats[0].barrelSagitta) <
ZERO_LIMIT &&
1179 trackPatterns.push_back(tmp_trkPats[0]);
1182 storeMuonSA(*p_roi, *p_roids, clusterRoad.at(i_road), mdtRegion, rpcHits, tgcHits,
1183 clusterFitResults.at(i_road), tgcFitResult, mdtHits_cluster_normal.at(i_road), cscHits,
1184 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1187 if(trackPatterns.empty()){
1188 ATH_MSG_DEBUG(
"multi-track SA falied to reconstruct muons");
1190 trackPatterns.push_back(trackPattern);
1191 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1192 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1193 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1200 ATH_MSG_DEBUG(
"multi-track SA does nothings and skips for EndcapRoI");
1215 if (!
sc.isSuccess()) {
1218 trackPatterns.push_back(trackPattern);
1220 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1221 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1222 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1228 patternTimer.start();
1237 if (!
sc.isSuccess()) {
1240 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1241 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1242 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1245 patternTimer.stop();
1248 stationFitterTimer.start();
1265 m_cscsegmaker->FindSuperPointCsc(cscHits,trackPatterns,tgcFitResult,muonRoad);
1267 if (!
sc.isSuccess()) {
1269 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1270 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1271 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1275 stationFitterTimer.stop();
1278 trackFitterTimer.start();
1284 if (!
sc.isSuccess()) {
1286 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1287 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1288 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1291 trackFitterTimer.stop();
1294 const float ETA_LIMIT = 2.8;
1295 const float DELTA_ETA_LIMIT = 1.0;
1297 float roiEta = (*p_roi)->eta();
1299 && ( std::abs(
track.etaMap) > ETA_LIMIT || std::abs(
track.etaMap-
roiEta) > DELTA_ETA_LIMIT ) ) {
1305 trackExtraTimer.start();
1309 if (
sc != StatusCode::SUCCESS) {
1311 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1312 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1313 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1316 trackExtraTimer.stop();
1318 storeMuonSA(*p_roi, *p_roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1319 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1320 stgcHits, mmHits, trackPatterns.back(), outputTracks, ctx);
1325 if (
sc != StatusCode::SUCCESS) {
1330 if (p_roids==roids.end())
break;
1333 ATH_MSG_DEBUG(
"StatusCode MuFastSteering::findMultiTrackSignature success");
1334 return StatusCode::SUCCESS;
1352 const std::vector<TrigL2MuonSA::TrackPattern>& trackPatterns,
1356 const EventContext& ctx)
const
1359 if( trackPatterns.size() > 0 ) {
1364 storeMuonSA(roi, roids, muonRoad, mdtRegion, rpcHits, tgcHits,
1365 rpcFitResult, tgcFitResult, mdtHits, cscHits,
1372 ATH_MSG_DEBUG(
"Not update output objects because trackPatterns has no object");
1392 const EventContext& ctx )
const
1396 const int currentRoIId = roids->
roiId();
1398 const EventIDBase& eventID = ctx.eventID();
1400 if (!eventInfo.isValid()) {
1410 int barrelinner = 0;
1411 int endcapinner = 3;
1432 ATH_MSG_DEBUG(
"### Hit patterns at the Muon Spectrometer ###");
1438 ATH_MSG_DEBUG(
"pattern#0: # of hits at endcap barrel inner =" <<
pattern.mdtSegments[barrelinner].size());
1442 ATH_MSG_DEBUG(
"pattern#0: # of hits at barrel endcap inner =" <<
pattern.mdtSegments[endcapinner].size());
1444 ATH_MSG_DEBUG(
"### ************************************* ###");
1500 pattern.superPoints[middle].Alin,
pattern.superPoints[middle].Blin,
pattern.superPoints[middle].Chi2);
1507 pattern.superPoints[barrelinner].Alin,
pattern.superPoints[barrelinner].Blin,
pattern.superPoints[barrelinner].Chi2);
1512 pattern.superPoints[endcapinner].Alin,
pattern.superPoints[endcapinner].Blin,
pattern.superPoints[endcapinner].Chi2);
1525 muonSA->
setLvl1Id( eventInfo->extendedLevel1ID() );
1558 std::vector<std::string> mdtId;
1560 if ( mdtHit.isOutlier==0 || mdtHit.isOutlier==1 ) {
1561 muonSA->
setMdtHit(mdtHit.OnlineId, mdtHit.isOutlier, mdtHit.Chamber,
1562 mdtHit.R, mdtHit.Z, mdtHit.cPhi0, mdtHit.Residual,
1563 mdtHit.DriftTime, mdtHit.DriftSpace, mdtHit.DriftSigma);
1564 mdtId.push_back(mdtHit.Id.getString());
1568 accessor_mdthitid( *muonSA ) = mdtId;
1571 std::vector<float> cscResol;
1574 if ( cscHit.isOutlier==0 || cscHit.isOutlier==1 ) {
1575 muonSA->
setCscHit(cscHit.isOutlier, cscHit.Chamber, cscHit.StationName,
1576 cscHit.StationEta, cscHit.StationPhi,
1577 cscHit.ChamberLayer, cscHit.WireLayer, cscHit.MeasuresPhi, cscHit.Strip,
1578 cscHit.eta, cscHit.phi, cscHit.r, cscHit.z,
1579 cscHit.charge, cscHit.time, cscHit.Residual);
1580 cscResol.push_back(cscHit.resolution);
1582 <<
"OL=" << cscHit.isOutlier <<
","
1583 <<
"Ch=" << cscHit.Chamber <<
","
1584 <<
"StationName=" << cscHit.StationName <<
","
1585 <<
"StationEta=" << cscHit.StationEta <<
","
1586 <<
"StationPhi=" << cscHit.StationPhi <<
","
1587 <<
"ChamberLayer=" << cscHit.ChamberLayer <<
","
1588 <<
"WireLayer=" << cscHit.WireLayer <<
","
1589 <<
"MeasuresPhi=" << cscHit.MeasuresPhi <<
","
1590 <<
"Strip=" << cscHit.Strip <<
","
1591 <<
"eta=" << cscHit.eta <<
","
1592 <<
"phi=" << cscHit.phi <<
","
1593 <<
"r=" << cscHit.r <<
","
1594 <<
"z=" << cscHit.z <<
","
1595 <<
"charge=" << cscHit.charge <<
","
1596 <<
"Rs=" << cscHit.Residual <<
","
1597 <<
"t=" << cscHit.time);
1602 accessor_cschitresol( *muonSA ) = cscResol;
1605 float sumbeta[8]={0};
1606 float nhit_layer[8]={0};
1608 muonSA->
setRpcHit(rpcHit.layer, rpcHit.measuresPhi,
1609 rpcHit.x, rpcHit.y, rpcHit.z,
1610 rpcHit.time, rpcHit.distToEtaReadout, rpcHit.distToPhiReadout,
1611 rpcHit.stationName);
1613 <<
"stationName=" << rpcHit.stationName <<
","
1614 <<
"layer=" << rpcHit.layer <<
","
1615 <<
"measuresPhi=" << rpcHit.measuresPhi <<
","
1616 <<
"x=" << rpcHit.x <<
","
1617 <<
"y=" << rpcHit.y <<
","
1618 <<
"y=" << rpcHit.z);
1621 if(dRMS>0.05)
continue;
1623 float Tprop = rpcHit.distToPhiReadout/1000*4.8;
1625 sumbeta[rpcHit.layer]=sumbeta[rpcHit.layer]+
beta;
1626 nhit_layer[rpcHit.layer]=nhit_layer[rpcHit.layer]+1;
1629 std::vector<float> Avebeta_layer;
1630 for(
int i_layer=0;i_layer<8;i_layer++){
1631 if(nhit_layer[i_layer]!=0)Avebeta_layer.push_back( sumbeta[i_layer]/nhit_layer[i_layer] );
1633 if(Avebeta_layer.size()>0) muonSA->
setBeta(
std::accumulate(Avebeta_layer.begin(),Avebeta_layer.end(),0.0)/Avebeta_layer.size() );
1635 Avebeta_layer.clear();
1639 muonSA->
setTgcHit(tgcHit.eta, tgcHit.phi, tgcHit.r, tgcHit.z,
1640 tgcHit.width, tgcHit.sta, tgcHit.isStrip,
1641 tgcHit.bcTag, tgcHit.inRoad);
1643 <<
"eta=" << tgcHit.eta <<
","
1644 <<
"phi=" << tgcHit.phi <<
","
1645 <<
"r=" << tgcHit.r <<
","
1646 <<
"z=" << tgcHit.z <<
","
1647 <<
"width=" << tgcHit.width <<
","
1648 <<
"stationNum=" << tgcHit.sta <<
","
1649 <<
"isStrip=" << tgcHit.isStrip <<
","
1650 <<
"bcTag=" << tgcHit.bcTag <<
","
1651 <<
"inRoad=" << tgcHit.inRoad);
1656 for(
unsigned int i_hit=0; i_hit<stgcHits.size(); i_hit++) {
1657 if ( stgcHits[i_hit].isOutlier==0 || stgcHits[i_hit].isOutlier==1 ) {
1660 muonSA->
setStgcCluster(stgcHits[i_hit].layerNumber, stgcHits[i_hit].isOutlier, stgcHits[i_hit].channelType,
1661 stgcHits[i_hit].
eta, stgcHits[i_hit].
phi, stgcHits[i_hit].
r, stgcHits[i_hit].
z,
1662 stgcHits[i_hit].ResidualR, stgcHits[i_hit].ResidualPhi,
1666 <<
"eta=" << stgcHits[i_hit].
eta <<
","
1667 <<
"phi=" << stgcHits[i_hit].
phi <<
","
1668 <<
"r=" << stgcHits[i_hit].
r <<
","
1669 <<
"z=" << stgcHits[i_hit].
z <<
","
1670 <<
"z=" << stgcHits[i_hit].ResidualR <<
","
1671 <<
"z=" << stgcHits[i_hit].ResidualPhi);
1676 for(
unsigned int i_hit=0; i_hit<mmHits.size(); i_hit++) {
1677 if ( mmHits[i_hit].isOutlier==0 || mmHits[i_hit].isOutlier==1 ) {
1680 muonSA->
setMmCluster(mmHits[i_hit].layerNumber, mmHits[i_hit].isOutlier,
1681 mmHits[i_hit].
eta, mmHits[i_hit].
phi, mmHits[i_hit].
r, mmHits[i_hit].
z,
1682 mmHits[i_hit].ResidualR, mmHits[i_hit].ResidualPhi,
1686 <<
"eta=" << tgcHits[i_hit].
eta <<
","
1687 <<
"phi=" << tgcHits[i_hit].
phi <<
","
1688 <<
"r=" << tgcHits[i_hit].
r <<
","
1689 <<
"z=" << tgcHits[i_hit].
z <<
","
1690 <<
"width=" << tgcHits[i_hit].
width <<
","
1691 <<
"stationNum=" << tgcHits[i_hit].sta <<
","
1692 <<
"isStrip=" << tgcHits[i_hit].
isStrip <<
","
1693 <<
"bcTag=" << tgcHits[i_hit].
bcTag <<
","
1694 <<
"inRoad=" << tgcHits[i_hit].inRoad);
1702 for (
int i_station=0; i_station<8; i_station++) {
1703 for (
int i_sector=0; i_sector<2; i_sector++) {
1704 muonSA->
setRoad(i_station, i_sector, muonRoad.
aw[i_station][i_sector], muonRoad.
bw[i_station][i_sector]);
1705 muonSA->
setRegionZ(i_station, i_sector, mdtRegion.
zMin[i_station][i_sector], mdtRegion.
zMax[i_station][i_sector]);
1706 muonSA->
setRegionR(i_station, i_sector, mdtRegion.
rMin[i_station][i_sector], mdtRegion.
rMax[i_station][i_sector]);
1707 muonSA->
setRegionEta(i_station, i_sector, mdtRegion.
etaMin[i_station][i_sector], mdtRegion.
etaMax[i_station][i_sector]);
1757 double phi1 = tgcFitResult.
tgcMid1[1];
1758 double phi2 = tgcFitResult.
tgcMid2[1];
1759 if ( tgcFitResult.
tgcMid1[3]==0. || tgcFitResult.
tgcMid2[3]==0. ) {
1762 }
else if( phi1*phi2 < 0 && std::abs(phi1)>(
M_PI/2.) ) {
1763 double tmp1 = (phi1>0)? phi1 -
M_PI : phi1 +
M_PI;
1768 phi = (phi2+phi1)/2.;
1816 mseta = roids->
eta();
1817 msphi = roids->
phi();
1821 const float phiHalfWidth = 0.1;
1822 const float etaHalfWidth = 0.1;
1828 mseta - etaHalfWidth,
1829 mseta + etaHalfWidth,
1831 msphi - phiHalfWidth,
1832 msphi + phiHalfWidth);
1836 << mseta <<
"/" << msphi);
1839 <<
" phi=" << MSroiDescriptor->
phi()
1840 <<
", eta=" << MSroiDescriptor->
eta());
1862 const double scalePhiWidthForFailure = 2;
1863 const double scaleRoIforZeroPt = 2;
1871 float phiHalfWidth = 0.1;
1872 float etaHalfWidth = 0.1;
1888 phiHalfWidth *= scalePhiWidthForFailure;
1894 pattern.etaVtx - etaHalfWidth,
1895 pattern.etaVtx + etaHalfWidth,
1897 pattern.phiVtx - phiHalfWidth,
1898 pattern.phiVtx + phiHalfWidth);
1901 <<
"pattern.etaVtx/pattern.phiVtx="
1905 <<
" phi=" << IDroiDescriptor->
phi()
1906 <<
", eta=" << IDroiDescriptor->
eta());
1916 roids->
eta() - (roids->
eta() - roids->
etaMinus()) * scaleRoIforZeroPt,
1917 roids->
eta() + (roids->
etaPlus() - roids->
eta()) * scaleRoIforZeroPt,
1922 ATH_MSG_VERBOSE(
"will Record an RoiDescriptor for Inner Detector in case with zero pT:"
1923 <<
" phi=" << IDroiDescriptor->
phi()
1924 <<
", phi min=" << IDroiDescriptor->
phiMinus()
1925 <<
", phi max=" << IDroiDescriptor->
phiPlus()
1926 <<
", eta=" << IDroiDescriptor->
eta()
1927 <<
", eta min=" << IDroiDescriptor->
etaMinus()
1928 <<
", eta max=" << IDroiDescriptor->
etaPlus());
1943 if (
name ==
"MuFastSteering_Muon") {
1945 }
else if (
name ==
"MuFastSteering_900GeV") {
1962 float pt = muonSA->
pt();
1965 const int N_PARAMS = 2;
1968 const float etaMinWin_brl = 0.10;
1969 const float etaMinWin_ec1 = 0.10;
1970 const float etaMinWin_ec2 = 0.10;
1971 const float etaMinWin_ec3 = 0.10;
1972 const float etaMinWin_ecA = 0.10;
1973 const float etaMinWin_ecB = 0.10;
1975 const float etaMaxWin_brl = 0.20;
1976 const float etaMaxWin_ec1 = 0.20;
1977 const float etaMaxWin_ec2 = 0.20;
1978 const float etaMaxWin_ec3 = 0.20;
1979 const float etaMaxWin_ecA = 0.20;
1980 const float etaMaxWin_ecB = 0.20;
1982 const float etaParams_brl[N_PARAMS] = { 0.038, 0.284};
1983 const float etaParams_ec1[N_PARAMS] = { 0.011, 0.519};
1984 const float etaParams_ec2[N_PARAMS] = { 0.023, 0.253};
1985 const float etaParams_ec3[N_PARAMS] = { 0.018, 0.519};
1986 const float etaParams_ecA[N_PARAMS] = { 0.010, 0.431};
1987 const float etaParams_ecB[N_PARAMS] = { 0.023, 0.236};
1990 const float phiMinWin_brl = 0.125;
1991 const float phiMinWin_ec1 = 0.125;
1992 const float phiMinWin_ec2 = 0.125;
1993 const float phiMinWin_ec3 = 0.10;
1994 const float phiMinWin_ecA = 0.15;
1995 const float phiMinWin_ecB = 0.15;
1997 const float phiMaxWin_brl = 0.20;
1998 const float phiMaxWin_ec1 = 0.20;
1999 const float phiMaxWin_ec2 = 0.20;
2000 const float phiMaxWin_ec3 = 0.20;
2001 const float phiMaxWin_ecA = 0.25;
2002 const float phiMaxWin_ecB = 0.20;
2004 const float phiParams_brl[N_PARAMS] = { 0.000, 0.831};
2005 const float phiParams_ec1[N_PARAMS] = { 0.000, 0.885};
2006 const float phiParams_ec2[N_PARAMS] = { 0.015, 0.552};
2007 const float phiParams_ec3[N_PARAMS] = { 0.008, 0.576};
2008 const float phiParams_ecA[N_PARAMS] = { 0.000, 0.830};
2009 const float phiParams_ecB[N_PARAMS] = { 0.006, 1.331};
2018 minWin = etaMinWin_brl;
2019 maxWin = etaMaxWin_brl;
2023 minWin = phiMinWin_brl;
2024 maxWin = phiMaxWin_brl;
2033 minWin = etaMinWin_ecA;
2034 maxWin = etaMaxWin_ecA;
2038 minWin = phiMinWin_ecA;
2039 maxWin = phiMaxWin_ecA;
2045 minWin = etaMinWin_ecB;
2046 maxWin = etaMaxWin_ecB;
2050 minWin = phiMinWin_ecB;
2051 maxWin = phiMaxWin_ecB;
2055 if( std::abs(
eta) < 1.5 ) {
2058 minWin = etaMinWin_ec1;
2059 maxWin = etaMaxWin_ec1;
2063 minWin = phiMinWin_ec1;
2064 maxWin = phiMaxWin_ec1;
2067 else if( std::abs(
eta) < 2.0 ) {
2070 minWin = etaMinWin_ec2;
2071 maxWin = etaMaxWin_ec2;
2075 minWin = phiMinWin_ec2;
2076 maxWin = phiMaxWin_ec2;
2082 minWin = etaMinWin_ec3;
2083 maxWin = etaMaxWin_ec3;
2087 minWin = phiMinWin_ec3;
2088 maxWin = phiMaxWin_ec3;
2097 if(
x < minWin )
retval = minWin;
2098 if(
x > maxWin )
retval = maxWin;
2108 std::vector<TrigL2MuonSA::TrackPattern>& trackPatterns )
const
2123 std::vector<float> t_eta, t_phi;
2124 std::vector<float> f_eta, f_phi;
2125 std::vector<float> r_inner, r_middle, r_outer;
2126 std::vector<float> f_residuals;
2135 f_residuals.clear();
2147 invalid_rpc_roi_number,
2149 track_eta, track_phi, failed_eta, failed_phi,
2150 res_inner, res_middle, res_outer, fit_residuals );
2154 if( trackPatterns.size() > 0 ) {
2161 float count_inner = 0;
2162 float count_middle = 0;
2163 float count_outer = 0;
2167 if (std::abs(mdtHit.DriftSpace) <
ZERO_LIMIT)
continue;
2169 char st = mdtHit.cType[1];
2173 r_inner.push_back(mdtHit.Residual/
norm);
2174 if (mdtHit.isOutlier==0) f_residuals.push_back(mdtHit.Residual/
norm);
2179 r_middle.push_back(mdtHit.Residual/
norm);
2180 if (mdtHit.isOutlier==0) f_residuals.push_back(mdtHit.Residual/
norm);
2185 r_outer.push_back(mdtHit.Residual/
norm);
2186 if (mdtHit.isOutlier==0) f_residuals.push_back(mdtHit.Residual/
norm);
2190 inner_mdt_hits = count_inner;
2191 middle_mdt_hits = count_middle;
2192 outer_mdt_hits = count_outer;
2195 absolute_pt = std::abs(track_pt);
2198 t_eta.push_back(
pattern.etaMap);
2199 t_phi.push_back(
pattern.phiMS);
2202 f_eta.push_back(roi->
eta());
2203 f_phi.push_back(roi->
phi());
2211 return StatusCode::SUCCESS;