CbmRoot
Loading...
Searching...
No Matches
CbmTrdDigi.h
Go to the documentation of this file.
1/* Copyright (C) 2009-2020 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Florian Uhlig [committer] */
4
5#ifndef CBMTRDDIGI_H
6#define CBMTRDDIGI_H
7
8#include "CbmDefs.h" // for kTrd
9
10#ifndef NO_ROOT
11#include <Rtypes.h> // for CLRBIT, SETBIT, TESTBIT, ClassDef
12#endif
13
14#include <boost/serialization/access.hpp>
15
16#include <cstdint>
17#include <string> // for string
18#include <utility> // for pair
19
21public:
22 enum class eCbmTrdAsicType : size_t
23 {
24 kSPADIC = 0,
25 kFASP,
27 };
28 enum class eTriggerType : int32_t
29 {
33 kMulti,
34 kTrg2,
35 kNTrg
36 };
38 {
39 kFlag1 = 0 //<
40 ,
41 kFlag2 //< in case of FASP simulations define pileup
42 ,
43 kFlag3 //< in case of FASP simulations define masked
44 ,
46 };
50 CbmTrdDigi();
59 CbmTrdDigi(int32_t padChNr, float chargeT, float chargeR, uint64_t time);
69 CbmTrdDigi(int32_t padChNr, int32_t uniqueModuleId, float charge, uint64_t time, eTriggerType triggerType,
70 int32_t errClass /*nrSamples*/);
71
76 CbmTrdDigi(int32_t /*address*/, double /*fullTime*/, int32_t /*triggerType*/, int32_t /*infoType*/,
77 int32_t /*stopType*/, int32_t /*nrSamples*/, float* /*samples*/)
78 : fInfo(0)
79 , fCharge(0)
80 , fTime(0)
81 {
82 ;
83 }
84
89 CbmTrdDigi(const CbmTrdDigi&);
90
96 CbmTrdDigi& operator=(const CbmTrdDigi&) = default;
97
98
103 void AddCharge(CbmTrdDigi* sd, double f);
108 void AddCharge(double c, double f = 1);
110 static float Clk(eCbmTrdAsicType ty) { return fgClk[static_cast<size_t>(ty)]; }
113 int32_t GetAddress() const { return (fInfo >> fgkRoOffset) & 0x7fffff; }
117 int32_t GetAddressChannel() const;
121 int32_t GetAddressModule() const;
124 double GetCharge() const;
130 double GetCharge(double& tilt, int32_t& dt) const;
132 double GetChargeError() const;
134 int32_t GetErrorClass() const { return (fInfo >> fgkErrOffset) & 0x7; }
135
140
144 static const char* GetClassName() { return "CbmTrdDigi"; }
145
149 static const char* GetBranchName() { return "TrdDigi"; }
150
151
155 double GetTime() const { return fTime; }
158 uint64_t GetTimeDAQ() const { return fTime / fgClk[static_cast<size_t>(GetType())]; }
160 int32_t GetTriggerType() const { return (fInfo >> fgkTrgOffset) & 0x3; }
161
167 static std::pair<eTriggerType, bool> GetTriggerPair(const int32_t triggerValue);
168
174
176 bool IsFASP() const { return GetType() == eCbmTrdAsicType::kFASP; }
177
179 bool IsMasked() const { return (GetType() == eCbmTrdAsicType::kFASP) && IsFlagged(kFlag3); }
181 bool IsPileUp() const { return (GetType() == eCbmTrdAsicType::kFASP) && IsFlagged(kFlag2); }
183 bool IsFlagged(const int32_t iflag) const;
184 int32_t Layer() const { return (fInfo >> fgkLyOffset) & 0xf; }
185 int32_t Module() const { return (fInfo >> fgkModOffset) & 0x7f; }
186
190 void SetAddress(const int32_t a);
192 void SetAddressModule(const int32_t a) { SetAddress(a); }
193
198 void SetCharge(float c);
204 void SetCharge(float cT, float cR, int32_t dt = 0);
206 void SetFlag(const int32_t iflag, bool set = true);
208 void SetMasked(bool set = true)
209 {
211 }
213 void SetPileUp(bool set = true)
214 {
216 }
227 void SetTime(double t) { fTime = static_cast<uint64_t>(t); }
229 void SetTimeOffset(int8_t t);
231 void SetTriggerType(const eTriggerType triggerType);
233 void SetTriggerType(const int32_t triggerValue);
235 void SetErrorClass(const int32_t n)
236 {
237 fInfo &= ~(0x7 << fgkErrOffset);
238 fInfo |= ((n & 0x7) << fgkErrOffset);
239 }
241 std::string ToString() const;
242
243 // TEMPORARY ADDED WITHOUT PROVIDING FUNCTIONALITY ! TODO should be removed
244 // keep backward compatible compilation of CbmTrdSPADIC
245 void SetStopType(int32_t /*stopType*/) { ; }
246 int32_t GetStopType() { return 0; }
247 void SetPulseShape(float /*pulse*/[45]) { ; }
248 // keep backward compatible compilation of fles/reader/tasks [/tools]
249 double GetChargeTR() const { return 0.; }
250 void SetInfoType(int32_t /*infoType*/) { ; }
251 int32_t GetNrSamples() { return 0; }
252 float* GetSamples() { return nullptr; }
253
254protected:
255 void SetChannel(const int32_t a)
256 {
257 fInfo &= ~(0xfff << fgkRoOffset);
258 fInfo |= (a & 0xfff) << fgkRoOffset;
259 }
260 void SetLayer(const int32_t a)
261 {
262 fInfo &= ~(0xf << fgkLyOffset);
263 fInfo |= ((a & 0xf) << fgkLyOffset);
264 }
265 void SetModule(const int32_t a)
266 {
267 fInfo &= ~(0x7f << fgkModOffset);
268 fInfo |= ((a & 0x7f) << fgkModOffset);
269 }
270
271 uint32_t fInfo = 0; //< pad address and extra information
272 uint32_t fCharge = 0; //< measured charge. For SPADIC is int32_t(charge*1eN) where N is the precission while
273 //< for FASP it contains the R and T charges each on 12bits and the time difference between R and T pads in CLK (8 bits).
274 uint64_t fTime = 0; //< global time of the digi: For SPADIC & FASP in ns
275
280 static const double fgClk[static_cast<size_t>(eCbmTrdAsicType::kNTypes) + 1];
281
286 static const float fgPrecission[static_cast<size_t>(eCbmTrdAsicType::kNTypes) + 1];
287
288
289private:
290 static const int32_t fgkRoOffset = 0;
291 static const int32_t fgkModOffset = 12;
292 static const int32_t fgkLyOffset = 19;
293 static const int32_t fgkErrOffset = 23;
294 static const int32_t fgkFlgOffset = 26;
295 static const int32_t fgkTrgOffset = 29;
296 static const int32_t fgkTypOffset = 31;
297
300 template<class Archive>
301 void serialize(Archive& ar, const unsigned int /*version*/)
302 {
303 ar& fInfo;
304 ar& fCharge;
305 ar& fTime;
306 }
307
308#ifndef NO_ROOT
309 ClassDefNV(CbmTrdDigi, 4); // Production ready TRD digit
310#endif
311};
312
313#endif
ECbmModuleId
Definition CbmDefs.h:39
@ kTrd
Transition Radiation Detector.
int32_t GetAddressModule() const
Getter module address in the experiment.
static const int32_t fgkTypOffset
Definition CbmTrdDigi.h:296
void SetAsic(eCbmTrdAsicType ty=eCbmTrdAsicType::kSPADIC)
double GetChargeTR() const
Definition CbmTrdDigi.h:249
CbmTrdDigi()
Default constructor.
static const char * GetClassName()
Class name (static)
Definition CbmTrdDigi.h:144
void serialize(Archive &ar, const unsigned int)
Definition CbmTrdDigi.h:301
void SetTriggerType(const eTriggerType triggerType)
Set digi trigger type.
void SetAddress(const int32_t a)
Module address setter for digi.
int32_t GetAddress() const
Address getter for module in the format defined by CbmTrdDigi (format of CbmTrdAddress can be accesse...
Definition CbmTrdDigi.h:113
void SetStopType(int32_t)
Definition CbmTrdDigi.h:245
static std::pair< eTriggerType, bool > GetTriggerPair(const int32_t triggerValue)
Get the trigger combination, i.e. St or Nt and is multihit or not (true/false)
void SetPileUp(bool set=true)
Set digi pile-up (FASP only)
Definition CbmTrdDigi.h:213
int32_t GetTriggerType() const
Channel trigger type. SPADIC specific see CbmTrdTriggerType.
Definition CbmTrdDigi.h:160
bool IsFASP() const
Shortcut to check if FASP digi.
Definition CbmTrdDigi.h:176
static const int32_t fgkTrgOffset
Definition CbmTrdDigi.h:295
static const double fgClk[static_cast< size_t >(eCbmTrdAsicType::kNTypes)+1]
clock length in ns for acquisition
Definition CbmTrdDigi.h:41
static const int32_t fgkRoOffset
Definition CbmTrdDigi.h:290
void SetFlag(const int32_t iflag, bool set=true)
Generic flag status setter.
int32_t Module() const
Definition CbmTrdDigi.h:185
double GetChargeError() const
Charge error parametrisation. SPADIC specific see GetErrorClass()
void SetModule(const int32_t a)
Definition CbmTrdDigi.h:265
bool IsPileUp() const
Query digi pile-up (FASP only)
Definition CbmTrdDigi.h:181
std::string ToString() const
String representation of a TRD digi. Account for digi type and specific information.
int32_t Layer() const
Definition CbmTrdDigi.h:184
void SetChannel(const int32_t a)
Definition CbmTrdDigi.h:255
uint64_t GetTimeDAQ() const
Getter for global DAQ time [clk]. Differs for each ASIC. [In FASP case DAQ time is already stored in ...
Definition CbmTrdDigi.h:158
int32_t GetAddressChannel() const
Getter read-out id.
uint32_t fInfo
Definition CbmTrdDigi.h:271
ClassDefNV(CbmTrdDigi, 4)
bool IsFlagged(const int32_t iflag) const
Query flag status (generic)
bool IsMasked() const
Query digi mask (FASP only)
Definition CbmTrdDigi.h:179
static const int32_t fgkLyOffset
Definition CbmTrdDigi.h:292
void SetPulseShape(float[45])
Definition CbmTrdDigi.h:247
static float Clk(eCbmTrdAsicType ty)
DAQ clock accessor for each ASIC.
Definition CbmTrdDigi.h:110
static const int32_t fgkFlgOffset
Definition CbmTrdDigi.h:294
void SetErrorClass(const int32_t n)
Set digi error class (SPADIC only)
Definition CbmTrdDigi.h:235
eCbmTrdAsicType GetType() const
Channel FEE SPADIC/FASP according to CbmTrdAsicType.
Definition CbmTrdDigi.h:170
static const char * GetBranchName()
Get the desired name of the branch for this obj in the cbm output tree (static)
Definition CbmTrdDigi.h:149
void SetInfoType(int32_t)
Definition CbmTrdDigi.h:250
friend class boost::serialization::access
BOOST serialization interface.
Definition CbmTrdDigi.h:299
CbmTrdDigi & operator=(const CbmTrdDigi &)=default
Assignment operator.
void AddCharge(CbmTrdDigi *sd, double f)
Charge addition in case of pile-up (FASP simulation only)
CbmTrdDigi(int32_t, double, int32_t, int32_t, int32_t, int32_t, float *)
Constructor for backward compatibillity. Does not do anything.
Definition CbmTrdDigi.h:76
static ECbmModuleId GetSystem()
Definition CbmTrdDigi.h:139
int32_t GetStopType()
Definition CbmTrdDigi.h:246
void SetAddressModule(const int32_t a)
Alias for SetAddress()
Definition CbmTrdDigi.h:192
int32_t GetErrorClass() const
Channel status. SPADIC specific see LUT.
Definition CbmTrdDigi.h:134
uint32_t fCharge
Definition CbmTrdDigi.h:272
static const int32_t fgkErrOffset
Definition CbmTrdDigi.h:293
static const int32_t fgkModOffset
Definition CbmTrdDigi.h:291
void SetTimeOffset(int8_t t)
Set time offset of rectangular to tilt pads for FASP (clk)
int32_t GetNrSamples()
Definition CbmTrdDigi.h:251
double GetTime() const
Getter for physical time [ns]. Accounts for clock representation of each ASIC. In SPADIC case physica...
Definition CbmTrdDigi.h:155
uint64_t fTime
Definition CbmTrdDigi.h:274
void SetMasked(bool set=true)
Set digi mask (FASP only)
Definition CbmTrdDigi.h:208
double GetCharge() const
Common purpose charge getter.
void SetCharge(float c)
Charge setter for SPADIC ASIC.
void SetTime(double t)
Set global digi time (ns) !! Use this function if you know what you are doing !
Definition CbmTrdDigi.h:227
float * GetSamples()
Definition CbmTrdDigi.h:252
static const float fgPrecission[static_cast< size_t >(eCbmTrdAsicType::kNTypes)+1]
Nr. of digits stored for ASIC.
Definition CbmTrdDigi.h:42
void SetLayer(const int32_t a)
Definition CbmTrdDigi.h:260