diff --git a/DataQuality/DataQualityConfigurations/config/AFP/collisions_run.config b/DataQuality/DataQualityConfigurations/config/AFP/collisions_run.config index 3b9c0ef32bba1fcda4f47a815294c8cdb80e12f4..5b52d19cf0165d267eeb5f600f97208ebbd97a43 100644 --- a/DataQuality/DataQualityConfigurations/config/AFP/collisions_run.config +++ b/DataQuality/DataQualityConfigurations/config/AFP/collisions_run.config @@ -271,6 +271,7 @@ dir AFP { display = LogZ,Draw=COLZ dir (?P<station>(far|near)[AC]side) { regex = 1 + algorithm = AFPSiTEfficiency output = AFP/SiT/Efficiency/${station} hist Efficiency_(?P=station)_P[0123] { } @@ -780,6 +781,12 @@ algorithm AFPToFEfficiency { thresholds = AFPToFEfficiencyThreshold } +algorithm AFPSiTEfficiency { + libname = libdqm_algorithms.so + name = AFP_SiTEfficiency + thresholds = AFPSiTEfficiencyThreshold +} + ############################################################ # Thresholds ############################################################ @@ -829,3 +836,10 @@ thresholds AFPToFEfficiencyThreshold { error = 3 } } + +thresholds AFPSiTEfficiencyThreshold { + limits NEfficiency { + warning = 85 + error = 60 + } +} \ No newline at end of file diff --git a/DataQuality/dqm_algorithms/dqm_algorithms/AFP_SiTEfficiency.h b/DataQuality/dqm_algorithms/dqm_algorithms/AFP_SiTEfficiency.h new file mode 100644 index 0000000000000000000000000000000000000000..8b28ea4f59ba3c3fe69b97abfa1872c9292462d7 --- /dev/null +++ b/DataQuality/dqm_algorithms/dqm_algorithms/AFP_SiTEfficiency.h @@ -0,0 +1,33 @@ +/* + Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef DQM_Algorithms_AFP_SiTEfficiency_H +#define DQM_Algorithms_AFP_SiTEfficiency_H + +#include <dqm_core/Algorithm.h> +#include <dqm_core/AlgorithmConfig.h> +#include <dqm_core/Result.h> + +#include <TObject.h> + +#include <map> +#include <ostream> +#include <string> +#include <utility> +#include <vector> + +namespace dqm_algorithms { + class AFP_SiTEfficiency : public dqm_core::Algorithm { + public: + AFP_SiTEfficiency(); + ~AFP_SiTEfficiency(); + + AFP_SiTEfficiency* clone() override; + dqm_core::Result* execute( const std::string& name, const TObject& object, const dqm_core::AlgorithmConfig& config ) override; + void printDescriptionTo( std::ostream& out ) override; + + }; +} // namespace dqm_algorithms + +#endif // DQM_Algorithms_AFP_SiTEfficiency_H diff --git a/DataQuality/dqm_algorithms/dqm_algorithms/dqm_algorithmsDict.h b/DataQuality/dqm_algorithms/dqm_algorithms/dqm_algorithmsDict.h index bc070a80961c5ef1d1fddb2e07ae9d43eb5eb453..e13409ca9a512002845ff511bc90938fa34f6ede 100644 --- a/DataQuality/dqm_algorithms/dqm_algorithms/dqm_algorithmsDict.h +++ b/DataQuality/dqm_algorithms/dqm_algorithms/dqm_algorithmsDict.h @@ -18,6 +18,7 @@ #include "dqm_algorithms/AFP_LBsOutOfRange.h" #include "dqm_algorithms/AFP_ToFSiTCorrCheck.h" #include "dqm_algorithms/AFP_ToFEfficiency.h" +#include "dqm_algorithms/AFP_SiTEfficiency.h" #include "dqm_algorithms/All_Bins_Filled.h" #include "dqm_algorithms/AveragePrint.h" #include "dqm_algorithms/BasicGraphCheck.h" diff --git a/DataQuality/dqm_algorithms/dqm_algorithms/selection.xml b/DataQuality/dqm_algorithms/dqm_algorithms/selection.xml index e9d1904c5bbade94bc4cf1beac00551a8b834245..a84ad4287d7b62632d6d7e12302e4b522cef664b 100644 --- a/DataQuality/dqm_algorithms/dqm_algorithms/selection.xml +++ b/DataQuality/dqm_algorithms/dqm_algorithms/selection.xml @@ -13,6 +13,7 @@ <class name="dqm_algorithms::AFP_LBsOutOfRange"/> <class name="dqm_algorithms::AFP_ToFSiTCorrCheck"/> <class name="dqm_algorithms::AFP_ToFEfficiency"/> + <class name="dqm_algorithms::AFP_SiTEfficiency"/> <class name="dqm_algorithms::All_Bins_Filled"/> <class name="dqm_algorithms::AveragePrint"/> <class name="dqm_algorithms::BasicGraphCheck"/> diff --git a/DataQuality/dqm_algorithms/src/AFP_SiTEfficiency.cxx b/DataQuality/dqm_algorithms/src/AFP_SiTEfficiency.cxx new file mode 100644 index 0000000000000000000000000000000000000000..bf2b21a9d88649e2f1897705b2d229767cfb4976 --- /dev/null +++ b/DataQuality/dqm_algorithms/src/AFP_SiTEfficiency.cxx @@ -0,0 +1,74 @@ +/* + Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration +*/ + +#include "dqm_algorithms/AFP_SiTEfficiency.h" + +#include <dqm_algorithms/tools/AlgorithmHelper.h> +#include <dqm_core/AlgorithmManager.h> +#include "dqm_core/AlgorithmConfig.h" +#include <dqm_core/exceptions.h> + +#include <TDirectory.h> +#include <TH1.h> +#include <TH2.h> +#include <TEfficiency.h> +#include <TFile.h> + +namespace { + static dqm_algorithms::AFP_SiTEfficiency instance; +} + +dqm_algorithms::AFP_SiTEfficiency::AFP_SiTEfficiency() { + dqm_core::AlgorithmManager::instance().registerAlgorithm( "AFP_SiTEfficiency", this ); +} + +dqm_algorithms::AFP_SiTEfficiency::~AFP_SiTEfficiency() { +} + +dqm_algorithms::AFP_SiTEfficiency* +dqm_algorithms::AFP_SiTEfficiency::clone() { + return new AFP_SiTEfficiency(); +} + +dqm_core::Result* +dqm_algorithms::AFP_SiTEfficiency::execute( const std::string& name, + const TObject& object, + const dqm_core::AlgorithmConfig& config ) { + if ( !object.IsA()->InheritsFrom( "TEfficiency" ) ) { + throw dqm_core::BadConfig( ERS_HERE, name, "does not inherit from TEfficiency" ); + } + + auto histogram = static_cast<const TEfficiency*>( &object ); + + auto gthreshold = static_cast<uint32_t>( dqm_algorithms::tools::GetFromMap( "NEfficiency", config.getGreenThresholds() ) ); + auto rthreshold = static_cast<uint32_t>( dqm_algorithms::tools::GetFromMap( "NEfficiency", config.getRedThresholds() ) ); + float efficiency = 0; + + TH1* h_total = histogram->GetCopyTotalHisto(); + TH1* h_passed = histogram->GetCopyPassedHisto(); + + float n_total = float ( h_total->GetEntries() ); + float n_passed = float ( h_passed->GetEntries() ); + efficiency = n_passed/n_total*100; + + auto result = new dqm_core::Result(); + + // publish problematic bins + result->tags_[ "Plane efficiency = " ] = efficiency; + + if ( efficiency == 0 ) + result->status_ = dqm_core::Result::Undefined; + else if ( efficiency > gthreshold ) + result->status_ = dqm_core::Result::Green; + else if ( ( efficiency <= gthreshold ) && (efficiency > rthreshold) ) + result->status_ = dqm_core::Result::Yellow; + else + result->status_ = dqm_core::Result::Red; + + return result; +} + +void dqm_algorithms::AFP_SiTEfficiency::printDescriptionTo( std::ostream& out ) { + out << "AFP_SiTEfficiency: Print out if general plane efficiency is less than limit"<< std::endl; +} diff --git a/ForwardDetectors/AFP/Run3AFPMonitoring/python/Run3AFPExampleMonitorAlgorithm.py b/ForwardDetectors/AFP/Run3AFPMonitoring/python/Run3AFPExampleMonitorAlgorithm.py index 071f512f0072ffad9ce14d0ceb4bee1bf539f285..f20ad7a273c54ca6a11fa158925a8fe1e564fc3b 100644 --- a/ForwardDetectors/AFP/Run3AFPMonitoring/python/Run3AFPExampleMonitorAlgorithm.py +++ b/ForwardDetectors/AFP/Run3AFPMonitoring/python/Run3AFPExampleMonitorAlgorithm.py @@ -234,10 +234,10 @@ if __name__=='__main__': # Set the Athena configuration flags from AthenaConfiguration.AllConfigFlags import initConfigFlags flags = initConfigFlags() - #flags.Input.Files = ['/eos/user/v/vlysenko/DQ/testing/data24_13p6TeV/data24_13p6TeV.00484780.physics_Main.merge.AOD.f1514_m2248._lb0793._0003.1'] - flags.Input.Files = ['/eos/user/l/lvicenik/afp_data/data24_13p6TeV/data24_13p6TeV.00484780.physics_Main.merge.AOD.f1514_m2248._lb0793._0003.1'] + flags.Input.Files = ['/eos/user/v/vlysenko/DQ/testing/data24_13p6TeV/data24_13p6TeV.00484780.physics_Main.merge.AOD.f1514_m2248._lb0793._0003.1'] + #flags.Input.Files = ['/eos/user/l/lvicenik/afp_data/data24_13p6TeV/data24_13p6TeV.00484780.physics_Main.merge.AOD.f1514_m2248._lb0793._0003.1'] flags.Input.isMC = False - flags.Output.HISTFileName = 'clean-AFPTest-24.root' + flags.Output.HISTFileName = 'dqm-AFPTest-24.root' flags.Concurrency.NumThreads=10