diff --git a/core/qa/CbmQaEff.cxx b/core/qa/CbmQaEff.cxx index 02d295c68cf74b0903b172cb0f05a7db5f1c3cba..d4b18167bfe46b274196dfcf911fe4e0742a0744 100644 --- a/core/qa/CbmQaEff.cxx +++ b/core/qa/CbmQaEff.cxx @@ -21,11 +21,59 @@ CbmQaEff::CbmQaEff() : TEfficiency() {} // CbmQaEff::CbmQaEff(const CbmQaEff& other) : TEfficiency(other) {} +// --------------------------------------------------------------------------------------------------------------------- +// +std::tuple<double, double, double> CbmQaEff::GetTotalEfficiency() const +{ + // The efficiency is always calculated based on the number of passed events and total events, which are stored in the + // corresponding histograms inside the TEfficiency object. To get an integrated efficiency one needs just carefully + // re-bin these histograms and pass them to the TEfficiency ctor. + auto pHistP = std::unique_ptr<TH1>((TH1*) this->GetPassedHistogram()->Clone()); + auto pHistT = std::unique_ptr<TH1>((TH1*) this->GetTotalHistogram()->Clone()); + + // X-axis range to calculate integrated efficiency + double range[2] = {pHistP->GetXaxis()->GetXmin(), pHistP->GetXaxis()->GetXmax()}; + + // Define the re-binned histograms + std::unique_ptr<TH1> pHistPR = nullptr; // re-binned histogram of passed events + std::unique_ptr<TH1> pHistTR = nullptr; // re-binned histogram of total events + + if (GetDimension() == 1) { + pHistPR = std::unique_ptr<TH1>(pHistP->Rebin(1, "tmp_passed", range)); + pHistTR = std::unique_ptr<TH1>(pHistT->Rebin(1, "tmp_total", range)); + } + if (GetDimension() == 2) { + auto pHistPProj = std::unique_ptr<TH1>(static_cast<TH2*>(pHistP.get())->ProjectionX()); + auto pHistTProj = std::unique_ptr<TH1>(static_cast<TH2*>(pHistT.get())->ProjectionX()); + + pHistPR = std::unique_ptr<TH1>(pHistPProj->Rebin(1, "tmp_passed", range)); + pHistTR = std::unique_ptr<TH1>(pHistTProj->Rebin(1, "tmp_total", range)); + } + + // Define temporary efficiency, copy all the attributes + auto pIntEff = std::make_unique<TEfficiency>(*pHistPR, *pHistTR); + pIntEff->SetBetaAlpha(fBeta_alpha); + pIntEff->SetBetaBeta(fBeta_beta); + pIntEff->SetConfidenceLevel(fConfLevel); + pIntEff->SetWeight(fWeight); + pIntEff->SetStatisticOption(fStatisticOption); + pIntEff->SetPosteriorMode(this->UsesPosteriorMode()); + pIntEff->SetCentralInterval(this->UsesCentralInterval()); + + double effV = pIntEff->GetEfficiency(1); + double effL = pIntEff->GetEfficiencyErrorLow(1); + double effU = pIntEff->GetEfficiencyErrorUp(1); + + return {effV, effL, effU}; +} + // --------------------------------------------------------------------------------------------------------------------- // CbmQaEff* CbmQaEff::Integral(double lo, double hi) { + if (GetDimension() != 1) { return nullptr; } // For now efficiency integration works only for 1D + // Underlying histograms with passed and total events auto* pPassed = (TH1D*) (this->GetPassedHistogram()); auto* pTotal = (TH1D*) (this->GetTotalHistogram()); @@ -47,17 +95,48 @@ CbmQaEff* CbmQaEff::Integral(double lo, double hi) auto& histPassedReb = *(pPassed->Rebin(1, "ptmp", range)); auto& histTotalReb = *(pTotal->Rebin(1, "ttmp", range)); - LOG(info) << "DEBUG: " << this->GetName() << ": passed: " << pPassed->GetEntries(); - LOG(info) << "DEBUG: " << this->GetName() << ": total: " << pTotal->GetEntries(); - LOG(info) << "DEBUG: " << this->GetName() << ": passed: " << histPassedReb.GetBinContent(1) << ' ' - << histPassedReb.GetBinError(1); - LOG(info) << "DEBUG: " << this->GetName() << ": total: " << histTotalReb.GetBinContent(1) << ' ' - << histPassedReb.GetBinError(1); - TString sName = Form("%s_integrated", this->GetName()); // New efficiency auto* pIntEff = new CbmQaEff(TEfficiency(histPassedReb, histTotalReb)); + pIntEff->SetName(sName); return pIntEff; } + +// --------------------------------------------------------------------------------------------------------------------- +// +CbmQaEff* CbmQaEff::DrawCopy(Option_t* opt, const char* postfix) const +{ + TString option = opt; + option.ToLower(); + if (gPad && !option.Contains("same")) { gPad->Clear(); } + TString newName = ""; + if (postfix) { newName.Form("%s%s", GetName(), postfix); } + CbmQaEff* pNewEff = (CbmQaEff*) Clone(newName.Data()); + pNewEff->SetDirectory(nullptr); + pNewEff->SetBit(kCanDelete); + if (gPad) gPad->IncrementPaletteColor(1, option); + pNewEff->AppendPad(option); + return pNewEff; +} + +// --------------------------------------------------------------------------------------------------------------------- +// +void CbmQaEff::SetStats() +{ + if (!fpStats) { + fpStats = new TPaveText(0.20, 0.17, 0.80, 0.24, "NDC"); + fpStats->SetFillColor(0); + + // Add integrated efficiency + auto [effVal, effLErr, effUErr] = this->GetTotalEfficiency(); + + fpStats->SetTextFont(42); + fpStats->SetTextSize(0.05); + fpStats->SetBorderSize(0); + fpStats->SetFillColor(0); + fpStats->AddText(0, 0, + Form("#epsilon_{tot} = %.4f_{-%.4f}^{+%.4f} (CL %3.3f)", effVal, effLErr, effUErr, fConfLevel)); + } +} diff --git a/core/qa/CbmQaEff.h b/core/qa/CbmQaEff.h index 40977f08a351e4718e3f94bde65e0512dd6caf8f..f31fd14675310da9b3a6c113a439ec9a3c6960e5 100644 --- a/core/qa/CbmQaEff.h +++ b/core/qa/CbmQaEff.h @@ -20,14 +20,18 @@ #include "TGraphAsymmErrors.h" #include "TH2.h" #include "TPaveStats.h" +#include "TPaveText.h" #include "TStyle.h" #include "TVirtualPad.h" +#include <tuple> /// Implementation of ROOT TEfficiency class, which adds handy functionality and improves fitting and drawing /// class CbmQaEff : public TEfficiency { public: + static constexpr int kMarkerStyle = 20; + /// Default constructor CbmQaEff(); @@ -49,14 +53,48 @@ public: return TEfficiency::Fit(args...); } - /// Integrates efficiency over the range + void Paint(Option_t* opt) + { + TEfficiency::Paint(opt); + SetStats(); + if (fpStats) { fpStats->Draw(); } + } + + void Draw(Option_t* opt = "") + { + if (GetDimension() == 1) { this->SetMarkerStyle(kMarkerStyle); } + TEfficiency::Draw(opt); + } + + /// Draws copy of the object + /// \param opt Option string + /// \param postfix Postfix of the name + CbmQaEff* DrawCopy(Option_t* opt, const char* postfix = "_copy") const; + + /// Gets integrated efficiency in a selected range + /// \note Works only for 1D efficiency /// \param lo Lower bound of integration range /// \param hi Higher bound of integration range /// \return Pointer to efficiency object, which contains only one point CbmQaEff* Integral(double lo, double hi); + /// Gets total integrated efficiency + /// \return A tuple: + /// - 0: value + /// - 1: lower error + /// - 2: upper error + std::tuple<double, double, double> GetTotalEfficiency() const; + + /// @brief Sets statistics box for efficiency + void SetStats(); ClassDef(CbmQaEff, 1); + +private: + TPaveText* fpStats = nullptr; ///< Statistics box + + // Functions of the base class, using which can produce inconsistent results + using TEfficiency::SetBetaBinParameters; }; // ********************************************************** diff --git a/macro/run/run_reco_qa.C b/macro/qa/test_qa.C similarity index 96% rename from macro/run/run_reco_qa.C rename to macro/qa/test_qa.C index 446121bace19c7c1c6526bf03aeb85922e5393d8..ec44c73965903abc68d302e922580128acd48b9b 100644 --- a/macro/run/run_reco_qa.C +++ b/macro/qa/test_qa.C @@ -37,10 +37,11 @@ #include <TStopwatch.h> #endif -void run_reco_qa(TString dataTra = "data/sis100_muon_jpsi_test", TString dataRaw = "data/sis100_muon_jpsi_test", - TString dataReco = "data/sis100_muon_jpsi_test", TString dataPar = "data/sis100_muon_jpsi_test", - TString dataSink = "data/sis100_muon_jpsi_test", TString setup = "sis100_muon_jpsi", - Int_t nEvents = -1, TString dataTra2 = "", TString dataTra3 = "") +// TODO: split into functions for reco, digitization and transport QAs +void test_qa(TString dataTra = "data/sis100_muon_jpsi_test", TString dataRaw = "data/sis100_muon_jpsi_test", + TString dataReco = "data/sis100_muon_jpsi_test", TString dataPar = "data/sis100_muon_jpsi_test", + TString dataSink = "data/sis100_muon_jpsi_test", TString setup = "sis100_muon_jpsi", Int_t nEvents = -1, + TString dataTra2 = "", TString dataTra3 = "") { gROOT->SetBatch(kTRUE); diff --git a/reco/L1/CMakeLists.txt b/reco/L1/CMakeLists.txt index 2532b316b5282298c7b97303959bc8026098181c..0168f1d368b1f669c76e1132adc6e3dc505a8e47 100644 --- a/reco/L1/CMakeLists.txt +++ b/reco/L1/CMakeLists.txt @@ -102,8 +102,7 @@ set(HEADERS L1Algo/L1Undef.h catools/CaToolsWindowFinder.h catools/CaToolsLinkKey.h - qa/CbmCaQaCuts.h - + qa/CbmCaInputQaBase.h ) @@ -206,6 +205,7 @@ install(FILES CbmL1Counters.h L1Algo/L1SimdSerializer.h L1Algo/L1TrackPar.h L1Algo/L1Track.h + qa/CbmCaInputQaBase.h DESTINATION include ) diff --git a/reco/L1/qa/CbmCaInputQaMuch.cxx b/reco/L1/qa/CbmCaInputQaMuch.cxx index ed8d3d823cf2c1022b6c33bdd83972b580969051..272a448535c0218c7e312daec1995c9655695f4a 100644 --- a/reco/L1/qa/CbmCaInputQaMuch.cxx +++ b/reco/L1/qa/CbmCaInputQaMuch.cxx @@ -131,8 +131,7 @@ bool CbmCaInputQaMuch::Check() pEffTable->SetColWidth(20); for (int iSt = 0; iSt < nSt; ++iSt) { - auto pEff = std::unique_ptr<CbmQaEff>(fvpe_reco_eff_vs_r[iSt]->Integral(fEffRange[0], fEffRange[1])); - double eff = pEff->GetEfficiency(1); + auto [eff, effEL, effEU] = fvpe_reco_eff_vs_r[iSt]->GetTotalEfficiency(); pEffTable->SetCell(iSt, 0, iSt); pEffTable->SetCell(iSt, 1, eff); res = CheckRange("Hit finder efficiency in station " + std::to_string(iSt), eff, fEffThrsh, 1.000); @@ -820,27 +819,15 @@ InitStatus CbmCaInputQaMuch::InitCanvases() pc_reco_eff_vs_r->Divide2D(nSt); for (int iSt = 0; iSt < nSt; ++iSt) { pc_reco_eff_vs_r->cd(iSt + 1); - fvpe_reco_eff_vs_r[iSt]->Paint("AP"); - auto* pGr = dynamic_cast<TGraphAsymmErrors*>(fvpe_reco_eff_vs_r[iSt]->GetPaintedGraph()); - if (!pGr) { - LOG(error) << fName << ": unable to get painted graph from efficiency " << fvpe_reco_eff_vs_xy[iSt]->GetName(); - continue; - } - pGr->DrawClone("AP"); + fvpe_reco_eff_vs_r[iSt]->SetMarkerStyle(20); + fvpe_reco_eff_vs_r[iSt]->DrawCopy("AP", ""); } auto* pc_reco_eff_vs_xy = MakeCanvas<CbmQaCanvas>("reco_eff_vs_xy", "Hit efficiencies wrt x and y", 1600, 800); pc_reco_eff_vs_xy->Divide2D(nSt); for (int iSt = 0; iSt < nSt; ++iSt) { pc_reco_eff_vs_xy->cd(iSt + 1); - fvpe_reco_eff_vs_xy[iSt]->Paint("colz"); - auto* pH2 = dynamic_cast<TH2F*>(fvpe_reco_eff_vs_xy[iSt]->GetPaintedHistogram()); - if (!pH2) { - LOG(error) << fName << ": unable to get painted histogram from efficiency " - << fvpe_reco_eff_vs_xy[iSt]->GetName(); - continue; - } - pH2->DrawCopy("colz", ""); + fvpe_reco_eff_vs_xy[iSt]->DrawCopy("colz", ""); } } diff --git a/reco/L1/qa/CbmCaInputQaSts.cxx b/reco/L1/qa/CbmCaInputQaSts.cxx index a616e002e47cdc57fd4baa3372465d913361f418..26c4b9dd425dbe19cf4ab58fd324b0aaf7fddb7b 100644 --- a/reco/L1/qa/CbmCaInputQaSts.cxx +++ b/reco/L1/qa/CbmCaInputQaSts.cxx @@ -126,15 +126,13 @@ bool CbmCaInputQaSts::Check() // // Fit efficiency curves LOG(info) << "-- Hit efficiency integrated over hit distance from station center"; - LOG(info) << "\tintegration range: [" << fEffRange[0] << ", " << fEffRange[1] << "] cm"; auto* pEffTable = MakeTable("eff_table", "Efficiency table", nSt, 2); pEffTable->SetNamesOfCols({"Station ID", "Efficiency"}); pEffTable->SetColWidth(20); for (int iSt = 0; iSt < nSt; ++iSt) { - auto pEff = std::unique_ptr<CbmQaEff>(fvpe_reco_eff_vs_r[iSt]->Integral(fEffRange[0], fEffRange[1])); - double eff = pEff->GetEfficiency(1); + auto [eff, effEL, effEU] = fvpe_reco_eff_vs_r[iSt]->GetTotalEfficiency(); pEffTable->SetCell(iSt, 0, iSt); pEffTable->SetCell(iSt, 1, eff); res = CheckRange("Hit finder efficiency in station " + std::to_string(iSt), eff, fEffThrsh, 1.000); @@ -900,27 +898,15 @@ InitStatus CbmCaInputQaSts::InitCanvases() pc_reco_eff_vs_r->Divide2D(nSt); for (int iSt = 0; iSt < nSt; ++iSt) { pc_reco_eff_vs_r->cd(iSt + 1); - fvpe_reco_eff_vs_r[iSt]->Paint("AP"); - auto* pGr = dynamic_cast<TGraphAsymmErrors*>(fvpe_reco_eff_vs_r[iSt]->GetPaintedGraph()); - if (!pGr) { - LOG(error) << fName << ": unable to get painted graph from efficiency " << fvpe_reco_eff_vs_xy[iSt]->GetName(); - continue; - } - pGr->DrawClone("AP"); + fvpe_reco_eff_vs_r[iSt]->SetMarkerStyle(20); + fvpe_reco_eff_vs_r[iSt]->DrawCopy("AP", ""); } auto* pc_reco_eff_vs_xy = MakeCanvas<CbmQaCanvas>("reco_eff_vs_xy", "Hit efficiencies wrt x and y", 1600, 800); pc_reco_eff_vs_xy->Divide2D(nSt); for (int iSt = 0; iSt < nSt; ++iSt) { pc_reco_eff_vs_xy->cd(iSt + 1); - fvpe_reco_eff_vs_xy[iSt]->Paint("colz"); - auto* pH2 = dynamic_cast<TH2F*>(fvpe_reco_eff_vs_xy[iSt]->GetPaintedHistogram()); - if (!pH2) { - LOG(error) << fName << ": unable to get painted histogram from efficiency " - << fvpe_reco_eff_vs_xy[iSt]->GetName(); - continue; - } - pH2->DrawCopy("colz", ""); + fvpe_reco_eff_vs_xy[iSt]->DrawCopy("colz", ""); } } diff --git a/reco/L1/qa/CbmCaInputQaTof.cxx b/reco/L1/qa/CbmCaInputQaTof.cxx index cb0e89ae7f25a16cf79d708063481a6268700813..db984e9c1d7d323dfd6ce35947293f7c6834c1dd 100644 --- a/reco/L1/qa/CbmCaInputQaTof.cxx +++ b/reco/L1/qa/CbmCaInputQaTof.cxx @@ -134,8 +134,7 @@ bool CbmCaInputQaTof::Check() pEffTable->SetColWidth(20); for (int iSt = 0; iSt < nSt; ++iSt) { - auto pEff = std::unique_ptr<CbmQaEff>(fvpe_reco_eff_vs_r[iSt]->Integral(fEffRange[0], fEffRange[1])); - double eff = pEff->GetEfficiency(1); + auto [eff, effEL, effEU] = fvpe_reco_eff_vs_r[iSt]->GetTotalEfficiency(); pEffTable->SetCell(iSt, 0, iSt); pEffTable->SetCell(iSt, 1, eff); res = CheckRange("Hit finder efficiency in station " + std::to_string(iSt), eff, fEffThrsh, 1.000); @@ -908,27 +907,15 @@ InitStatus CbmCaInputQaTof::InitCanvases() pc_reco_eff_vs_r->Divide2D(nSt); for (int iSt = 0; iSt < nSt; ++iSt) { pc_reco_eff_vs_r->cd(iSt + 1); - fvpe_reco_eff_vs_r[iSt]->Paint("AP"); - auto* pGr = dynamic_cast<TGraphAsymmErrors*>(fvpe_reco_eff_vs_r[iSt]->GetPaintedGraph()); - if (!pGr) { - LOG(error) << fName << ": unable to get painted graph from efficiency " << fvpe_reco_eff_vs_xy[iSt]->GetName(); - continue; - } - pGr->DrawClone("AP"); + fvpe_reco_eff_vs_r[iSt]->SetMarkerStyle(20); + fvpe_reco_eff_vs_r[iSt]->DrawCopy("AP", ""); } auto* pc_reco_eff_vs_xy = MakeCanvas<CbmQaCanvas>("reco_eff_vs_xy", "Hit efficiencies wrt x and y", 1600, 800); pc_reco_eff_vs_xy->Divide2D(nSt); for (int iSt = 0; iSt < nSt; ++iSt) { pc_reco_eff_vs_xy->cd(iSt + 1); - fvpe_reco_eff_vs_xy[iSt]->Paint("colz"); - auto* pH2 = dynamic_cast<TH2F*>(fvpe_reco_eff_vs_xy[iSt]->GetPaintedHistogram()); - if (!pH2) { - LOG(error) << fName << ": unable to get painted histogram from efficiency " - << fvpe_reco_eff_vs_xy[iSt]->GetName(); - continue; - } - pH2->DrawCopy("colz", ""); + fvpe_reco_eff_vs_xy[iSt]->DrawCopy("colz", ""); } } diff --git a/reco/L1/qa/CbmCaInputQaTof.h b/reco/L1/qa/CbmCaInputQaTof.h index 3bf035ced9019ee0a261cccfa3e8501c8b736e2a..02062816a7586b642e77dfc395bb64e762c3d0e9 100644 --- a/reco/L1/qa/CbmCaInputQaTof.h +++ b/reco/L1/qa/CbmCaInputQaTof.h @@ -119,7 +119,7 @@ private: static constexpr double kRHitDt[2] = {-10., 10.}; ///< Range for hit time [ns] static constexpr double kRResX[2] = {-2., 2.}; ///< Range for residual of x coordinate [cm] - static constexpr double kRResY[2] = {-2., 2.}; ///< Range for residual of y coordinate [cm] + static constexpr double kRResY[2] = {-4., 4.}; ///< Range for residual of y coordinate [cm] static constexpr double kRResT[2] = {-.5, .5}; ///< Range for residual of time [ns] static constexpr double kRPullX[2] = {-10., 10.}; ///< Range for pull of x coordinate diff --git a/reco/L1/qa/CbmCaInputQaTrd.cxx b/reco/L1/qa/CbmCaInputQaTrd.cxx index e97fa1a4a12c59423448b8d6d714a74546ae595c..827f066b38a47f4e705eeadc4aed973e5820cd0c 100644 --- a/reco/L1/qa/CbmCaInputQaTrd.cxx +++ b/reco/L1/qa/CbmCaInputQaTrd.cxx @@ -130,8 +130,7 @@ bool CbmCaInputQaTrd::Check() pEffTable->SetColWidth(20); for (int iSt = 0; iSt < nSt; ++iSt) { - auto pEff = std::unique_ptr<CbmQaEff>(fvpe_reco_eff_vs_r[iSt]->Integral(fEffRange[0], fEffRange[1])); - double eff = pEff->GetEfficiency(1); + auto [eff, effEL, effEU] = fvpe_reco_eff_vs_r[iSt]->GetTotalEfficiency(); pEffTable->SetCell(iSt, 0, iSt); pEffTable->SetCell(iSt, 1, eff); res = CheckRange("Hit finder efficiency in station " + std::to_string(iSt), eff, fEffThrsh, 1.000); @@ -822,29 +821,15 @@ InitStatus CbmCaInputQaTrd::InitCanvases() pc_reco_eff_vs_r->Divide2D(nSt); for (int iSt = 0; iSt < nSt; ++iSt) { pc_reco_eff_vs_r->cd(iSt + 1); - fvpe_reco_eff_vs_r[iSt]->Paint("AP"); - auto* pGr = dynamic_cast<TGraphAsymmErrors*>(fvpe_reco_eff_vs_r[iSt]->GetPaintedGraph()); - if (!pGr) { - LOG(error) << fName << ": unable to get painted graph from efficiency " << fvpe_reco_eff_vs_xy[iSt]->GetName(); - continue; - } - pGr->DrawClone("AP"); - auto* pFit = (TF1*) pGr->FindObject("pol0"); - if (pFit) { pFit->Draw("SAME"); } + fvpe_reco_eff_vs_r[iSt]->SetMarkerStyle(20); + fvpe_reco_eff_vs_r[iSt]->DrawCopy("AP", ""); } auto* pc_reco_eff_vs_xy = MakeCanvas<CbmQaCanvas>("reco_eff_vs_xy", "Hit efficiencies wrt x and y", 1600, 800); pc_reco_eff_vs_xy->Divide2D(nSt); for (int iSt = 0; iSt < nSt; ++iSt) { pc_reco_eff_vs_xy->cd(iSt + 1); - fvpe_reco_eff_vs_xy[iSt]->Paint("colz"); - auto* pH2 = dynamic_cast<TH2F*>(fvpe_reco_eff_vs_xy[iSt]->GetPaintedHistogram()); - if (!pH2) { - LOG(error) << fName << ": unable to get painted histogram from efficiency " - << fvpe_reco_eff_vs_xy[iSt]->GetName(); - continue; - } - pH2->DrawCopy("colz", ""); + fvpe_reco_eff_vs_xy[iSt]->DrawCopy("colz", ""); } } diff --git a/reco/L1/qa/CbmCaInputQaTrd.h b/reco/L1/qa/CbmCaInputQaTrd.h index 9e9f403ea8ee96dfc627f6d80dc01d98932a0439..db714adbf85c95815f129669d8820918f9c8e956 100644 --- a/reco/L1/qa/CbmCaInputQaTrd.h +++ b/reco/L1/qa/CbmCaInputQaTrd.h @@ -108,9 +108,9 @@ private: static constexpr double kRHitDy[2] = {-.05, .005}; ///< Range for hit y coordinate [cm] static constexpr double kRHitDt[2] = {-10., 10.}; ///< Range for hit time [ns] - static constexpr double kRResX[2] = {-.4, .4}; ///< Range for residual of x coordinate [cm] - static constexpr double kRResY[2] = {-.4, .4}; ///< Range for residual of y coordinate [cm] - static constexpr double kRResT[2] = {-5., 5.}; ///< Range for residual of time [ns] + static constexpr double kRResX[2] = {-2., 2.}; ///< Range for residual of x coordinate [cm] + static constexpr double kRResY[2] = {-2., 2.}; ///< Range for residual of y coordinate [cm] + static constexpr double kRResT[2] = {-20., 20.}; ///< Range for residual of time [ns] static constexpr double kRPullX[2] = {-10., 10.}; ///< Range for pull of x coordinate static constexpr double kRPullY[2] = {-10., 10.}; ///< Range for pull of y coordinate diff --git a/reco/L1/qa/CbmCaQaCuts.h b/reco/L1/qa/CbmCaQaCuts.h deleted file mode 100644 index 9e9d643ec77e1ac509ceecac80657f0b8926a093..0000000000000000000000000000000000000000 --- a/reco/L1/qa/CbmCaQaCuts.h +++ /dev/null @@ -1,16 +0,0 @@ -/* Copyright (C) 2023 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt - SPDX-License-Identifier: GPL-3.0-only - Authors: Sergei Zharko [committer] */ - -#ifndef CbmCaQaCuts_h -#define CbmCaQaCuts_h 1 - -namespace cbm::ca::qa::cuts -{ - constexpr double kMinP = 0.05; ///< minimal momentum [Gev/c] - - // Max difference between hit and station z - constexpr double kMaxDzStHitSts = 1.; ///< Max distance for STS -}; // namespace cbm::ca::qa::cuts - -#endif // CbmCaQaCuts_h