-
Sergei Zharko authored
CA: Moving the cbm::algo::ca::EDetectorID definition in CbmDefs.h to unify the online/offline CA interfaces
Sergei Zharko authoredCA: Moving the cbm::algo::ca::EDetectorID definition in CbmDefs.h to unify the online/offline CA interfaces
CaTrackingMonitor.h 5.53 KiB
/* Copyright (C) 2023 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
SPDX-License-Identifier: GPL-3.0-only
Authors: Sergei Zharko [committer] */
/// \file CaTrackingMonitor.h
/// \brief Monitor specialization for the tracking algorithm
/// \since 19.10.2023
/// \author S.Zharko <s.zharko@gsi.de>
// NOTE: SZh: #prama once does not work properly in ROOT macros, so to use there enums from the header one
// have to use old approach to protect from multiple includes
//#pragma once
#ifndef CaTrackingMonitor_h
#define CaTrackingMonitor_h 1
#include "CaMonitor.h"
#include <boost/serialization/base_object.hpp>
namespace cbm::algo::ca
{
/// \enum ECounter
/// \brief Counter keys for the CA algo monitor
enum class ECounter
{
TrackingCall, ///< number of the routine calls
SubTS, ///< number of sub time-slices
RecoTrack, ///< number of reconstructed tracks
RecoHit, ///< number of reconstructed hits
RecoHitUsed, ///< number of used reconstructed hits
Triplet, ///< number of triplets
// TODO: Provide counters vs. detector ID
RecoMvdHit, ///< number of MVD hits in tracks
RecoStsHit, ///< number of STS hits in tracks
RecoMuchHit, ///< number of MUCH hits in tracks
RecoTrdHit, ///< number of TRD hits in tracks
RecoTofHit, ///< number of TOF hits in tracks
UndefinedMvdHit, ///< number of undefined MVD hits
UndefinedStsHit, ///< number of undefined STS hits
UndefinedMuchHit, ///< number of undefined MuCh hits
UndefinedTrdHit, ///< number of undefined TRD hits
UndefinedTofHit, ///< number of undefined TOF hits
END
};
/// \enum ETimer
/// \brief Timer keys for the CA algo monitor
/* clang-format off */
// NOTE: SZh 21.03.2024: Disabling clang-format to indicate the scope of timers using the indent
enum class ETimer
{
TrackingChain,
PrepareInputData,
Tracking,
PrepareTimeslice,
TrackingThread,
PrepareThread,
PrepareWindow,
TrackingWindow,
InitWindow,
PrepareGrid,
FindTracks, /// (iterations loop)
PrepareIteration,
ConstructTriplets,
SearchNeighbours,
CreateTracks,
SuppressHitKeys,
FitTracks,
MergeClones,
StoreTracksWindow,
StoreTracksFinal,
Qa,
END
};
/* clang-format on */
using TrackingMonitorData = MonitorData<ECounter, ETimer>;
/// \class cbm::algo::ca::TrackingMonitor
/// \brief A monitor specialization for cbm::algo::ca::Framework class
class TrackingMonitor : public Monitor<ECounter, ETimer> {
public:
/// \brief Default constructor
TrackingMonitor() : Monitor<ECounter, ETimer>("CA Framework Monitor")
{
SetCounterName(ECounter::TrackingCall, "full routine calls");
SetCounterName(ECounter::RecoTrack, "reco tracks");
SetCounterName(ECounter::RecoHit, "reco hits");
SetCounterName(ECounter::Triplet, "triplets");
SetCounterName(ECounter::RecoHitUsed, "used reco hits");
SetCounterName(ECounter::SubTS, "sub-timeslices");
SetCounterName(ECounter::RecoMvdHit, "MVD hits in tracks");
SetCounterName(ECounter::RecoStsHit, "STS hits in tracks");
SetCounterName(ECounter::RecoMuchHit, "MUCH hits in tracks");
SetCounterName(ECounter::RecoTrdHit, "TRD hits in tracks");
SetCounterName(ECounter::RecoTofHit, "TOF hits in tracks");
SetCounterName(ECounter::UndefinedMvdHit, "undefined MVD hits");
SetCounterName(ECounter::UndefinedStsHit, "undefined STS hits");
SetCounterName(ECounter::UndefinedMuchHit, "undefined MuCh hits");
SetCounterName(ECounter::UndefinedTrdHit, "undefined TRD hits");
SetCounterName(ECounter::UndefinedTofHit, "undefined TOF hits");
SetTimerName(ETimer::TrackingChain, "tracking chain");
SetTimerName(ETimer::PrepareInputData, "input data preparation");
SetTimerName(ETimer::Tracking, "algorithm execution");
SetTimerName(ETimer::PrepareTimeslice, "timeslice preparation");
SetTimerName(ETimer::TrackingThread, "tracking on one thread");
SetTimerName(ETimer::PrepareThread, "thread preparation");
SetTimerName(ETimer::PrepareWindow, "window preparation");
SetTimerName(ETimer::TrackingWindow, "tracking in one window");
SetTimerName(ETimer::InitWindow, "window initialization");
SetTimerName(ETimer::PrepareGrid, "grid preparation");
SetTimerName(ETimer::FindTracks, "track finding");
SetTimerName(ETimer::PrepareIteration, "iteration preparation");
SetTimerName(ETimer::ConstructTriplets, "triplet constrcution");
SetTimerName(ETimer::SearchNeighbours, "neighbors search");
SetTimerName(ETimer::CreateTracks, "track creation");
SetTimerName(ETimer::SuppressHitKeys, "used hit key suppression");
SetTimerName(ETimer::FitTracks, "track fitter");
SetTimerName(ETimer::MergeClones, "clone merger");
SetTimerName(ETimer::StoreTracksWindow, "track storing in window");
SetTimerName(ETimer::StoreTracksFinal, "final track storing");
SetTimerName(ETimer::Qa, "QA");
SetRatioKeys({ECounter::TrackingCall, ECounter::SubTS, ECounter::RecoTrack});
}
private:
friend class boost::serialization::access;
template<typename Archive>
void serialize(Archive& ar, const unsigned int /*version*/)
{
ar& boost::serialization::base_object<Monitor<ECounter, ETimer>>(*this);
}
};
} // namespace cbm::algo::ca
#endif