BmnRoot
Loading...
Searching...
No Matches
CbmStsDigi.cxx
Go to the documentation of this file.
1
8#include "CbmStsDigi.h"
9
10#include "FairLogger.h"
11
12
13// ----- Bit fields for charge and time stamp --------------------------
14const Int_t CbmStsDigi::fgkCharBits = 12; // in data0
15const Int_t CbmStsDigi::fgkTimeBits = 14; // in data1
16const Int_t CbmStsDigi::fgkAddrBits =
21// -------------------------------------------------------------------------
22
23
24
25// ----- Bit shift for charge and time stamp ---------------------------
26const Int_t CbmStsDigi::fgkCharShift = CbmStsDigi::fgkAddrBits;
27const Int_t CbmStsDigi::fgkTimeShift = CbmStsDigi::fgkCharShift + CbmStsDigi::fgkCharBits;
28// -------------------------------------------------------------------------
29
30
31
32// ----- Bit masks for charge and time stamp ---------------------------
33const Long64_t CbmStsDigi::fgkAddrMask = (1 << CbmStsDigi::fgkAddrBits) - 1;
34const Long64_t CbmStsDigi::fgkCharMask = (1 << CbmStsDigi::fgkCharBits) - 1;
35const Long64_t CbmStsDigi::fgkTimeMask = (1 << CbmStsDigi::fgkTimeBits) - 1;
36// -------------------------------------------------------------------------
37
38
39
40
41
42
43// ----- Default constructor -------------------------------------------
45 : FairMultiLinkedData(),
47 fData(0)
48{
49}
50// -------------------------------------------------------------------------
51
52
53
54// ----- Standard constructor ------------------------------------------
55// CbmStsDigi::CbmStsDigi(Int_t station, Int_t sector, Int_t side,
56// Int_t channel, Int_t adc, Int_t time)
57// : FairMultiLinkedData(),
58// CbmStsDetectorId(),
59// fData(0)
60// {
61// AddIndex(index);
62// fData = ( (DetectorId(station, sector, side, channel) >> 4) & fgkAddrMask )
63// | ( (adc & fgkCharMask) << fgkCharShift )
64// | ( (time & fgkTimeMask) << fgkTimeShift ) ;
65//
66// }
67// -------------------------------------------------------------------------
68CbmStsDigi::CbmStsDigi(Int_t station, Int_t sector, Int_t side,
69 Int_t channel, Int_t adc, Int_t time)
70 : FairMultiLinkedData(),
72 fData(0)
73{
74// AddIndex(index,adc);
75
76 // Check for ADC range
77 if ( adc > GetMaxAdc() ) {
78 LOG(warn) << "ADC " << adc << " exceeds ADC range " << GetMaxAdc();
79 return;
80 }
81
82 fData = ( (DetectorId(station, sector, side, channel) >> 4) & fgkAddrMask )
83 | ( (adc & fgkCharMask) << fgkCharShift )
84 | ( (time & fgkTimeMask) << fgkTimeShift ) ;
85}
86
87// ----- Destructor ----------------------------------------------------
89// -------------------------------------------------------------------------
90
91
92// ----- Add charge ----------------------------------------------------
93void CbmStsDigi::AddAdc(Int_t adc) {
94 Int_t maxAdc = (1 << fgkCharBits) - 1;
95 Int_t newAdc = GetAdc() + adc;
96 if ( newAdc > maxAdc ) newAdc = maxAdc;
97 SetAdc(newAdc);
98}
99// -------------------------------------------------------------------------
100
101
102// ----- Set new charge ------------------------------------------------
103void CbmStsDigi::SetAdc(Int_t adc) {
104
105 // First set old charge to zero
106 fData = fData & ~(fgkCharMask << fgkCharShift);
107
108 // Check for ADC range
109 if ( adc > GetMaxAdc() ) {
110 LOG(warn) << "ADC " << adc << " exceeds ADC range " << GetMaxAdc();
111 return;
112 }
113
114 // Now set new charge
115 fData = fData | ( (adc & fgkCharMask) << fgkCharShift );
116
117}
118// -------------------------------------------------------------------------
DetectorId
static const Int_t fgkSideBits
static const Int_t fgkStatBits
static const Int_t fgkSectBits
static const Int_t fgkChanBits
Int_t GetAdc() const
Definition CbmStsDigi.h:87
void AddAdc(Int_t adc)
static Int_t GetMaxAdc()
Definition CbmStsDigi.h:91
virtual ~CbmStsDigi()