diff --git a/TileCalorimeter/TileMonitoring/python/TileJetMonitorAlgorithm.py b/TileCalorimeter/TileMonitoring/python/TileJetMonitorAlgorithm.py index 9419d22d5d1b1b369e69ebf953674d5ca0cdea4d..0c38396defde9b7a9b2712d0de51c36bee16dfd0 100644 --- a/TileCalorimeter/TileMonitoring/python/TileJetMonitorAlgorithm.py +++ b/TileCalorimeter/TileMonitoring/python/TileJetMonitorAlgorithm.py @@ -248,6 +248,8 @@ if __name__=='__main__': from AthenaConfiguration.TestDefaults import defaultTestFiles ConfigFlags.Input.Files = defaultTestFiles.ESD ConfigFlags.Output.HISTFileName = 'TileJetMonitorOutput.root' + ConfigFlags.DQ.useTrigger = False + ConfigFlags.DQ.enableLumiAccess = False ConfigFlags.lock() # Initialize configuration object, add accumulator, merge, and run. diff --git a/TileCalorimeter/TileMonitoring/python/TileMBTSMonitorAlgorithm.py b/TileCalorimeter/TileMonitoring/python/TileMBTSMonitorAlgorithm.py index 8d1ae560a0ec6a4206824404c664e8edfc1027fb..8cfede71883d36d6ba7caff973dc73774ee14a74 100644 --- a/TileCalorimeter/TileMonitoring/python/TileMBTSMonitorAlgorithm.py +++ b/TileCalorimeter/TileMonitoring/python/TileMBTSMonitorAlgorithm.py @@ -52,7 +52,7 @@ def TileMBTSMonitoringConfig(flags, **kwargs): executeTimeGroup = helper.addGroup(tileMBTSMonAlg, 'TileMBTSMonExecuteTime', 'Tile/') executeTimeGroup.defineHistogram('TIME_execute', path = 'MBTS', type='TH1F', title = 'Time for execute TileMBTSMonAlg algorithm;time [#mus]', - xbins = 100, xmin = 0, xmax = 100000) + xbins = 100, xmin = 0, xmax = 1000) run = str(flags.Input.RunNumber[0]) @@ -216,6 +216,8 @@ if __name__=='__main__': from AthenaConfiguration.TestDefaults import defaultTestFiles ConfigFlags.Input.Files = defaultTestFiles.ESD ConfigFlags.Output.HISTFileName = 'TileMBTSMonitorOutput.root' + ConfigFlags.DQ.useTrigger = False + ConfigFlags.DQ.enableLumiAccess = False ConfigFlags.lock() # Initialize configuration object, add accumulator, merge, and run. @@ -224,7 +226,9 @@ if __name__=='__main__': cfg = MainServicesSerialCfg() cfg.merge(PoolReadCfg(ConfigFlags)) - cfg.merge( TileMBTSMonitoringConfig(ConfigFlags, TileDigitsContainer = 'TileDigitsFlt') ) + cfg.merge( TileMBTSMonitoringConfig(ConfigFlags, + FillHistogramsPerMBTS = True, + TileDigitsContainer = 'TileDigitsFlt') ) cfg.printConfig(withDetails = True, summariseProps = True) ConfigFlags.dump() diff --git a/TileCalorimeter/TileMonitoring/src/TileMBTSMonitorAlgorithm.cxx b/TileCalorimeter/TileMonitoring/src/TileMBTSMonitorAlgorithm.cxx index 2099c12e685e0fdcf866ce422b988b964908719a..8a48c971a13a942e8e076690c50b40b5f24122de 100644 --- a/TileCalorimeter/TileMonitoring/src/TileMBTSMonitorAlgorithm.cxx +++ b/TileCalorimeter/TileMonitoring/src/TileMBTSMonitorAlgorithm.cxx @@ -34,7 +34,7 @@ StatusCode TileMBTSMonitorAlgorithm::initialize() { ATH_CHECK( detStore()->retrieve(m_tileHWID) ); ATH_CHECK( m_DQstatusKey.initialize() ); - ATH_CHECK( m_digitsContainerKey.initialize() ); + ATH_CHECK( m_digitsContainerKey.initialize(m_fillHistogramsPerMBTS) ); ATH_CHECK( m_mbtsCellContainerKey.initialize() ); memset(m_MBTSchannels, -1, sizeof(m_MBTSchannels)); @@ -56,16 +56,17 @@ StatusCode TileMBTSMonitorAlgorithm::initialize() { } } + if (m_fillHistogramsPerMBTS) { + m_energyGroups = Monitored::buildToolMap<int>(m_tools, "TileEnergyMBTS", MAX_MBTS_COUNTER); + m_energyLBGroups = Monitored::buildToolMap<int>(m_tools, "TileEnergyLBMBTS", MAX_MBTS_COUNTER); - m_energyGroups = Monitored::buildToolMap<int>(m_tools, "TileEnergyMBTS", MAX_MBTS_COUNTER); - m_energyLBGroups = Monitored::buildToolMap<int>(m_tools, "TileEnergyLBMBTS", MAX_MBTS_COUNTER); + m_timeGroups = Monitored::buildToolMap<int>(m_tools, "TileTimeMBTS", MAX_MBTS_COUNTER); - m_timeGroups = Monitored::buildToolMap<int>(m_tools, "TileTimeMBTS", MAX_MBTS_COUNTER); + m_hfnGroups = Monitored::buildToolMap<int>(m_tools, "TileHFNoiseMBTS", MAX_MBTS_COUNTER); + m_pedestalGroups = Monitored::buildToolMap<int>(m_tools, "TilePedestalMBTS", MAX_MBTS_COUNTER); - m_hfnGroups = Monitored::buildToolMap<int>(m_tools, "TileHFNoiseMBTS", MAX_MBTS_COUNTER); - m_pedestalGroups = Monitored::buildToolMap<int>(m_tools, "TilePedestalMBTS", MAX_MBTS_COUNTER); - - m_pulseGroups = Monitored::buildToolMap<int>(m_tools, "TileAveragePulseMBTS", MAX_MBTS_COUNTER); + m_pulseGroups = Monitored::buildToolMap<int>(m_tools, "TileAveragePulseMBTS", MAX_MBTS_COUNTER); + } return StatusCode::SUCCESS; } @@ -75,7 +76,20 @@ StatusCode TileMBTSMonitorAlgorithm::fillHistograms( const EventContext& ctx ) c // In case you want to measure the execution time auto timer = Monitored::Timer("TIME_execute"); - auto lumiBlock = Monitored::Scalar<int>("lumiBlock", GetEventInfo(ctx)->lumiBlock()); + auto timeerGroup = Monitored::Group(getGroup("TileMBTSMonExecuteTime"), timer); + + const xAOD::EventInfo* eventInfo = GetEventInfo(ctx).get(); + + const int Trig_b7(7); + uint32_t l1TriggerType(eventInfo->level1TriggerType()); + bool physicRun = (l1TriggerType == 0) || (((l1TriggerType >> Trig_b7) & 1) == 1); + + if (!physicRun) { + ATH_MSG_DEBUG("Calibration Event found => skip filling histograms."); + return StatusCode::SUCCESS; + } + + auto lumiBlock = Monitored::Scalar<int>("lumiBlock", eventInfo->lumiBlock()); int nHitsA(0); int nHitsC(0); @@ -86,9 +100,11 @@ StatusCode TileMBTSMonitorAlgorithm::fillHistograms( const EventContext& ctx ) c auto monTime = Monitored::Scalar<float>("Time", 0.0F); std::vector<float> energyCounters; + energyCounters.reserve(MAX_MBTS_COUNTER); auto monEnergyCounter = Monitored::Collection("EnergyCounter", energyCounters); std::vector<float> energies; + energies.reserve(MAX_MBTS_COUNTER); auto monSummaryEnergy = Monitored::Collection("SummaryEnergy", energies); std::vector<float> timeCounters; @@ -207,66 +223,76 @@ StatusCode TileMBTSMonitorAlgorithm::fillHistograms( const EventContext& ctx ) c std::vector<int> counters; auto monErrorCounters = Monitored::Collection("ErrorCounter", counters); - auto monPedestal = Monitored::Scalar<float>("Pedestal", 0.0F); - auto monHFN = Monitored::Scalar<float>("HFN", 0.0F); - // Create instance of TileDQstatus used to check for readout errors in Tile - const TileDQstatus * dqStatus = SG::makeHandle (m_DQstatusKey, ctx).get(); - - SG::ReadHandle<TileDigitsContainer> digitsContainer(m_digitsContainerKey, ctx); - ATH_CHECK( digitsContainer.isValid() ); - - for (const TileDigitsCollection* digitsCollection : *digitsContainer) { - HWIdentifier adc_id = digitsCollection->front()->adc_HWID(); - int ros = m_tileHWID->ros(adc_id); - if (ros > 2) { // Extended barrel - int drawer = m_tileHWID->drawer(adc_id); - int MBTSchannel = m_MBTSchannels[ros - 3][drawer]; - - if (MBTSchannel >= 0) { - for (const TileDigits* tile_digits: *digitsCollection) { - - adc_id = tile_digits->adc_HWID(); - int channel = m_tileHWID->channel(adc_id); - if (channel == MBTSchannel) { // MBTS channel found - int gain = m_tileHWID->adc(adc_id); - int counter = m_MBTScounters[ros - 3][drawer]; - - // Fill Readout Error histogram - const int dmu = 0; - if (!(dqStatus->isChanDQgood(ros, drawer, channel))) { - setDigiError(counters, errors, counter, GENERAL); - } - if (dqStatus->checkGlobalCRCErr(ros, drawer, gain)) { - setDigiError(counters, errors, counter, GLOBAL_CRC); - } - if (dqStatus->checkROD_CRCErr(ros, drawer, dmu, gain)) { - setDigiError(counters, errors, counter, ROD_CRC); - } - if (dqStatus->checkFE_CRCErr(ros, drawer, dmu, gain)) { - setDigiError(counters, errors, counter, FRONTEND_CRC); - } - if (dqStatus->checkBCIDErr(ros, drawer, dmu, gain)) { - setDigiError(counters, errors, counter, BCID); - } - if (dqStatus->checkHeaderFormatErr(ros, drawer, dmu, gain)) { - setDigiError(counters, errors, counter, HEADER_FORMAT); - } - if (dqStatus->checkHeaderParityErr(ros, drawer, dmu, gain)) { - setDigiError(counters, errors, counter, HEADER_PARITY); - } - if (dqStatus->checkSampleFormatErr(ros, drawer, dmu, gain)) { - setDigiError(counters, errors, counter, SAMPLE_FORMAT); - } - if (dqStatus->checkSampleParityErr(ros, drawer, dmu, gain)) { - setDigiError(counters, errors, counter, SAMPLE_PARITY); - } - if (dqStatus->checkMemoryParityErr(ros, drawer, dmu, gain)) { - setDigiError(counters, errors, counter, MEMORY_PARITY); - } + const TileDQstatus* dqStatus = SG::makeHandle (m_DQstatusKey, ctx).get(); + // Check only low gain (in physics runs low and high gain status should identical) + const int gain{0}; + for (unsigned int ros = 3; ros < Tile::MAX_ROS; ++ros) { + for (unsigned int drawer = 0; drawer < Tile::MAX_DRAWER; ++drawer) { + int channel = m_MBTSchannels[ros - 3][drawer]; + int counter = m_MBTScounters[ros - 3][drawer]; - if (m_fillHistogramsPerMBTS) { + if (channel > 0) { + // Fill Readout Error histogram + if (!(dqStatus->isChanDQgood(ros, drawer, channel))) { + setDigiError(counters, errors, counter, GENERAL); + } + if (dqStatus->checkGlobalCRCErr(ros, drawer, gain)) { + setDigiError(counters, errors, counter, GLOBAL_CRC); + } + if (dqStatus->checkROD_CRCErr(ros, drawer, MBTS_DMU, gain)) { + setDigiError(counters, errors, counter, ROD_CRC); + } + if (dqStatus->checkFE_CRCErr(ros, drawer, MBTS_DMU, gain)) { + setDigiError(counters, errors, counter, FRONTEND_CRC); + } + if (dqStatus->checkBCIDErr(ros, drawer, MBTS_DMU, gain)) { + setDigiError(counters, errors, counter, BCID); + } + if (dqStatus->checkHeaderFormatErr(ros, drawer, MBTS_DMU, gain)) { + setDigiError(counters, errors, counter, HEADER_FORMAT); + } + if (dqStatus->checkHeaderParityErr(ros, drawer, MBTS_DMU, gain)) { + setDigiError(counters, errors, counter, HEADER_PARITY); + } + if (dqStatus->checkSampleFormatErr(ros, drawer, MBTS_DMU, gain)) { + setDigiError(counters, errors, counter, SAMPLE_FORMAT); + } + if (dqStatus->checkSampleParityErr(ros, drawer, MBTS_DMU, gain)) { + setDigiError(counters, errors, counter, SAMPLE_PARITY); + } + if (dqStatus->checkMemoryParityErr(ros, drawer, MBTS_DMU, gain)) { + setDigiError(counters, errors, counter, MEMORY_PARITY); + } + } + } + } + + fill("TileErrorsMBTS", monErrorCounters, monErrors); + + + if (m_fillHistogramsPerMBTS) { + SG::ReadHandle<TileDigitsContainer> digitsContainer(m_digitsContainerKey, ctx); + ATH_CHECK( digitsContainer.isValid() ); + + auto monPedestal = Monitored::Scalar<float>("Pedestal", 0.0F); + auto monHFN = Monitored::Scalar<float>("HFN", 0.0F); + + for (const TileDigitsCollection* digitsCollection : *digitsContainer) { + HWIdentifier adc_id = digitsCollection->front()->adc_HWID(); + int ros = m_tileHWID->ros(adc_id); + if (ros > 2) { // Extended barrel + int drawer = m_tileHWID->drawer(adc_id); + int MBTSchannel = m_MBTSchannels[ros - 3][drawer]; + + if (MBTSchannel >= 0) { + for (const TileDigits* tile_digits: *digitsCollection) { + + adc_id = tile_digits->adc_HWID(); + int channel = m_tileHWID->channel(adc_id); + if (channel == MBTSchannel) { // MBTS channel found + int counter = m_MBTScounters[ros - 3][drawer]; double sampleMean = 0; double sampleRMS = 0; @@ -289,6 +315,7 @@ StatusCode TileMBTSMonitorAlgorithm::fillHistograms( const EventContext& ctx ) c auto monSamples = Monitored::Collection("Samples", samples); std::vector<int> sampleNumbers; + sampleNumbers.reserve(nSamples); for (unsigned int i = 0; i < nSamples; ++i) sampleNumbers.push_back(i); auto monSampleNumbers = Monitored::Collection("SampleNumbers", sampleNumbers); @@ -313,10 +340,6 @@ StatusCode TileMBTSMonitorAlgorithm::fillHistograms( const EventContext& ctx ) c } } - fill("TileErrorsMBTS", monErrorCounters, monErrors); - - fill("TileMBTSMonExecuteTime", timer); - return StatusCode::SUCCESS; } diff --git a/TileCalorimeter/TileMonitoring/src/TileMBTSMonitorAlgorithm.h b/TileCalorimeter/TileMonitoring/src/TileMBTSMonitorAlgorithm.h index d97ae4ab22aee904486a25c06ed5ef9424b022b5..8d91b08fd874654a9b4f41b66b5b53c40379b59d 100644 --- a/TileCalorimeter/TileMonitoring/src/TileMBTSMonitorAlgorithm.h +++ b/TileCalorimeter/TileMonitoring/src/TileMBTSMonitorAlgorithm.h @@ -48,7 +48,7 @@ class TileMBTSMonitorAlgorithm : public AthMonitorAlgorithm { int getMBTSCounter(Identifier mbtsID) const; Gaudi::Property<bool> m_fillHistogramsPerMBTS{this, - "FillHistogramsPerMBTS", true, "Switch for using per MBTS histograms"}; + "FillHistogramsPerMBTS", false, "Switch for using per MBTS histograms"}; Gaudi::Property<std::vector<float>> m_energyCut{this, "EnergyCuts", @@ -97,6 +97,7 @@ class TileMBTSMonitorAlgorithm : public AthMonitorAlgorithm { int m_MBTScounters[Tile::MAX_ROS - 3][Tile::MAX_DRAWER]; static const unsigned int MAX_MBTS_COUNTER{32}; + static const unsigned int MBTS_DMU{0}; }; #endif // TILEMONITORING_TILEMBTSMONITORALGORITHM_H