Line data Source code
1 : #include <AliHLTCaloTriggerRawDigitDataStruct.h>
2 : #include <cstring>
3 :
4 :
5 : void InitializeRawDigit(AliHLTCaloTriggerRawDigitDataStruct &rawdigit){
6 0 : rawdigit.fID = 0;
7 0 : rawdigit.fTriggerBits = 0;
8 0 : rawdigit.fL1TimeSum = 0;
9 0 : rawdigit.fNL0Times = 0;
10 0 : memset(rawdigit.fL0Times, 0, sizeof(rawdigit.fL0Times));
11 0 : rawdigit.fNTimeSamples = 0;
12 0 : memset(rawdigit.fTimeSamples, 0, sizeof(rawdigit.fTimeSamples));
13 0 : }
14 :
15 : void SetRawDigitID(AliHLTCaloTriggerRawDigitDataStruct &digit, Int_t id){
16 0 : digit.fID = id;
17 0 : }
18 :
19 : void SetTriggerBit(AliHLTCaloTriggerRawDigitDataStruct &dig, Int_t bit, Int_t mode){
20 0 : dig.fTriggerBits |= 1 << (bit + mode * kTriggerTypeEnd);
21 0 : }
22 :
23 : void SetL0Time(AliHLTCaloTriggerRawDigitDataStruct &dig, Int_t i) {
24 : bool hasfound(false);
25 0 : for (Int_t j = 0; j < dig.fNL0Times; j++) {
26 0 : if (i == dig.fL0Times[j]) {
27 : hasfound = true;
28 0 : break;
29 : }
30 : }
31 0 : if(hasfound) return;
32 0 : dig.fNL0Times++;
33 0 : if (dig.fNL0Times > 9) return;
34 0 : dig.fL0Times[dig.fNL0Times - 1] = i;
35 0 : }
36 :
37 : void SetL1TimeSum(AliHLTCaloTriggerRawDigitDataStruct &dig, Int_t l1timeSum){
38 0 : dig.fL1TimeSum = l1timeSum;
39 0 : }
40 :
41 : void SetL1SubRegion(AliHLTCaloTriggerRawDigitDataStruct &dig, Int_t l1subregion){
42 0 : dig.fL1SubRegion = l1subregion;
43 0 : }
44 :
45 : void SetTimeSamples(AliHLTCaloTriggerRawDigitDataStruct &dig, Int_t nsamples, Int_t *samples){
46 0 : memcpy(dig.fTimeSamples, samples, sizeof(Int_t) * 15);
47 0 : dig.fNTimeSamples = nsamples;
48 0 : }
49 :
50 : Int_t GetRawDigitID(const AliHLTCaloTriggerRawDigitDataStruct &dig) {
51 0 : return dig.fID;
52 : }
53 :
54 : Bool_t GetL0Time(const AliHLTCaloTriggerRawDigitDataStruct &dig, Int_t i, Int_t& time) {
55 0 : if (i < 0 || i > dig.fNL0Times) {
56 0 : return kFALSE;
57 : }
58 0 : time = dig.fL0Times[i];
59 0 : return kTRUE;
60 0 : }
61 :
62 : void GetL0Times(const AliHLTCaloTriggerRawDigitDataStruct &dig, Int_t times[]) {
63 0 : for (Int_t i = 0; i < dig.fNL0Times; i++) times[i] = dig.fL0Times[i];
64 0 : }
65 :
66 : Bool_t GetTimeSample(const AliHLTCaloTriggerRawDigitDataStruct &dig, Int_t iSample, Int_t& timeBin, Int_t& amp) {
67 0 : if (iSample > dig.fNTimeSamples || iSample < 0) return kFALSE;
68 0 : amp = (Int_t)(dig.fTimeSamples[iSample] & 0xFFFF);
69 0 : timeBin = (Int_t)(dig.fTimeSamples[iSample] >> 16 );
70 0 : return kTRUE;
71 0 : }
72 :
73 :
74 : Int_t GetL0TimeSum(const AliHLTCaloTriggerRawDigitDataStruct &dig, Int_t time) {
75 : Int_t value = 0;
76 0 : for (Int_t i = 0; i < dig.fNTimeSamples; i++) {
77 0 : Int_t timeBin, amp;
78 0 : GetTimeSample(dig, i, timeBin, amp);
79 :
80 0 : if (timeBin >= time && timeBin < time + 4) value += amp;
81 0 : }
82 0 : return value;
83 : }
84 :
85 : Int_t GetL1SubRegion(const AliHLTCaloTriggerRawDigitDataStruct &dig){
86 0 : return dig.fL1SubRegion;
87 : }
88 :
89 : Int_t GetTriggerBit(const AliHLTCaloTriggerRawDigitDataStruct &dig, const TriggerType_t type, const Int_t mode) {
90 0 : Int_t shift = kTriggerTypeEnd * mode;
91 0 : Int_t mask = 1 << type;
92 0 : return ((dig.fTriggerBits >> shift) & mask);
93 : }
94 :
95 : Bool_t GetRawDigitMaximumAmplitude(const AliHLTCaloTriggerRawDigitDataStruct &dig, Int_t& amplitude, Int_t& time) {
96 0 : if (!dig.fNTimeSamples) return kFALSE;
97 :
98 0 : amplitude = 0;
99 0 : for (Int_t i = 0; i < dig.fNTimeSamples; i++) {
100 0 : Int_t t, a;
101 0 : if (GetTimeSample(dig, i, t, a)) {
102 0 : if (a > amplitude)
103 : {
104 0 : amplitude = a;
105 0 : time = t;
106 0 : }
107 : }
108 0 : }
109 0 : return kTRUE;
110 0 : }
111 :
112 : void PrintRawDigit(const AliHLTCaloTriggerRawDigitDataStruct &dig) {
113 0 : printf("===\n| Digit id: %4d / %d Time Samples: \n", dig.fID, dig.fNTimeSamples);
114 0 : for (Int_t i=0; i < dig.fNTimeSamples; i++) {
115 0 : Int_t timeBin, amp;
116 0 : GetTimeSample(dig, i, timeBin, amp);
117 0 : printf("| (%d,%d) ",timeBin,amp);
118 0 : }
119 0 : printf("\n");
120 0 : printf("| L0: (%d,%d) / %d Time(s): \n",GetTriggerBit(dig, kL0,1),GetTriggerBit(dig, kL0,0), dig.fNL0Times);
121 0 : for (Int_t i = 0; i < dig.fNL0Times; i++) {
122 0 : Int_t time;
123 0 : if (GetL0Time(dig, i, time)) printf("| %d ",time);
124 0 : }
125 0 : printf("\n");
126 0 : printf("| L1: g high (%d,%d) g low (%d,%d) j high (%d,%d) j low (%d,%d) / Time sum: %d\n",
127 0 : GetTriggerBit(dig, kL1GammaHigh,1),GetTriggerBit(dig, kL1GammaHigh,0),GetTriggerBit(dig, kL1GammaLow,1),GetTriggerBit(dig, kL1GammaLow,0),
128 0 : GetTriggerBit(dig, kL1JetHigh,1), GetTriggerBit(dig, kL1JetHigh,0), GetTriggerBit(dig, kL1JetLow,1), GetTriggerBit(dig, kL1JetLow,0),
129 0 : dig.fL1TimeSum);
130 0 : }
131 :
132 : void SPrintRawDigit(const AliHLTCaloTriggerRawDigitDataStruct &dig, char *outputbuffer) {
133 0 : char *currentpos = outputbuffer, tempstr[1024];
134 0 : sprintf(tempstr, "===\n| Digit id: %4d / %d Time Samples: \n", dig.fID, dig.fNTimeSamples);
135 0 : strcpy(currentpos, tempstr);
136 0 : currentpos += strlen(tempstr)/sizeof(char);
137 0 : for (Int_t i=0; i < dig.fNTimeSamples; i++) {
138 0 : Int_t timeBin, amp;
139 0 : GetTimeSample(dig, i, timeBin, amp);
140 0 : sprintf(tempstr, "| (%d,%d) ",timeBin,amp);
141 0 : strcpy(currentpos, tempstr);
142 0 : currentpos += strlen(tempstr)/sizeof(char);
143 0 : }
144 0 : sprintf(tempstr, "| L0: (%d,%d) / %d Time(s): \n",GetTriggerBit(dig, kL0,1),GetTriggerBit(dig, kL0,0), dig.fNL0Times);
145 0 : strcpy(currentpos, tempstr);
146 0 : currentpos += strlen(tempstr)/sizeof(char);
147 0 : for (Int_t i = 0; i < dig.fNL0Times; i++) {
148 0 : Int_t time;
149 0 : if (GetL0Time(dig, i, time)) sprintf(tempstr, "| %d ",time);
150 0 : strcpy(currentpos, tempstr);
151 0 : currentpos += strlen(tempstr)/sizeof(char);
152 0 : }
153 0 : sprintf(currentpos, "| L1: g high (%d,%d) g low (%d,%d) j high (%d,%d) j low (%d,%d) / Time sum: %d\n",
154 0 : GetTriggerBit(dig, kL1GammaHigh,1),GetTriggerBit(dig, kL1GammaHigh,0),GetTriggerBit(dig, kL1GammaLow,1),GetTriggerBit(dig, kL1GammaLow,0),
155 0 : GetTriggerBit(dig, kL1JetHigh,1), GetTriggerBit(dig, kL1JetHigh,0), GetTriggerBit(dig, kL1JetLow,1), GetTriggerBit(dig, kL1JetLow,0),
156 0 : dig.fL1TimeSum);
157 0 : }
|