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 "R3BParView.h"
19#include "R3BValueError.h"
20#include <FairRootManager.h>
21#include <FairRuntimeDb.h>
22#include <R3BIOConnector.h>
23#include <R3BNeulandCalData2.h>
25#include <R3BNeulandHit.h>
26#include <R3BShared.h>
27#include <fmt/core.h>
28#include <string_view>
29#include <vector>
30
31namespace R3B::Neuland
32{
38
40 {
41 public:
42 explicit Cal2HitTask(std::string_view input_cal_data_name = "NeulandCalData",
43 std::string_view input_cal_2_hit_par_name = "NeulandHitPar",
44 std::string_view output_hit_data_name = "NeulandHits"
45
46 );
47
55 void SetGlobalTimeOffset(double offset) { global_time_offset_ = offset; }
56 void SetDistanceToTarget(double distance) { distance_to_target_ = distance; }
57
58 private:
64
65 // temporary variables to reduce dynamic allocations
66 std::vector<CalibratedSignal> temp_left_signals_;
67 std::vector<CalibratedSignal> temp_right_signals_;
68
69 // overriden functions:
70 void HistogramInit(DataMonitor& histograms) override;
71 void ExtraInit(FairRootManager* rootMan) override;
72 void SetExtraPar(FairRuntimeDb* rtdb) override;
73 void BeginOfEvent() override { hit_data_.clear(); };
74 void TriggeredExec() override;
75 void EndOfTask() override;
76 [[nodiscard]] auto CheckConditions() const -> bool override;
77
78 // non-virtual private functions:
79 void calibrate();
81 /* inout */ std::vector<CalibratedSignal>& signals,
82 Side side);
83 void construct_hits(const std::vector<CalibratedSignal>& left_signals,
84 const std::vector<CalibratedSignal>& right_signals,
85 const HitModulePar& par,
86 /* inout */ std::vector<R3BNeulandHit>& hits);
87 [[nodiscard]] auto construct_hit(const LRPair<CalibratedSignal>& signalPair,
88 const HitModulePar& par) const -> R3BNeulandHit;
89 static auto get_calibrated_energy(const CalDataSignal& calSignal,
90 const HitModulePar& par,
91 R3B::Side side) -> ValueErrorD;
92 static auto get_calibrated_time(const CalDataSignal& calSignal,
93 const HitModulePar& par,
94 R3B::Side side) -> ValueErrorD;
95 static auto to_calibrated_signal(const CalDataSignal& calSignal,
96 const HitModulePar& par,
97 R3B::Side side) -> CalibratedSignal;
98 [[nodiscard]] auto signal_match_checking(const CalibratedSignal& first_signal,
99 const CalibratedSignal& second_signal,
100 const HitModulePar& par) -> bool;
101 [[nodiscard]] inline auto get_hit_time(double first_t, double second_t) const -> double;
102 };
103
104} // namespace R3B::Neuland
105template <>
106class fmt::formatter<R3B::Neuland::CalibratedSignal>
107{
108 public:
109 static constexpr auto parse(format_parse_context& ctx) { return ctx.end(); }
110 template <typename FmtContent>
111 constexpr auto format(const R3B::Neuland::CalibratedSignal& signal, FmtContent& ctn) const
112 {
113 return fmt::format_to(ctn.out(), "{{time: {}, energy: {}}}", signal.time, signal.energy);
114 }
115};
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
InputParView< Cal2HitPar > cal_to_hit_par_
Cal2HitTask(std::string_view input_cal_data_name="NeulandCalData", std::string_view input_cal_2_hit_par_name="NeulandHitPar", std::string_view output_hit_data_name="NeulandHits")
static auto get_calibrated_time(const CalDataSignal &calSignal, const HitModulePar &par, R3B::Side side) -> ValueErrorD
void SetGlobalTimeOffset(double offset)
Set the global time offset relating to the reference bar.
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
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 CheckConditions() const -> bool override
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