GRSISort "v4.0.0.5"
An extension of the ROOT analysis Framework
Loading...
Searching...
No Matches
TGriffin.h
Go to the documentation of this file.
1#ifndef TGRIFFIN_H
2#define TGRIFFIN_H
3
4/** \addtogroup Detectors
5 * @{
6 */
7
8#include <utility>
9#include <vector>
10#include <cstdio>
11#include <functional>
12//#include <tuple>
13
14#include "TBits.h"
15#include "TVector3.h"
16
17#include "Globals.h"
18#include "TGriffinHit.h"
19#include "TSuppressed.h"
20#include "TTransientBits.h"
21#include "TSpline.h"
22
23class TGriffin : public TSuppressed {
24public:
35 enum class EGainBits { kLowGain,
36 kHighGain };
37
38 TGriffin();
39 TGriffin(const TGriffin&);
40 TGriffin(TGriffin&&) noexcept = default;
41 TGriffin& operator=(const TGriffin&); //!<!
42 TGriffin& operator=(TGriffin&&) noexcept = default;
43 ~TGriffin() override;
44
45 TGriffinHit* GetGriffinLowGainHit(const int& i); //!<!
46 TGriffinHit* GetGriffinHighGainHit(const int& i); //!<!
47 TGriffinHit* GetGriffinHit(const int& i) { return GetGriffinHit(i, GetDefaultGainType()); } //!<!
49 TDetectorHit* GetHit(const int& idx);
51 Short_t GetHighGainMultiplicity() const { return fGriffinHighGainHits.size(); }
52 Short_t GetMultiplicity() const override { return GetMultiplicity(GetDefaultGainType()); }
53
54 static TVector3 GetPosition(int DetNbr, int CryNbr = 5, double dist = 110.0); //!<!
55 static TVector3 GetDetectorPosition(int DetNbr); //!<!
56 static const char* GetColorFromNumber(int number);
57#ifndef __CINT__
58 void AddFragment(const std::shared_ptr<const TFragment>&, TChannel*) override; //!<!
59#endif
60 void BuildHits() override {} // no need to build any hits, everything already done in AddFragment
61
62 void ClearTransients() override
63 {
65 fGriffinBits = 0;
66 for(const auto& hit : fGriffinHighGainHits) {
67 hit->ClearTransients();
68 }
69 }
70 void ResetFlags() const;
71
72#if !defined(__CINT__) && !defined(__CLING__)
73 void SetAddbackCriterion(std::function<bool(const TDetectorHit*, const TDetectorHit*)> criterion)
74 {
75 fAddbackCriterion = std::move(criterion);
76 }
77 std::function<bool(const TDetectorHit*, const TDetectorHit*)> GetAddbackCriterion() const { return fAddbackCriterion; }
78
79 bool AddbackCriterion(const TDetectorHit* hit1, const TDetectorHit* hit2) override { return fAddbackCriterion(hit1, hit2); }
80#endif
81
85 TGriffinHit* GetAddbackLowGainHit(const int& i);
88 bool IsAddbackSet(const EGainBits& gain_type) const;
89 void ResetLowGainAddback(); //!<!
90 void ResetHighGainAddback(); //!<!
92 UShort_t GetNHighGainAddbackFrags(const size_t& idx);
93 UShort_t GetNLowGainAddbackFrags(const size_t& idx);
94 UShort_t GetNAddbackFrags(const size_t& idx) { return GetNAddbackFrags(idx, GetDefaultGainType()); }
95
96#if !defined(__CINT__) && !defined(__CLING__)
97 void SetSuppressionCriterion(std::function<bool(const TDetectorHit*, const TDetectorHit*)> criterion)
98 {
99 fSuppressionCriterion = std::move(criterion);
100 }
101 std::function<bool(const TDetectorHit*, const TDetectorHit*)> GetSuppressionCriterion() const { return fSuppressionCriterion; }
102
103 bool SuppressionCriterion(const TDetectorHit* hit, const TDetectorHit* bgoHit) override { return fSuppressionCriterion(hit, bgoHit); }
104#endif
105
106 TGriffinHit* GetSuppressedLowGainHit(const int& i); //!<!
107 TGriffinHit* GetSuppressedHighGainHit(const int& i); //!<!
109 Short_t GetSuppressedLowGainMultiplicity(const TBgo* bgo);
110 Short_t GetSuppressedHighGainMultiplicity(const TBgo* bgo);
112 bool IsSuppressed(const EGainBits& gain_type) const;
113 void ResetLowGainSuppressed(); //!<!
114 void ResetHighGainSuppressed(); //!<!
116
123 bool IsSuppressedAddbackSet(const EGainBits& gain_type) const;
127 UShort_t GetNHighGainSuppressedAddbackFrags(const size_t& idx);
128 UShort_t GetNLowGainSuppressedAddbackFrags(const size_t& idx);
129 UShort_t GetNSuppressedAddbackFrags(const size_t& idx) { return GetNSuppressedAddbackFrags(idx, GetDefaultGainType()); }
130
131private:
132#if !defined(__CINT__) && !defined(__CLING__)
133 static std::function<bool(const TDetectorHit*, const TDetectorHit*)> fAddbackCriterion;
134 static std::function<bool(const TDetectorHit*, const TDetectorHit*)> fSuppressionCriterion;
135#endif
136
137 std::vector<TDetectorHit*> fGriffinHighGainHits; // The set of crystal hits
138
139 // static bool fSetBGOHits; //!<! Flag that determines if BGOHits are being measured
140
141 static bool fSetCoreWave; //!<! Flag for Waveforms ON/OFF
142 // static bool fSetBGOWave; //!<! Flag for BGO Waveforms ON/OFF
143
144 int64_t fCycleStart; //!<! The start of the cycle
145 mutable TTransientBits<UChar_t> fGriffinBits; // Transient member flags
146
147 mutable std::vector<TDetectorHit*> fAddbackLowGainHits; //!<! Used to create addback hits on the fly
148 mutable std::vector<TDetectorHit*> fAddbackHighGainHits; //!<! Used to create addback hits on the fly
149 mutable std::vector<UShort_t> fAddbackLowGainFrags; //!<! Number of crystals involved in creating in the addback hit
150 mutable std::vector<UShort_t> fAddbackHighGainFrags; //!<! Number of crystals involved in creating in the addback hit
151
152 std::vector<TDetectorHit*> fSuppressedLowGainHits; //!<! The set of suppressed crystal hits
153 std::vector<TDetectorHit*> fSuppressedHighGainHits; //!<! The set of suppressed crystal hits
154
155 mutable std::vector<TDetectorHit*> fSuppressedAddbackLowGainHits; //!<! Used to create suppressed addback hits on the fly
156 mutable std::vector<TDetectorHit*> fSuppressedAddbackHighGainHits; //!<! Used to create suppressed addback hits on the fly
157 mutable std::vector<UShort_t> fSuppressedAddbackLowGainFrags; //!<! Number of crystals involved in creating in the suppressed addback hit
158 mutable std::vector<UShort_t> fSuppressedAddbackHighGainFrags; //!<! Number of crystals involved in creating in the suppressed addback hit
159
161
162public:
163 static bool SetCoreWave() { return fSetCoreWave; } //!<!
164 static void SetDefaultGainType(const EGainBits& gain_type);
166
167private:
168 static std::array<TVector3, 17> fCloverPosition; //!<! Position of each HPGe Clover
169 void ClearStatus() const { fGriffinBits = 0; } //!<!
170 void SetBitNumber(EGriffinBits bit, Bool_t set) const;
171 Bool_t TestBitNumber(EGriffinBits bit) const { return fGriffinBits.TestBit(bit); }
172
173 // Cross-Talk stuff
174public:
175 static Double_t CTCorrectedEnergy(const TGriffinHit* hit_to_correct, const TGriffinHit* other_hit, bool time_constraint = true);
176 Bool_t IsCrossTalkSet(const EGainBits& gain_type) const;
177 void FixLowGainCrossTalk();
179
180private:
181 // This is where the general untouchable functions live.
182 const std::vector<TDetectorHit*>& GetHitVector() const override { return GetHitVector(fDefaultGainType); } //!<!
183 std::vector<TDetectorHit*>& GetHitVector(const EGainBits& gain_type); //!<!
184 const std::vector<TDetectorHit*>& GetHitVector(const EGainBits& gain_type) const; //!<!
185 std::vector<TDetectorHit*>& GetAddbackVector(const EGainBits& gain_type); //!<!
186 std::vector<UShort_t>& GetAddbackFragVector(const EGainBits& gain_type); //!<!
187 TGriffinHit* GetGriffinHit(const int& i, const EGainBits& gain_type); //!<!
188 Short_t GetMultiplicity(const EGainBits& gain_type) const;
189 TGriffinHit* GetAddbackHit(const int& i, const EGainBits& gain_type);
190 Short_t GetAddbackMultiplicity(const EGainBits& gain_type);
191 void SetAddback(const EGainBits& gain_type, bool flag = true) const;
192 void ResetAddback(const EGainBits& gain_type); //!<!
193 UShort_t GetNAddbackFrags(const size_t& idx, const EGainBits& gain_type);
194
195 std::vector<TDetectorHit*>& GetSuppressedVector(const EGainBits& gain_type); //!<!
196 std::vector<TDetectorHit*>& GetSuppressedAddbackVector(const EGainBits& gain_type); //!<!
197 std::vector<UShort_t>& GetSuppressedAddbackFragVector(const EGainBits& gain_type); //!<!
198 TGriffinHit* GetSuppressedHit(const int& i, const EGainBits& gain_type); //!<!
199 Short_t GetSuppressedMultiplicity(const TBgo* bgo, const EGainBits& gain_type);
200 void SetSuppressed(const EGainBits& gain_type, bool flag = true) const;
201 void ResetSuppressed(const EGainBits& gain_type); //!<!
202 TGriffinHit* GetSuppressedAddbackHit(const int& i, const EGainBits& gain_type);
203 Short_t GetSuppressedAddbackMultiplicity(const TBgo* bgo, const EGainBits& gain_type);
204 void SetSuppressedAddback(const EGainBits& gain_type, bool flag = true) const;
205 void ResetSuppressedAddback(const EGainBits& gain_type); //!<!
206 UShort_t GetNSuppressedAddbackFrags(const size_t& idx, const EGainBits& gain_type);
207
208 void FixCrossTalk(const EGainBits& gain_type);
209 void SetCrossTalk(const EGainBits& gain_type, bool flag = true) const;
210
211public:
212 void Copy(TObject&) const override; //!<!
213 void Clear(Option_t* opt = "all") override; //!<!
214 void Print(Option_t* opt = "") const override; //!<!
215 void Print(std::ostream& out) const override; //!<!
216
217 /// \cond CLASSIMP
218 ClassDefOverride(TGriffin, 6) // Griffin Physics structure // NOLINT(readability-else-after-return)
219 /// \endcond
220};
221/*! @} */
222#endif
Definition TBgo.h:22
virtual void ClearTransients()
!
Definition TDetector.cxx:54
virtual Short_t GetMultiplicity() const
Definition TDetector.h:73
virtual TDetectorHit * GetHit(const int &index) const
Definition TDetector.cxx:61
void ResetHighGainAddback()
!
Definition TGriffin.cxx:553
bool IsSuppressed(const EGainBits &gain_type) const
Definition TGriffin.cxx:695
TGriffinHit * GetSuppressedHighGainHit(const int &i)
!
Definition TGriffin.cxx:680
void ResetSuppressedAddback()
!
Definition TGriffin.h:126
static const char * GetColorFromNumber(int number)
Definition TGriffin.cxx:664
std::function< bool(const TDetectorHit *, const TDetectorHit *)> GetSuppressionCriterion() const
Definition TGriffin.h:101
std::vector< TDetectorHit * > fSuppressedLowGainHits
! The set of suppressed crystal hits
Definition TGriffin.h:152
Short_t GetSuppressedAddbackLowGainMultiplicity(const TBgo *bgo)
Definition TGriffin.cxx:714
Short_t GetSuppressedHighGainMultiplicity(const TBgo *bgo)
Definition TGriffin.cxx:690
std::vector< UShort_t > & GetAddbackFragVector(const EGainBits &gain_type)
!
Definition TGriffin.cxx:332
UShort_t GetNHighGainSuppressedAddbackFrags(const size_t &idx)
Definition TGriffin.cxx:758
void Clear(Option_t *opt="all") override
!
Definition TGriffin.cxx:196
TGriffinHit * GetAddbackHit(const int &i)
Definition TGriffin.h:87
Short_t GetAddbackMultiplicity()
Definition TGriffin.h:84
static EGainBits fDefaultGainType
Definition TGriffin.h:160
void BuildHits() override
!
Definition TGriffin.h:60
Short_t GetSuppressedAddbackHighGainMultiplicity(const TBgo *bgo)
Definition TGriffin.cxx:719
void FixHighGainCrossTalk()
Definition TGriffin.cxx:638
static std::function< bool(const TDetectorHit *, const TDetectorHit *)> fAddbackCriterion
Definition TGriffin.h:133
Short_t GetAddbackLowGainMultiplicity()
Definition TGriffin.cxx:406
void ResetHighGainSuppressed()
!
Definition TGriffin.cxx:709
TGriffin(TGriffin &&) noexcept=default
std::vector< TDetectorHit * > & GetSuppressedVector(const EGainBits &gain_type)
!
Definition TGriffin.cxx:763
void Print(Option_t *opt="") const override
!
Definition TGriffin.cxx:238
std::vector< UShort_t > fSuppressedAddbackLowGainFrags
! Number of crystals involved in creating in the suppressed addback hit
Definition TGriffin.h:157
UShort_t GetNLowGainSuppressedAddbackFrags(const size_t &idx)
Definition TGriffin.cxx:753
TDetectorHit * GetHit(const int &idx)
Definition TGriffin.cxx:375
int64_t fCycleStart
! The start of the cycle
Definition TGriffin.h:144
static std::array< TVector3, 17 > fCloverPosition
! Position of each HPGe Clover
Definition TGriffin.h:57
static TVector3 GetPosition(int DetNbr, int CryNbr=5, double dist=110.0)
!
Definition TGriffin.cxx:501
void ResetAddback()
!
Definition TGriffin.h:91
void ResetLowGainAddback()
!
Definition TGriffin.cxx:548
TGriffinHit * GetAddbackHighGainHit(const int &i)
Definition TGriffin.cxx:451
void ResetLowGainSuppressed()
!
Definition TGriffin.cxx:704
TGriffinHit * GetGriffinLowGainHit(const int &i)
!
Definition TGriffin.cxx:380
void ClearStatus() const
!
Definition TGriffin.h:169
std::vector< TDetectorHit * > & GetSuppressedAddbackVector(const EGainBits &gain_type)
!
Definition TGriffin.cxx:772
UShort_t GetNSuppressedAddbackFrags(const size_t &idx)
Definition TGriffin.h:129
void FixLowGainCrossTalk()
Definition TGriffin.cxx:633
UShort_t GetNLowGainAddbackFrags(const size_t &idx)
Definition TGriffin.cxx:569
TGriffinHit * GetAddbackLowGainHit(const int &i)
Definition TGriffin.cxx:446
void SetCrossTalk(const EGainBits &gain_type, bool flag=true) const
Definition TGriffin.cxx:367
void FixCrossTalk(const EGainBits &gain_type)
Definition TGriffin.cxx:643
std::vector< TDetectorHit * > fGriffinHighGainHits
Definition TGriffin.h:137
UShort_t GetNAddbackFrags(const size_t &idx)
Definition TGriffin.h:94
void SetSuppressed(const EGainBits &gain_type, bool flag=true) const
Definition TGriffin.cxx:833
TGriffinHit * GetSuppressedAddbackHit(const int &i)
Definition TGriffin.h:122
void ResetHighGainSuppressedAddback()
!
Definition TGriffin.cxx:748
bool IsSuppressedAddbackSet(const EGainBits &gain_type) const
Definition TGriffin.cxx:734
std::vector< UShort_t > fAddbackHighGainFrags
! Number of crystals involved in creating in the addback hit
Definition TGriffin.h:150
bool IsAddbackSet(const EGainBits &gain_type) const
Definition TGriffin.cxx:341
void ResetFlags() const
Definition TGriffin.cxx:543
std::vector< TDetectorHit * > fAddbackHighGainHits
! Used to create addback hits on the fly
Definition TGriffin.h:148
TTransientBits< UChar_t > fGriffinBits
Definition TGriffin.h:145
Short_t GetAddbackHighGainMultiplicity()
Definition TGriffin.cxx:411
static std::function< bool(const TDetectorHit *, const TDetectorHit *)> fSuppressionCriterion
Definition TGriffin.h:134
Short_t GetSuppressedMultiplicity(const TBgo *bgo)
Definition TGriffin.h:111
Short_t GetSuppressedAddbackMultiplicity(const TBgo *bgo)
Definition TGriffin.h:119
Short_t GetMultiplicity() const override
Definition TGriffin.h:52
void SetSuppressedAddback(const EGainBits &gain_type, bool flag=true) const
Definition TGriffin.cxx:897
void ClearTransients() override
!
Definition TGriffin.h:62
TGriffinHit * GetSuppressedAddbackLowGainHit(const int &i)
Definition TGriffin.cxx:724
static EGainBits GetDefaultGainType()
Definition TGriffin.h:165
Short_t GetSuppressedLowGainMultiplicity(const TBgo *bgo)
Definition TGriffin.cxx:685
Short_t GetLowGainMultiplicity() const
Definition TGriffin.h:50
std::vector< UShort_t > fSuppressedAddbackHighGainFrags
! Number of crystals involved in creating in the suppressed addback hit
Definition TGriffin.h:158
bool SuppressionCriterion(const TDetectorHit *hit, const TDetectorHit *bgoHit) override
Definition TGriffin.h:103
std::vector< TDetectorHit * > fSuppressedAddbackLowGainHits
! Used to create suppressed addback hits on the fly
Definition TGriffin.h:155
UShort_t GetNHighGainAddbackFrags(const size_t &idx)
Definition TGriffin.cxx:574
Bool_t IsCrossTalkSet(const EGainBits &gain_type) const
Definition TGriffin.cxx:350
TGriffinHit * GetSuppressedLowGainHit(const int &i)
!
Definition TGriffin.cxx:675
void SetBitNumber(EGriffinBits bit, Bool_t set) const
Definition TGriffin.cxx:589
void ResetSuppressed()
!
Definition TGriffin.h:115
std::vector< TDetectorHit * > & GetAddbackVector(const EGainBits &gain_type)
!
Definition TGriffin.cxx:323
void SetSuppressionCriterion(std::function< bool(const TDetectorHit *, const TDetectorHit *)> criterion)
Definition TGriffin.h:97
void AddFragment(const std::shared_ptr< const TFragment > &, TChannel *) override
!
Definition TGriffin.cxx:466
std::vector< TDetectorHit * > fSuppressedAddbackHighGainHits
! Used to create suppressed addback hits on the fly
Definition TGriffin.h:156
TGriffinHit * GetSuppressedHit(const int &i)
!
Definition TGriffin.h:108
std::function< bool(const TDetectorHit *, const TDetectorHit *)> GetAddbackCriterion() const
Definition TGriffin.h:77
void SetAddbackCriterion(std::function< bool(const TDetectorHit *, const TDetectorHit *)> criterion)
Definition TGriffin.h:73
void SetAddback(const EGainBits &gain_type, bool flag=true) const
Definition TGriffin.cxx:359
const std::vector< TDetectorHit * > & GetHitVector() const override
!
Definition TGriffin.h:182
TGriffinHit * GetGriffinHit(const int &i)
!
Definition TGriffin.h:47
std::vector< UShort_t > fAddbackLowGainFrags
! Number of crystals involved in creating in the addback hit
Definition TGriffin.h:149
TGriffinHit * GetGriffinHighGainHit(const int &i)
!
Definition TGriffin.cxx:385
std::vector< TDetectorHit * > fAddbackLowGainHits
! Used to create addback hits on the fly
Definition TGriffin.h:147
static Double_t CTCorrectedEnergy(const TGriffinHit *hit_to_correct, const TGriffinHit *other_hit, bool time_constraint=true)
Definition TGriffin.cxx:595
std::vector< TDetectorHit * > fSuppressedHighGainHits
! The set of suppressed crystal hits
Definition TGriffin.h:153
static TVector3 GetDetectorPosition(int DetNbr)
!
Definition TGriffin.cxx:533
Bool_t TestBitNumber(EGriffinBits bit) const
Definition TGriffin.h:171
void ResetLowGainSuppressedAddback()
!
Definition TGriffin.cxx:743
static bool fSetCoreWave
! Flag for Waveforms ON/OFF
Definition TGriffin.h:141
static bool SetCoreWave()
!
Definition TGriffin.h:163
bool AddbackCriterion(const TDetectorHit *hit1, const TDetectorHit *hit2) override
Definition TGriffin.h:79
void Copy(TObject &) const override
!
Definition TGriffin.cxx:125
Short_t GetHighGainMultiplicity() const
Definition TGriffin.h:51
static void SetDefaultGainType(const EGainBits &gain_type)
Definition TGriffin.cxx:287
TGriffinHit * GetSuppressedAddbackHighGainHit(const int &i)
Definition TGriffin.cxx:729
std::vector< UShort_t > & GetSuppressedAddbackFragVector(const EGainBits &gain_type)
!
Definition TGriffin.cxx:781
Bool_t TestBit(T bit) const