PAASS
Software suite to Acquire and Analyze Data from Pixie16
unittest-XiaListModeDataMask.cpp
Go to the documentation of this file.
1 #include <stdexcept>
6 #include <vector>
7 
8 #include <UnitTest++.h>
9 
10 #include "HelperEnumerations.hpp"
11 #include "XiaListModeDataMask.hpp"
12 
13 using namespace std;
14 using namespace DataProcessing;
15 
16 //Test that we can convert all the firmware names to the right values.
17 TEST_FIXTURE(XiaListModeDataMask, TestConvertStringToFirmware) {
18  //Check the exact names.
19  CHECK_EQUAL(R17562, ConvertStringToFirmware("R17562"));
20  CHECK_EQUAL(R17562, ConvertStringToFirmware("17562"));
21 
22  CHECK_EQUAL(R20466, ConvertStringToFirmware("R20466"));
23  CHECK_EQUAL(R20466, ConvertStringToFirmware("20466"));
24 
25  CHECK_EQUAL(R27361, ConvertStringToFirmware("R27361"));
26  CHECK_EQUAL(R27361, ConvertStringToFirmware("27361"));
27 
28  CHECK_EQUAL(R29432, ConvertStringToFirmware("R29432"));
29  CHECK_EQUAL(R29432, ConvertStringToFirmware("29432"));
30 
31  CHECK_EQUAL(R30474, ConvertStringToFirmware("R30474"));
32  CHECK_EQUAL(R30474, ConvertStringToFirmware("30474"));
33 
34  CHECK_EQUAL(R30980, ConvertStringToFirmware("R30980"));
35  CHECK_EQUAL(R30980, ConvertStringToFirmware("30980"));
36 
37  CHECK_EQUAL(R30981, ConvertStringToFirmware("R30981"));
38  CHECK_EQUAL(R30981, ConvertStringToFirmware("30981"));
39 
40  CHECK_EQUAL(R34688, ConvertStringToFirmware("R34688"));
41  CHECK_EQUAL(R34688, ConvertStringToFirmware("34688"));
42 
43  //Check values in between numbers
44  CHECK_EQUAL(R17562, ConvertStringToFirmware("19000"));
45  CHECK_EQUAL(R20466, ConvertStringToFirmware("23000"));
46  CHECK_EQUAL(R27361, ConvertStringToFirmware("28000"));
47  CHECK_EQUAL(R29432, ConvertStringToFirmware("29700"));
48  CHECK_EQUAL(R30474, ConvertStringToFirmware("30670"));
49  CHECK_EQUAL(R30981, ConvertStringToFirmware("32000"));
50 
51  //Two cases for absolute failure of the method is when we have a firmware
52  // version that is higher than the highest known one, and a version
53  // smaller than the smallest known version.
54  CHECK_THROW(ConvertStringToFirmware("45000"), invalid_argument);
55  CHECK_THROW(ConvertStringToFirmware("12"), invalid_argument);
56 }
57 
58 TEST_FIXTURE(XiaListModeDataMask, TestXiaListModeDataMask) {
59  //We do not need to test more than on version of these since they are
60  // identical across all firmware versions.
61  SetFirmware(R30474);
62  CHECK_EQUAL((unsigned int) 0x0000000F, GetChannelNumberMask().first);
63  CHECK_EQUAL((unsigned int) 0, GetChannelNumberMask().second);
64 
65  CHECK_EQUAL((unsigned int) 0x000000F0, GetSlotIdMask().first);
66  CHECK_EQUAL((unsigned int) 4, GetSlotIdMask().second);
67 
68  CHECK_EQUAL((unsigned int) 0x00000F00, GetCrateIdMask().first);
69  CHECK_EQUAL((unsigned int) 8, GetCrateIdMask().second);
70 
71  CHECK_EQUAL((unsigned int) 0x0001F000, GetHeaderLengthMask().first);
72  CHECK_EQUAL((unsigned int) 12, GetHeaderLengthMask().second);
73 
74  CHECK_EQUAL((unsigned int) 0x80000000, GetFinishCodeMask().first);
75  CHECK_EQUAL((unsigned int) 31, GetFinishCodeMask().second);
76 
77  CHECK_EQUAL((unsigned int) 0x0000FFFF, GetEventTimeHighMask().first);
78  CHECK_EQUAL((unsigned int) 0, GetEventTimeHighMask().second);
79 }
80 
82 TEST_FIXTURE(XiaListModeDataMask, Test_100MSps_Word2) {
83  SetFrequency(100);
84 
85  SetFirmware(R29432);
86  CHECK_EQUAL((unsigned int) 0xFFFF0000, GetCfdFractionalTimeMask().first);
87  CHECK_EQUAL((unsigned int) 16, GetCfdFractionalTimeMask().second);
88 
89  CHECK_EQUAL((unsigned int) 0, GetCfdForcedTriggerBitMask().first);
90  CHECK_EQUAL((unsigned int) 0, GetCfdForcedTriggerBitMask().second);
91 
92  CHECK_EQUAL((unsigned int) 0, GetCfdTriggerSourceMask().first);
93  CHECK_EQUAL((unsigned int) 0, GetCfdTriggerSourceMask().second);
94 
95  vector<FIRMWARE> firm = {R30474, R30980, R30981, R34688};
96  for (vector<FIRMWARE>::iterator it = firm.begin(); it != firm.end(); it++) {
97  SetFirmware(*it);
98  CHECK_EQUAL((unsigned int) 0x7FFF0000,
99  GetCfdFractionalTimeMask().first);
100  CHECK_EQUAL((unsigned int) 16, GetCfdFractionalTimeMask().second);
101 
102  CHECK_EQUAL((unsigned int) 0x80000000,
103  GetCfdForcedTriggerBitMask().first);
104  CHECK_EQUAL((unsigned int) 31, GetCfdForcedTriggerBitMask().second);
105 
106  CHECK_EQUAL((unsigned int) 0, GetCfdTriggerSourceMask().first);
107  CHECK_EQUAL((unsigned int) 0, GetCfdTriggerSourceMask().second);
108  }
109 }
110 
112 TEST_FIXTURE(XiaListModeDataMask, Test_250Msps_Word2) {
113  SetFrequency(250);
114 
115  SetFirmware(R29432);
116  CHECK_EQUAL((unsigned int) 0x7FFF0000, GetCfdFractionalTimeMask().first);
117  CHECK_EQUAL((unsigned int) 16, GetCfdFractionalTimeMask().second);
118 
119  CHECK_EQUAL((unsigned int) 0, GetCfdForcedTriggerBitMask().first);
120  CHECK_EQUAL((unsigned int) 0, GetCfdForcedTriggerBitMask().second);
121 
122  CHECK_EQUAL((unsigned int) 0x80000000, GetCfdTriggerSourceMask().first);
123  CHECK_EQUAL((unsigned int) 31, GetCfdTriggerSourceMask().second);
124 
125  vector<FIRMWARE> firm = {R30474, R30980, R30981, R34688};
126  for (vector<FIRMWARE>::iterator it = firm.begin(); it != firm.end(); it++) {
127  SetFirmware(*it);
128  CHECK_EQUAL((unsigned int) 0x3FFF0000,
129  GetCfdFractionalTimeMask().first);
130  CHECK_EQUAL((unsigned int) 16, GetCfdFractionalTimeMask().second);
131 
132  CHECK_EQUAL((unsigned int) 0x80000000,
133  GetCfdForcedTriggerBitMask().first);
134  CHECK_EQUAL((unsigned int) 31, GetCfdForcedTriggerBitMask().second);
135 
136  CHECK_EQUAL((unsigned int) 0x40000000, GetCfdTriggerSourceMask().first);
137  CHECK_EQUAL((unsigned int) 30, GetCfdTriggerSourceMask().second);
138  }
139 }
140 
142 TEST_FIXTURE(XiaListModeDataMask, Test_500MSps_Word2) {
143  SetFrequency(500);
144 
145  vector<FIRMWARE> firm = {R29432, R30474, R30980, R30981, R34688};
146 
147  for (vector<FIRMWARE>::iterator it = firm.begin(); it != firm.end(); it++) {
148  SetFirmware(*it);
149  CHECK_EQUAL((unsigned int) 0x1FFF0000,
150  GetCfdFractionalTimeMask().first);
151  CHECK_EQUAL((unsigned int) 16, GetCfdFractionalTimeMask().second);
152 
153  CHECK_EQUAL((unsigned int) 0, GetCfdForcedTriggerBitMask().first);
154  CHECK_EQUAL((unsigned int) 0, GetCfdForcedTriggerBitMask().second);
155 
156  CHECK_EQUAL((unsigned int) 0xE0000000, GetCfdTriggerSourceMask().first);
157  CHECK_EQUAL((unsigned int) 29, GetCfdTriggerSourceMask().second);
158  }
159 }
160 
161 TEST_FIXTURE(XiaListModeDataMask, Test_R29432_To_R30981_Word3) {
162  vector<unsigned int> freq = {100, 250, 500};
163 
164  vector<FIRMWARE> firm = {R29432, R30474, R30980, R30981};
165 
166  for (vector<FIRMWARE>::iterator it = firm.begin(); it != firm.end(); it++) {
167  SetFirmware(*it);
168  for (vector<unsigned>::iterator it1 = freq.begin();
169  it1 != freq.end(); it1++) {
170  SetFrequency(*it1);
171  CHECK_EQUAL((unsigned int) 0x00007FFF, GetEventEnergyMask().first);
172  CHECK_EQUAL((unsigned int) 0, GetEventEnergyMask().second);
173 
174  CHECK_EQUAL((unsigned int) 0x00008000,
175  GetTraceOutOfRangeFlagMask().first);
176  CHECK_EQUAL((unsigned int) 15, GetTraceOutOfRangeFlagMask().second);
177 
178  CHECK_EQUAL((unsigned int) 0xFFFF0000, GetTraceLengthMask().first);
179  CHECK_EQUAL((unsigned int) 16, GetTraceLengthMask().second);
180  }
181  }
182 }
183 
184 TEST_FIXTURE(XiaListModeDataMask, Test_R34688_Word3) {
185  SetFirmware(R34688);
186  vector<unsigned int> freq = {100, 250, 500};
187  for (vector<unsigned>::iterator it = freq.begin();
188  it != freq.end(); it++) {
189  SetFrequency(*it);
190  CHECK_EQUAL((unsigned int) 0x0000FFFF, GetEventEnergyMask().first);
191  CHECK_EQUAL((unsigned int) 0, GetEventEnergyMask().second);
192 
193  CHECK_EQUAL((unsigned int) 0x80000000,
194  GetTraceOutOfRangeFlagMask().first);
195  CHECK_EQUAL((unsigned int) 31, GetTraceOutOfRangeFlagMask().second);
196 
197  CHECK_EQUAL((unsigned int) 0x7FFF0000, GetTraceLengthMask().first);
198  CHECK_EQUAL((unsigned int) 16, GetTraceLengthMask().second);
199  }
200 }
201 
202 TEST_FIXTURE(XiaListModeDataMask, Test_Cfd_Size_Mask) {
203  //This firmware has a unique CFD size.
204  SetFirmware(R29432);
205  SetFrequency(100);
206  CHECK_EQUAL(65536, GetCfdSize());
207  //This firmware has a different format for the 250 MS/s
208  SetFrequency(250);
209  CHECK_EQUAL(32768, GetCfdSize());
210 
211 
212  //All of the 500 MS/s modules have the same sized CFD.
213  SetFrequency(500);
214  vector<FIRMWARE> firm = {R29432, R30474, R30980, R30981, R34688};
215  for (vector<FIRMWARE>::iterator it = firm.begin(); it != firm.end(); it++) {
216  SetFirmware(*it);
217  CHECK_EQUAL(8192, GetCfdSize());
218  }
219 
220  //The 100 MHz and 250 MS/s revisions have the same structure for the
221  // following four firmwares
222  firm = {R30474, R30980, R30981, R34688};
223  SetFrequency(100);
224  for (vector<FIRMWARE>::iterator it = firm.begin(); it != firm.end(); it++) {
225  SetFirmware(*it);
226  CHECK_EQUAL(32768, GetCfdSize());
227  }
228 
229  SetFrequency(250);
230  for (vector<FIRMWARE>::iterator it = firm.begin(); it != firm.end(); it++) {
231  SetFirmware(*it);
232  CHECK_EQUAL(16384, GetCfdSize());
233  }
234 }
235 
236 int main(int argv, char *argc[]) {
237  return (UnitTest::RunAllTests());
238 }
STL namespace.
TEST_FIXTURE(XiaListModeDataMask, TestConvertStringToFirmware)
Header containing namespaced enumerations that are useful to different parts of the software...
Class that provides the data masks for XIA list mode data.
int main(int argv, char *argc[])