R3BROOT
R3B analysis software
Loading...
Searching...
No Matches
R3BNeulandDigitizer.h
Go to the documentation of this file.
1/******************************************************************************
2 * Copyright (C) 2019 GSI Helmholtzzentrum für Schwerionenforschung GmbH *
3 * Copyright (C) 2019-2025 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#include "FairTask.h"
16#include "Filterable.h"
17#include "NeulandPointFilter.h"
18#include "NeulandSimCalData.h"
19#include "R3BDataMonitor.h"
20#include "R3BDigitizingEngine.h"
23#include "R3BDigitizingTamex.h"
24#include "R3BIOConnector.h"
25#include "R3BNeulandGeoPar.h"
26#include "R3BNeulandHit.h"
27#include "R3BNeulandPoint.h"
28#include <R3BIOConnector.h>
29#include <TClonesArray.h>
30#include <TH1.h>
31
32class TGeoNode;
33class TH1F;
34class TH2F;
35
47
48namespace Digitizing = R3B::Digitizing;
49
50class R3BNeulandDigitizer : public FairTask
51{
52 public:
53 enum class Options : uint8_t
54 {
57 };
61 template <typename Type>
63 template <typename Type>
65
67 explicit R3BNeulandDigitizer(std::unique_ptr<Digitizing::DigitizingEngineInterface> engine,
68 std::string_view points_name = "NeulandPoints",
69 std::string_view hits_name = "NeulandHits",
70 std::string_view cal_hits_name = "NeulandSimCal");
71
72 void SetEngine(std::unique_ptr<Digitizing::DigitizingEngineInterface> engine);
73 void AddFilter(const Filterable<R3BNeulandHit&>::Filter& filter) { hit_filters_.Add(filter); }
74 void AddFilterCal(const Filterable<R3B::Neuland::SimCalData&>::Filter& filter) { fCalHitFilters.Add(filter); }
76 void SetNeulandPointFilter(R3B::Neuland::BitSetParticle particle, double minimum_allowed_energy_gev);
77
78 void EnableCalDataOutput(bool calc_cal) { is_cal_output_ = calc_cal; }
79 [[nodiscard]] auto HasCalDataOutput() const -> bool { return is_cal_output_; }
80
81 private:
82 bool is_cal_output_ = false;
83
84 R3B::InputVectorConnector<R3BNeulandPoint> neuland_points_{ "NeulandPoints" };
85 R3B::OutputVectorConnector<R3BNeulandHit> neuland_hits_{ "NeulandHits" };
86 R3B::OutputVectorConnector<R3B::Neuland::SimCalData> neuland_cal_hits_{ "NeulandSimCal" };
87
88 std::unique_ptr<Digitizing::DigitizingEngineInterface> digitizing_engine_; // owning
89
90 Filterable<R3BNeulandHit&> hit_filters_;
91 Filterable<R3B::Neuland::SimCalData&> fCalHitFilters;
92
93 R3BNeulandGeoPar* neuland_geo_par_ = nullptr; // non-owning
94 NeulandPointFilter neuland_point_filter_;
95
96 R3B::DataMonitor data_monitor_;
97 TH1I* hist_multi_one_ = nullptr;
98 TH1I* hist_multi_two_ = nullptr;
99 TH1F* hist_rl_time_to_trig_ = nullptr;
100
101 void fill_cal_data(const std::map<int, std::unique_ptr<R3B::Digitizing::Paddle>>& paddles);
102
103 auto Init() -> InitStatus override;
104 void Finish() override;
105 void SetParContainers() override;
106 void Exec(Option_t* /*option*/) override;
107
108 public:
109 template <typename... Args>
110 explicit R3BNeulandDigitizer(Options option, Args&&... args)
112 {
113 switch (option)
114 {
117 UseChannel<TamexChannel>(std::forward<Args>(args)...));
118 break;
121 UseChannel<TacquilaChannel>(std::forward<Args>(args)...));
122 break;
123 }
124 }
125 ClassDefOverride(R3BNeulandDigitizer, 1) // NOLINT
126};
std::function< bool(const T)> Filter
Definition Filterable.h:24
NeuLAND digitizing finder task.
auto Init() -> InitStatus override
void Exec(Option_t *) override
R3BNeulandDigitizer(Options option, Args &&... args)
void SetParContainers() override
Digitizing::Neuland::TacQuila::Channel TacquilaChannel
void EnableCalDataOutput(bool calc_cal)
auto HasCalDataOutput() const -> bool
void SetEngine(std::unique_ptr< Digitizing::DigitizingEngineInterface > engine)
void AddFilterCal(const Filterable< R3B::Neuland::SimCalData & >::Filter &filter)
Digitizing::Neuland::Tamex::Channel TamexChannel
Digitizing::Neuland::NeulandPaddle NeulandPaddle
Digitizing::UsePaddle< Type > UsePaddle
void SetNeulandPointFilter(R3B::Neuland::BitSetParticle particle)
Digitizing::UseChannel< Type > UseChannel
void AddFilter(const Filterable< R3BNeulandHit & >::Filter &filter)
auto CreateEngine(Args &&... args) -> std::unique_ptr< decltype(DigitizingEngine{ std::forward< Args >(args)... })>
InputConnector< std::vector< ElementType > > InputVectorConnector
OutputConnector< std::vector< ElementType > > OutputVectorConnector