diff --git a/Event/LumiEvent/include/Event/LumiCounters.h b/Event/LumiEvent/include/Event/LumiCounters.h index 716f2b90347df2049344f2929b8dccc2b64c0001..bf64398b89ba4a32cc431ee08b506bc9afb7da97 100644 --- a/Event/LumiEvent/include/Event/LumiCounters.h +++ b/Event/LumiEvent/include/Event/LumiCounters.h @@ -33,42 +33,29 @@ namespace LHCb { public: /// lookup table for counter keys enum counterKey { - PUMult = 0, // number of PU hits - RZVelo = 1, // number of Velo tracks - RZVeloBW = 2, // number of backward RZVelo tracks - Velo = 3, // number of Velo tracks pointing to IR - Muon = 4, // number of muon tracks - BKMuon = 5, // number of muon tracks NOT pointing to PV - SPDMult = 6, // number of SPD hits - CaloEt = 7, // Calo Et - TTIP = 8, // number of TT tracks from the IP - TTMIB = 9, // number of TT tracks parallel with beam - PV2D = 10, // number of 2D vertices - PV3D = 11, // number of 3D vertices - PU = 13, // number of PU vertices - Vertex = 14, // number of vertices accepted in IR - GEC = 15, // whether the GEC has passed - SciFiClusters = 16, // number of SciFi clusters - Method = 20, // method: 0 or missing is random method - Random = 21, // random method: 0 or missing is L0 method - PoissonPUMult = 50, // number of times PU hits over threshold - PoissonRZVelo = 51, // number of times Velo tracks over threshold - PoissonRZVeloBW = 52, // number of times backward RZVelo tracks over threshold - PoissonVelo = 53, // number of times Velo tracks pointing to IR over threshold - PoissonMuon = 54, // number of times muon tracks over threshold - PoissonBKMuon = 55, // number of times muon tracks NOT pointing to PV over threshold - PoissonSPDMult = 56, // number of times SPD hits over threshold - PoissonCaloEt = 57, // number of times Calo Et over threshold - PoissonTTIP = 58, // number of timesTT tracks from the IP over threshold - PoissonTTMIB = 59, // number of timesTT tracks parallel with beam over threshold - PoissonPV2D = 60, // number of times2D vertices over threshold - PoissonPV3D = 61, // number of times 3D vertices over threshold - PoissonPU = 63, // number of times PU vertices over threshold - PoissonVertex = 64, // number of times vertices in IR range over threshold - PoissonMethod = 70, // method: 0 or missing is random method - PoissonRandom = 71, // random method: 0 or missing is L0 method - Unknown = 98, // unknown value - LastGlobal = 99 // User variables should use flags greater than this value + OdinT0Low = 0, + OdinT0High = 1, + OdinBcidLow = 2, + OdinBcidHigh = 3, + OdinBxType = 4, + GEC = 5, + // VELO + VeloTracks = 11, + VeloVertices = 12, + // SciFi + SciFiClusters = 21, + // CALO + // Muon + MuonM2R2 = 41, + MuonM2R3 = 42, + MuonM3R2 = 43, + MuonM3R3 = 44, + + Method = 90, + Random = 91, + + Unknown = 98, // unknown value + LastGlobal = 99 // User variables should use flags greater than this value }; LumiCounters() = delete; // class contains no data, so no use to instantiate it... @@ -86,74 +73,36 @@ namespace LHCb { inline std::ostream& operator<<( std::ostream& s, LHCb::LumiCounters::counterKey e ) { switch ( e ) { - case LHCb::LumiCounters::PUMult: - return s << "PUMult"; - case LHCb::LumiCounters::RZVelo: - return s << "RZVelo"; - case LHCb::LumiCounters::RZVeloBW: - return s << "RZVeloBW"; - case LHCb::LumiCounters::Velo: - return s << "Velo"; - case LHCb::LumiCounters::Muon: - return s << "Muon"; - case LHCb::LumiCounters::BKMuon: - return s << "BKMuon"; - case LHCb::LumiCounters::SPDMult: - return s << "SPDMult"; - case LHCb::LumiCounters::CaloEt: - return s << "CaloEt"; - case LHCb::LumiCounters::TTIP: - return s << "TTIP"; - case LHCb::LumiCounters::TTMIB: - return s << "TTMIB"; - case LHCb::LumiCounters::PV2D: - return s << "PV2D"; - case LHCb::LumiCounters::PV3D: - return s << "PV3D"; - case LHCb::LumiCounters::PU: - return s << "PU"; - case LHCb::LumiCounters::Vertex: - return s << "Vertex"; + case LHCb::LumiCounters::OdinT0Low: + return s << "T0Low"; + case LHCb::LumiCounters::OdinT0High: + return s << "T0High"; + case LHCb::LumiCounters::OdinBcidLow: + return s << "BCIDLow"; + case LHCb::LumiCounters::OdinBcidHigh: + return s << "BCIDHigh"; + case LHCb::LumiCounters::OdinBxType: + return s << "BXType"; case LHCb::LumiCounters::GEC: return s << "GEC"; + case LHCb::LumiCounters::VeloTracks: + return s << "Velo"; + case LHCb::LumiCounters::VeloVertices: + return s << "Vertex"; case LHCb::LumiCounters::SciFiClusters: return s << "SciFiClusters"; + case LHCb::LumiCounters::MuonM2R2: + return s << "M2R2"; + case LHCb::LumiCounters::MuonM2R3: + return s << "M2R3"; + case LHCb::LumiCounters::MuonM3R2: + return s << "M3R2"; + case LHCb::LumiCounters::MuonM3R3: + return s << "M3R3"; case LHCb::LumiCounters::Method: return s << "Method"; case LHCb::LumiCounters::Random: return s << "Random"; - case LHCb::LumiCounters::PoissonPUMult: - return s << "PoissonPUMult"; - case LHCb::LumiCounters::PoissonRZVelo: - return s << "PoissonRZVelo"; - case LHCb::LumiCounters::PoissonRZVeloBW: - return s << "PoissonRZVeloBW"; - case LHCb::LumiCounters::PoissonVelo: - return s << "PoissonVelo"; - case LHCb::LumiCounters::PoissonMuon: - return s << "PoissonMuon"; - case LHCb::LumiCounters::PoissonBKMuon: - return s << "PoissonBKMuon"; - case LHCb::LumiCounters::PoissonSPDMult: - return s << "PoissonSPDMult"; - case LHCb::LumiCounters::PoissonCaloEt: - return s << "PoissonCaloEt"; - case LHCb::LumiCounters::PoissonTTIP: - return s << "PoissonTTIP"; - case LHCb::LumiCounters::PoissonTTMIB: - return s << "PoissonTTMIB"; - case LHCb::LumiCounters::PoissonPV2D: - return s << "PoissonPV2D"; - case LHCb::LumiCounters::PoissonPV3D: - return s << "PoissonPV3D"; - case LHCb::LumiCounters::PoissonPU: - return s << "PoissonPU"; - case LHCb::LumiCounters::PoissonVertex: - return s << "PoissonVertex"; - case LHCb::LumiCounters::PoissonMethod: - return s << "PoissonMethod"; - case LHCb::LumiCounters::PoissonRandom: - return s << "PoissonRandom"; case LHCb::LumiCounters::Unknown: return s << "Unknown"; case LHCb::LumiCounters::LastGlobal: @@ -173,42 +122,13 @@ namespace LHCb { inline const GaudiUtils::VectorMap<std::string, LHCb::LumiCounters::counterKey>& LHCb::LumiCounters::s_counterKeyTypMap() { - static const GaudiUtils::VectorMap<std::string, counterKey> m = {{"PUMult", PUMult}, - {"RZVelo", RZVelo}, - {"RZVeloBW", RZVeloBW}, - {"Velo", Velo}, - {"Muon", Muon}, - {"BKMuon", BKMuon}, - {"SPDMult", SPDMult}, - {"CaloEt", CaloEt}, - {"TTIP", TTIP}, - {"TTMIB", TTMIB}, - {"PV2D", PV2D}, - {"PV3D", PV3D}, - {"PU", PU}, - {"Vertex", Vertex}, - {"GEC", GEC}, - {"SciFiClusters", SciFiClusters}, - {"Method", Method}, - {"Random", Random}, - {"PoissonPUMult", PoissonPUMult}, - {"PoissonRZVelo", PoissonRZVelo}, - {"PoissonRZVeloBW", PoissonRZVeloBW}, - {"PoissonVelo", PoissonVelo}, - {"PoissonMuon", PoissonMuon}, - {"PoissonBKMuon", PoissonBKMuon}, - {"PoissonSPDMult", PoissonSPDMult}, - {"PoissonCaloEt", PoissonCaloEt}, - {"PoissonTTIP", PoissonTTIP}, - {"PoissonTTMIB", PoissonTTMIB}, - {"PoissonPV2D", PoissonPV2D}, - {"PoissonPV3D", PoissonPV3D}, - {"PoissonPU", PoissonPU}, - {"PoissonVertex", PoissonVertex}, - {"PoissonMethod", PoissonMethod}, - {"PoissonRandom", PoissonRandom}, - {"Unknown", Unknown}, - {"LastGlobal", LastGlobal}}; + static const GaudiUtils::VectorMap<std::string, counterKey> m = { + {"T0Low", OdinT0Low}, {"T0High", OdinT0High}, {"BCIDLow", OdinBcidLow}, + {"BCIDHigh", OdinBcidHigh}, {"BXType", OdinBxType}, {"GEC", GEC}, + {"Velo", VeloTracks}, {"Vertex", VeloVertices}, {"SciFiClusters", SciFiClusters}, + {"M2R2", MuonM2R2}, {"M2R3", MuonM2R3}, {"M3R2", MuonM3R2}, + {"M3R3", MuonM3R3}, {"Method", Method}, {"Random", Random}, + {"Unknown", Unknown}, {"LastGlobal", LastGlobal}}; return m; } diff --git a/Event/LumiEvent/include/Event/LumiSummaryOffsets_V1.h b/Event/LumiEvent/include/Event/LumiSummaryOffsets_V1.h index 467f60eaa97bd9f25b7f8a97db5c57df53a427a3..2460df4132249a04653fffed03309584aa924cad 100644 --- a/Event/LumiEvent/include/Event/LumiSummaryOffsets_V1.h +++ b/Event/LumiEvent/include/Event/LumiSummaryOffsets_V1.h @@ -20,16 +20,29 @@ namespace LHCb { // by dividing the largest offset by 8*sizeof(unsigned), i.e. 32, and rounding up. // Fields must be contained within a single element of the array, e.g. an // offset of 24 would allow for a maximum size of 8. + /// ODIN info + ODINStart = 0, + t0LowSize = 32, + t0LowOffset = ODINStart + 0, // event time offset low 32 bits + t0HighSize = 32, + t0HighOffset = ODINStart + t0LowSize, // event time offset high 32 bits + bcidLowSize = 32, + bcidLowOffset = ODINStart + t0LowSize + t0HighSize, // re-mapped bcid low 32 bits + bcidHighSize = 14, + bcidHighOffset = ODINStart + t0LowSize + t0HighSize + bcidLowSize, // re-mapped bcid high 14 bits + bxTypeSize = 2, + bxTypeOffset = ODINStart + t0LowSize + t0HighSize + bcidLowSize + bcidHighSize, // bunch crossing type + ODINEnd = ODINStart + t0LowSize + t0HighSize + bcidLowSize + bcidHighSize + bxTypeSize, /// Global Event Cut - GecStart = 0, + GecStart = ODINEnd, GecSize = 1, GecOffset = GecStart, GecEnd = GecStart + GecSize, /// Velo counters VeloCountersStart = GecEnd, - VeloTracksSize = 12, + VeloTracksSize = 15, VeloTracksOffset = VeloCountersStart + 0, // number of Velo tracks - VeloVerticesSize = 5, + VeloVerticesSize = 6, VeloVerticesOffset = VeloCountersStart + VeloTracksSize, // number of Velo vertices VeloCountersEnd = VeloCountersStart + VeloTracksSize + VeloVerticesSize, /// RICH counters @@ -37,16 +50,26 @@ namespace LHCb { RichCountersEnd = RichCountersStart + 0, /// SciFi counters SciFiCountersStart = RichCountersEnd, - SciFiClustersSize = 14, // end of word 0 + SciFiClustersSize = 15, SciFiClustersOffset = SciFiCountersStart + 0, // number of SciFi Clusters SciFiCountersEnd = SciFiCountersStart + SciFiClustersSize, /// CALO counters CaloCountersStart = SciFiCountersEnd, CaloCountersEnd = CaloCountersStart + 0, - /// - TotalSize = - ( ( CaloCountersEnd - 1 ) / 32 + 1 ) * 32 // the largest offset rounded up to the next multiple of 32 - }; - } // namespace V1 - } // namespace LumiSummaryOffsets + /// Muon counters + MuonCountersStart = CaloCountersEnd, + M2R2Size = 11, + M2R2Offset = MuonCountersStart, // M2R2 hits + M2R3Size = 11, + M2R3Offset = MuonCountersStart + M2R2Size, // M2R3 hits + M3R2Size = 11, + M3R2Offset = MuonCountersStart + M2R2Size + M2R3Size, // M3R2 hits + M3R3Size = 10, + M3R3Offset = MuonCountersStart + M2R2Size + M2R3Size + M3R2Size, // M3R3 hits + MuonCountersEnd = MuonCountersStart + M2R2Size + M2R3Size + M3R2Size + M3R3Size, + /// the largest offset rounded up to the next multiple of 32 + TotalSize = ( ( MuonCountersEnd - 1 ) / 32 + 1 ) * 32 + }; // enum CounterOffsets + } // namespace V1 + } // namespace LumiSummaryOffsets } // namespace LHCb diff --git a/Event/LumiEvent/src/HltLumiSummaryDecoder.cpp b/Event/LumiEvent/src/HltLumiSummaryDecoder.cpp index 18332178710d05ae7b5ba931d1b51c9bef9aa91a..55c869dc20b03e2c9b75bb04516de7adbec7a440 100644 --- a/Event/LumiEvent/src/HltLumiSummaryDecoder.cpp +++ b/Event/LumiEvent/src/HltLumiSummaryDecoder.cpp @@ -64,26 +64,7 @@ namespace LHCb { for ( const auto& ibank : event.banks( RawBank::HltLumiSummary ) ) { if ( ibank->version() == 0 ) { // legacy Run 1+2 LumiSummary structure - // get the raw data - for ( const unsigned w : ibank->range<unsigned int>() ) { - // decode the info - int iKey = ( w >> 16 ); - int iVal = ( w & 0xFFFF ); - if ( msgLevel( MSG::VERBOSE ) ) { - verbose() << format( " %8x %11d %11d %11d ", w, w, iKey, iVal ) << endmsg; - } - // add this counter - hltLumiSummary.addInfo( iKey, iVal ); - } - - // keep statistics - int totDataSize = ibank->size() / sizeof( unsigned int ); - size_buffer += totDataSize; - - if ( msgLevel( MSG::DEBUG ) ) { - debug() << "Bank size: " << format( "%4d ", ibank->size() ) << "Total Data bank size " << totDataSize - << endmsg; - } + warning() << "Unsupported HltLumiSummary version: " << format( "%4d", ibank->version() ) << endmsg; } else if ( ibank->version() == 1 ) { // initial Run 3 version // TODO version not currently finalised @@ -92,18 +73,45 @@ namespace LHCb { << format( "%4d", LHCb::LumiSummaryOffsets::V1::TotalSize ) << ", found " << format( "%4d", ibank->size() ) << endmsg; } else { + hltLumiSummary.addInfo( LHCb::LumiCounters::OdinT0Low, + getField( LHCb::LumiSummaryOffsets::V1::t0LowOffset, + LHCb::LumiSummaryOffsets::V1::t0LowSize, ibank->data() ) ); + hltLumiSummary.addInfo( LHCb::LumiCounters::OdinT0High, + getField( LHCb::LumiSummaryOffsets::V1::t0HighOffset, + LHCb::LumiSummaryOffsets::V1::t0HighSize, ibank->data() ) ); + hltLumiSummary.addInfo( LHCb::LumiCounters::OdinBcidLow, + getField( LHCb::LumiSummaryOffsets::V1::bcidLowOffset, + LHCb::LumiSummaryOffsets::V1::bcidLowSize, ibank->data() ) ); + hltLumiSummary.addInfo( LHCb::LumiCounters::OdinBcidHigh, + getField( LHCb::LumiSummaryOffsets::V1::bcidHighOffset, + LHCb::LumiSummaryOffsets::V1::bcidHighSize, ibank->data() ) ); + hltLumiSummary.addInfo( LHCb::LumiCounters::OdinBxType, + getField( LHCb::LumiSummaryOffsets::V1::bxTypeOffset, + LHCb::LumiSummaryOffsets::V1::bxTypeSize, ibank->data() ) ); hltLumiSummary.addInfo( LHCb::LumiCounters::GEC, getField( LHCb::LumiSummaryOffsets::V1::GecOffset, LHCb::LumiSummaryOffsets::V1::GecSize, ibank->data() ) ); - hltLumiSummary.addInfo( LHCb::LumiCounters::Velo, + hltLumiSummary.addInfo( LHCb::LumiCounters::VeloTracks, getField( LHCb::LumiSummaryOffsets::V1::VeloTracksOffset, LHCb::LumiSummaryOffsets::V1::VeloTracksSize, ibank->data() ) ); - hltLumiSummary.addInfo( LHCb::LumiCounters::Vertex, + hltLumiSummary.addInfo( LHCb::LumiCounters::VeloVertices, getField( LHCb::LumiSummaryOffsets::V1::VeloVerticesOffset, LHCb::LumiSummaryOffsets::V1::VeloVerticesSize, ibank->data() ) ); hltLumiSummary.addInfo( LHCb::LumiCounters::SciFiClusters, getField( LHCb::LumiSummaryOffsets::V1::SciFiClustersOffset, LHCb::LumiSummaryOffsets::V1::SciFiClustersSize, ibank->data() ) ); + hltLumiSummary.addInfo( LHCb::LumiCounters::MuonM2R2, + getField( LHCb::LumiSummaryOffsets::V1::M2R2Offset, + LHCb::LumiSummaryOffsets::V1::M2R2Size, ibank->data() ) ); + hltLumiSummary.addInfo( LHCb::LumiCounters::MuonM2R3, + getField( LHCb::LumiSummaryOffsets::V1::M2R3Offset, + LHCb::LumiSummaryOffsets::V1::M2R3Size, ibank->data() ) ); + hltLumiSummary.addInfo( LHCb::LumiCounters::MuonM3R2, + getField( LHCb::LumiSummaryOffsets::V1::M3R2Offset, + LHCb::LumiSummaryOffsets::V1::M3R2Size, ibank->data() ) ); + hltLumiSummary.addInfo( LHCb::LumiCounters::MuonM3R3, + getField( LHCb::LumiSummaryOffsets::V1::M3R3Offset, + LHCb::LumiSummaryOffsets::V1::M3R3Size, ibank->data() ) ); } } else { warning() << "Unknown HltLumiSummary version: " << format( "%4d", ibank->version() ) << endmsg;