GRSISort "v4.1.1.0"
An extension of the ROOT analysis Framework
Loading...
Searching...
No Matches
TTigress.h
Go to the documentation of this file.
1#ifndef TTIGRESS_H
2#define TTIGRESS_H
3
4/** \addtogroup Detectors
5 * @{
6 */
7
8#include <utility>
9#include <vector>
10#include <cstdio>
11#include <functional>
12
13#include "TVector3.h"
14
15#include "TTigressHit.h"
16#include "TSuppressed.h"
17#include "TTransientBits.h"
18
19class TTigress : public TSuppressed {
20public:
21 enum class ETigressBits : std::uint8_t {
22 kIsAddbackSet = 1 << 0,
23 kSpare1 = 1 << 1,
24 kIsCrossTalkSet = 1 << 2,
25 kSpare3 = 1 << 3,
26 kIsSuppressed = 1 << 4,
27 kSpare5 = 1 << 5,
29 kSpare7 = 1 << 7
30 };
31
32 enum class ETigressGlobalBits : std::uint8_t {
33 kSpare0 = BIT(0),
34 kSetCoreWave = BIT(1),
35 kSetSegWave = BIT(2),
36 kSpare3 = BIT(3),
37 kSpare4 = BIT(4),
38 kArrayBackPos = BIT(5),
39 kVectorsBuilt = BIT(6) // 110 or 145
40 };
41
42 TTigress();
43 TTigress(const TTigress&);
44 TTigress(TTigress&&) noexcept = default;
45 TTigress& operator=(const TTigress&); //!<!
46 TTigress& operator=(TTigress&&) noexcept = default;
47 ~TTigress() override;
48
49 TTigressHit* GetTigressHit(const int& i); //!<!
50
51 static TVector3 GetPosition(int DetNbr, int CryNbr, int SegNbr, double dist = 110.0, bool smear = false); //!<!
52 static TVector3 GetPosition(const TTigressHit* hit, double dist = 110.0, bool smear = false); //!<!
53 static const char* GetColorFromNumber(int number);
54#ifndef __CINT__
55 void AddFragment(const std::shared_ptr<const TFragment>&, TChannel*) override; //!<!
56#endif
57 void BuildHits() override;
58
59 void ClearTransients() override
60 {
62 fTigressBits = 0;
63 }
64 void ResetFlags() const;
65
66#if !defined(__CINT__) && !defined(__CLING__)
67 void SetAddbackCriterion(std::function<bool(const TDetectorHit*, const TDetectorHit*)> criterion)
68 {
69 fAddbackCriterion = std::move(criterion);
70 }
71 std::function<bool(const TDetectorHit*, const TDetectorHit*)> GetAddbackCriterion() const { return fAddbackCriterion; }
72
73 bool AddbackCriterion(const TDetectorHit* hit1, const TDetectorHit* hit2) override { return fAddbackCriterion(hit1, hit2); }
74#endif
75
76 Short_t GetAddbackMultiplicity();
77 TTigressHit* GetAddbackHit(const int& i);
78 bool IsAddbackSet() const;
79 void ResetAddback(); //!<!
80 UShort_t GetNAddbackFrags(const size_t& idx);
81
82#if !defined(__CINT__) && !defined(__CLING__)
83 void SetSuppressionCriterion(std::function<bool(const TDetectorHit*, const TDetectorHit*)> criterion)
84 {
85 fSuppressionCriterion = std::move(criterion);
86 }
87 std::function<bool(const TDetectorHit*, const TDetectorHit*)> GetSuppressionCriterion() const { return fSuppressionCriterion; }
88
89 bool SuppressionCriterion(const TDetectorHit* hit, const TDetectorHit* bgoHit) override { return fSuppressionCriterion(hit, bgoHit); }
90#endif
91
92 TTigressHit* GetSuppressedHit(const int& i); //!<!
93 Short_t GetSuppressedMultiplicity(const TBgo* bgo);
94 bool IsSuppressed() const;
95 void ResetSuppressed();
96
97 Short_t GetSuppressedAddbackMultiplicity(const TBgo* bgo);
99 bool IsSuppressedAddbackSet() const;
101 UShort_t GetNSuppressedAddbackFrags(const size_t& idx);
102
103 // Cross-Talk stuff
104 static Double_t CTCorrectedEnergy(const TTigressHit* hit_to_correct, const TTigressHit* other_hit, bool time_constraint = true);
105 Bool_t IsCrossTalkSet() const;
106 void FixCrossTalk();
107
108 static void SetTargetOffset(double offset)
109 {
110 fTargetOffset = offset;
111 BuildVectors();
112 }
113 static void SetRadialOffset(double offset)
114 {
115 fRadialOffset = offset;
116 BuildVectors();
117 }
118
119 static double GetFaceDistance()
120 {
122 return 145;
123 }
124 return 110;
125 }
126
127private:
128#if !defined(__CINT__) && !defined(__CLING__)
129 static std::function<bool(const TDetectorHit*, const TDetectorHit*)> fAddbackCriterion;
130 static std::function<bool(const TDetectorHit*, const TDetectorHit*)> fSuppressionCriterion;
131#endif
132
133 static double fTargetOffset; //!<!
134 static double fRadialOffset; //!<!
135
136 // Vectors constructed from segment array and manual adjustments once at start of sort
137 static std::array<std::array<std::array<std::array<TVector3, 9>, 4>, 17>, 2> fPositionVectors; //!<!
138
139 static std::array<TVector3, 17> fCloverRadial; //!<! direction vector of each HPGe Clover
140 static std::array<std::array<TVector3, 2>, 17> fCloverCross; //!<! clover perpendicular vectors, for smearing
141
142 // These array contain the original data that is used
143 static std::array<std::array<std::array<double, 3>, 9>, 17> fGeBluePosition; //!<! detector segment XYZ
144 static std::array<std::array<std::array<double, 3>, 9>, 17> fGeGreenPosition; //!<!
145 static std::array<std::array<std::array<double, 3>, 9>, 17> fGeRedPosition; //!<!
146 static std::array<std::array<std::array<double, 3>, 9>, 17> fGeWhitePosition; //!<!
147 static std::array<std::array<std::array<double, 3>, 9>, 17> fGeBluePositionBack; //!<! detector segment XYZ
148 static std::array<std::array<std::array<double, 3>, 9>, 17> fGeGreenPositionBack; //!<!
149 static std::array<std::array<std::array<double, 3>, 9>, 17> fGeRedPositionBack; //!<!
150 static std::array<std::array<std::array<double, 3>, 9>, 17> fGeWhitePositionBack; //!<!
151
153 mutable TTransientBits<uint8_t> fTigressBits; // Transient member flags
154
155 mutable std::vector<TDetectorHit*> fAddbackHits; //!<! Used to create addback hits on the fly
156 mutable std::vector<UShort_t> fAddbackFrags; //!<! Number of crystals involved in creating in the addback hit
157
158 std::vector<TDetectorHit*> fSuppressedHits; //!<! The set of suppressed crystal hits
159
160 mutable std::vector<TDetectorHit*> fSuppressedAddbackHits; //!<! Used to create suppressed addback hits on the fly
161 mutable std::vector<UShort_t> fSuppressedAddbackFrags; //!<! Number of crystals involved in creating in the suppressed addback hit
162
163 // This is where the general untouchable functions live.
164 void ClearStatus() const { fTigressBits = 0; } //!<!
165 void SetBitNumber(ETigressBits bit, Bool_t set) const;
166 Bool_t TestBitNumber(ETigressBits bit) const { return fTigressBits.TestBit(bit); }
167 static void SetGlobalBit(ETigressGlobalBits bit, Bool_t set = true) { fGlobalTigressBits.SetBit(bit, set); }
168 static Bool_t TestGlobalBit(ETigressGlobalBits bit) { return (fGlobalTigressBits.TestBit(bit)); }
169
170 void SetAddback(bool flag = true) const;
171 void SetSuppressed(bool flag = true) const;
172 void SetSuppressedAddback(bool flag = true) const;
173
174 void SetCrossTalk(bool flag = true) const;
175
176 static void BuildVectors();
177
178public:
179 void Copy(TObject&) const override; //!<!
180 void Clear(Option_t* opt = "all") override; //!<!
181 void Print(Option_t* opt = "") const override; //!<!
182 void Print(std::ostream& out) const override; //!<!
183
184 /// \cond CLASSIMP
185 ClassDefOverride(TTigress, 7) // Tigress Physics structure // NOLINT(readability-else-after-return)
186 /// \endcond
187};
188/*! @} */
189#endif
Definition TBgo.h:16
virtual void ClearTransients()
!
Definition TDetector.cxx:77
void SetAddback(bool flag=true) const
Definition TTigress.cxx:160
static TVector3 GetPosition(int DetNbr, int CryNbr, int SegNbr, double dist=110.0, bool smear=false)
!
Definition TTigress.cxx:562
void ResetFlags() const
Definition TTigress.cxx:324
TTigressHit * GetSuppressedHit(const int &i)
!
Definition TTigress.cxx:436
bool IsSuppressedAddbackSet() const
Definition TTigress.cxx:431
void Copy(TObject &) const override
!
Definition TTigress.cxx:58
std::vector< TDetectorHit * > fAddbackHits
! Used to create addback hits on the fly
Definition TTigress.h:155
static double GetFaceDistance()
Definition TTigress.h:119
void ResetAddback()
!
Definition TTigress.cxx:329
std::vector< UShort_t > fSuppressedAddbackFrags
! Number of crystals involved in creating in the suppressed addback hit
Definition TTigress.h:161
static std::array< std::array< std::array< double, 3 >, 9 >, 17 > fGeBluePositionBack
! detector segment XYZ
Definition TTigress.h:1306
TTigressHit * GetTigressHit(const int &i)
!
Definition TTigress.cxx:170
static TTransientBits< uint8_t > fGlobalTigressBits
!
Definition TTigress.h:152
Short_t GetAddbackMultiplicity()
Definition TTigress.cxx:191
bool AddbackCriterion(const TDetectorHit *hit1, const TDetectorHit *hit2) override
Definition TTigress.h:73
Short_t GetSuppressedAddbackMultiplicity(const TBgo *bgo)
Definition TTigress.cxx:505
ETigressGlobalBits
Definition TTigress.h:32
bool IsSuppressed() const
Definition TTigress.cxx:426
static std::array< TVector3, 17 > fCloverRadial
! direction vector of each HPGe Clover
Definition TTigress.h:669
std::vector< TDetectorHit * > fSuppressedAddbackHits
! Used to create suppressed addback hits on the fly
Definition TTigress.h:160
void SetAddbackCriterion(std::function< bool(const TDetectorHit *, const TDetectorHit *)> criterion)
Definition TTigress.h:67
static std::array< std::array< TVector3, 2 >, 17 > fCloverCross
! clover perpendicular vectors, for smearing
Definition TTigress.h:140
static std::array< std::array< std::array< double, 3 >, 9 >, 17 > fGeBluePosition
! detector segment XYZ
Definition TTigress.h:687
UShort_t GetNSuppressedAddbackFrags(const size_t &idx)
Definition TTigress.cxx:544
void SetSuppressedAddback(bool flag=true) const
Definition TTigress.cxx:529
std::function< bool(const TDetectorHit *, const TDetectorHit *)> GetSuppressionCriterion() const
Definition TTigress.h:87
static std::array< std::array< std::array< double, 3 >, 9 >, 17 > fGeWhitePositionBack
!
Definition TTigress.h:1771
void ClearStatus() const
!
Definition TTigress.h:164
static double fTargetOffset
!
Definition TTigress.h:133
bool IsAddbackSet() const
Definition TTigress.cxx:150
static void SetTargetOffset(double offset)
Definition TTigress.h:108
static void SetGlobalBit(ETigressGlobalBits bit, Bool_t set=true)
Definition TTigress.h:167
void AddFragment(const std::shared_ptr< const TFragment > &, TChannel *) override
!
Definition TTigress.cxx:246
Short_t GetSuppressedMultiplicity(const TBgo *bgo)
Definition TTigress.cxx:452
void ResetSuppressed()
Definition TTigress.cxx:480
void BuildHits() override
!
Definition TTigress.cxx:225
static std::array< std::array< std::array< double, 3 >, 9 >, 17 > fGeGreenPosition
!
Definition TTigress.h:842
TTransientBits< uint8_t > fTigressBits
Definition TTigress.h:153
TTigressHit * GetSuppressedAddbackHit(const int &i)
Definition TTigress.cxx:489
static std::array< std::array< std::array< double, 3 >, 9 >, 17 > fGeRedPositionBack
!
Definition TTigress.h:1616
static std::array< std::array< std::array< double, 3 >, 9 >, 17 > fGeRedPosition
!
Definition TTigress.h:997
std::vector< TDetectorHit * > fSuppressedHits
! The set of suppressed crystal hits
Definition TTigress.h:158
static Double_t CTCorrectedEnergy(const TTigressHit *hit_to_correct, const TTigressHit *other_hit, bool time_constraint=true)
Definition TTigress.cxx:356
static void BuildVectors()
Definition TTigress.cxx:585
static const char * GetColorFromNumber(int number)
Definition TTigress.cxx:415
static std::function< bool(const TDetectorHit *, const TDetectorHit *)> fAddbackCriterion
Definition TTigress.h:129
void Clear(Option_t *opt="all") override
!
Definition TTigress.cxx:97
static Bool_t TestGlobalBit(ETigressGlobalBits bit)
Definition TTigress.h:168
static std::array< std::array< std::array< double, 3 >, 9 >, 17 > fGeGreenPositionBack
!
Definition TTigress.h:1461
void SetSuppressionCriterion(std::function< bool(const TDetectorHit *, const TDetectorHit *)> criterion)
Definition TTigress.h:83
void ResetSuppressedAddback()
Definition TTigress.cxx:534
void ClearTransients() override
!
Definition TTigress.h:59
TTigress(TTigress &&) noexcept=default
void SetBitNumber(ETigressBits bit, Bool_t set) const
Definition TTigress.cxx:350
Bool_t TestBitNumber(ETigressBits bit) const
Definition TTigress.h:166
void SetCrossTalk(bool flag=true) const
Definition TTigress.cxx:165
static void SetRadialOffset(double offset)
Definition TTigress.h:113
void FixCrossTalk()
Definition TTigress.cxx:394
TTigressHit * GetAddbackHit(const int &i)
Definition TTigress.cxx:215
Bool_t IsCrossTalkSet() const
Definition TTigress.cxx:155
void SetSuppressed(bool flag=true) const
Definition TTigress.cxx:475
void Print(Option_t *opt="") const override
!
Definition TTigress.cxx:119
static std::function< bool(const TDetectorHit *, const TDetectorHit *)> fSuppressionCriterion
Definition TTigress.h:130
UShort_t GetNAddbackFrags(const size_t &idx)
Definition TTigress.cxx:340
std::function< bool(const TDetectorHit *, const TDetectorHit *)> GetAddbackCriterion() const
Definition TTigress.h:71
static std::array< std::array< std::array< double, 3 >, 9 >, 17 > fGeWhitePosition
!
Definition TTigress.h:1152
static std::array< std::array< std::array< std::array< TVector3, 9 >, 4 >, 17 >, 2 > fPositionVectors
!
Definition TTigress.h:137
static double fRadialOffset
!
Definition TTigress.h:134
std::vector< UShort_t > fAddbackFrags
! Number of crystals involved in creating in the addback hit
Definition TTigress.h:156
bool SuppressionCriterion(const TDetectorHit *hit, const TDetectorHit *bgoHit) override
Definition TTigress.h:89
void SetBit(T bit, Bool_t flag)
Bool_t TestBit(T bit) const