AnalysisTree
Loading...
Searching...
No Matches
EventHeader.hpp
1/* Copyright (C) 2019-2021 GSI, Universität Tübingen, MEPhI
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Viktor Klochkov, Eugeny Kashirin, Ilya Selyuzhenkov */
4#ifndef ANALYSISTREE_BASEEVENTHEADER_H
5#define ANALYSISTREE_BASEEVENTHEADER_H
6
7#include "Container.hpp"
8#include <array>
9#include <stdexcept>
10
11class TVector3;
12
13namespace AnalysisTree {
14
18class EventHeader : public Container {
19 public:
20 EventHeader() = default;
21 explicit EventHeader(size_t id) : Container(id){};
22 explicit EventHeader(const Container& cont) : Container(cont) {}
23 EventHeader(size_t id, const BranchConfig& branch) noexcept : Container(id, branch) {}
24
25 EventHeader(const EventHeader& eh) = default;
26 EventHeader(EventHeader&& eh) = default;
27 EventHeader& operator=(EventHeader&& eh) = default;
28 EventHeader& operator=(const EventHeader& eh) = default;
29
33 ANALYSISTREE_ATTR_NODISCARD TVector3 GetVertexPosition3() const;
34
35 void SetVertexPosition3(const TVector3& pos);
36
40 void Reset() override;
41
42 template<typename T>
43 T GetField(Integer_t iField) const {
44 if (iField >= 0)
45 return Container::GetField<T>(iField);
46 else {
47 switch (iField) {
48 case EventHeaderFields::kVertexX: return GetVertexX();
49 case EventHeaderFields::kVertexY: return GetVertexY();
50 case EventHeaderFields::kVertexZ: return GetVertexZ();
51 case EventHeaderFields::kId: return GetId();
52 default: throw std::out_of_range("EventHeader::GetField - Index " + std::to_string(iField) + " is not found");
53 }
54 }
55 }
56
57 template<typename T>
58 void SetField(T value, Integer_t field_id) {
59 using AnalysisTree::EventHeaderFields::EventHeaderFields;
60 if (field_id >= 0) {
61 Container::SetField(value, field_id);
62 } else {
63 switch (field_id) {
64 case EventHeaderFields::kVertexX: vtx_pos_[Exyz::kX] = value; break;
65 case EventHeaderFields::kVertexY: vtx_pos_[Exyz::kY] = value; break;
66 case EventHeaderFields::kVertexZ: vtx_pos_[Exyz::kZ] = value; break;
67 case EventHeaderFields::kId: break;
68 default: throw std::runtime_error("Invalid field id");
69 }
70 }
71 }
72
73 ANALYSISTREE_ATTR_NODISCARD inline Floating_t GetVertexX() const { return vtx_pos_[Exyz::kX]; }
74 ANALYSISTREE_ATTR_NODISCARD inline Floating_t GetVertexY() const { return vtx_pos_[Exyz::kY]; }
75 ANALYSISTREE_ATTR_NODISCARD inline Floating_t GetVertexZ() const { return vtx_pos_[Exyz::kZ]; }
76
77 static constexpr size_t GetNumberOfChannels() { return 1; }// needed in order to have EventHeader similar to Detector
78 EventHeader* begin() { return this; }
79 EventHeader* end() { return this; }
80 const EventHeader* cbegin() const { return this; }
81 const EventHeader* cend() const { return this; }
82
83 ANALYSISTREE_ATTR_NODISCARD const EventHeader& GetChannel(size_t i) const;// needed in order to have EventHeader similar to Detector
84 ANALYSISTREE_ATTR_NODISCARD EventHeader& Channel(size_t i); // needed in order to have EventHeader similar to Detector
85 static void ClearChannels() { throw std::runtime_error("Not available for EventHeader"); }
86 static EventHeader* AddChannel() { throw std::runtime_error("Not available for EventHeader"); }
87
88 void Print() const noexcept override;
89
90 protected:
91 std::array<Floating_t, 3> vtx_pos_{{UndefValueFloat, UndefValueFloat, UndefValueFloat}};
92
93 ClassDefOverride(EventHeader, 2)
94};
95
96}// namespace AnalysisTree
97#endif//ANALYSISTREE_BASEEVENTHEADER_H
A class to store configuration of the Container.
Definition BranchConfig.hpp:89
ANALYSISTREE_ATTR_NODISCARD TVector3 GetVertexPosition3() const
Definition EventHeader.cpp:10
void Reset() override
Sets vertex position and all user-defined fields to undefined values.
Definition EventHeader.cpp:20
Cuts keep list of SimpleCuts. Logical AND is applied for all SimpleCut in the Cuts object.
Definition BranchConfig.cpp:10