From 9a803586b9c5f6fdc0033292814c2243d06620a7 Mon Sep 17 00:00:00 2001 From: Viktoriia Lysenko <viktoriia.lysenko@cern.ch> Date: Thu, 15 Feb 2024 20:22:43 +0100 Subject: [PATCH] AFP dqm algorithm for tof efficiency AFP dqm algorithm for tof efficiency --- .../config/AFP/collisions_run.config | 15 ++++ .../dqm_algorithms/AFP_ToFEfficiency.h | 33 ++++++++ .../dqm_algorithms/dqm_algorithmsDict.h | 1 + .../dqm_algorithms/selection.xml | 1 + .../dqm_algorithms/src/AFP_ToFEfficiency.cxx | 77 +++++++++++++++++++ 5 files changed, 127 insertions(+) create mode 100644 DataQuality/dqm_algorithms/dqm_algorithms/AFP_ToFEfficiency.h create mode 100644 DataQuality/dqm_algorithms/src/AFP_ToFEfficiency.cxx diff --git a/DataQuality/DataQualityConfigurations/config/AFP/collisions_run.config b/DataQuality/DataQualityConfigurations/config/AFP/collisions_run.config index ba37cec1ffe8..0d3bc9ee9518 100644 --- a/DataQuality/DataQualityConfigurations/config/AFP/collisions_run.config +++ b/DataQuality/DataQualityConfigurations/config/AFP/collisions_run.config @@ -560,6 +560,7 @@ dir AFP { dir Efficiency { output = AFP/ToFSiT/Efficiency display = Draw=COLZTEXT,AxisRange(0,1,"Z") + algorithm = AFPToFEfficiency hist Efficiency_TH_[AC] { regex = 1 } @@ -826,6 +827,13 @@ algorithm AFPLBsOutOfRange { } } +algorithm AFPToFEfficiency { + libname = libdqm_algorithms.so + name = AFP_ToFEfficiency + eff_limit = 0.5 + thresholds = AFPToFEfficiencyThreshold +} + ############################################################ # Thresholds ############################################################ @@ -857,3 +865,10 @@ thresholds AFPLBsOutOfRangeTrackFE { error = 35 } } + +thresholds AFPToFEfficiencyThreshold { + limits NbadTrains { + warning = 1 + error = 3 + } +} diff --git a/DataQuality/dqm_algorithms/dqm_algorithms/AFP_ToFEfficiency.h b/DataQuality/dqm_algorithms/dqm_algorithms/AFP_ToFEfficiency.h new file mode 100644 index 000000000000..95084cbe8995 --- /dev/null +++ b/DataQuality/dqm_algorithms/dqm_algorithms/AFP_ToFEfficiency.h @@ -0,0 +1,33 @@ +/* + Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef DQM_Algorithms_AFP_ToFEfficiency_H +#define DQM_Algorithms_AFP_ToFEfficiency_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_ToFEfficiency : public dqm_core::Algorithm { + public: + AFP_ToFEfficiency(); + ~AFP_ToFEfficiency(); + + AFP_ToFEfficiency* 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_ToFEfficiency_H diff --git a/DataQuality/dqm_algorithms/dqm_algorithms/dqm_algorithmsDict.h b/DataQuality/dqm_algorithms/dqm_algorithms/dqm_algorithmsDict.h index d246cfaa543e..65a2d8a0da2c 100644 --- a/DataQuality/dqm_algorithms/dqm_algorithms/dqm_algorithmsDict.h +++ b/DataQuality/dqm_algorithms/dqm_algorithms/dqm_algorithmsDict.h @@ -17,6 +17,7 @@ #include "dqm_algorithms/AddReference_Bins_LessThan_Threshold.h" #include "dqm_algorithms/AddReference_Bins_NotEqual_Threshold.h" #include "dqm_algorithms/AFP_LBsOutOfRange.h" +#include "dqm_algorithms/AFP_ToFEfficiency.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 250c62618efc..69b2ce3edc62 100644 --- a/DataQuality/dqm_algorithms/dqm_algorithms/selection.xml +++ b/DataQuality/dqm_algorithms/dqm_algorithms/selection.xml @@ -11,6 +11,7 @@ <class name="dqm_algorithms::AddReference_Bins_LessThan_Threshold"/> <class name="dqm_algorithms::AddReference_Bins_NotEqual_Threshold"/> <class name="dqm_algorithms::AFP_LBsOutOfRange"/> + <class name="dqm_algorithms::AFP_ToFEfficiency"/> <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_ToFEfficiency.cxx b/DataQuality/dqm_algorithms/src/AFP_ToFEfficiency.cxx new file mode 100644 index 000000000000..bc1b8ef26679 --- /dev/null +++ b/DataQuality/dqm_algorithms/src/AFP_ToFEfficiency.cxx @@ -0,0 +1,77 @@ +/* + Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration +*/ + +#include "dqm_algorithms/AFP_ToFEfficiency.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 <TFile.h> + +namespace { + static dqm_algorithms::AFP_ToFEfficiency instance; +} + +dqm_algorithms::AFP_ToFEfficiency::AFP_ToFEfficiency() { + dqm_core::AlgorithmManager::instance().registerAlgorithm( "AFP_ToFEfficiency", this ); +} + +dqm_algorithms::AFP_ToFEfficiency::~AFP_ToFEfficiency() { +} + +dqm_algorithms::AFP_ToFEfficiency* +dqm_algorithms::AFP_ToFEfficiency::clone() { + return new AFP_ToFEfficiency(); +} + +dqm_core::Result* +dqm_algorithms::AFP_ToFEfficiency::execute( const std::string& name, + const TObject& object, + const dqm_core::AlgorithmConfig& config ) { + if ( !object.IsA()->InheritsFrom( "TH2" ) ) { + throw dqm_core::BadConfig( ERS_HERE, name, "does not inherit from TH2" ); + } + + auto histogram = static_cast<const TH2D*>( &object ); + + auto gthreshold = static_cast<uint32_t>( dqm_algorithms::tools::GetFromMap( "NbadTrains", config.getGreenThresholds() ) ); + auto rthreshold = static_cast<uint32_t>( dqm_algorithms::tools::GetFromMap( "NbadTrains", config.getRedThresholds() ) ); + auto eff_limit = static_cast<float>( dqm_algorithms::tools::GetFirstFromMap( "eff_limit", config.getParameters() ) ); + + uint32_t each_tr_status[2] = {}; + for (uint32_t i = 1; i < 5; ++i) + { + float current_eff = histogram->GetBinContent(histogram->GetBin(5,i)); + if (current_eff >= eff_limit) + each_tr_status[0]++; + else + each_tr_status[1]++; + } + + auto result = new dqm_core::Result(); + + // publish problematic bins + result->tags_[ ("N Trains with efficiency less than " + (std::to_string(eff_limit)).substr(0,4)).c_str() ] = each_tr_status[1]; + + if ( each_tr_status[0]==0 && each_tr_status[1]==0 ) + result->status_ = dqm_core::Result::Undefined; + else if ( each_tr_status[0] == 4 ) + result->status_ = dqm_core::Result::Green; + else if ( each_tr_status[1] >= gthreshold && each_tr_status[1] < rthreshold ) + result->status_ = dqm_core::Result::Yellow; + else + result->status_ = dqm_core::Result::Red; + + return result; +} + +void dqm_algorithms::AFP_ToFEfficiency::printDescriptionTo( std::ostream& out ) { + out << "AFP_ToFEfficiency: Print out how many trains have efficiency less than limit\n" + << "Required Parameter: eff_limit: threshold percentage of efficiency" << std::endl; +} -- GitLab