384 const std::vector<uint>& bcidFirstInTrain,
387 const EventContext& ctx)
const
442 auto candErrorFlagVsSLBACentralSlicePerLBX =
Monitored::Scalar<int>(
"candErrorFlagVsSLBACentralSlicePerLBX",0);
443 auto candErrorFlagVsSLBACentralSlicePerLBY =
Monitored::Scalar<int>(
"candErrorFlagVsSLBACentralSlicePerLBY",0);
444 auto candErrorFlagVsSLECCentralSlicePerLBX =
Monitored::Scalar<int>(
"candErrorFlagVsSLECCentralSlicePerLBX",0);
445 auto candErrorFlagVsSLECCentralSlicePerLBY =
Monitored::Scalar<int>(
"candErrorFlagVsSLECCentralSlicePerLBY",0);
446 auto candErrorFlagVsSLFWCentralSlicePerLBX =
Monitored::Scalar<int>(
"candErrorFlagVsSLFWCentralSlicePerLBX",0);
447 auto candErrorFlagVsSLFWCentralSlicePerLBY =
Monitored::Scalar<int>(
"candErrorFlagVsSLFWCentralSlicePerLBY",0);
552 uint32_t currentLumiBlock = eventInfo->lumiBlock();
553 uint32_t currentBCID = eventInfo->bcid();
556 const std::vector<LVL1::MuCTPIBits::Slice> &slices = theMuCTPI_Phase1_RDO->
slices();
559 uint n_cand_veto,n_cand_A,n_cand_C;
565 uint nSlices=theMuCTPI_Phase1_RDO->
slices().size();
566 for(
uint iSlice=0;iSlice<nSlices;iSlice++)
572 bool isCentralSlice=
false;
576 isCentralSlice = (nSlices-1)/2 == iSlice;
582 uint header_tobCount = slices[iSlice].nTOB;
583 uint header_candCount = slices[iSlice].nCand;
598 for(
uint iThr=0;iThr<slices[iSlice].mlt.cnt.size();iThr++)
600 bool thr = slices[iSlice].mlt.cnt[iThr];
605 multThrVsLBX = currentLumiBlock;
612 for(
uint iBit=0;iBit<64;iBit++)
614 bool bit = ( slices[iSlice].mlt.bits >> iBit ) & 0x1;
619 multBitsVsLBX = currentLumiBlock;
620 multBitsVsLBY = iBit;
629 if(header_candCount != slices[iSlice].cand.size())
631 errorSummaryMUCTPI=2;
633 errorSummaryPerLumiBlockMUCTPIY=2;
634 errorSummaryPerLumiBlockMUCTPIX=currentLumiBlock;
635 fill(
m_packageName, errorSummaryPerLumiBlockMUCTPIX, errorSummaryPerLumiBlockMUCTPIY);
642 candCount = header_candCount;
645 candCountVsLBY = header_candCount;
646 candCountVsLBX = currentLumiBlock;
654 for(
uint iCand=0;iCand<slices[iSlice].cand.size();iCand++)
669 ATH_MSG_DEBUG(
"MUCTPI DQ DEBUG: iCand="<<iCand <<
" type="<<(
int)slices[iSlice].cand[iCand].
type<<
" num="<<(
int)slices[iSlice].cand[iCand].num<<
" pt="<<slices[iSlice].cand[iCand].pt);
671 float candEta = slices[iSlice].cand[iCand].eta;
672 float candPhi = slices[iSlice].cand[iCand].phi;
673 bool vetoFlag = slices[iSlice].cand[iCand].vetoFlag;
674 bool side = slices[iSlice].cand[iCand].side;
675 if(side) n_cand_A++;
else n_cand_C++;
682 uint num = slices[iSlice].cand[iCand].num + 32*(1-slices[iSlice].cand[iCand].side);
683 candPtBAX = slices[iSlice].cand[iCand].pt;
686 candSLVsLBBAX = currentLumiBlock;
692 candVetoFlag_RoiVsSLBAX = num;
693 candVetoFlag_RoiVsSLBAY = slices[iSlice].cand[iCand].roi;
696 candVetoFlag_EtaPhiBAX = candEta;
697 candVetoFlag_EtaPhiBAY = candPhi;
701 if(slices[iSlice].cand[iCand].candFlag_phiOverlap)
703 candEtaPhi_PhiOverlapX_BA = candEta;
704 candEtaPhi_PhiOverlapY_BA = candPhi;
708 if(slices[iSlice].cand[iCand].candFlag_gt1CandRoi)
710 candEtaPhi_Gt1CandRoiX_BA = candEta;
711 candEtaPhi_Gt1CandRoiY_BA = candPhi;
715 if(slices[iSlice].cand[iCand].sectorFlag_gtN)
717 candEtaPhi_SectorFlagGtNX_BA = candEta;
718 candEtaPhi_SectorFlagGtNY_BA = candPhi;
722 candSliceVsSLBAX = num;
724 if(nSlices==7) sliceIndex = iSlice;
725 else if(nSlices==5) sliceIndex = iSlice+1;
726 else if(nSlices==3) sliceIndex = iSlice+2;
728 candSliceVsSLBAY=sliceIndex;
733 if(std::find(bcidFirstInTrain.begin(), bcidFirstInTrain.end(), currentBCID) != bcidFirstInTrain.end())
735 candSliceVsSLBAFirstInTrainX=num;
736 candSliceVsSLBAFirstInTrainY=sliceIndex;
742 candRoiVsSLBACentralSliceX = num;
743 candRoiVsSLBACentralSliceY = slices[iSlice].cand[iCand].roi;
746 candCandFlagsVsSLBACentralSliceX = num;
747 candCandFlagsVsSLBACentralSliceY = 0;
748 if(slices[iSlice].cand[iCand].candFlag_gt1CandRoi)
749 fill(
m_packageName, candCandFlagsVsSLBACentralSliceX, candCandFlagsVsSLBACentralSliceY);
751 candCandFlagsVsSLBACentralSliceY = 1;
752 if(slices[iSlice].cand[iCand].candFlag_phiOverlap)
753 fill(
m_packageName, candCandFlagsVsSLBACentralSliceX, candCandFlagsVsSLBACentralSliceY);
755 candErrorFlagVsSLBACentralSlicePerLBX = currentLumiBlock;
756 candErrorFlagVsSLBACentralSlicePerLBY = num;
757 if(slices[iSlice].cand[iCand].errorFlag)
758 fill(
m_packageName, candErrorFlagVsSLBACentralSlicePerLBX, candErrorFlagVsSLBACentralSlicePerLBY);
762 candRoiVsSLBAOtherSliceX = slices[iSlice].cand[iCand].num + 32*(1-slices[iSlice].cand[iCand].side);
763 candRoiVsSLBAOtherSliceY = slices[iSlice].cand[iCand].roi;
769 uint num = slices[iSlice].cand[iCand].num + 48*(1-slices[iSlice].cand[iCand].side);
771 candPtECX = slices[iSlice].cand[iCand].pt;
774 candSLVsLBECX = currentLumiBlock;
778 bool vetoFlag = slices[iSlice].cand[iCand].vetoFlag;
781 candVetoFlag_RoiVsSLECX = num;
782 candVetoFlag_RoiVsSLECY = slices[iSlice].cand[iCand].roi;
785 candVetoFlag_EtaPhiECX = candEta;
786 candVetoFlag_EtaPhiECY = candPhi;
790 if(slices[iSlice].cand[iCand].sectorFlag_nswMon)
792 candEtaPhi_NSWMonFlagX_EC = candEta;
793 candEtaPhi_NSWMonFlagY_EC = candPhi;
797 if(slices[iSlice].cand[iCand].sectorFlag_gtN)
799 candEtaPhi_SectorFlagGtNX_EC = candEta;
800 candEtaPhi_SectorFlagGtNY_EC = candPhi;
804 candSliceVsSLECX = num;
806 if(nSlices==7) sliceIndex = iSlice;
807 else if(nSlices==5) sliceIndex = iSlice+1;
808 else if(nSlices==3) sliceIndex = iSlice+2;
810 candSliceVsSLECY=sliceIndex;
815 if(std::find(bcidFirstInTrain.begin(), bcidFirstInTrain.end(), currentBCID) != bcidFirstInTrain.end())
817 candSliceVsSLECFirstInTrainX=num;
818 candSliceVsSLECFirstInTrainY=sliceIndex;
824 candRoiVsSLECCentralSliceX = num;
825 candRoiVsSLECCentralSliceY = slices[iSlice].cand[iCand].roi;
828 candCandFlagsVsSLECCentralSliceX = num;
829 candCandFlagsVsSLECCentralSliceY = 0;
830 if(slices[iSlice].cand[iCand].candFlag_Charge)
831 fill(
m_packageName, candCandFlagsVsSLECCentralSliceX, candCandFlagsVsSLECCentralSliceY);
833 candCandFlagsVsSLECCentralSliceY = 1;
834 if(slices[iSlice].cand[iCand].candFlag_BW23)
835 fill(
m_packageName, candCandFlagsVsSLECCentralSliceX, candCandFlagsVsSLECCentralSliceY);
837 candCandFlagsVsSLECCentralSliceY = 2;
838 if(slices[iSlice].cand[iCand].candFlag_InnerCoin)
839 fill(
m_packageName, candCandFlagsVsSLECCentralSliceX, candCandFlagsVsSLECCentralSliceY);
841 candCandFlagsVsSLECCentralSliceY = 3;
842 if(slices[iSlice].cand[iCand].candFlag_GoodMF)
843 fill(
m_packageName, candCandFlagsVsSLECCentralSliceX, candCandFlagsVsSLECCentralSliceY);
845 candErrorFlagVsSLECCentralSlicePerLBX = currentLumiBlock;
846 candErrorFlagVsSLECCentralSlicePerLBY = num;
847 if(slices[iSlice].cand[iCand].errorFlag)
848 fill(
m_packageName, candErrorFlagVsSLECCentralSlicePerLBX, candErrorFlagVsSLECCentralSlicePerLBY);
852 candRoiVsSLECOtherSliceX = num;
853 candRoiVsSLECOtherSliceY = slices[iSlice].cand[iCand].roi;
859 uint num = slices[iSlice].cand[iCand].num + 24*(1-slices[iSlice].cand[iCand].side);
860 candPtFWX = slices[iSlice].cand[iCand].pt;
863 candSLVsLBFWX = currentLumiBlock;
867 bool vetoFlag = slices[iSlice].cand[iCand].vetoFlag;
870 candVetoFlag_RoiVsSLFWX = num;
871 candVetoFlag_RoiVsSLFWY = slices[iSlice].cand[iCand].roi;
874 candVetoFlag_EtaPhiFWX = candEta;
875 candVetoFlag_EtaPhiFWY = candPhi;
879 if(slices[iSlice].cand[iCand].sectorFlag_nswMon)
881 candEtaPhi_NSWMonFlagX_FW = candEta;
882 candEtaPhi_NSWMonFlagY_FW = candPhi;
886 if(slices[iSlice].cand[iCand].sectorFlag_gtN)
888 candEtaPhi_SectorFlagGtNX_FW = candEta;
889 candEtaPhi_SectorFlagGtNY_FW = candPhi;
893 candSliceVsSLFWX = num;
895 if(nSlices==7) sliceIndex = iSlice;
896 else if(nSlices==5) sliceIndex = iSlice+1;
897 else if(nSlices==3) sliceIndex = iSlice+2;
899 candSliceVsSLFWY=sliceIndex;
904 if(std::find(bcidFirstInTrain.begin(), bcidFirstInTrain.end(), currentBCID) != bcidFirstInTrain.end())
906 candSliceVsSLFWFirstInTrainX=num;
907 candSliceVsSLFWFirstInTrainY=sliceIndex;
913 candRoiVsSLFWCentralSliceX = num;
914 candRoiVsSLFWCentralSliceY = slices[iSlice].cand[iCand].roi;
917 candCandFlagsVsSLFWCentralSliceX = num;
918 candCandFlagsVsSLFWCentralSliceY = 0;
919 if(slices[iSlice].cand[iCand].candFlag_Charge)
920 fill(
m_packageName, candCandFlagsVsSLFWCentralSliceX, candCandFlagsVsSLFWCentralSliceY);
922 candCandFlagsVsSLFWCentralSliceY = 1;
923 if(slices[iSlice].cand[iCand].candFlag_BW23)
924 fill(
m_packageName, candCandFlagsVsSLFWCentralSliceX, candCandFlagsVsSLFWCentralSliceY);
926 candCandFlagsVsSLFWCentralSliceY = 2;
927 if(slices[iSlice].cand[iCand].candFlag_InnerCoin)
928 fill(
m_packageName, candCandFlagsVsSLFWCentralSliceX, candCandFlagsVsSLFWCentralSliceY);
930 candCandFlagsVsSLFWCentralSliceY = 3;
931 if(slices[iSlice].cand[iCand].candFlag_GoodMF)
932 fill(
m_packageName, candCandFlagsVsSLFWCentralSliceX, candCandFlagsVsSLFWCentralSliceY);
934 candErrorFlagVsSLFWCentralSlicePerLBX = currentLumiBlock;
935 candErrorFlagVsSLFWCentralSlicePerLBY = num;
936 if(slices[iSlice].cand[iCand].errorFlag)
937 fill(
m_packageName, candErrorFlagVsSLFWCentralSlicePerLBX, candErrorFlagVsSLFWCentralSlicePerLBY);
941 candRoiVsSLFWOtherSliceX = slices[iSlice].cand[iCand].num + 24*(1-slices[iSlice].cand[iCand].side);
942 candRoiVsSLFWOtherSliceY = slices[iSlice].cand[iCand].roi;
965 if(header_tobCount != slices[iSlice].tob.size())
967 errorSummaryMUCTPI=3;
969 errorSummaryPerLumiBlockMUCTPIY=3;
970 errorSummaryPerLumiBlockMUCTPIX=currentLumiBlock;
971 fill(
m_packageName, errorSummaryPerLumiBlockMUCTPIX, errorSummaryPerLumiBlockMUCTPIY);
978 tobCount = slices[iSlice].tob.size();
981 if(slices[iSlice].bcid != currentBCID)
983 errorSummaryMUCTPI=1;
985 errorSummaryPerLumiBlockMUCTPIY=1;
986 errorSummaryPerLumiBlockMUCTPIX=currentLumiBlock;
987 fill(
m_packageName, errorSummaryPerLumiBlockMUCTPIX, errorSummaryPerLumiBlockMUCTPIY);
991 for(
uint iTOB=0;iTOB<slices[iSlice].tob.size();iTOB++)
994 uint eta = slices[iSlice].tob[iTOB].etaRaw;
995 uint phi = slices[iSlice].tob[iTOB].phiRaw;
996 uint pt = slices[iSlice].tob[iTOB].pt;
997 float etaDecoded = slices[iSlice].tob[iTOB].etaDecoded;
998 float phiDecoded = slices[iSlice].tob[iTOB].phiDecoded;
1000 if(slices[iSlice].tob[iTOB].side==1)
1015 if(slices[iSlice].tob[iTOB].candFlag_GoodMF) {
1016 tobEtaPhiA_GoodMFX =
eta;
1017 tobEtaPhiA_GoodMFY =
phi;
1021 if(slices[iSlice].tob[iTOB].candFlag_InnerCoin) {
1022 tobEtaPhiA_InnerCoinX =
eta;
1023 tobEtaPhiA_InnerCoinY =
phi;
1027 if(slices[iSlice].tob[iTOB].candFlag_BW23) {
1028 tobEtaPhiA_BW23X =
eta;
1029 tobEtaPhiA_BW23Y =
phi;
1033 if(slices[iSlice].tob[iTOB].candFlag_Charge) {
1034 tobEtaPhiA_ChargeX =
eta;
1035 tobEtaPhiA_ChargeY =
phi;
1040 switch(slices[iSlice].tob[iTOB].det)
1044 tobEtaPhiXdecoded_BA = etaDecoded;
1045 tobEtaPhiYdecoded_BA = phiDecoded;
1048 tobPtVsEtaXdecoded_BA = etaDecoded;
1049 tobPtVsEtaYdecoded_BA = pt;
1052 tobPtVsPhiXdecoded_BA = phiDecoded;
1053 tobPtVsPhiYdecoded_BA = pt;
1060 tobEtaPhiXdecoded_FW = etaDecoded;
1061 tobEtaPhiYdecoded_FW = phiDecoded;
1064 tobPtVsEtaXdecoded_FW = etaDecoded;
1065 tobPtVsEtaYdecoded_FW = pt;
1068 tobPtVsPhiXdecoded_FW = phiDecoded;
1069 tobPtVsPhiYdecoded_FW = pt;
1072 if(slices[iSlice].tob[iTOB].candFlag_GoodMF) {
1073 tobEtaPhi_GoodMFXdecoded_FW = etaDecoded;
1074 tobEtaPhi_GoodMFYdecoded_FW = phiDecoded;
1078 if(slices[iSlice].tob[iTOB].candFlag_InnerCoin) {
1079 tobEtaPhi_InnerCoinXdecoded_FW = etaDecoded;
1080 tobEtaPhi_InnerCoinYdecoded_FW = phiDecoded;
1081 fill(
m_packageName, tobEtaPhi_InnerCoinXdecoded_FW, tobEtaPhi_InnerCoinYdecoded_FW);
1084 if(slices[iSlice].tob[iTOB].candFlag_BW23) {
1085 tobEtaPhi_BW23Xdecoded_FW = etaDecoded;
1086 tobEtaPhi_BW23Ydecoded_FW = phiDecoded;
1090 if(slices[iSlice].tob[iTOB].candFlag_Charge) {
1091 tobEtaPhi_ChargeXdecoded_FW = etaDecoded;
1092 tobEtaPhi_ChargeYdecoded_FW = phiDecoded;
1100 tobEtaPhiXdecoded_EC = etaDecoded;
1101 tobEtaPhiYdecoded_EC = phiDecoded;
1104 tobPtVsEtaXdecoded_EC = etaDecoded;
1105 tobPtVsEtaYdecoded_EC = pt;
1108 tobPtVsPhiXdecoded_EC = phiDecoded;
1109 tobPtVsPhiYdecoded_EC = pt;
1112 if(slices[iSlice].tob[iTOB].candFlag_GoodMF) {
1113 tobEtaPhi_GoodMFXdecoded_EC = etaDecoded;
1114 tobEtaPhi_GoodMFYdecoded_EC = phiDecoded;
1118 if(slices[iSlice].tob[iTOB].candFlag_InnerCoin) {
1119 tobEtaPhi_InnerCoinXdecoded_EC = etaDecoded;
1120 tobEtaPhi_InnerCoinYdecoded_EC = phiDecoded;
1121 fill(
m_packageName, tobEtaPhi_InnerCoinXdecoded_EC, tobEtaPhi_InnerCoinYdecoded_EC);
1124 if(slices[iSlice].tob[iTOB].candFlag_BW23) {
1125 tobEtaPhi_BW23Xdecoded_EC = etaDecoded;
1126 tobEtaPhi_BW23Ydecoded_EC = phiDecoded;
1130 if(slices[iSlice].tob[iTOB].candFlag_Charge) {
1131 tobEtaPhi_ChargeXdecoded_EC = etaDecoded;
1132 tobEtaPhi_ChargeYdecoded_EC = phiDecoded;
1153 if(slices[iSlice].tob[iTOB].candFlag_GoodMF) {
1154 tobEtaPhiC_GoodMFX =
eta;
1155 tobEtaPhiC_GoodMFY =
phi;
1159 if(slices[iSlice].tob[iTOB].candFlag_InnerCoin) {
1160 tobEtaPhiC_InnerCoinX =
eta;
1161 tobEtaPhiC_InnerCoinY =
phi;
1165 if(slices[iSlice].tob[iTOB].candFlag_BW23) {
1166 tobEtaPhiC_BW23X =
eta;
1167 tobEtaPhiC_BW23Y =
phi;
1171 if(slices[iSlice].tob[iTOB].candFlag_Charge) {
1172 tobEtaPhiC_ChargeX =
eta;
1173 tobEtaPhiC_ChargeY =
phi;
1178 switch(slices[iSlice].tob[iTOB].det)
1183 tobEtaPhiXdecoded_BA = etaDecoded;
1184 tobEtaPhiYdecoded_BA = phiDecoded;
1187 tobPtVsEtaXdecoded_BA = etaDecoded;
1188 tobPtVsEtaYdecoded_BA = pt;
1191 tobPtVsPhiXdecoded_BA = phiDecoded;
1192 tobPtVsPhiYdecoded_BA = pt;
1201 tobEtaPhiXdecoded_FW = etaDecoded;
1202 tobEtaPhiYdecoded_FW = phiDecoded;
1205 tobPtVsEtaXdecoded_FW = etaDecoded;
1206 tobPtVsEtaYdecoded_FW = pt;
1209 tobPtVsPhiXdecoded_FW = phiDecoded;
1210 tobPtVsPhiYdecoded_FW = pt;
1213 if(slices[iSlice].tob[iTOB].candFlag_GoodMF) {
1214 tobEtaPhi_GoodMFXdecoded_FW = etaDecoded;
1215 tobEtaPhi_GoodMFYdecoded_FW = phiDecoded;
1219 if(slices[iSlice].tob[iTOB].candFlag_InnerCoin) {
1220 tobEtaPhi_InnerCoinXdecoded_FW = etaDecoded;
1221 tobEtaPhi_InnerCoinYdecoded_FW = phiDecoded;
1222 fill(
m_packageName, tobEtaPhi_InnerCoinXdecoded_FW, tobEtaPhi_InnerCoinYdecoded_FW);
1225 if(slices[iSlice].tob[iTOB].candFlag_BW23) {
1226 tobEtaPhi_BW23Xdecoded_FW = etaDecoded;
1227 tobEtaPhi_BW23Ydecoded_FW = phiDecoded;
1231 if(slices[iSlice].tob[iTOB].candFlag_Charge) {
1232 tobEtaPhi_ChargeXdecoded_FW = etaDecoded;
1233 tobEtaPhi_ChargeYdecoded_FW = phiDecoded;
1243 tobEtaPhiXdecoded_EC = etaDecoded;
1244 tobEtaPhiYdecoded_EC = phiDecoded;
1247 tobPtVsEtaXdecoded_EC = etaDecoded;
1248 tobPtVsEtaYdecoded_EC = pt;
1251 tobPtVsPhiXdecoded_EC = phiDecoded;
1252 tobPtVsPhiYdecoded_EC = pt;
1255 if(slices[iSlice].tob[iTOB].candFlag_GoodMF) {
1256 tobEtaPhi_GoodMFXdecoded_EC = etaDecoded;
1257 tobEtaPhi_GoodMFYdecoded_EC = phiDecoded;
1261 if(slices[iSlice].tob[iTOB].candFlag_InnerCoin) {
1262 tobEtaPhi_InnerCoinXdecoded_EC = etaDecoded;
1263 tobEtaPhi_InnerCoinYdecoded_EC = phiDecoded;
1264 fill(
m_packageName, tobEtaPhi_InnerCoinXdecoded_EC, tobEtaPhi_InnerCoinYdecoded_EC);
1267 if(slices[iSlice].tob[iTOB].candFlag_BW23) {
1268 tobEtaPhi_BW23Xdecoded_EC = etaDecoded;
1269 tobEtaPhi_BW23Ydecoded_EC = phiDecoded;
1273 if(slices[iSlice].tob[iTOB].candFlag_Charge) {
1274 tobEtaPhi_ChargeXdecoded_EC = etaDecoded;
1275 tobEtaPhi_ChargeYdecoded_EC = phiDecoded;
1284 bool found_match{
false};
1286 for(
uint j=0; j<slices[iSlice].cand.size(); ++j)
1289 if(slices[iSlice].cand[j].vetoFlag)
1292 if( slices[iSlice].tob[iTOB].side == slices[iSlice].cand[j].side &&
1293 slices[iSlice].tob[iTOB].subsystem == slices[iSlice].cand[j].subsystem &&
1294 slices[iSlice].tob[iTOB].sec == slices[iSlice].cand[j].num &&
1295 slices[iSlice].tob[iTOB].pt == slices[iSlice].cand[j].mappedPt &&
1296 slices[iSlice].tob[iTOB].etaDecoded == slices[iSlice].cand[j].
eta &&
1297 slices[iSlice].tob[iTOB].phiDecoded == slices[iSlice].cand[j].
phi )
1300 ATH_MSG_DEBUG(
"Found the correspondence tob/cand in the same ROI");
1307 if(n_cand_A<=16 && n_cand_C<=16)
1311 errorSummaryMUCTPI=5;
1313 errorSummaryPerLumiBlockMUCTPIX=currentLumiBlock;
1314 errorSummaryPerLumiBlockMUCTPIY=5;
1315 fill(
m_packageName, errorSummaryPerLumiBlockMUCTPIX, errorSummaryPerLumiBlockMUCTPIY);
1322 if(n_cand_A<=16 && n_cand_C<=16)
1324 if(slices[iSlice].cand.size()-n_cand_veto!=slices[iSlice].tob.size())
1326 ATH_MSG_INFO(
"MUCTPI DQ INFO: Cand & TOB #words not equal. LB="
1327 <<std::dec<<currentLumiBlock
1328 <<
". Cand.size="<<slices[iSlice].cand.size()
1329 <<
" n_cand_veto="<<n_cand_veto
1330 <<
" tob.size="<<slices[iSlice].tob.size());
1331 errorSummaryMUCTPI=4;
1333 errorSummaryPerLumiBlockMUCTPIY=4;
1334 errorSummaryPerLumiBlockMUCTPIX=currentLumiBlock;
1335 fill(
m_packageName, errorSummaryPerLumiBlockMUCTPIX, errorSummaryPerLumiBlockMUCTPIY);
1342 if(slices[iSlice].nCand != slices[iSlice].cand.size())
1344 errorSummaryMUCTPI = 2;
1346 errorSummaryPerLumiBlockMUCTPIY=2;
1347 errorSummaryPerLumiBlockMUCTPIX=currentLumiBlock;
1348 fill(
m_packageName, errorSummaryPerLumiBlockMUCTPIX, errorSummaryPerLumiBlockMUCTPIY);
1351 if(slices[iSlice].nTOB != slices[iSlice].tob.size())
1353 errorSummaryMUCTPI = 3;
1355 errorSummaryPerLumiBlockMUCTPIY=3;
1356 errorSummaryPerLumiBlockMUCTPIX=currentLumiBlock;
1357 fill(
m_packageName, errorSummaryPerLumiBlockMUCTPIX, errorSummaryPerLumiBlockMUCTPIY);
1372 const std::vector< size_t > &errorBits = theMuCTPI_Phase1_RDO->
errorBits();
1374 for(
uint iBit=0;iBit<errorBits.size();iBit++)
1378 statusDataWordMUCTPI=iBit;
1380 statusDataWordPerLumiBlockMUCTPIX=iBit;
1381 statusDataWordPerLumiBlockMUCTPIY=currentLumiBlock;
1382 fill(
m_packageName, statusDataWordPerLumiBlockMUCTPIX, statusDataWordPerLumiBlockMUCTPIY);
1393 const EventContext& ctx)
const
1464 std::map <std::string,MuCTPI_DataWord_Decoder> muctpiCandidates;
1465 std::map <std::string, const RpcSLTriggerHit* > rpcCandidates;
1466 std::map <std::string, const Muon::TgcCoinData* > tgcCandidates;
1471 const std::vector<uint32_t> &vDataWords = theMuCTPI_RDO->
dataWord();
1479 nCandidatesX = numberCandidates;
1483 nCandidatesPtX = i+1u;
1491 int numberDataWords = 0;
1492 int ncand[3][96] = {};
1502 int nCandsPerPtThreshold[6] = {0, 0, 0, 0, 0, 0};
1504 for (
auto it = vDataWords.begin(); it != vDataWords.end(); ++it ) {
1506 std::ostringstream keystring;
1512 <<
"-Pt" << dataWord.
getPt();
1517 <<
"-Pt" << dataWord.
getPt();
1522 <<
"-Pt" << dataWord.
getPt();
1526 for (
int y = 0;
y < 96;
y++ ) {
1528 barrelNCandSectorIDX =
y;
1529 barrelNCandSectorIDY = ncand[0][
y];
1532 endcapNCandSectorIDX =
y;
1533 endcapNCandSectorIDY = ncand[1][
y];
1536 forwardNCandSectorIDX =
y;
1537 forwardNCandSectorIDY = ncand[2][
y];
1543 nCandidatesDataWordX = numberDataWords;
1546 for (
int i = 0; i < 6; ++i) {
1547 nCandidatesDataWordPtX = i+1;
1548 nCandidatesDataWordPtY = nCandsPerPtThreshold[i];
1554 int diffNCandidates = (
static_cast<int>(numberCandidates) - numberDataWords);
1555 uint32_t currentLumiBlock = eventInfo->lumiBlock();
1557 if (diffNCandidates != 0) {
1559 ATH_MSG_DEBUG(
"Number of candidates in multiplicity word " << numberCandidates
1560 <<
" != number of candidates " << numberDataWords <<
" from " << vDataWords.size() <<
" data words");
1563 for ( std::vector<uint32_t>::const_iterator it = vDataWords.begin(); it != vDataWords.end(); ++it ) {
1570 errorSummaryPerLumiBlockX = currentLumiBlock;
1571 errorSummaryPerLumiBlockY = 4;
1573 errorPerLumiBlockX = currentLumiBlock;
1581 nCandidatesMictpMioctX = diffNCandidates;
1598 std::vector<uint32_t>::const_iterator it = vDataWords.begin();
1599 std::vector<uint32_t>::const_iterator end = vDataWords.end();
1601 for ( ; it != end; ++it ) {
1629 uint16_t candPt = dataWord.
getPt();
1634 for ( uint16_t i(0); i < candPt; ++i )
1635 if (MioctPtCount[i] < 7) {
1636 MioctPtCount[i] += 1;
1639 if (MioctPtCount[candPt - 1] < 7) {
1640 MioctPtCount[candPt - 1] += 1;
1667 barrelPtX = dataWord.
getPt();
1671 endcapPtX = dataWord.
getPt();
1675 forwardPtX = dataWord.
getPt();
1683 bool anyMismatch =
false;
1689 <<
") not equal MIOCT multiplicity (" << MioctPtCount[i] <<
")");
1693 errorSummaryPerLumiBlockX = currentLumiBlock;
1694 errorSummaryPerLumiBlockY = 5;
1696 errorPerLumiBlockX = currentLumiBlock;
1700 if ( !anyMismatch ) {
1707 for ( std::vector<uint32_t>::const_iterator it = vDataWords.begin(); it != vDataWords.end(); ++it ) {
1747 for ( ; it_rpc !=theRPCContainer->
end() ; ++it_rpc )
1751 for ( ; it_rpc_hit != (*it_rpc) -> end() ; ++it_rpc_hit )
1753 if (!(*it_rpc_hit) -> isInput() && (*it_rpc_hit) -> rowinBcid() == 1) {
1754 std::ostringstream rpckey;
1755 rpckey <<
"BA" << (*it_rpc)->sectorId() <<
"-RoI" << (*it_rpc_hit) -> roi()
1756 <<
"-Pt" << (*it_rpc_hit) -> ptId();
1757 rpcCandidates.insert (std::pair<std::string, const RpcSLTriggerHit* >(rpckey.str(),(*it_rpc_hit)));
1764 if (tgc_coin->pt() != 0 ) {
1765 std::ostringstream tgckey;
1766 if (tgc_coin->isForward()) {
1767 int secID = tgc_coin->phi();
1768 if (secID == 24) secID = 0;
1769 tgckey <<
"FW" << secID+(24*tgc_coin->isAside()) <<
"-RoI" << tgc_coin->roi()
1770 <<
"-Pt" << tgc_coin->pt();
1772 int secID = tgc_coin->phi()+1;
1773 if (secID == 48 ) secID = 0;
1774 else if (secID == 49 ) secID = 1;
1775 tgckey <<
"EC" << secID + (48*tgc_coin->isAside()) <<
"-RoI" << tgc_coin->roi()
1776 <<
"-Pt" << tgc_coin->pt();
1778 tgcCandidates.emplace(tgckey.str(), tgc_coin);
1785 bool miRPCmismatch =
false;
1786 bool miTGCmismatch =
false;
1787 for (std::map<std::string,MuCTPI_DataWord_Decoder>::const_iterator it_mui = muctpiCandidates.begin();
1788 it_mui != muctpiCandidates.end(); ++it_mui) {
1789 int tgcnum = tgcCandidates.count(it_mui->first);
1790 int rpcnum = rpcCandidates.count(it_mui->first);
1791 if (tgcnum > 0 || rpcnum > 0 ) {
1792 ATH_MSG_DEBUG(
"MuCTPI to RPC/TGC match found: MuCTPI key/ MuCTPI BCID / #TGC matches / #RPC matches: "
1793 << it_mui->first <<
" / " <<
" / "
1794 << tgcnum <<
" / " << rpcnum);
1796 std::string det = (it_mui->first).substr(0,2);
1797 if ( det ==
"BA" ) {
1798 int baSecID = (it_mui->second).getSectorID(1)+32*(it_mui->second).getHemisphere();
1799 int baRoIID = (it_mui->second).getRoiNumber();
1800 muctpiNoRPCCandfoundX = baRoIID;
1801 muctpiNoRPCCandfoundY = baSecID;
1803 miRPCmismatch =
true;
1804 }
else if ( det ==
"EC" ) {
1805 int ecSecID = (it_mui->second).getSectorID()+48*(it_mui->second).getHemisphere();
1806 int ecRoIID = (it_mui->second).getRoiNumber();
1807 muctpiNoTGCecCandfoundX = ecRoIID;
1808 muctpiNoTGCecCandfoundY = ecSecID;
1810 miTGCmismatch=
true;
1811 }
else if ( det ==
"FW" ) {
1812 int fwSecID = (it_mui->second).getSectorID()+24*(it_mui->second).getHemisphere();
1813 int fwRoIID = (it_mui->second).getRoiNumber();
1814 muctpiNoTGCfwCandfoundX = fwRoIID;
1815 muctpiNoTGCfwCandfoundY = fwSecID;
1817 miTGCmismatch=
true;
1819 ATH_MSG_WARNING(
"Invalid string label in MuCTPI to RPC/TGC map: " << det);
1821 ATH_MSG_WARNING(
"No Muctpi to RPC/TGC match found: MuCTPI key / MuCTPI BCID: " << it_mui->first <<
" / ");
1824 if (miRPCmismatch) {
1828 errorSummaryPerLumiBlockX = currentLumiBlock;
1829 errorSummaryPerLumiBlockY = 17;
1831 errorPerLumiBlockX = currentLumiBlock;
1838 if (miTGCmismatch) {
1842 errorSummaryPerLumiBlockX = currentLumiBlock;
1843 errorSummaryPerLumiBlockY = 18;
1845 errorPerLumiBlockX = currentLumiBlock;
1854 bool rpcMImismatch =
false;
1856 for (std::map<std::string, const RpcSLTriggerHit*>::const_iterator it_rpc = rpcCandidates.begin();
1857 it_rpc != rpcCandidates.end(); ++it_rpc) {
1858 int muinum = muctpiCandidates.count(it_rpc->first);
1860 ATH_MSG_DEBUG(
" RPC to Muctpi match found: RPC key / RPC BCID / # matches: "
1861 << it_rpc->first <<
" / " << it_rpc->second->rowinBcid() <<
" / "
1864 int idEnd = (it_rpc->first).
find(
"-RoI");
1865 int secID = std::stoi((it_rpc->first).substr(2,idEnd-2));
1866 int roiID = (it_rpc->second)->roi();
1867 rpcNoMuCTPICandfoundX = roiID;
1868 rpcNoMuCTPICandfoundY = secID;
1871 ATH_MSG_DEBUG(
"No RPC to Muctpi match found: RPC key / RPC BCID: "
1872 << it_rpc->first <<
" / " << it_rpc->second->rowinBcid());
1873 rpcMImismatch =
true;
1876 if (rpcMImismatch) {
1880 errorSummaryPerLumiBlockX = currentLumiBlock;
1881 errorSummaryPerLumiBlockY = 19;
1883 errorPerLumiBlockX = currentLumiBlock;
1890 bool tgcMImismatch =
false;
1892 for (std::map<std::string, const Muon::TgcCoinData* >::const_iterator it_tgc = tgcCandidates.begin();
1893 it_tgc != tgcCandidates.end(); ++it_tgc) {
1894 int muinum = muctpiCandidates.count(it_tgc->first);
1896 ATH_MSG_DEBUG(
"TGC to Muctpi match found: TGC key / TGC BCID / # matches: "
1899 int idEnd = (it_tgc->first).
find(
"-RoI");
1900 int secID = std::stoi((it_tgc->first).substr(2,idEnd-2));
1901 std::string det = (it_tgc->first).substr(0,2);
1902 if ( det ==
"EC" ) {
1903 int ecRoIID = (it_tgc->second)->roi();
1904 tgcecNoMuCTPICandfoundX = ecRoIID;
1905 tgcecNoMuCTPICandfoundY = secID;
1907 }
else if ( det ==
"FW" ) {
1908 int fwRoIID = (it_tgc->second)->roi();
1909 tgcfwNoMuCTPICandfoundX = fwRoIID;
1910 tgcfwNoMuCTPICandfoundY = secID;
1916 ATH_MSG_WARNING(
"No TGC to Muctpi match found: TGC key: " << it_tgc->first);
1917 tgcMImismatch =
true;
1920 if (tgcMImismatch) {
1924 errorSummaryPerLumiBlockX = currentLumiBlock;
1925 errorSummaryPerLumiBlockY = 20;
1927 errorPerLumiBlockX = currentLumiBlock;
1939 const EventContext& ctx)
const
1969 uint64_t lb_stime = 0;
1970 uint64_t lb_etime = 0;
1971 bool retrievedLumiBlockTimes =
false;
1975 if (lblbattrList==
nullptr) {
1979 retrievedLumiBlockTimes =
true;
1980 auto lb_stime_loc = (*lblbattrList)[
"StartTime"].data<cool::UInt63>();
1981 auto lb_etime_loc = (*lblbattrList)[
"EndTime"].data<cool::UInt63>();
1982 lb_stime = lb_stime_loc;
1983 lb_etime = lb_etime_loc;
1984 ATH_MSG_DEBUG(
"lb_stime: " << lb_stime <<
" lb_etime: " << lb_etime );
1989 std::string currentBeamMode =
"sorry: not available!";
1993 if ( fillstateattrListColl ==
nullptr ) {
1998 for (itrcoll = fillstateattrListColl->
begin(); itrcoll != fillstateattrListColl->
end(); ++itrcoll) {
1999 const coral::AttributeList &atr = itrcoll->second;
2000 currentBeamMode = *(
static_cast<const std::string *
>((atr[
"BeamMode"]).addressOfData()));
2007 int readyForPhysics = -1;
2011 if (datatakingmodeattrList==
nullptr) {
2015 auto readyForPhysics_loc = (*datatakingmodeattrList)[
"ReadyForPhysics"].data<uint32_t>();
2016 readyForPhysics = readyForPhysics_loc;
2021 uint32_t headerBcid = 0;
2025 ctp.setRDO(theCTP_RDO);
2030 triggerTypeX = ttype;
2033 headerBcid = (theCTP_RIO->
getBCID() & 0xf);
2035 uint32_t currentLumiBlock = eventInfo->lumiBlock();
2039 <<
") does not match the one in the CTP_RIO object ("
2042 ATH_MSG_DEBUG(
"Run number: " << eventInfo->runNumber() <<
", Event: " << eventInfo->eventNumber() <<
", LB: " << eventInfo->lumiBlock() );
2045 if (currentLumiBlock < 1 )
2053 errorSummaryPerLumiBlockX = currentLumiBlock;
2054 errorSummaryPerLumiBlockY = 9;
2056 errorPerLumiBlockX = currentLumiBlock;
2063 if (retrievedLumiBlockTimes) {
2065 if (eventTime < lb_stime || eventTime > lb_etime) {
2067 <<
") not within time interval for current lumi block (LB: " << currentLumiBlock
2068 <<
", start: " << lb_stime
2069 <<
", stop: " << lb_etime <<
")");
2073 errorSummaryPerLumiBlockX = currentLumiBlock;
2074 errorSummaryPerLumiBlockY = 10;
2076 errorPerLumiBlockX = currentLumiBlock;
2083 timeSinceLBStartX = (eventTime-lb_stime)/1e06;
2085 timeUntilLBEndX = (lb_etime-eventTime)/1e06;
2093 double freqFromCool = -1.0;
2094 if (freqFromCool > 40.078e6 && freqFromCool < 40.079e6) {
2097 double lbStartFreqFromCool = -1.0;
2099 if (lbStartFreqFromCool > 40.078e6 && lbStartFreqFromCool < 40.079e6) {
2100 bcDurationInNs = 2./(freqFromCool+lbStartFreqFromCool)*1e9;
2104 bcDurationInNs = 1./freqFromCool*1e9;
2106 ATH_MSG_DEBUG(
"Will use BC interval calculated from frequency measurement(s) in COOL: f = "
2107 << freqFromCool <<
" Hz => t_BC = " << bcDurationInNs <<
" ns");
2110 ATH_MSG_DEBUG(
"No valid frequency measurements found in COOL, will use hardcoded BC interval: t_BC = " << bcDurationInNs <<
" ns");
2113 uint32_t lumiBlockOfPreviousEvent = eventInfo->lumiBlock() -1 ;
2115 uint64_t firstEventTime = 0;
2116 int64_t firstEventBcid = 0;
2117 int64_t firstEventTC = 0;
2119 if ( (lumiBlockOfPreviousEvent != 0 && lumiBlockOfPreviousEvent != currentLumiBlock) ) {
2121 firstEventTime = eventTime;
2122 firstEventBcid =
static_cast<int64_t
>(theCTP_RIO->
getBCID());
2123 firstEventTC =
static_cast<int64_t
>(theCTP_RDO->
getTurnCounter());
2127 int64_t timeDiff_GPS = eventTime - firstEventTime;
2128 int64_t firstEventTimeInBc_TC = firstEventTC*
m_bcsPerTurn+firstEventBcid;
2130 int64_t timeDiffInBc_TC = eventTimeInBc_TC-firstEventTimeInBc_TC;
2133 if ( !(firstEventTC == 0 && theCTP_RDO->
getTurnCounter() == 0) ) {
2134 std::string bm = currentBeamMode;
2135 double tDiffInNs = timeDiffInBc_TC*bcDurationInNs-timeDiff_GPS;
2138 if ( (bm ==
"STABLEBEAMS" || bm ==
"STABLE BEAMS") &&
2141 (readyForPhysics == 1) &&
2142 (std::abs(tDiffInNs) > 45000) ) {
2144 <<
" ns (> 0.5 LHC turn) during stable beams - missing orbit pulse?");
2148 errorSummaryPerLumiBlockX = currentLumiBlock;
2149 errorSummaryPerLumiBlockY = 16;
2151 errorPerLumiBlockX = currentLumiBlock;
2159 turnCounterTimeErrorX = tDiffInNs/1e03;
2161 turnCounterTimeErrorVsLbX = currentLumiBlock;
2162 turnCounterTimeErrorVsLbY = tDiffInNs/1e03;
2166 ATH_MSG_DEBUG(
"Turn counter = 0 for both first processed and current event, not filling TC histograms");
2171 uint32_t currentLumiBlock = eventInfo->lumiBlock();
2177 errorSummaryPerLumiBlockX = currentLumiBlock;
2178 errorSummaryPerLumiBlockY = 11;
2180 errorPerLumiBlockX = currentLumiBlock;
2195 const std::vector<CTP_BC> &BCs = ctp.getBunchCrossings();
2196 const CTP_BC & bunch = BCs[storeBunch];
2197 unsigned int bcid = bunch.
getBCID();
2199 double bcid_offset = (
static_cast < int >((bcid)&0xf) -
static_cast < int >(headerBcid));
2200 deltaBcidX = bcid_offset;
2202 if (bcid_offset != 0) {
2204 ATH_MSG_WARNING(
"Found BCID offset of "<< bcid_offset <<
" between ROD Header ("
2205 << headerBcid <<
") and data (" << (bcid&0xf) <<
")");
2209 errorSummaryPerLumiBlockX = currentLumiBlock;
2210 errorSummaryPerLumiBlockY = 1;
2212 errorPerLumiBlockX = currentLumiBlock;
2224 short bunchIndex = -storeBunch;
2225 std::bitset<512> TIPfirst;
2226 std::bitset<512> TBPfirst;
2227 std::bitset<512> TAPfirst;
2233 std::vector<int> tbpItems;
2234 std::vector<int> tapItems;
2235 std::vector<int> tavItems;
2236 std::vector<int> tbpBC;
2237 std::vector<int> tapBC;
2238 std::vector<int> tavBC;
2240 for ( std::vector<CTP_BC>::const_iterator it = BCs.begin();
2241 it != BCs.end(); ++it, ++bunchIndex ) {
2242 bcid = it->getBCID();
2246 if (
sc.isFailure() ) {
2251 const std::bitset<512> currentTIP(it->getTIP());
2252 if (currentTIP.any()) {
2253 for (
size_t tipNum = 0; tipNum < currentTIP.size(); ++tipNum ) {
2254 if (currentTIP.test(tipNum)) {
2256 pitBCY = bunchIndex;
2258 if (TIPfirst.test(tipNum)) {
2259 TIPfirst.set(tipNum,0);
2260 pitFirstBCX = tipNum;
2261 pitFirstBCY = bunchIndex;
2268 const std::bitset<512> currentTBP(it->getTBP());
2269 if (currentTBP.any()) {
2270 for (
size_t item = 0; item < currentTBP.size(); ++item ) {
2271 if (currentTBP.test(item)) {
2272 tbpItems.push_back(item);
2273 tbpBC.push_back(bunchIndex);
2274 if (TBPfirst.test(item)) {
2275 TBPfirst.set(item,0);
2281 const std::bitset<512> currentTAP(it->getTAP());
2282 if (currentTAP.any()) {
2283 for (
size_t item = 0; item < currentTAP.size(); ++item ) {
2284 if (currentTAP.test(item)) {
2285 tapItems.push_back(item);
2286 tapBC.push_back(bunchIndex);
2287 if (TAPfirst.test(item)) {
2288 TAPfirst.set(item,0);
2294 const std::bitset<512> currentTAV(it->getTAV());
2296 if (currentTAV.any()) {
2297 for (
size_t item = 0; item < currentTAV.size(); ++item ) {
2298 if (currentTAV.test(item)) {
2301 tavItems.push_back(item);
2302 tavBC.push_back(bunchIndex);
2309 bool allTAPFine=
true;
2310 bool allTAVFine=
true;
2311 for (
unsigned int i=0; i<tapItems.size(); i++ ) {
2312 ATH_MSG_DEBUG( tapItems.at(i) <<
" TAP fired at BC " << tapBC.at(i));
2314 for (
unsigned int j=0; j<tbpItems.size() && isTBP==
false; j++ ) {
2315 if ( tbpItems.at(j)==tapItems.at(i) && tbpBC.at(j)==tapBC.at(i) ) isTBP=
true;
2317 if ( isTBP==
false ) {
2319 ATH_MSG_WARNING(
"TAP item " << tapItems.at(i) <<
" at BC " << tapBC.at(i) <<
" not found in TBP");
2322 for (
unsigned int i=0; i<tavItems.size(); i++ ) {
2323 ATH_MSG_DEBUG( tavItems.at(i) <<
" TAV fired at BC " << tavBC.at(i));
2325 for (
unsigned int j=0; j<tapItems.size() && isTAP==
false; j++ ) {
2326 if ( tapItems.at(j)==tavItems.at(i) && tapBC.at(j)==tavBC.at(i) ) isTAP=
true;
2328 if ( isTAP==
false ) {
2330 ATH_MSG_WARNING(
"TAV item " << tavItems.at(i) <<
" at BC " << tavBC.at(i) <<
" not found in TAP");
2335 if (allTAPFine==
false) {
2339 errorSummaryPerLumiBlockX = currentLumiBlock;
2340 errorSummaryPerLumiBlockY = 12;
2342 errorPerLumiBlockX = currentLumiBlock;
2350 if (allTAVFine==
false) {
2354 errorSummaryPerLumiBlockX = currentLumiBlock;
2355 errorSummaryPerLumiBlockY = 13;
2357 errorPerLumiBlockX = currentLumiBlock;
2376 if (
msgLvl(MSG::DEBUG)) {
2377 std::vector<unsigned int> triggersFired = ctp.getAllTriggers(storeBunch);
2378 std::stringstream
str;
2380 for (
auto i : triggersFired ) {
2383 ATH_MSG_DEBUG( triggersFired.size() <<
" trigger items fired: " <<
str.str());
2388 ATH_MSG_WARNING(
"Zero bunches in CTP data for ext. LVL1 ID 0x" << MSG::hex << evId << MSG::dec);
2392 errorSummaryPerLumiBlockX = currentLumiBlock;
2393 errorSummaryPerLumiBlockY = 2;
2395 errorPerLumiBlockX = currentLumiBlock;
2406 for ( uint32_t i = 0; i < num; ++i ) {
2407 if (vStatus[i] != 0) {
2410 ATH_MSG_DEBUG(
"CTP error status word #" << i <<
": 0x" << MSG::hex << vStatus[i] << MSG::dec);
2412 }
else if (i == 1) {
2417 for (
int bit = 0; bit < 24; ++bit ) {
2418 if (vStatus[i] & (1 << bit)){
2423 else if (Status == 2) {