GRSISort "v4.0.0.5"
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 <iostream>
11#include <set>
12#include <cstdio>
13#include <functional>
14
15#include "TMath.h"
16#include "TVector3.h"
17#include "TObject.h"
18#include "TClonesArray.h"
19#include "TRandom2.h"
20
21#include "TDetector.h"
22#include "TTigressHit.h"
23#include "TBgoHit.h"
24
25class TTigress : public TDetector {
26public:
27 enum class ETigressBits {
28 kAddbackSet = BIT(0),
29 kSuppression = BIT(1),
30 kBit2 = BIT(2),
31 kBit3 = BIT(3),
32 kBit4 = BIT(4),
33 kBit5 = BIT(5),
34 kBit6 = BIT(6),
35 kBit7 = BIT(7)
36 };
37
38 enum class ETigressGlobalBits {
39 kSetBGOWave = BIT(0),
40 kSetCoreWave = BIT(1),
41 kSetSegWave = BIT(2),
42 kSetBGOHits = BIT(3),
43 kForceCrystal = BIT(4),
44 kArrayBackPos = BIT(5),
45 kVectorsBuilt = BIT(6) // 110 or 145
46 };
47
48 TTigress();
49 TTigress(const TTigress&);
50 TTigress(TTigress&&) noexcept = default;
51 TTigress& operator=(const TTigress&); //!<!
52 TTigress& operator=(TTigress&&) noexcept = default;
53 ~TTigress() override = default;
54
55 // Dont know why these were changes to return by reference rather than pointer
56 // The tigress group prefer them the old way
57 TTigressHit* GetTigressHit(const int& i) const { return static_cast<TTigressHit*>(GetHit(i)); }
58 static TVector3 GetPosition(int DetNbr, int CryNbr, int SegNbr, double dist = 0., bool smear = false); //!<!
59 static TVector3 GetPosition(const TTigressHit&, double dist = 0., bool smear = false); //!<!
60
61 void AddBGO(TBgoHit& bgo) { fBgos.push_back(bgo); } //!<!
62 Short_t GetBGOMultiplicity() const { return fBgos.size(); } //!<!
63 int GetNBGOs() const { return fBgos.size(); } //!<!
64 TBgoHit GetBGO(int& i) const { return fBgos.at(i); } //!<!
65 TBgoHit& GetBGO(int& i) { return fBgos.at(i); } //!<!
66
68 TTigressHit* GetAddbackHit(const int&);
69 void ResetAddback(); //!<!
70 UShort_t GetNAddbackFrags(size_t idx) const;
71
72#ifndef __CINT__
73 void AddFragment(const std::shared_ptr<const TFragment>&, TChannel*) override; //!<!
74#endif
75 void BuildHits() override;
76
77 void ClearTransients() override
78 {
79 fTigressBits = 0;
81 }
82
83#if !defined(__CINT__) && !defined(__CLING__)
84 void SetAddbackCriterion(std::function<bool(TDetectorHit*, TDetectorHit*)> criterion)
85 {
86 fAddbackCriterion = std::move(criterion);
87 }
88
89 std::function<bool(TDetectorHit*, TDetectorHit*)> GetAddbackCriterion() const { return fAddbackCriterion; }
90 void SetSuppressionCriterion(std::function<bool(TDetectorHit*, TBgoHit&)> criterion)
91 {
92 fSuppressionCriterion = std::move(criterion);
93 }
94 std::function<bool(TDetectorHit*, TBgoHit&)> GetSuppressionCriterion() const { return fSuppressionCriterion; }
95#endif
96
97private:
98#if !defined(__CINT__) && !defined(__CLING__)
99 std::vector<std::vector<std::shared_ptr<const TFragment>>> SegmentFragments;
100 static std::function<bool(TDetectorHit*, TDetectorHit*)> fAddbackCriterion;
101 static std::function<bool(TDetectorHit*, TBgoHit&)> fSuppressionCriterion;
102#endif
105
106 static double fTargetOffset; //!<!
107 static double fRadialOffset; //!<!
108
109 // Vectors constructed from segment array and manual adjustments once at start of sort
110 static std::array<std::array<std::array<std::array<TVector3, 9>, 4>, 17>, 2> fPositionVectors; //!<!
111
112 static std::array<TVector3, 17> fCloverRadial; //!<! clover direction vectors
113 static std::array<std::array<TVector3, 2>, 17> fCloverCross; //!<! clover perpendicular vectors, for smearing
114
115 // These array contain the original data that is used
116 static std::array<std::array<std::array<double, 3>, 9>, 17> fGeBluePosition; //!<! detector segment XYZ
117 static std::array<std::array<std::array<double, 3>, 9>, 17> fGeGreenPosition; //!<!
118 static std::array<std::array<std::array<double, 3>, 9>, 17> fGeRedPosition; //!<!
119 static std::array<std::array<std::array<double, 3>, 9>, 17> fGeWhitePosition; //!<!
120 static std::array<std::array<std::array<double, 3>, 9>, 17> fGeBluePositionBack; //!<! detector segment XYZ
121 static std::array<std::array<std::array<double, 3>, 9>, 17> fGeGreenPositionBack; //!<!
122 static std::array<std::array<std::array<double, 3>, 9>, 17> fGeRedPositionBack; //!<!
123 static std::array<std::array<std::array<double, 3>, 9>, 17> fGeWhitePositionBack; //!<!
124
125 // void ClearStatus(); // WARNING: this will change the building behavior!
126 // void ClearGlobalStatus() { fGlobalTigressBits = 0; }
127 static void SetGlobalBit(ETigressGlobalBits bit, Bool_t set = true) { fGlobalTigressBits.SetBit(bit, set); }
128 static Bool_t TestGlobalBit(ETigressGlobalBits bit) { return (fGlobalTigressBits.TestBit(bit)); }
129
130 std::vector<TDetectorHit*> fAddbackHits; //!<! Used to create addback hits on the fly
131 std::vector<UShort_t> fAddbackFrags; //!<! Number of crystals involved in creating in the addback hit
132 std::vector<TBgoHit> fBgos;
133
134 static void BuildVectors(); //!<!
135
136public:
137 // Naming convention was off, couldnt find anything that used them in grsisort
138 // Left them as return bool to not break external code
139 static bool SetCoreWave(bool set = true)
140 {
142 return set;
143 } //!<!
144 static bool SetSegmentWave(bool set = true)
145 {
147 return set;
148 } //!<!
149 static bool SetBGOWave(bool set = true)
150 {
152 return set;
153 } //!<!
154 static bool SetForceCrystal(bool set = true)
155 {
157 return set;
158 } //!<!
159 static bool SetArrayBackPos(bool set = true)
160 {
162 BuildVectors();
163 return set;
164 } //!<!
165
172
173 static std::array<std::array<std::array<bool, 5>, 4>, 4> fBGOSuppression; //!<!
174
175 static void SetTargetOffset(double offset)
176 {
177 fTargetOffset = offset;
178 BuildVectors();
179 } //!<!
180 static void SetRadialOffset(double offset)
181 {
182 fRadialOffset = offset;
183 BuildVectors();
184 } //!<!
185
186 static double GetFaceDistance()
187 {
188 if(GetArrayBackPos()) {
189 return 145;
190 }
191 return 110;
192 }
193
194 void Clear(Option_t* opt = "") override; //!<!
195 void Print(Option_t* opt = "") const override; //!<!
196 void Print(std::ostream& out) const override; //!<!
197 void Copy(TObject&) const override; //!<!
198
199 /// \cond CLASSIMP
200 ClassDefOverride(TTigress, 7) // Tigress Physics structure // NOLINT(readability-else-after-return)
201 /// \endcond
202};
203
204std::underlying_type<TTigress::ETigressGlobalBits>::type operator|(TTigress::ETigressGlobalBits lhs, TTigress::ETigressGlobalBits rhs);
205
206/*! @} */
207#endif
virtual void ClearTransients()
!
Definition TDetector.cxx:54
virtual TDetectorHit * GetHit(const int &index) const
Definition TDetector.cxx:61
Int_t GetAddbackMultiplicity()
Definition TTigress.cxx:132
std::function< bool(TDetectorHit *, TDetectorHit *)> GetAddbackCriterion() const
Definition TTigress.h:89
std::vector< TBgoHit > fBgos
Definition TTigress.h:132
void SetAddbackCriterion(std::function< bool(TDetectorHit *, TDetectorHit *)> criterion)
Definition TTigress.h:84
void Copy(TObject &) const override
!
Definition TTigress.cxx:88
static bool SetCoreWave(bool set=true)
!
Definition TTigress.h:139
static bool GetVectorsBuilt()
!
Definition TTigress.h:171
std::vector< TDetectorHit * > fAddbackHits
! Used to create addback hits on the fly
Definition TTigress.h:130
static std::function< bool(TDetectorHit *, TDetectorHit *)> fAddbackCriterion
Definition TTigress.h:100
int GetNBGOs() const
!
Definition TTigress.h:63
static double GetFaceDistance()
Definition TTigress.h:186
void ResetAddback()
!
Definition TTigress.cxx:299
static std::array< std::array< std::array< double, 3 >, 9 >, 17 > fGeBluePositionBack
! detector segment XYZ
Definition TTigress.h:1075
UShort_t GetNAddbackFrags(size_t idx) const
Definition TTigress.cxx:311
static bool GetArrayBackPos()
!
Definition TTigress.h:170
TTigressHit * GetTigressHit(const int &i) const
Definition TTigress.h:57
TTigressHit * GetAddbackHit(const int &)
Definition TTigress.cxx:176
static bool GetCoreWave()
!
Definition TTigress.h:166
static std::array< TVector3, 17 > fCloverRadial
! clover direction vectors
Definition TTigress.h:438
static std::array< std::array< TVector3, 2 >, 17 > fCloverCross
! clover perpendicular vectors, for smearing
Definition TTigress.h:113
static bool SetSegmentWave(bool set=true)
!
Definition TTigress.h:144
static std::array< std::array< std::array< double, 3 >, 9 >, 17 > fGeBluePosition
! detector segment XYZ
Definition TTigress.h:456
static bool GetForceCrystal()
!
Definition TTigress.h:169
static bool GetSegmentWave()
!
Definition TTigress.h:167
static std::array< std::array< std::array< double, 3 >, 9 >, 17 > fGeWhitePositionBack
!
Definition TTigress.h:1540
static double fTargetOffset
!
Definition TTigress.h:106
static void SetTargetOffset(double offset)
!
Definition TTigress.h:175
static void SetGlobalBit(ETigressGlobalBits bit, Bool_t set=true)
Definition TTigress.h:127
void AddFragment(const std::shared_ptr< const TFragment > &, TChannel *) override
!
Definition TTigress.cxx:223
static bool SetArrayBackPos(bool set=true)
!
Definition TTigress.h:159
void BuildHits() override
!
Definition TTigress.cxx:188
static std::array< std::array< std::array< double, 3 >, 9 >, 17 > fGeGreenPosition
!
Definition TTigress.h:611
static std::array< std::array< std::array< double, 3 >, 9 >, 17 > fGeRedPositionBack
!
Definition TTigress.h:1385
static std::array< std::array< std::array< double, 3 >, 9 >, 17 > fGeRedPosition
!
Definition TTigress.h:766
TBgoHit GetBGO(int &i) const
!
Definition TTigress.h:64
std::vector< std::vector< std::shared_ptr< const TFragment > > > SegmentFragments
Definition TTigress.h:99
static TVector3 GetPosition(int DetNbr, int CryNbr, int SegNbr, double dist=0., bool smear=false)
!
Definition TTigress.cxx:326
static void BuildVectors()
!
Definition TTigress.cxx:352
void SetSuppressionCriterion(std::function< bool(TDetectorHit *, TBgoHit &)> criterion)
Definition TTigress.h:90
static std::function< bool(TDetectorHit *, TBgoHit &)> fSuppressionCriterion
Definition TTigress.h:101
static Bool_t TestGlobalBit(ETigressGlobalBits bit)
Definition TTigress.h:128
static std::array< std::array< std::array< double, 3 >, 9 >, 17 > fGeGreenPositionBack
!
Definition TTigress.h:1230
void ClearTransients() override
!
Definition TTigress.h:77
TTigress(TTigress &&) noexcept=default
void Clear(Option_t *opt="") override
!
Definition TTigress.cxx:100
void AddBGO(TBgoHit &bgo)
!
Definition TTigress.h:61
std::function< bool(TDetectorHit *, TBgoHit &)> GetSuppressionCriterion() const
Definition TTigress.h:94
static void SetRadialOffset(double offset)
!
Definition TTigress.h:180
TTransientBits< UShort_t > fTigressBits
Definition TTigress.h:104
ETigressGlobalBits
Definition TTigress.h:38
static bool SetBGOWave(bool set=true)
!
Definition TTigress.h:149
void Print(Option_t *opt="") const override
!
Definition TTigress.cxx:111
static TTransientBits< UShort_t > fGlobalTigressBits
!
Definition TTigress.h:103
static bool SetForceCrystal(bool set=true)
!
Definition TTigress.h:154
Short_t GetBGOMultiplicity() const
!
Definition TTigress.h:62
static std::array< std::array< std::array< double, 3 >, 9 >, 17 > fGeWhitePosition
!
Definition TTigress.h:921
static std::array< std::array< std::array< std::array< TVector3, 9 >, 4 >, 17 >, 2 > fPositionVectors
!
Definition TTigress.h:110
static bool GetBGOWave()
!
Definition TTigress.h:168
static double fRadialOffset
!
Definition TTigress.h:107
std::vector< UShort_t > fAddbackFrags
! Number of crystals involved in creating in the addback hit
Definition TTigress.h:131
static std::array< std::array< std::array< bool, 5 >, 4 >, 4 > fBGOSuppression
!
Definition TTigress.h:1694
TBgoHit & GetBGO(int &i)
!
Definition TTigress.h:65
void SetBit(T bit, Bool_t flag)
Bool_t TestBit(T bit) const
std::underlying_type< TTigress::ETigressGlobalBits >::type operator|(TTigress::ETigressGlobalBits lhs, TTigress::ETigressGlobalBits rhs)
Definition TTigress.cxx:72