From aa33f815f015900c592994776f85a917240d79ff Mon Sep 17 00:00:00 2001 From: Finn Feindt <finn.feindt@desy.de> Date: Tue, 28 Feb 2023 12:13:19 +0100 Subject: [PATCH] AnalysisEfficiency: Added fake rate plot in separate folder and variables to configure fake rate analysis. --- .../AnalysisEfficiency/AnalysisEfficiency.cpp | 21 +++++++++++++++++++ .../AnalysisEfficiency/AnalysisEfficiency.h | 10 ++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/modules/AnalysisEfficiency/AnalysisEfficiency.cpp b/src/modules/AnalysisEfficiency/AnalysisEfficiency.cpp index d0761efc2..e3b4eeaf0 100644 --- a/src/modules/AnalysisEfficiency/AnalysisEfficiency.cpp +++ b/src/modules/AnalysisEfficiency/AnalysisEfficiency.cpp @@ -27,6 +27,8 @@ AnalysisEfficiency::AnalysisEfficiency(Configuration& config, std::shared_ptr<De config_.setDefault<XYVector>("inpixel_cut_edge", {Units::get(5.0, "um"), Units::get(5.0, "um")}); config_.setDefault<double>("masked_pixel_distance_cut", 1.); config_.setDefault<double>("spatial_cut_sensoredge", 1.); + config_.setDefault<double>("fake_rate_radius", -1.); + config_.setDefault<double>("fake_rate_sensoredge", -1); m_timeCutFrameEdge = config_.get<double>("time_cut_frameedge"); m_chi2ndofCut = config_.get<double>("chi2ndof_cut"); @@ -35,6 +37,8 @@ AnalysisEfficiency::AnalysisEfficiency(Configuration& config, std::shared_ptr<De m_inpixelEdgeCut = config_.get<XYVector>("inpixel_cut_edge"); m_maskedPixelDistanceCut = config_.get<int>("masked_pixel_distance_cut"); spatial_cut_sensoredge = config_.get<double>("spatial_cut_sensoredge"); + m_fake_rate_radius = config_.get<double>("fake_rate_radius"); + m_fake_rate_sensoredge = config_.get<double>("fake_rate_sensoredge"); } void AnalysisEfficiency::initialize() { @@ -294,6 +298,23 @@ void AnalysisEfficiency::initialize() { auto nCols = static_cast<size_t>(m_detector->nPixels().X()); std::vector<double> v_row(nRows, 0.); // create vector will zeros of length <nRows> prev_hit_ts.assign(nCols, v_row); // use vector v_row to construct matrix + + // check if the user wants to analyze fake rates + if(m_fake_rate_radius > 0 || m_fake_rate_sensoredge >= 0) { + LOG(STATUS) << "Configured to perform fake rate analysis."; + createFakeRatePlots(); + } +} + +void AnalysisEfficiency::createFakeRatePlots() { + TDirectory* directory = getROOTDirectory(); + TDirectory* fake_rate_directory = directory->mkdir("fake_rate"); + if(fake_rate_directory == nullptr) { + throw RuntimeError("Cannot create or access fake rate ROOT directory for module " + this->getUniqueName()); + } + fake_rate_directory->cd(); + + hFakeRate = new TH1D("hFakeRate", "number of fake hits per event; hits; # events", 25, 0 - 0.5, 25 - 0.5); } StatusCode AnalysisEfficiency::run(const std::shared_ptr<Clipboard>& clipboard) { diff --git a/src/modules/AnalysisEfficiency/AnalysisEfficiency.h b/src/modules/AnalysisEfficiency/AnalysisEfficiency.h index cb6283dc8..efb5f66ca 100644 --- a/src/modules/AnalysisEfficiency/AnalysisEfficiency.h +++ b/src/modules/AnalysisEfficiency/AnalysisEfficiency.h @@ -17,6 +17,7 @@ #include "core/module/Module.hpp" +#include <TDirectory.h> #include "TEfficiency.h" #include "TH2D.h" #include "TNamed.h" @@ -84,7 +85,12 @@ namespace corryvreckan { TH2D* hPosDiffPrevTrack_noAssocCluster; TH2D* hDistanceCluster_track; TH2D* htimeRes_cluster_size; - double m_chi2ndofCut, m_timeCutFrameEdge, m_inpixelBinSize, spatial_cut_sensoredge; + + // fake rate + TH1D* hFakeRate; + + double m_chi2ndofCut, m_timeCutFrameEdge, m_inpixelBinSize, spatial_cut_sensoredge, m_fake_rate_radius, + m_fake_rate_sensoredge; XYVector m_inpixelEdgeCut; int m_maskedPixelDistanceCut = 1; int total_tracks = 0; @@ -97,6 +103,8 @@ namespace corryvreckan { std::vector<std::string> require_associated_cluster_on_; Matrix<double> prev_hit_ts; // matrix containing previous hit timestamp for every pixel + + void createFakeRatePlots(); }; } // namespace corryvreckan -- GitLab