R3BROOT
R3B analysis software
Loading...
Searching...
No Matches
R3BNeulandCalToHitTask.h
Go to the documentation of this file.
1/******************************************************************************
2 * Copyright (C) 2019 GSI Helmholtzzentrum für Schwerionenforschung GmbH *
3 * Copyright (C) 2019-2023 Members of R3B Collaboration *
4 * *
5 * This software is distributed under the terms of the *
6 * GNU General Public Licence (GPL) version 3, *
7 * copied verbatim in the file "LICENSE". *
8 * *
9 * In applying this license GSI does not waive the privileges and immunities *
10 * granted to it by virtue of its status as an Intergovernmental Organization *
11 * or submit itself to any jurisdiction. *
12 ******************************************************************************/
13
14#pragma once
15
16#include "R3BDataMonitor.h"
18#include "R3BValueError.h"
19#include <FairRootManager.h>
20#include <FairRuntimeDb.h>
21#include <R3BIOConnector.h>
22#include <R3BNeulandCalData2.h>
24#include <R3BNeulandHit.h>
25#include <R3BShared.h>
26#include <fmt/core.h>
27#include <string_view>
28#include <vector>
29
30namespace R3B::Neuland
31{
37
39 {
40 public:
41 explicit Cal2HitTask(std::string_view name = "R3BNeulandCal2Hit", int iVerbose = 1);
42 void SetGlobalTimeOffset(double offset) { global_time_offset_ = offset; }
43 void SetDistanceToTarget(double distance) { distance_to_target_ = distance; }
44
45 private:
51
52 // temporary variables to reduce dynamic allocations
53 std::vector<CalibratedSignal> temp_left_signals_;
54 std::vector<CalibratedSignal> temp_right_signals_;
55
56 // overriden functions:
57 void HistogramInit(DataMonitor& histograms) override;
58 void ExtraInit(FairRootManager* rootMan) override;
59 void SetExtraPar(FairRuntimeDb* rtdb) override;
60 void BeginOfEvent() override { hit_data_.clear(); };
61 void TriggeredExec() override;
62 void EndOfTask() override;
63 // [[nodiscard]] auto CheckConditions() const -> bool override {};
64
65 // non-virtual private functions:
66 void calibrate();
68 /* inout */ std::vector<CalibratedSignal>& signals,
69 Side side);
70 void construct_hits(const std::vector<CalibratedSignal>& left_signals,
71 const std::vector<CalibratedSignal>& right_signals,
72 const HitModulePar& par,
73 /* inout */ std::vector<R3BNeulandHit>& hits);
74 [[nodiscard]] auto construct_hit(const LRPair<CalibratedSignal>& signalPair,
75 const HitModulePar& par) const -> R3BNeulandHit;
76 static auto get_calibrated_energy(const CalDataSignal& calSignal,
77 const HitModulePar& par,
78 R3B::Side side) -> ValueErrorD;
79 static auto get_calibrated_time(const CalDataSignal& calSignal,
80 const HitModulePar& par,
81 R3B::Side side) -> ValueErrorD;
82 static auto to_calibrated_signal(const CalDataSignal& calSignal,
83 const HitModulePar& par,
85 [[nodiscard]] auto signal_match_checking(const CalibratedSignal& first_signal,
86 const CalibratedSignal& second_signal,
87 const HitModulePar& par) -> bool;
88 [[nodiscard]] inline auto get_hit_time(double first_t, double second_t) const -> double;
89 };
90
91} // namespace R3B::Neuland
92template <>
93class fmt::formatter<R3B::Neuland::CalibratedSignal>
94{
95 public:
96 static constexpr auto parse(format_parse_context& ctx) { return ctx.end(); }
97 template <typename FmtContent>
98 constexpr auto format(const R3B::Neuland::CalibratedSignal& signal, FmtContent& ctn) const
99 {
100 return format_to(ctn.out(), "{{time: {}, energy: {}}}", signal.time, signal.energy);
101 }
102};
static auto get_calibrated_energy(const CalDataSignal &calSignal, const HitModulePar &par, R3B::Side side) -> ValueErrorD
auto construct_hit(const LRPair< CalibratedSignal > &signalPair, const HitModulePar &par) const -> R3BNeulandHit
void SetExtraPar(FairRuntimeDb *rtdb) override
void ExtraInit(FairRootManager *rootMan) override
static auto get_calibrated_time(const CalDataSignal &calSignal, const HitModulePar &par, R3B::Side side) -> ValueErrorD
void SetGlobalTimeOffset(double offset)
static auto to_calibrated_signal(const CalDataSignal &calSignal, const HitModulePar &par, R3B::Side side) -> CalibratedSignal
std::vector< CalibratedSignal > temp_left_signals_
void calculate_calibrated_signals(const BarCalData &calBar, std::vector< CalibratedSignal > &signals, Side side)
OutputVectorConnector< R3BNeulandHit > hit_data_
auto signal_match_checking(const CalibratedSignal &first_signal, const CalibratedSignal &second_signal, const HitModulePar &par) -> bool
Cal2HitTask(std::string_view name="R3BNeulandCal2Hit", int iVerbose=1)
void HistogramInit(DataMonitor &histograms) override
void construct_hits(const std::vector< CalibratedSignal > &left_signals, const std::vector< CalibratedSignal > &right_signals, const HitModulePar &par, std::vector< R3BNeulandHit > &hits)
InputVectorConnector< BarCalData > cal_data_
auto get_hit_time(double first_t, double second_t) const -> double
void SetDistanceToTarget(double distance)
std::vector< CalibratedSignal > temp_right_signals_
auto InputPar(std::string_view par_name, FairRuntimeDb *rtdb=FairRuntimeDb::instance()) -> ParType *
static constexpr auto parse(format_parse_context &ctx)
constexpr auto format(const R3B::Neuland::CalibratedSignal &signal, FmtContent &ctn) const
Simulation of NeuLAND Bar/Paddle.
InputConnector< std::vector< ElementType > > InputVectorConnector
ValueError< double > ValueErrorD
OutputConnector< std::vector< ElementType > > OutputVectorConnector