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
17#include <R3BIOConnector.h>
18#include <R3BNeulandCalData2.h>
20#include <R3BNeulandHit.h>
21#include <R3BShared.h>
22
23namespace R3B::Neuland
24{
30
32 {
33 public:
34 explicit Cal2HitTask(std::string_view name = "R3BNeulandCal2Hit", int iVerbose = 1);
35 void SetGlobalTimeOffset(double offset) { global_time_offset_ = offset; }
36 void SetDistanceToTarget(double distance) { distance_to_target_ = distance; }
37
38 private:
39 double global_time_offset_ = 0.;
40 double distance_to_target_ = 0.;
41 InputVectorConnector<BarCalData> cal_data_{ "NeulandCalData" };
42 OutputVectorConnector<R3BNeulandHit> hit_data_{ "NeulandHits" };
43 Cal2HitPar* cal_to_hit_par_ = InputPar<Cal2HitPar>("NeulandHitPar");
44
45 // temporary variables to reduce dynamic allocations
46 std::vector<CalibratedSignal> temp_left_signals_;
47 std::vector<CalibratedSignal> temp_right_signals_;
48
49 // overriden functions:
50 void HistogramInit(DataMonitor& histograms) override;
51 void ExtraInit(FairRootManager* rootMan) override;
52 void SetExtraPar(FairRuntimeDb* rtdb) override;
53 void BeginOfEvent() override { hit_data_.clear(); };
54 void TriggeredExec() override;
55 void EndOfTask() override;
56 // [[nodiscard]] auto CheckConditions() const -> bool override {};
57
58 // non-virtual private functions:
59 void calibrate();
60 void calculate_calibrated_signals(const BarCalData& calBar,
61 /* inout */ std::vector<CalibratedSignal>& signals,
62 Side side);
63 void construct_hits(const std::vector<CalibratedSignal>& left_signals,
64 const std::vector<CalibratedSignal>& right_signals,
65 const HitModulePar& par,
66 /* inout */ std::vector<R3BNeulandHit>& hits);
67 [[nodiscard]] auto construct_hit(const LRPair<CalibratedSignal>& signalPair,
68 const HitModulePar& par) const -> R3BNeulandHit;
69 static auto get_calibrated_energy(const CalDataSignal& calSignal,
70 const HitModulePar& par,
71 R3B::Side side) -> ValueErrorD;
72 static auto get_calibrated_time(const CalDataSignal& calSignal,
73 const HitModulePar& par,
74 R3B::Side side) -> ValueErrorD;
75 static auto to_calibrated_signal(const CalDataSignal& calSignal,
76 const HitModulePar& par,
78 [[nodiscard]] auto signal_match_checking(const CalibratedSignal& first_signal,
79 const CalibratedSignal& second_signal,
80 const HitModulePar& par) -> bool;
81 [[nodiscard]] inline auto get_hit_time(double first_t, double second_t) const -> double;
82 };
83
84} // namespace R3B::Neuland
85template <>
86class fmt::formatter<R3B::Neuland::CalibratedSignal>
87{
88 public:
89 static constexpr auto parse(format_parse_context& ctx) { return ctx.end(); }
90 template <typename FmtContent>
91 constexpr auto format(const R3B::Neuland::CalibratedSignal& signal, FmtContent& ctn) const
92 {
93 return format_to(ctn.out(), "{{time: {}, energy: {}}}", signal.time, signal.energy);
94 }
95};
void SetExtraPar(FairRuntimeDb *rtdb) override
void ExtraInit(FairRootManager *rootMan) override
void SetGlobalTimeOffset(double offset)
Cal2HitTask(std::string_view name="R3BNeulandCal2Hit", int iVerbose=1)
void HistogramInit(DataMonitor &histograms) override
void SetDistanceToTarget(double distance)
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