25 ATH_CHECK( m_MuCTPI_Phase1_RDOKey.initialize(m_processMuctpi && m_isRun3) );
26 ATH_CHECK( m_MuCTPI_RDOKey.initialize(m_processMuctpi && !m_isRun3) );
28 ATH_CHECK( m_CTP_RDOKey.initialize(m_processCTP) );
29 ATH_CHECK( m_CTP_RIOKey.initialize(m_processCTP && ! m_runOnESD) );
30 ATH_CHECK( m_CTP_RDO_RerunKey.initialize(m_processCTP && m_compareRerun) );
31 ATH_CHECK( m_RoIBResultKey.initialize(m_processRoIB && m_processMuctpiRIO) );
32 ATH_CHECK( m_RPCContainerKey.initialize(m_processMuctpi) );
33 ATH_CHECK( m_TGCContainerKey.initialize(m_processMuctpi) );
37 ATH_CHECK( m_LBLBFolderInputKey.initialize(!m_isSim) );
38 ATH_CHECK( m_FILLSTATEFolderInputKey.initialize(!m_isSim) );
39 ATH_CHECK( m_DataTakingModeFolderInputKey.initialize(!m_isSim) );
41 ATH_MSG_INFO(
"Printing the BSMonitoringAlgorithm Configuration: ");
42 ATH_MSG_INFO(
"InclusiveTriggerThresholds: " << m_inclusiveTriggerThresholds);
44 ATH_MSG_INFO(
"ProcessMuctpiDataRIO: " << m_processMuctpiRIO);
58 ATH_MSG_DEBUG(
"CTPmonitoring BSMonitorAlgorithm::fillHistograms");
65 std::vector<uint> bcidFirstInTrain={};
72 if(
bg->name()==
"FirstInTrain")
74 for(std::pair<size_t,size_t> pp:
bg->trains())
75 bcidFirstInTrain.push_back(pp.first);
82 ATH_MSG_ERROR(
"Did not find L1BunchGroupSet in DetectorStore");
96 bool validMuCTPI_RDO =
true;
97 bool validMuCTPI_Phase1_RDO =
true;
98 bool validCTP_RIO =
true;
99 bool validCTP_RDO =
true;
100 bool validRoIBResult =
true;
101 bool validTGCContainer =
true;
102 bool validRPCContainer =
true;
113 auto eventInfo = GetEventInfo(ctx);
115 if (m_processMuctpi) {
119 theMuCTPI_Phase1_RDO =
SG::get(m_MuCTPI_Phase1_RDOKey, ctx);
120 if (!theMuCTPI_Phase1_RDO) {
121 ATH_MSG_WARNING(
"Could not find \"" << m_MuCTPI_Phase1_RDOKey.key() <<
"\" in StoreGate");
122 validMuCTPI_Phase1_RDO =
false;
127 theMuCTPI_RDO =
SG::get(m_MuCTPI_RDOKey, ctx);
128 if (!theMuCTPI_RDO) {
129 ATH_MSG_WARNING(
"Could not find \"" << m_MuCTPI_RDOKey.key() <<
"\" in StoreGate");
130 validMuCTPI_RDO =
false;
134 theRPCContainer =
SG::get(m_RPCContainerKey, ctx);
135 if (!theRPCContainer) {
137 validRPCContainer =
false;
139 theTGCContainer =
SG::get(m_TGCContainerKey, ctx);
140 if (!theTGCContainer) {
142 validTGCContainer =
false;
148 theCTP_RDO =
SG::get(m_CTP_RDOKey, ctx);
151 ATH_MSG_WARNING(
"Could not find \"" << m_CTP_RDOKey.key() <<
"\" in StoreGate");
152 validCTP_RDO =
false;
155 theCTP_RIO =
SG::get(m_CTP_RIOKey, ctx);
157 ATH_MSG_WARNING(
"Could not find \"" << m_CTP_RIOKey.key() <<
"\" in StoreGate");
158 validCTP_RIO =
false;
163 if (m_processRoIB && m_processMuctpiRIO) {
164 ATH_MSG_DEBUG(
"CTPMON fillHistograms() m_processRoIB && m_processMuctpiRIO");
165 roIBResult =
SG::get(m_RoIBResultKey, ctx);
167 ATH_MSG_WARNING(
"Could not find \"" << m_RoIBResultKey.key() <<
"\" in StoreGate");
168 validRoIBResult =
false;
172 bool incompleteEvent =
false;
177 if (eventInfo->runNumber()) {
178 currentLumiBlock = eventInfo->lumiBlock();
193 if ( incompleteEvent ) {
195 incompleteFragmentTypeX = 4;
196 fill(m_packageName, incompleteFragmentTypeX);
200 bool l1ctObjectMissingInStoreGate;
202 l1ctObjectMissingInStoreGate = ( !validCTP_RDO || !validCTP_RIO || !validMuCTPI_Phase1_RDO || !validRoIBResult );
204 l1ctObjectMissingInStoreGate = ( !validCTP_RDO || !validCTP_RIO || !validMuCTPI_RDO || !validRoIBResult );
205 if ( l1ctObjectMissingInStoreGate ) {
216 dumpData(theCTP_RDO, theMuCTPI_RDO, roIBResult, ctx);
218 if ( m_processCTP ) {
219 if ( validCTP_RDO ) {
220 const std::vector<uint32_t> &cDataWords = theCTP_RDO->
getDataWords();
221 if ( cDataWords.size() == 0 ) {
223 validCTP_RDO =
false;
227 if ( validCTP_RIO ) {
230 validCTP_RIO =
false;
235 if ( m_processMuctpi && !m_isRun3) {
236 if ( validMuCTPI_RDO ) {
244 <<
" candidates, but there are only " << theMuCTPI_RDO->
dataWord().size()
245 <<
" data words, ignoring MuCTPI");
246 validMuCTPI_RDO =
false;
253 if (!validCTP_RDO || !validCTP_RIO || ( (!m_isRun3 && !validMuCTPI_RDO) || (m_isRun3 && !validMuCTPI_Phase1_RDO) ) || !validRoIBResult) {
254 ATH_MSG_WARNING(
"At least one missing/invalid L1CT fragment detected");
255 ATH_MSG_WARNING(
"CTP_RDO: " << validCTP_RDO <<
", CTP_RIO: " << validCTP_RIO
257 <<
", RoIBResult: " << validRoIBResult);
261 <<
", L1ID: " << std::dec << theCTP_RIO->
getLvl1Id()
262 <<
" (HEX: " << std::hex << theCTP_RIO->
getLvl1Id() <<
")" << std::dec
263 <<
", BCID: " << theCTP_RIO->
getBCID());
270 else if (eventInfo->runNumber()) {
271 ATH_MSG_WARNING(
"CTP_RIO missing, EventInfo says LB: " << eventInfo->lumiBlock()
272 <<
", BCID: " << eventInfo->bcid());
275 ATH_MSG_WARNING(
"Not printing event details since both CTP_RIO and EventInfo objects are missing");
280 if ( !incompleteEvent ) {
281 errorSummaryPerLumiBlockX = currentLumiBlock;
282 errorSummaryPerLumiBlockY = 15;
283 fill(m_packageName, errorSummaryPerLumiBlockX, errorSummaryPerLumiBlockY);
284 errorPerLumiBlockX = currentLumiBlock;
285 fill(m_packageName, errorPerLumiBlockX);
289 fill(m_packageName, errorSummaryX, errorSummaryY);
292 incompleteFragmentTypeX = 0;
293 fill(m_packageName, incompleteFragmentTypeX);
296 incompleteFragmentTypeX = 1;
297 fill(m_packageName, incompleteFragmentTypeX);
304 if ( (!m_isRun3 && !validMuCTPI_RDO) || (m_isRun3 && !validMuCTPI_Phase1_RDO) ) {
305 incompleteFragmentTypeX = 2;
306 fill(m_packageName, incompleteFragmentTypeX);
308 if (!validRoIBResult) {
309 incompleteFragmentTypeX = 3;
310 fill(m_packageName, incompleteFragmentTypeX);
312 if (!validTGCContainer) {
313 incompleteFragmentTypeX = 4;
314 fill(m_packageName, incompleteFragmentTypeX);
316 if (!validRPCContainer) {
317 incompleteFragmentTypeX = 5;
318 fill(m_packageName, incompleteFragmentTypeX);
323 fill(m_packageName, errorSummaryX);
327 if ( !validCTP_RDO || !validCTP_RIO || ( (!m_isRun3 && !validMuCTPI_RDO) || (m_isRun3 && !validMuCTPI_Phase1_RDO) ) || !validRoIBResult || incompleteEvent ) {
328 ATH_MSG_WARNING(
"Event incomplete, will skip filling of all non-error histograms");
337 if (m_processCTP && validCTP_RDO && validCTP_RIO) {
339 doCtp(theCTP_RDO, theCTP_RIO, ctx);
344 if (m_processMuctpi && m_processCTP && validCTP_RDO && validMuCTPI_RDO) {
346 doCtpMuctpi(theCTP_RDO, theMuCTPI_RDO, ctx);
356 if (m_processMuctpi && validMuCTPI_RDO && validTGCContainer && validRPCContainer) {
358 doMuctpi(theMuCTPI_RDO, theRPCContainer, theTGCContainer, ctx);
359 if (m_processRoIB && m_processMuctpiRIO) {
361 doMuonRoI(theMuCTPI_RDO, roIBResult, ctx);
367 if (m_processMuctpi && validMuCTPI_Phase1_RDO && validTGCContainer && validRPCContainer) {
369 doMuctpi(theMuCTPI_Phase1_RDO,bcidFirstInTrain, ctx);
373 return StatusCode::SUCCESS;
376 std::cerr <<
"Caught standard C++ exception: " <<
e.what() <<
" from fillHistograms()" << std::endl;
377 return StatusCode::FAILURE;
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);
551 auto eventInfo = GetEventInfo(ctx);
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;
598 for(
uint iThr=0;iThr<
slices[iSlice].mlt.cnt.size();iThr++)
600 bool thr =
slices[iSlice].mlt.cnt[iThr];
604 fill(m_packageName, multThrX);
605 multThrVsLBX = currentLumiBlock;
607 fill(m_packageName, multThrVsLBX, multThrVsLBY);
612 for(
uint iBit=0;iBit<64;iBit++)
614 bool bit = (
slices[iSlice].mlt.bits >> iBit ) & 0
x1;
618 fill(m_packageName, multBitsX);
619 multBitsVsLBX = currentLumiBlock;
620 multBitsVsLBY = iBit;
621 fill(m_packageName, multBitsVsLBX, multBitsVsLBY);
629 if(header_candCount !=
slices[iSlice].cand.size())
631 errorSummaryMUCTPI=2;
632 fill(m_packageName, errorSummaryMUCTPI);
633 errorSummaryPerLumiBlockMUCTPIY=2;
634 errorSummaryPerLumiBlockMUCTPIX=currentLumiBlock;
635 fill(m_packageName, errorSummaryPerLumiBlockMUCTPIX, errorSummaryPerLumiBlockMUCTPIY);
642 candCount = header_candCount;
643 fill(m_packageName,candCount);
645 candCountVsLBY = header_candCount;
646 candCountVsLBX = currentLumiBlock;
647 fill(m_packageName,candCountVsLBX,candCountVsLBY);
654 for(
uint iCand=0;iCand<
slices[iSlice].cand.size();iCand++)
671 float candEta =
slices[iSlice].cand[iCand].eta;
672 float candPhi =
slices[iSlice].cand[iCand].phi;
673 bool vetoFlag =
slices[iSlice].cand[iCand].vetoFlag;
675 if(
side) n_cand_A++;
else n_cand_C++;
683 candPtBAX =
slices[iSlice].cand[iCand].pt;
684 fill(m_packageName, candPtBAX);
686 candSLVsLBBAX = currentLumiBlock;
688 fill(m_packageName, candSLVsLBBAX, candSLVsLBBAY);
692 candVetoFlag_RoiVsSLBAX =
num;
693 candVetoFlag_RoiVsSLBAY =
slices[iSlice].cand[iCand].roi;
694 fill(m_packageName, candVetoFlag_RoiVsSLBAX, candVetoFlag_RoiVsSLBAY);
696 candVetoFlag_EtaPhiBAX = candEta;
697 candVetoFlag_EtaPhiBAY = candPhi;
698 fill(m_packageName, candVetoFlag_EtaPhiBAX, candVetoFlag_EtaPhiBAY);
701 if(
slices[iSlice].cand[iCand].candFlag_phiOverlap)
703 candEtaPhi_PhiOverlapX_BA = candEta;
704 candEtaPhi_PhiOverlapY_BA = candPhi;
705 fill(m_packageName, candEtaPhi_PhiOverlapX_BA, candEtaPhi_PhiOverlapY_BA);
708 if(
slices[iSlice].cand[iCand].candFlag_gt1CandRoi)
710 candEtaPhi_Gt1CandRoiX_BA = candEta;
711 candEtaPhi_Gt1CandRoiY_BA = candPhi;
712 fill(m_packageName,candEtaPhi_Gt1CandRoiX_BA,candEtaPhi_Gt1CandRoiY_BA);
715 if(
slices[iSlice].cand[iCand].sectorFlag_gtN)
717 candEtaPhi_SectorFlagGtNX_BA = candEta;
718 candEtaPhi_SectorFlagGtNY_BA = candPhi;
719 fill(m_packageName,candEtaPhi_SectorFlagGtNX_BA,candEtaPhi_SectorFlagGtNY_BA);
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;
729 fill(m_packageName, candSliceVsSLBAX, candSliceVsSLBAY);
733 if(
std::find(bcidFirstInTrain.begin(), bcidFirstInTrain.end(), currentBCID) != bcidFirstInTrain.end())
735 candSliceVsSLBAFirstInTrainX=
num;
736 candSliceVsSLBAFirstInTrainY=sliceIndex;
737 fill(m_packageName, candSliceVsSLBAFirstInTrainX, candSliceVsSLBAFirstInTrainY);
742 candRoiVsSLBACentralSliceX =
num;
743 candRoiVsSLBACentralSliceY =
slices[iSlice].cand[iCand].roi;
744 fill(m_packageName, candRoiVsSLBACentralSliceX, candRoiVsSLBACentralSliceY);
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;
764 fill(m_packageName, candRoiVsSLBAOtherSliceX, candRoiVsSLBAOtherSliceY);
771 candPtECX =
slices[iSlice].cand[iCand].pt;
772 fill(m_packageName, candPtECX);
774 candSLVsLBECX = currentLumiBlock;
776 fill(m_packageName, candSLVsLBECX, candSLVsLBECY);
778 bool vetoFlag =
slices[iSlice].cand[iCand].vetoFlag;
781 candVetoFlag_RoiVsSLECX =
num;
782 candVetoFlag_RoiVsSLECY =
slices[iSlice].cand[iCand].roi;
783 fill(m_packageName, candVetoFlag_RoiVsSLECX, candVetoFlag_RoiVsSLECY);
785 candVetoFlag_EtaPhiECX = candEta;
786 candVetoFlag_EtaPhiECY = candPhi;
787 fill(m_packageName, candVetoFlag_EtaPhiECX, candVetoFlag_EtaPhiECY);
790 if(
slices[iSlice].cand[iCand].sectorFlag_nswMon)
792 candEtaPhi_NSWMonFlagX_EC = candEta;
793 candEtaPhi_NSWMonFlagY_EC = candPhi;
794 fill(m_packageName,candEtaPhi_NSWMonFlagX_EC,candEtaPhi_NSWMonFlagY_EC);
797 if(
slices[iSlice].cand[iCand].sectorFlag_gtN)
799 candEtaPhi_SectorFlagGtNX_EC = candEta;
800 candEtaPhi_SectorFlagGtNY_EC = candPhi;
801 fill(m_packageName,candEtaPhi_SectorFlagGtNX_EC,candEtaPhi_SectorFlagGtNY_EC);
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;
811 fill(m_packageName, candSliceVsSLECX, candSliceVsSLECY);
815 if(
std::find(bcidFirstInTrain.begin(), bcidFirstInTrain.end(), currentBCID) != bcidFirstInTrain.end())
817 candSliceVsSLECFirstInTrainX=
num;
818 candSliceVsSLECFirstInTrainY=sliceIndex;
819 fill(m_packageName, candSliceVsSLECFirstInTrainX, candSliceVsSLECFirstInTrainY);
824 candRoiVsSLECCentralSliceX =
num;
825 candRoiVsSLECCentralSliceY =
slices[iSlice].cand[iCand].roi;
826 fill(m_packageName, candRoiVsSLECCentralSliceX,candRoiVsSLECCentralSliceY);
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;
854 fill(m_packageName, candRoiVsSLECOtherSliceX, candRoiVsSLECOtherSliceY);
860 candPtFWX =
slices[iSlice].cand[iCand].pt;
861 fill(m_packageName, candPtFWX);
863 candSLVsLBFWX = currentLumiBlock;
865 fill(m_packageName, candSLVsLBFWX, candSLVsLBFWY);
867 bool vetoFlag =
slices[iSlice].cand[iCand].vetoFlag;
870 candVetoFlag_RoiVsSLFWX =
num;
871 candVetoFlag_RoiVsSLFWY =
slices[iSlice].cand[iCand].roi;
872 fill(m_packageName, candVetoFlag_RoiVsSLFWX, candVetoFlag_RoiVsSLFWY);
874 candVetoFlag_EtaPhiFWX = candEta;
875 candVetoFlag_EtaPhiFWY = candPhi;
876 fill(m_packageName, candVetoFlag_EtaPhiFWX, candVetoFlag_EtaPhiFWY);
879 if(
slices[iSlice].cand[iCand].sectorFlag_nswMon)
881 candEtaPhi_NSWMonFlagX_FW = candEta;
882 candEtaPhi_NSWMonFlagY_FW = candPhi;
883 fill(m_packageName,candEtaPhi_NSWMonFlagX_FW,candEtaPhi_NSWMonFlagY_FW);
886 if(
slices[iSlice].cand[iCand].sectorFlag_gtN)
888 candEtaPhi_SectorFlagGtNX_FW = candEta;
889 candEtaPhi_SectorFlagGtNY_FW = candPhi;
890 fill(m_packageName,candEtaPhi_SectorFlagGtNX_FW,candEtaPhi_SectorFlagGtNY_FW);
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;
900 fill(m_packageName, candSliceVsSLFWX, candSliceVsSLFWY);
904 if(
std::find(bcidFirstInTrain.begin(), bcidFirstInTrain.end(), currentBCID) != bcidFirstInTrain.end())
906 candSliceVsSLFWFirstInTrainX=
num;
907 candSliceVsSLFWFirstInTrainY=sliceIndex;
908 fill(m_packageName, candSliceVsSLFWFirstInTrainX, candSliceVsSLFWFirstInTrainY);
913 candRoiVsSLFWCentralSliceX =
num;
914 candRoiVsSLFWCentralSliceY =
slices[iSlice].cand[iCand].roi;
915 fill(m_packageName, candRoiVsSLFWCentralSliceX, candRoiVsSLFWCentralSliceY);
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;
943 fill(m_packageName, candRoiVsSLFWOtherSliceX, candRoiVsSLFWOtherSliceY);
965 if(header_tobCount !=
slices[iSlice].tob.size())
967 errorSummaryMUCTPI=3;
968 fill(m_packageName, errorSummaryMUCTPI);
969 errorSummaryPerLumiBlockMUCTPIY=3;
970 errorSummaryPerLumiBlockMUCTPIX=currentLumiBlock;
971 fill(m_packageName, errorSummaryPerLumiBlockMUCTPIX, errorSummaryPerLumiBlockMUCTPIY);
978 tobCount =
slices[iSlice].tob.size();
979 fill(m_packageName,tobCount);
983 errorSummaryMUCTPI=1;
984 fill(m_packageName, errorSummaryMUCTPI);
985 errorSummaryPerLumiBlockMUCTPIY=1;
986 errorSummaryPerLumiBlockMUCTPIX=currentLumiBlock;
987 fill(m_packageName, errorSummaryPerLumiBlockMUCTPIX, errorSummaryPerLumiBlockMUCTPIY);
991 for(
uint iTOB=0;iTOB<
slices[iSlice].tob.size();iTOB++)
997 float etaDecoded =
slices[iSlice].tob[iTOB].etaDecoded;
998 float phiDecoded =
slices[iSlice].tob[iTOB].phiDecoded;
1005 fill(m_packageName, tobEtaPhiAX, tobEtaPhiAY);
1009 fill(m_packageName, tobPtVsEtaAX, tobPtVsEtaAY);
1013 fill(m_packageName, tobPtVsPhiAX, tobPtVsPhiAY);
1015 if(
slices[iSlice].tob[iTOB].candFlag_GoodMF) {
1016 tobEtaPhiA_GoodMFX = eta;
1017 tobEtaPhiA_GoodMFY = phi;
1018 fill(m_packageName, tobEtaPhiA_GoodMFX, tobEtaPhiA_GoodMFY);
1021 if(
slices[iSlice].tob[iTOB].candFlag_InnerCoin) {
1022 tobEtaPhiA_InnerCoinX = eta;
1023 tobEtaPhiA_InnerCoinY = phi;
1024 fill(m_packageName, tobEtaPhiA_InnerCoinX, tobEtaPhiA_InnerCoinY);
1027 if(
slices[iSlice].tob[iTOB].candFlag_BW23) {
1028 tobEtaPhiA_BW23X = eta;
1029 tobEtaPhiA_BW23Y = phi;
1030 fill(m_packageName, tobEtaPhiA_BW23X, tobEtaPhiA_BW23Y);
1033 if(
slices[iSlice].tob[iTOB].candFlag_Charge) {
1034 tobEtaPhiA_ChargeX = eta;
1035 tobEtaPhiA_ChargeY = phi;
1036 fill(m_packageName, tobEtaPhiA_ChargeX, tobEtaPhiA_ChargeY);
1044 tobEtaPhiXdecoded_BA = etaDecoded;
1045 tobEtaPhiYdecoded_BA = phiDecoded;
1046 fill(m_packageName, tobEtaPhiXdecoded_BA, tobEtaPhiYdecoded_BA);
1048 tobPtVsEtaXdecoded_BA = etaDecoded;
1049 tobPtVsEtaYdecoded_BA =
pt;
1050 fill(m_packageName, tobPtVsEtaXdecoded_BA, tobPtVsEtaYdecoded_BA);
1052 tobPtVsPhiXdecoded_BA = phiDecoded;
1053 tobPtVsPhiYdecoded_BA =
pt;
1054 fill(m_packageName, tobPtVsPhiXdecoded_BA, tobPtVsPhiYdecoded_BA);
1060 tobEtaPhiXdecoded_FW = etaDecoded;
1061 tobEtaPhiYdecoded_FW = phiDecoded;
1062 fill(m_packageName, tobEtaPhiXdecoded_FW, tobEtaPhiYdecoded_FW);
1064 tobPtVsEtaXdecoded_FW = etaDecoded;
1065 tobPtVsEtaYdecoded_FW =
pt;
1066 fill(m_packageName, tobPtVsEtaXdecoded_FW, tobPtVsEtaYdecoded_FW);
1068 tobPtVsPhiXdecoded_FW = phiDecoded;
1069 tobPtVsPhiYdecoded_FW =
pt;
1070 fill(m_packageName, tobPtVsPhiXdecoded_FW, tobPtVsPhiYdecoded_FW);
1072 if(
slices[iSlice].tob[iTOB].candFlag_GoodMF) {
1073 tobEtaPhi_GoodMFXdecoded_FW = etaDecoded;
1074 tobEtaPhi_GoodMFYdecoded_FW = phiDecoded;
1075 fill(m_packageName, tobEtaPhi_GoodMFXdecoded_FW, tobEtaPhi_GoodMFYdecoded_FW);
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;
1087 fill(m_packageName, tobEtaPhi_BW23Xdecoded_FW, tobEtaPhi_BW23Ydecoded_FW);
1090 if(
slices[iSlice].tob[iTOB].candFlag_Charge) {
1091 tobEtaPhi_ChargeXdecoded_FW = etaDecoded;
1092 tobEtaPhi_ChargeYdecoded_FW = phiDecoded;
1093 fill(m_packageName, tobEtaPhi_ChargeXdecoded_FW, tobEtaPhi_ChargeYdecoded_FW);
1100 tobEtaPhiXdecoded_EC = etaDecoded;
1101 tobEtaPhiYdecoded_EC = phiDecoded;
1102 fill(m_packageName, tobEtaPhiXdecoded_EC, tobEtaPhiYdecoded_EC);
1104 tobPtVsEtaXdecoded_EC = etaDecoded;
1105 tobPtVsEtaYdecoded_EC =
pt;
1106 fill(m_packageName, tobPtVsEtaXdecoded_EC, tobPtVsEtaYdecoded_EC);
1108 tobPtVsPhiXdecoded_EC = phiDecoded;
1109 tobPtVsPhiYdecoded_EC =
pt;
1110 fill(m_packageName, tobPtVsPhiXdecoded_EC, tobPtVsPhiYdecoded_EC);
1112 if(
slices[iSlice].tob[iTOB].candFlag_GoodMF) {
1113 tobEtaPhi_GoodMFXdecoded_EC = etaDecoded;
1114 tobEtaPhi_GoodMFYdecoded_EC = phiDecoded;
1115 fill(m_packageName, tobEtaPhi_GoodMFXdecoded_EC, tobEtaPhi_GoodMFYdecoded_EC);
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;
1127 fill(m_packageName, tobEtaPhi_BW23Xdecoded_EC, tobEtaPhi_BW23Ydecoded_EC);
1130 if(
slices[iSlice].tob[iTOB].candFlag_Charge) {
1131 tobEtaPhi_ChargeXdecoded_EC = etaDecoded;
1132 tobEtaPhi_ChargeYdecoded_EC = phiDecoded;
1133 fill(m_packageName, tobEtaPhi_ChargeXdecoded_EC, tobEtaPhi_ChargeYdecoded_EC);
1143 fill(m_packageName, tobEtaPhiCX, tobEtaPhiCY);
1147 fill(m_packageName, tobPtVsEtaCX, tobPtVsEtaCY);
1151 fill(m_packageName, tobPtVsPhiCX, tobPtVsPhiCY);
1153 if(
slices[iSlice].tob[iTOB].candFlag_GoodMF) {
1154 tobEtaPhiC_GoodMFX = eta;
1155 tobEtaPhiC_GoodMFY = phi;
1156 fill(m_packageName, tobEtaPhiC_GoodMFX, tobEtaPhiC_GoodMFY);
1159 if(
slices[iSlice].tob[iTOB].candFlag_InnerCoin) {
1160 tobEtaPhiC_InnerCoinX = eta;
1161 tobEtaPhiC_InnerCoinY = phi;
1162 fill(m_packageName, tobEtaPhiC_InnerCoinX, tobEtaPhiC_InnerCoinY);
1165 if(
slices[iSlice].tob[iTOB].candFlag_BW23) {
1166 tobEtaPhiC_BW23X = eta;
1167 tobEtaPhiC_BW23Y = phi;
1168 fill(m_packageName, tobEtaPhiC_BW23X, tobEtaPhiC_BW23Y);
1171 if(
slices[iSlice].tob[iTOB].candFlag_Charge) {
1172 tobEtaPhiC_ChargeX = eta;
1173 tobEtaPhiC_ChargeY = phi;
1174 fill(m_packageName, tobEtaPhiC_ChargeX, tobEtaPhiC_ChargeY);
1183 tobEtaPhiXdecoded_BA = etaDecoded;
1184 tobEtaPhiYdecoded_BA = phiDecoded;
1185 fill(m_packageName, tobEtaPhiXdecoded_BA, tobEtaPhiYdecoded_BA);
1187 tobPtVsEtaXdecoded_BA = etaDecoded;
1188 tobPtVsEtaYdecoded_BA =
pt;
1189 fill(m_packageName, tobPtVsEtaXdecoded_BA, tobPtVsEtaYdecoded_BA);
1191 tobPtVsPhiXdecoded_BA = phiDecoded;
1192 tobPtVsPhiYdecoded_BA =
pt;
1193 fill(m_packageName, tobPtVsPhiXdecoded_BA, tobPtVsPhiYdecoded_BA);
1201 tobEtaPhiXdecoded_FW = etaDecoded;
1202 tobEtaPhiYdecoded_FW = phiDecoded;
1203 fill(m_packageName, tobEtaPhiXdecoded_FW, tobEtaPhiYdecoded_FW);
1205 tobPtVsEtaXdecoded_FW = etaDecoded;
1206 tobPtVsEtaYdecoded_FW =
pt;
1207 fill(m_packageName, tobPtVsEtaXdecoded_FW, tobPtVsEtaYdecoded_FW);
1209 tobPtVsPhiXdecoded_FW = phiDecoded;
1210 tobPtVsPhiYdecoded_FW =
pt;
1211 fill(m_packageName, tobPtVsPhiXdecoded_FW, tobPtVsPhiYdecoded_FW);
1213 if(
slices[iSlice].tob[iTOB].candFlag_GoodMF) {
1214 tobEtaPhi_GoodMFXdecoded_FW = etaDecoded;
1215 tobEtaPhi_GoodMFYdecoded_FW = phiDecoded;
1216 fill(m_packageName, tobEtaPhi_GoodMFXdecoded_FW, tobEtaPhi_GoodMFYdecoded_FW);
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;
1228 fill(m_packageName, tobEtaPhi_BW23Xdecoded_FW, tobEtaPhi_BW23Ydecoded_FW);
1231 if(
slices[iSlice].tob[iTOB].candFlag_Charge) {
1232 tobEtaPhi_ChargeXdecoded_FW = etaDecoded;
1233 tobEtaPhi_ChargeYdecoded_FW = phiDecoded;
1234 fill(m_packageName, tobEtaPhi_ChargeXdecoded_FW, tobEtaPhi_ChargeYdecoded_FW);
1243 tobEtaPhiXdecoded_EC = etaDecoded;
1244 tobEtaPhiYdecoded_EC = phiDecoded;
1245 fill(m_packageName, tobEtaPhiXdecoded_EC, tobEtaPhiYdecoded_EC);
1247 tobPtVsEtaXdecoded_EC = etaDecoded;
1248 tobPtVsEtaYdecoded_EC =
pt;
1249 fill(m_packageName, tobPtVsEtaXdecoded_EC, tobPtVsEtaYdecoded_EC);
1251 tobPtVsPhiXdecoded_EC = phiDecoded;
1252 tobPtVsPhiYdecoded_EC =
pt;
1253 fill(m_packageName, tobPtVsPhiXdecoded_EC, tobPtVsPhiYdecoded_EC);
1255 if(
slices[iSlice].tob[iTOB].candFlag_GoodMF) {
1256 tobEtaPhi_GoodMFXdecoded_EC = etaDecoded;
1257 tobEtaPhi_GoodMFYdecoded_EC = phiDecoded;
1258 fill(m_packageName, tobEtaPhi_GoodMFXdecoded_EC, tobEtaPhi_GoodMFYdecoded_EC);
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;
1270 fill(m_packageName, tobEtaPhi_BW23Xdecoded_EC, tobEtaPhi_BW23Ydecoded_EC);
1273 if(
slices[iSlice].tob[iTOB].candFlag_Charge) {
1274 tobEtaPhi_ChargeXdecoded_EC = etaDecoded;
1275 tobEtaPhi_ChargeYdecoded_EC = phiDecoded;
1276 fill(m_packageName, tobEtaPhi_ChargeXdecoded_EC, tobEtaPhi_ChargeYdecoded_EC);
1284 bool found_match{
false};
1286 for(
uint j=0; j<
slices[iSlice].cand.size(); ++j)
1289 if(
slices[iSlice].cand[j].vetoFlag)
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;
1312 fill(m_packageName, errorSummaryMUCTPI);
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;
1332 fill(m_packageName, errorSummaryMUCTPI);
1333 errorSummaryPerLumiBlockMUCTPIY=4;
1334 errorSummaryPerLumiBlockMUCTPIX=currentLumiBlock;
1335 fill(m_packageName, errorSummaryPerLumiBlockMUCTPIX, errorSummaryPerLumiBlockMUCTPIY);
1344 errorSummaryMUCTPI = 2;
1345 fill(m_packageName,errorSummaryMUCTPI);
1346 errorSummaryPerLumiBlockMUCTPIY=2;
1347 errorSummaryPerLumiBlockMUCTPIX=currentLumiBlock;
1348 fill(m_packageName, errorSummaryPerLumiBlockMUCTPIX, errorSummaryPerLumiBlockMUCTPIY);
1353 errorSummaryMUCTPI = 3;
1354 fill(m_packageName,errorSummaryMUCTPI);
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;
1379 fill(m_packageName, statusDataWordMUCTPI);
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();
1472 auto eventInfo = GetEventInfo(ctx);
1479 nCandidatesX = numberCandidates;
1480 fill(m_packageName, nCandidatesX);
1482 for (
unsigned int i(0);
i < LVL1::MuCTPIBits::MULT_THRESH_NUM; ++
i ) {
1483 nCandidatesPtX =
i+1
u;
1485 fill(m_packageName, nCandidatesPtX, nCandidatesPtY);
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];
1530 fill(m_packageName, barrelNCandSectorIDX, barrelNCandSectorIDY);
1532 endcapNCandSectorIDX =
y;
1533 endcapNCandSectorIDY = ncand[1][
y];
1534 fill(m_packageName, endcapNCandSectorIDX, endcapNCandSectorIDY);
1536 forwardNCandSectorIDX =
y;
1537 forwardNCandSectorIDY = ncand[2][
y];
1538 fill(m_packageName, forwardNCandSectorIDX, forwardNCandSectorIDY);
1543 nCandidatesDataWordX = numberDataWords;
1544 fill(m_packageName, nCandidatesDataWordX);
1546 for (
int i = 0;
i < 6; ++
i) {
1547 nCandidatesDataWordPtX =
i+1;
1548 nCandidatesDataWordPtY = nCandsPerPtThreshold[
i];
1549 fill(m_packageName, nCandidatesDataWordPtX, nCandidatesDataWordPtY);
1552 if (m_inclusiveTriggerThresholds && (numberDataWords > 7)) numberDataWords = 7;
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 ) {
1569 fill(m_packageName, errorSummaryX, errorSummaryY);
1570 errorSummaryPerLumiBlockX = currentLumiBlock;
1571 errorSummaryPerLumiBlockY = 4;
1572 fill(m_packageName, errorSummaryPerLumiBlockX, errorSummaryPerLumiBlockY);
1573 errorPerLumiBlockX = currentLumiBlock;
1574 fill(m_packageName, errorPerLumiBlockX);
1579 fill(m_packageName, errorSummaryX, errorSummaryY);
1581 nCandidatesMictpMioctX = diffNCandidates;
1582 fill(m_packageName, nCandidatesMictpMioctX);
1597 std::vector<Int_t> MioctPtCount(LVL1::MuCTPIBits::MULT_THRESH_NUM, 0);
1598 std::vector<uint32_t>::const_iterator
it = vDataWords.begin();
1599 std::vector<uint32_t>::const_iterator
end = vDataWords.end();
1607 fill(m_packageName, barrelSectorIDAllX);
1610 fill(m_packageName, barrelRoiSectorIDAllX, barrelRoiSectorIDAllY);
1614 fill(m_packageName, barrelSectorIDAllX);
1617 fill(m_packageName, endcapRoiSectorIDAllX, endcapRoiSectorIDAllY);
1621 fill(m_packageName, forwardSectorIDAllX);
1624 fill(m_packageName, forwardRoiSectorIDAllX, forwardRoiSectorIDAllY);
1631 fill(m_packageName, ptX);
1632 if (0 < candPt && candPt <= LVL1::MuCTPIBits::MULT_THRESH_NUM) {
1633 if (m_inclusiveTriggerThresholds) {
1635 if (MioctPtCount[
i] < 7) {
1636 MioctPtCount[
i] += 1;
1639 if (MioctPtCount[candPt - 1] < 7) {
1640 MioctPtCount[candPt - 1] += 1;
1646 fill(m_packageName, barrelSectorIDX);
1649 fill(m_packageName, barrelRoiSectorIDX, barrelRoiSectorIDY);
1653 fill(m_packageName, endcapSectorIDX);
1656 fill(m_packageName, endcapRoiSectorIDX, endcapRoiSectorIDY);
1660 fill(m_packageName, forwardSectorIDX);
1663 fill(m_packageName, forwardRoiSectorIDX, forwardRoiSectorIDY);
1667 barrelPtX = dataWord.
getPt();
1668 fill(m_packageName, barrelPtX);
1671 endcapPtX = dataWord.
getPt();
1672 fill(m_packageName, endcapPtX);
1675 forwardPtX = dataWord.
getPt();
1676 fill(m_packageName, forwardPtX);
1683 bool anyMismatch =
false;
1684 for (
uint16_t i = 0;
i < LVL1::MuCTPIBits::MULT_THRESH_NUM; ++
i ) {
1689 <<
") not equal MIOCT multiplicity (" << MioctPtCount[
i] <<
")");
1692 fill(m_packageName, errorSummaryX, errorSummaryY);
1693 errorSummaryPerLumiBlockX = currentLumiBlock;
1694 errorSummaryPerLumiBlockY = 5;
1695 fill(m_packageName, errorSummaryPerLumiBlockX, errorSummaryPerLumiBlockY);
1696 errorPerLumiBlockX = currentLumiBlock;
1697 fill(m_packageName, errorPerLumiBlockX);
1700 if ( !anyMismatch ) {
1703 fill(m_packageName, errorSummaryX, errorSummaryY);
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;
1802 fill(m_packageName, muctpiNoRPCCandfoundX, muctpiNoRPCCandfoundY);
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;
1809 fill(m_packageName, muctpiNoTGCecCandfoundX, muctpiNoTGCecCandfoundY);
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;
1816 fill(m_packageName, muctpiNoTGCfwCandfoundX, muctpiNoTGCfwCandfoundY);
1817 miTGCmismatch=
true;
1821 ATH_MSG_WARNING(
"No Muctpi to RPC/TGC match found: MuCTPI key / MuCTPI BCID: " << it_mui->first <<
" / ");
1824 if (miRPCmismatch) {
1827 fill(m_packageName, errorSummaryX, errorSummaryY);
1828 errorSummaryPerLumiBlockX = currentLumiBlock;
1829 errorSummaryPerLumiBlockY = 17;
1830 fill(m_packageName, errorSummaryPerLumiBlockX, errorSummaryPerLumiBlockY);
1831 errorPerLumiBlockX = currentLumiBlock;
1832 fill(m_packageName, errorPerLumiBlockX);
1836 fill(m_packageName, errorSummaryX, errorSummaryY);
1838 if (miTGCmismatch) {
1841 fill(m_packageName, errorSummaryX, errorSummaryY);
1842 errorSummaryPerLumiBlockX = currentLumiBlock;
1843 errorSummaryPerLumiBlockY = 18;
1844 fill(m_packageName, errorSummaryPerLumiBlockX, errorSummaryPerLumiBlockY);
1845 errorPerLumiBlockX = currentLumiBlock;
1846 fill(m_packageName, errorPerLumiBlockX);
1850 fill(m_packageName, errorSummaryX, errorSummaryY);
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;
1869 fill(m_packageName, rpcNoMuCTPICandfoundX, rpcNoMuCTPICandfoundY);
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) {
1879 fill(m_packageName, errorSummaryX, errorSummaryY);
1880 errorSummaryPerLumiBlockX = currentLumiBlock;
1881 errorSummaryPerLumiBlockY = 19;
1882 fill(m_packageName, errorSummaryPerLumiBlockX, errorSummaryPerLumiBlockY);
1883 errorPerLumiBlockX = currentLumiBlock;
1884 fill(m_packageName, errorPerLumiBlockX);
1888 fill(m_packageName, errorSummaryX, errorSummaryY);
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;
1906 fill(m_packageName, tgcecNoMuCTPICandfoundX, tgcecNoMuCTPICandfoundY);
1907 }
else if (
det ==
"FW" ) {
1908 int fwRoIID = (it_tgc->second)->roi();
1909 tgcfwNoMuCTPICandfoundX = fwRoIID;
1910 tgcfwNoMuCTPICandfoundY = secID;
1911 fill(m_packageName, tgcfwNoMuCTPICandfoundX, tgcfwNoMuCTPICandfoundY);
1916 ATH_MSG_WARNING(
"No TGC to Muctpi match found: TGC key: " << it_tgc->first);
1917 tgcMImismatch =
true;
1920 if (tgcMImismatch) {
1923 fill(m_packageName, errorSummaryX, errorSummaryY);
1924 errorSummaryPerLumiBlockX = currentLumiBlock;
1925 errorSummaryPerLumiBlockY = 20;
1926 fill(m_packageName, errorSummaryPerLumiBlockX, errorSummaryPerLumiBlockY);
1927 errorPerLumiBlockX = currentLumiBlock;
1928 fill(m_packageName, errorPerLumiBlockX);
1932 fill(m_packageName, errorSummaryX, errorSummaryY);
1939 const EventContext& ctx)
const
1966 auto eventInfo = GetEventInfo(ctx);
1971 bool retrievedLumiBlockTimes =
false;
1975 if (lblbattrList==
nullptr) {
1976 ATH_MSG_WARNING(
"Failed to retrieve /TRIGGER/LUMI/LBLB " << m_LBLBFolderInputKey.key() <<
" not found");
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 ) {
1994 ATH_MSG_WARNING(
"/LHC/DCS/FILLSTATE " << m_FILLSTATEFolderInputKey.key() <<
" not found");
1998 for (itrcoll = fillstateattrListColl->begin(); itrcoll != fillstateattrListColl->end(); ++itrcoll) {
2000 currentBeamMode = *(
static_cast<const std::string *
>((atr[
"BeamMode"]).addressOfData()));
2007 int readyForPhysics = -1;
2011 if (datatakingmodeattrList==
nullptr) {
2012 ATH_MSG_WARNING(
"Failed to retrieve /TDAQ/RunCtrl/DataTakingMode with key " << m_DataTakingModeFolderInputKey.key());
2015 auto readyForPhysics_loc = (*datatakingmodeattrList)[
"ReadyForPhysics"].data<
uint32_t>();
2016 readyForPhysics = readyForPhysics_loc;
2025 ctp.setRDO(theCTP_RDO);
2030 triggerTypeX = ttype;
2031 fill(m_packageName, triggerTypeX);
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 )
2052 fill(m_packageName, errorSummaryX, errorSummaryY);
2053 errorSummaryPerLumiBlockX = currentLumiBlock;
2054 errorSummaryPerLumiBlockY = 9;
2055 fill(m_packageName, errorSummaryPerLumiBlockX, errorSummaryPerLumiBlockY);
2056 errorPerLumiBlockX = currentLumiBlock;
2057 fill(m_packageName, errorPerLumiBlockX);
2062 fill(m_packageName, errorSummaryX, errorSummaryY);
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 <<
")");
2072 fill(m_packageName, errorSummaryX, errorSummaryY);
2073 errorSummaryPerLumiBlockX = currentLumiBlock;
2074 errorSummaryPerLumiBlockY = 10;
2075 fill(m_packageName, errorSummaryPerLumiBlockX, errorSummaryPerLumiBlockY);
2076 errorPerLumiBlockX = currentLumiBlock;
2077 fill(m_packageName, errorPerLumiBlockX);
2082 fill(m_packageName, errorSummaryX, errorSummaryY);
2083 timeSinceLBStartX = (eventTime-lb_stime)/1e06;
2084 fill(m_packageName, timeSinceLBStartX);
2085 timeUntilLBEndX = (lb_etime-eventTime)/1e06;
2086 fill(m_packageName, timeUntilLBEndX);
2092 double bcDurationInNs = m_defaultBcIntervalInNs;
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 ;
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;
2129 int64_t eventTimeInBc_TC =
static_cast<int64_t
>(theCTP_RDO->
getTurnCounter())*m_bcsPerTurn+theCTP_RIO->
getBCID();
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?");
2147 fill(m_packageName, errorSummaryX, errorSummaryY);
2148 errorSummaryPerLumiBlockX = currentLumiBlock;
2149 errorSummaryPerLumiBlockY = 16;
2150 fill(m_packageName, errorSummaryPerLumiBlockX, errorSummaryPerLumiBlockY);
2151 errorPerLumiBlockX = currentLumiBlock;
2152 fill(m_packageName, errorPerLumiBlockX);
2157 fill(m_packageName, errorSummaryX, errorSummaryY);
2159 turnCounterTimeErrorX = tDiffInNs/1e03;
2160 fill(m_packageName, turnCounterTimeErrorX);
2161 turnCounterTimeErrorVsLbX = currentLumiBlock;
2162 turnCounterTimeErrorVsLbY = tDiffInNs/1e03;
2163 fill(m_packageName, turnCounterTimeErrorVsLbX, turnCounterTimeErrorVsLbY);
2166 ATH_MSG_DEBUG(
"Turn counter = 0 for both first processed and current event, not filling TC histograms");
2171 uint32_t currentLumiBlock = eventInfo->lumiBlock();
2176 fill(m_packageName, errorSummaryX, errorSummaryY);
2177 errorSummaryPerLumiBlockX = currentLumiBlock;
2178 errorSummaryPerLumiBlockY = 11;
2179 fill(m_packageName, errorSummaryPerLumiBlockX, errorSummaryPerLumiBlockY);
2180 errorPerLumiBlockX = currentLumiBlock;
2181 fill(m_packageName, errorPerLumiBlockX);
2185 fill(m_packageName, errorSummaryX, errorSummaryY);
2190 fill(m_packageName, timeSinceL1AX);
2195 const std::vector<CTP_BC> &BCs =
ctp.getBunchCrossings();
2196 const CTP_BC & bunch = BCs[storeBunch];
2199 double bcid_offset = (
static_cast < int >((
bcid)&0xf) -
static_cast < int >(headerBcid));
2200 deltaBcidX = bcid_offset;
2201 fill(m_packageName, deltaBcidX);
2202 if (bcid_offset != 0) {
2204 ATH_MSG_WARNING(
"Found BCID offset of "<< bcid_offset <<
" between ROD Header ("
2205 << headerBcid <<
") and data (" << (
bcid&0xf) <<
")");
2208 fill(m_packageName, errorSummaryX, errorSummaryY);
2209 errorSummaryPerLumiBlockX = currentLumiBlock;
2210 errorSummaryPerLumiBlockY = 1;
2211 fill(m_packageName, errorSummaryPerLumiBlockX, errorSummaryPerLumiBlockY);
2212 errorPerLumiBlockX = currentLumiBlock;
2213 fill(m_packageName, errorPerLumiBlockX);
2219 fill(m_packageName, errorSummaryX, errorSummaryY);
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 ) {
2244 if ( (!bunchIndex) && (m_compareRerun) ) {
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;
2257 fill(m_packageName, pitBCX, pitBCY);
2258 if (TIPfirst.test(tipNum)) {
2259 TIPfirst.set(tipNum,0);
2260 pitFirstBCX = tipNum;
2261 pitFirstBCY = bunchIndex;
2262 fill(m_packageName, pitFirstBCX, pitFirstBCY);
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)) {
2300 fill(m_packageName, tavX);
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++ ) {
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++ ) {
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) {
2338 fill(m_packageName, errorSummaryX, errorSummaryY);
2339 errorSummaryPerLumiBlockX = currentLumiBlock;
2340 errorSummaryPerLumiBlockY = 12;
2341 fill(m_packageName, errorSummaryPerLumiBlockX, errorSummaryPerLumiBlockY);
2342 errorPerLumiBlockX = currentLumiBlock;
2343 fill(m_packageName, errorPerLumiBlockX);
2348 fill(m_packageName, errorSummaryX, errorSummaryY);
2350 if (allTAVFine==
false) {
2353 fill(m_packageName, errorSummaryX, errorSummaryY);
2354 errorSummaryPerLumiBlockX = currentLumiBlock;
2355 errorSummaryPerLumiBlockY = 13;
2356 fill(m_packageName, errorSummaryPerLumiBlockX, errorSummaryPerLumiBlockY);
2357 errorPerLumiBlockX = currentLumiBlock;
2358 fill(m_packageName, errorPerLumiBlockX);
2363 fill(m_packageName, errorSummaryX, errorSummaryY);
2374 fill(m_packageName, errorSummaryX, errorSummaryY);
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);
2391 fill(m_packageName, errorSummaryX, errorSummaryY);
2392 errorSummaryPerLumiBlockX = currentLumiBlock;
2393 errorSummaryPerLumiBlockY = 2;
2394 fill(m_packageName, errorSummaryPerLumiBlockX, errorSummaryPerLumiBlockY);
2395 errorPerLumiBlockX = currentLumiBlock;
2396 fill(m_packageName, errorPerLumiBlockX);
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)){
2421 fill(m_packageName, ctpStatus1X);
2423 else if (Status == 2) {
2425 fill(m_packageName, ctpStatus2X);
2440 const EventContext& ctx)
const
2454 auto eventInfo = GetEventInfo(ctx);
2499 ctp.setRDO(theCTP_RDO);
2503 const std::vector<CTP_BC> &BCs =
ctp.getBunchCrossings();
2504 const CTP_BC & bunch = BCs[storeBunch];
2506 bcidDifferenceX =
static_cast < int >(mictp_bcid) -
2507 static_cast < int >(bunch.
getBCID() & 7);
2508 fill(m_packageName, bcidDifferenceX);
2518 const EventContext& ctx)
const
2552 auto eventInfo = GetEventInfo(ctx);
2589 for (
unsigned int j = 0; j < roiVec.size(); j++ ) {
2629 if (theMuCTPI_RDO) {
2631 const std::vector<uint32_t> &vDataWords = theMuCTPI_RDO->
dataWord();
2632 for ( std::vector<uint32_t>::const_iterator
it = vDataWords.begin();
it != vDataWords.end(); ++
it ) {
2653 fill(m_packageName, nCandidates_secLocX);
2658 barrelSectorIDRoiX = secID1+32*hemisphere;
2659 barrelSectorIDRoiY = roInum;
2660 fill(m_packageName, barrelSectorIDRoiX, barrelSectorIDRoiY);
2661 barrelSectorIDRoiEtaX = secID1+32*hemisphere;
2662 fill(m_packageName, barrelSectorIDRoiEtaX);
2663 barrelSectorIDRoiPhiX = secID1+32*hemisphere;
2664 fill(m_packageName, barrelSectorIDRoiPhiX);
2667 endcapSectorIDRoiX = secID+48*hemisphere;
2668 endcapSectorIDRoiY = roInum;
2669 fill(m_packageName, endcapSectorIDRoiX, endcapSectorIDRoiY);
2670 endcapSectorIDRoiEtaX = secID+48*hemisphere;
2671 fill(m_packageName, endcapSectorIDRoiEtaX);
2672 endcapSectorIDRoiPhiX = secID+48*hemisphere;
2673 fill(m_packageName, endcapSectorIDRoiPhiX);
2676 forwardSectorIDRoiX = secID+24*hemisphere;
2677 forwardSectorIDRoiY = roInum;
2678 fill(m_packageName, forwardSectorIDRoiX, forwardSectorIDRoiY);
2679 forwardSectorIDRoiEtaX = secID+24*hemisphere;
2680 fill(m_packageName, forwardSectorIDRoiEtaX);
2681 forwardSectorIDRoiPhiX = secID+24*hemisphere;
2682 fill(m_packageName, forwardSectorIDRoiPhiX);
2731 const EventContext& ctx)
const
2733 bool itemMismatch{
false};
2747 auto eventInfo = GetEventInfo(ctx);
2749 const CTP_RDO* theCTP_RDO_Rerun =
nullptr;
2750 ATH_MSG_DEBUG(
"Retrieving CTP_RDO from SG with key CTP_RDO_Rerun");
2752 CHECK( (theCTP_RDO_Rerun =
SG::get(m_CTP_RDO_RerunKey, ctx)) !=
nullptr );
2768 ctp_rerun.
setRDO(theCTP_RDO_Rerun);
2771 if (ctp_bc_rerun.size() != 1) {
2772 ATH_MSG_ERROR(
"Rerun simulation has non unity number of bunch crossings ");
2773 return StatusCode::FAILURE;
2779 ATH_MSG_DEBUG(
"In compareRerun: dumping rerun data for BC 0");
2780 ctp_bc_rerun.at(0).dumpData(
msg());
2782 ATH_MSG_DEBUG(
"Comparing TBP from CTP_RDO objects with keys CTP_RDO (from data) and CTP_RDO_Rerun (from simulation)");
2784 const std::bitset<512> currentTBP(bunchCrossing.
getTBP());
2785 const std::bitset<512> currentTBP_rerun(ctp_bc_rerun.at(0).getTBP());
2787 if ( currentTBP != currentTBP_rerun ) {
2793 bool skip =
item.definition().find(
"RNDM") != std::string::npos;
2794 for(
const std::string &
p : m_ignorePatterns) {
2795 if(
item.name().find(
p) != std::string::npos) {
2800 if(
skip )
continue;
2802 bool tbp = currentTBP.test(
item.ctpId() );
2803 bool tbp_rerun = currentTBP_rerun.test(
item.ctpId() );
2804 if ( tbp != tbp_rerun) {
2806 <<
"' (CTP ID " <<
item.ctpId() <<
"): data="
2807 << (tbp?
"pass":
"fail") <<
" != simulation=" << (tbp_rerun?
"pass":
"fail"));
2809 l1ItemsBPSimMismatchX =
item.ctpId();
2810 l1ItemsBPSimMismatchY = 1;
2811 fill(m_packageName, l1ItemsBPSimMismatchX, l1ItemsBPSimMismatchY);
2812 l1ItemsBPSimMismatchItemsX = (
item.name()).c_str();
2813 l1ItemsBPSimMismatchItemsY = 1;
2814 fill(m_packageName, l1ItemsBPSimMismatchItemsX, l1ItemsBPSimMismatchItemsY);
2818 uint32_t currentLumiBlock = eventInfo->lumiBlock();
2823 fill(m_packageName, errorSummaryX, errorSummaryY);
2824 errorSummaryPerLumiBlockX = currentLumiBlock;
2825 errorSummaryPerLumiBlockY = 14;
2826 fill(m_packageName, errorSummaryPerLumiBlockX, errorSummaryPerLumiBlockY);
2827 errorPerLumiBlockX = currentLumiBlock;
2828 fill(m_packageName, errorPerLumiBlockX);
2832 fill(m_packageName, errorSummaryX, errorSummaryY);
2834 return StatusCode::SUCCESS;
2843 const EventContext& ctx)
const
2846 auto eventInfo = GetEventInfo(ctx);
2850 ATH_MSG_DEBUG(
"Run number: " << eventInfo->runNumber() <<
", Event: " << eventInfo->eventNumber() <<
", LB: " << eventInfo->lumiBlock() );
2851 if ( m_processMuctpi ) {
2854 candidateMultiplicity(),
2855 m_inclusiveTriggerThresholds);
2861 std::vector<uint32_t>::const_iterator
it = theMuCTPI_RDO->
dataWord().begin();
2872 if ( m_processCTP ) {
2875 ctp.setRDO(theCTP_RDO);