GRSISort
Created by P.C. Bender
Developement Team: P.C. Bender, R. Dunlop, V. Bildstein
An extension of the ROOT analysis Framework
TIfin.h
Go to the documentation of this file.
1 #ifndef TIFIN_H
2 #define TIFIN_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 "TIfinHit.h"
19 #include "TSuppressed.h"
20 #include "TTransientBits.h"
21 
22 ////////////////////////////////////////////////////////////
23 ///
24 /// \class TIfin
25 ///
26 /// The TIfin class defines the observables and algorithms used
27 /// when analyzing IFIN data. It includes detector positions,
28 /// add-back methods, etc.
29 ///
30 ////////////////////////////////////////////////////////////
31 
32 class TIfin : public TSuppressed {
33 public:
34  enum class EIfinBits {
35  kIsAddbackSet = 1<<0,
36  kIsCrossTalkSet = 1<<1,
37  kIsSuppressedSet = 1<<2,
39  kBit4 = 1<<4,
40  kBit5 = 1<<5,
41  kBit6 = 1<<6,
42  kBit7 = 1<<7
43  };
44 
45  TIfin();
46  TIfin(const TIfin&);
47  ~TIfin() override;
48 
49 public:
50  TIfinHit* GetIfinHit(const Int_t& i);
51 
52  static TVector3 GetPosition(int DetNbr, int CryNbr = 5, double dist = 90.0); //!<!
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 ResetFlags() const;
58 
59  TIfin& operator=(const TIfin&); //!<!
60 
61 #if !defined(__CINT__) && !defined(__CLING__)
62  void SetAddbackCriterion(std::function<bool(const TDetectorHit*, const TDetectorHit*)> criterion)
63  {
64  fAddbackCriterion = std::move(criterion);
65  }
66  std::function<bool(const TDetectorHit*, const TDetectorHit*)> GetAddbackCriterion() const { return fAddbackCriterion; }
67 
68  bool AddbackCriterion(const TDetectorHit* hit1, const TDetectorHit* hit2) override { return fAddbackCriterion(hit1, hit2); }
69 #endif
70 
71  Int_t GetAddbackMultiplicity();
72  TIfinHit* GetAddbackHit(const int& i);
73  bool IsAddbackSet() const;
74  void ResetAddback();
75  void ResetSuppressed();
77  UShort_t GetNAddbackFrags(const size_t& idx);
78 
79  TIfinHit* GetSuppressedHit(const int& i);
80  Int_t GetSuppressedMultiplicity( const TBgo* bgo );
81  bool IsSuppressed() const;
82 
83 #if !defined(__CINT__) && !defined(__CLING__)
84  void SetSuppressionCriterion(std::function<bool(const TDetectorHit*, const TDetectorHit*)> criterion)
85  {
86  fSuppressionCriterion = std::move(criterion);
87  }
88  std::function<bool(const TDetectorHit*, const TDetectorHit*)> GetSuppressionCriterion() const { return fSuppressionCriterion; }
89 
90  bool SuppressionCriterion(const TDetectorHit* hit, const TDetectorHit* bgoHit) override { return fSuppressionCriterion(hit, bgoHit); }
91 #endif
92 
93  TIfinHit* GetSuppressedAddbackHit( const int& i );
94  Int_t GetSuppressedAddbackMultiplicity(const TBgo* bgo);
95  bool IsSuppressedAddbackSet() const;
96 
97 private:
98 #if !defined(__CINT__) && !defined(__CLING__)
99  static std::function<bool(const TDetectorHit*, const TDetectorHit*)> fAddbackCriterion;
100  static std::function<bool(const TDetectorHit*, const TDetectorHit*)> fSuppressionCriterion;
101 #endif
102 
103  // static bool fSetBGOHits; //!<! Flag that determines if BGOHits are being measured
104 
105  mutable TTransientBits<UChar_t> fIfinBits; // Transient member flags
106 
107  mutable std::vector<TDetectorHit*> fAddbackHits; //!<! Used to create addback hits on the fly
108  mutable std::vector<UShort_t> fAddbackFrags; //!<! Number of crystals involved in creating in the addback hit
109  mutable std::vector<TDetectorHit*> fSuppressedHits;
110  mutable std::vector<TDetectorHit*> fSuppressedAddbackHits;
111  mutable std::vector<UShort_t> fSuppressedAddbackFrags;
112 
113 public:
114  // static bool SetBGOHits() { return fSetBGOHits; } //!<!
115 
116 private:
117  static TVector3 gCloverPosition[17]; //!<! Position of each HPGe Clover
118  void ClearStatus() const { fIfinBits = 0; } //!<!
119  void SetBitNumber(EIfinBits bit, Bool_t set) const;
120  Bool_t TestBitNumber(EIfinBits bit) const { return fIfinBits.TestBit(bit); }
121 
122  // Cross-Talk stuff
123 public:
124  static const Double_t gStrongCT[2]; //!<!
125  static const Double_t gWeakCT[2]; //!<!
126  static const Double_t gCrossTalkPar[2][4][4]; //!<!
127  static Double_t CTCorrectedEnergy(const TIfinHit* const hit_to_correct, const TIfinHit* const other_hit,
128  Bool_t time_constraint = true);
129  Bool_t IsCrossTalkSet() const;
130  void FixCrossTalk();
131 
132 private:
133  // This is where the general untouchable functions live.
134  std::vector<TDetectorHit*>& GetAddbackVector(); //!<!
135  std::vector<UShort_t>& GetAddbackFragVector(); //!<!
136  std::vector<TDetectorHit*>& GetSuppressedVector();
137  std::vector<TDetectorHit*>& GetSuppressedAddbackVector();
138  std::vector<UShort_t>& GetSuppressedAddbackFragVector();
139  void SetAddback(bool flag = true) const;
140  void SetCrossTalk(bool flag = true) const;
141  void SetSuppressed(bool flag = true) const;
142  void SetSuppressedAddback(bool flag = true) const;
143 
144 public:
145  void Copy(TObject&) const override; //!<!
146  void Clear(Option_t* opt = "all") override; //!<!
147  void Print(Option_t* opt = "") const override; //!<!
148  void Print(std::ostream& out) const override;
149 
150  /// \cond CLASSIMP
151  ClassDefOverride(TIfin, 1) // Ifin Physics structure
152  /// \endcond
153 };
154 /*! @} */
155 #endif
Int_t GetAddbackMultiplicity()
Definition: TIfin.cxx:322
std::vector< TDetectorHit * > & GetAddbackVector()
!
Definition: TIfin.cxx:200
void SetSuppressedAddback(bool flag=true) const
Definition: TIfin.cxx:260
std::vector< TDetectorHit * > fAddbackHits
! Used to create addback hits on the fly
Definition: TIfin.h:107
EIfinBits
Definition: TIfin.h:34
bool AddbackCriterion(const TDetectorHit *hit1, const TDetectorHit *hit2) override
Definition: TIfin.h:68
std::vector< UShort_t > fSuppressedAddbackFrags
Definition: TIfin.h:111
Definition: TIfin.h:32
bool IsSuppressedAddbackSet() const
Definition: TIfin.cxx:240
void SetAddbackCriterion(std::function< bool(const TDetectorHit *, const TDetectorHit *)> criterion)
Definition: TIfin.h:62
void SetCrossTalk(bool flag=true) const
Definition: TIfin.cxx:250
Int_t GetSuppressedAddbackMultiplicity(const TBgo *bgo)
Definition: TIfin.cxx:350
static std::function< bool(const TDetectorHit *, const TDetectorHit *)> fSuppressionCriterion
Definition: TIfin.h:100
UShort_t GetNAddbackFrags(const size_t &idx)
Definition: TIfin.cxx:498
void SetBitNumber(EIfinBits bit, Bool_t set) const
Definition: TIfin.cxx:508
Bool_t TestBit(T f) const
void Print(Option_t *opt="") const override
!
Definition: TIfin.cxx:172
static TVector3 GetPosition(int DetNbr, int CryNbr=5, double dist=90.0)
!
Definition: TIfin.cxx:432
bool IsAddbackSet() const
Definition: TIfin.cxx:225
TIfin & operator=(const TIfin &)
!
Definition: TIfin.cxx:193
std::vector< UShort_t > & GetAddbackFragVector()
!
Definition: TIfin.cxx:205
TIfinHit * GetIfinHit(const Int_t &i)
Definition: TIfin.cxx:265
TIfinHit * GetSuppressedAddbackHit(const int &i)
Definition: TIfin.cxx:395
bool IsSuppressed() const
Definition: TIfin.cxx:235
TIfin()
Definition: TIfin.cxx:112
void FixCrossTalk()
Definition: TIfin.cxx:555
TTransientBits< UChar_t > fIfinBits
Definition: TIfin.h:105
void ResetAddback()
Definition: TIfin.cxx:475
std::vector< TDetectorHit * > fSuppressedHits
Definition: TIfin.h:109
void ResetSuppressedAddback()
Definition: TIfin.cxx:489
TIfinHit * GetSuppressedHit(const int &i)
Definition: TIfin.cxx:281
void AddFragment(const std::shared_ptr< const TFragment > &, TChannel *) override
!
Definition: TIfin.cxx:411
std::vector< UShort_t > & GetSuppressedAddbackFragVector()
Definition: TIfin.cxx:220
void ResetSuppressed()
Definition: TIfin.cxx:483
void SetSuppressionCriterion(std::function< bool(const TDetectorHit *, const TDetectorHit *)> criterion)
Definition: TIfin.h:84
void SetAddback(bool flag=true) const
Definition: TIfin.cxx:245
TIfinHit * GetAddbackHit(const int &i)
Definition: TIfin.cxx:379
void SetSuppressed(bool flag=true) const
Definition: TIfin.cxx:255
void ResetFlags() const
Definition: TIfin.cxx:470
static const Double_t gCrossTalkPar[2][4][4]
!
Definition: TIfin.h:126
bool SuppressionCriterion(const TDetectorHit *hit, const TDetectorHit *bgoHit) override
Definition: TIfin.h:90
std::function< bool(const TDetectorHit *, const TDetectorHit *)> GetSuppressionCriterion() const
Definition: TIfin.h:88
std::function< bool(const TDetectorHit *, const TDetectorHit *)> GetAddbackCriterion() const
Definition: TIfin.h:66
void ClearStatus() const
!
Definition: TIfin.h:118
static const char * GetColorFromNumber(int number)
Definition: TIfin.cxx:577
static Double_t CTCorrectedEnergy(const TIfinHit *const hit_to_correct, const TIfinHit *const other_hit, Bool_t time_constraint=true)
Definition: TIfin.cxx:514
Int_t GetSuppressedMultiplicity(const TBgo *bgo)
Definition: TIfin.cxx:297
static const Double_t gWeakCT[2]
!
Definition: TIfin.h:125
Bool_t TestBitNumber(EIfinBits bit) const
Definition: TIfin.h:120
static std::function< bool(const TDetectorHit *, const TDetectorHit *)> fAddbackCriterion
Definition: TIfin.h:99
std::vector< TDetectorHit * > fSuppressedAddbackHits
Definition: TIfin.h:110
std::vector< UShort_t > fAddbackFrags
! Number of crystals involved in creating in the addback hit
Definition: TIfin.h:108
void Clear(Option_t *opt="all") override
!
Definition: TIfin.cxx:154
static TVector3 gCloverPosition[17]
! Position of each HPGe Clover
Definition: TIfin.h:117
std::vector< TDetectorHit * > & GetSuppressedVector()
Definition: TIfin.cxx:210
void Copy(TObject &) const override
!
Definition: TIfin.cxx:130
~TIfin() override
Definition: TIfin.cxx:143
Bool_t IsCrossTalkSet() const
Definition: TIfin.cxx:230
Definition: TBgo.h:22
static const Double_t gStrongCT[2]
!
Definition: TIfin.h:124
std::vector< TDetectorHit * > & GetSuppressedAddbackVector()
Definition: TIfin.cxx:215