GRSISort "v4.0.0.5"
An extension of the ROOT analysis Framework
Loading...
Searching...
No Matches
TSiLi.h
Go to the documentation of this file.
1#ifndef TSILI_H
2#define TSILI_H
3
4/** \addtogroup Detectors
5 * @{
6 */
7
8#include <cstdio>
9#include <iostream>
10#include <TRandom2.h>
11
12#include "TDetector.h"
13#include "TSiLiHit.h"
14
15class TSiLi : public TDetector {
16public:
17 enum class ESiLiBits {
18 kAddbackSet = BIT(0),
19 kSiLiBit1 = BIT(1),
20 kSiLiBit2 = BIT(2),
21 kSiLiBit3 = BIT(3),
22 kSiLiBit4 = BIT(4),
23 kSiLiBit5 = BIT(5),
24 kSiLiBit6 = BIT(6),
25 kSiLiBit7 = BIT(7)
26 };
27
28 TSiLi();
29 TSiLi(const TSiLi&);
30 TSiLi(TSiLi&&) noexcept = default;
31 TSiLi& operator=(const TSiLi&); //
32 TSiLi& operator=(TSiLi&&) noexcept = default;
33 ~TSiLi() override = default;
34
35#ifndef __CINT__
36 void AddFragment(const std::shared_ptr<const TFragment>&, TChannel*) override; //!<!
37#endif
38 void BuildHits() override {} // no need to build any hits, everything already done in AddFragment
39
40 void Copy(TObject&) const override;
41 void Clear(Option_t* opt = "") override;
42 void Print(Option_t* opt = "") const override;
43 void Print(std::ostream& out) const override; //!<!
44
45 TSiLiHit* GetSiLiHit(const Int_t& i = 0) const { return static_cast<TSiLiHit*>(GetHit(i)); }
46
47 TSiLiHit* GetAddbackHit(const Int_t& i = 0);
48 TSiLiHit* GetRejectHit(const Int_t& i = 0);
51
53 {
55 fAddbackHits.clear();
56 }
57
59 {
60 for(auto& fSiLiHit : Hits()) {
61 static_cast<TSiLiHit*>(fSiLiHit)->UseFitCharge();
62 }
63 }
64
65 void CoincidenceTime(double time)
66 {
69 }
70
71 void RejectCrosstalk(bool reject = true)
72 {
75 }
76
77 static TVector3 GetPosition(int ring, int sector, bool smear = false);
78
79 static std::vector<TGraph> UpstreamShapes();
80
81 static double fSiLiNoiseFac; // Sets the level of integration to remove noise during waveform fitting
82 static double fSiLiDefaultDecay; // Sets the waveform fit decay parameter
83 static double fSiLiDefaultRise; // Sets the waveform fit rise parameter
84 static double fSiLiDefaultBaseline; // Sets the waveform fit rise parameter
85
86 static Int_t GetRing(Int_t seg) { return seg / 12; }
87 static Int_t GetSector(Int_t seg) { return seg % 12; }
88 static Int_t GetPreamp(Int_t seg) { return ((GetSector(seg) / 3) * 2) + (((GetSector(seg) % 3) + GetRing(seg)) % 2); }
89 static Int_t GetPin(Int_t seg)
90 { //stupid chequerboard pattern that inverts
91 int ring = GetRing(seg);
92 int sec = GetSector(seg) % 3;
93 int inv = (GetSector(seg) / 3) % 2;
94 int ret = 10 * (2 - sec);
95 if(((sec == 1) ^ (inv == 0)) != 0) {
96 ret += 9 - ring;
97 } else {
98 ret += ring;
99 }
100 return (ret / 2) + 1;
101 }
102 static bool MagnetShadow(Int_t seg) { return ((seg % 3) == 1); }
103
104 static double GetSegmentArea(Int_t seg);
105
109
110 // This value defines what scheme is used when fitting sili waveforms
111 // 0 quick linear eq. method, requires good baseline
112 // 1 use slow TF1 fit if quick linear eq. method fails
113 // 2 use slow TF1 method exclusively
114 // 3 use slow TF1 with experimental oscillation
115 static int fFitSiLiShape; //!<!
116 static double fBaseFreq; //!<!
117
118private:
119 std::vector<TSiLiHit> fAddbackHits; //!<!
120 std::vector<unsigned int> fRejectHits; //!<!
121
123
124 void AddCluster(std::vector<unsigned>&, bool = false);
125
126 /// for geometery
127 static int fRingNumber; //!<!
128 static int fSectorNumber; //!<!
129 static double fOffsetPhi; //!<!
130 static double fOuterDiameter; //!<!
131 static double fInnerDiameter; //!<!
132 static double fTargetDistance; //!<!
133
134public:
135 static double fSiLiCoincidenceTime; //!<!
136 static bool fRejectPossibleCrosstalk; //!<!
137
138 /// \cond CLASSIMP
139 ClassDefOverride(TSiLi, 6); // NOLINT(readability-else-after-return)
140 /// \endcond
141};
142/*! @} */
143#endif
virtual TDetectorHit * GetHit(const int &index) const
Definition TDetector.cxx:61
std::vector< TDetectorHit * > & Hits()
Definition TDetector.h:78
Definition TSiLi.h:15
Int_t GetAddbackMultiplicity()
Definition TSiLi.cxx:158
bool fCoincidenceTime(TSiLiHit *, TSiLiHit *)
Definition TSiLi.cxx:257
static Int_t GetPreamp(Int_t seg)
Definition TSiLi.h:88
static int fFitSiLiShape
!
Definition TSiLi.h:115
static double fSiLiDefaultDecay
Definition TSiLi.h:82
void UseFitCharge()
Definition TSiLi.h:58
void Print(Option_t *opt="") const override
Definition TSiLi.cxx:53
static double fBaseFreq
!
Definition TSiLi.h:116
bool fRejectCriterion(TSiLiHit *, TSiLiHit *)
Definition TSiLi.cxx:245
static std::vector< TGraph > UpstreamShapes()
Definition TSiLi.cxx:351
void BuildHits() override
!
Definition TSiLi.h:38
void Copy(TObject &) const override
Definition TSiLi.cxx:28
void Clear(Option_t *opt="") override
Definition TSiLi.cxx:40
static Int_t GetPin(Int_t seg)
Definition TSiLi.h:89
std::vector< unsigned int > fRejectHits
!
Definition TSiLi.h:120
TSiLiHit * GetSiLiHit(const Int_t &i=0) const
Definition TSiLi.h:45
static int fRingNumber
for geometery
Definition TSiLi.h:127
static double fOuterDiameter
!
Definition TSiLi.h:130
void ResetAddback()
Definition TSiLi.h:52
static double fSiLiDefaultBaseline
Definition TSiLi.h:84
TSiLiHit * GetRejectHit(const Int_t &i=0)
Definition TSiLi.cxx:122
static double fSiLiNoiseFac
Definition TSiLi.h:81
static double fSiLiDefaultRise
Definition TSiLi.h:83
void AddCluster(std::vector< unsigned > &, bool=false)
Definition TSiLi.cxx:269
void AddFragment(const std::shared_ptr< const TFragment > &, TChannel *) override
!
Definition TSiLi.cxx:66
ESiLiBits
Definition TSiLi.h:17
TSiLi()
Definition TSiLi.cxx:23
TTransientBits< UChar_t > fSiLiBits
Definition TSiLi.h:122
Int_t GetRejectMultiplicity()
Definition TSiLi.cxx:132
static Int_t GetRing(Int_t seg)
Definition TSiLi.h:86
static double fSiLiCoincidenceTime
!
Definition TSiLi.h:135
TSiLiHit * GetAddbackHit(const Int_t &i=0)
Definition TSiLi.cxx:110
static double fOffsetPhi
!
Definition TSiLi.h:129
std::vector< TSiLiHit > fAddbackHits
!
Definition TSiLi.h:119
void RejectCrosstalk(bool reject=true)
Definition TSiLi.h:71
static bool fRejectPossibleCrosstalk
!
Definition TSiLi.h:136
void CoincidenceTime(double time)
Definition TSiLi.h:65
bool fAddbackCriterion(TSiLiHit *, TSiLiHit *)
Definition TSiLi.cxx:225
static double GetSegmentArea(Int_t seg)
Definition TSiLi.cxx:100
static double fInnerDiameter
!
Definition TSiLi.h:131
static bool MagnetShadow(Int_t seg)
Definition TSiLi.h:102
static Int_t GetSector(Int_t seg)
Definition TSiLi.h:87
static double fTargetDistance
!
Definition TSiLi.h:132
static int fSectorNumber
!
Definition TSiLi.h:128
TSiLi(TSiLi &&) noexcept=default
static TVector3 GetPosition(int ring, int sector, bool smear=false)
Definition TSiLi.cxx:77
void SetBit(T bit, Bool_t flag)