60 std::shared_ptr<THILFragment> eventFrag;
65 uint16_t usedData =
ByteSwap(data[0]);
66 if(usedData % 2 == 1) {
72 if(data[1] != 0x0200) {
76 uint32_t bufferNumber =
ByteSwap(data[2]);
77 bufferNumber = (bufferNumber << 16) |
ByteSwap(data[3]);
78 uint16_t eventLength = 0;
80 uint32_t acquisitionClk = 0;
82 uint32_t eventNumber = 0;
83 uint64_t eventTime = 0;
86 std::bitset<16> bitPattern;
87 std::vector<uint8_t> geId;
88 std::vector<uint16_t> geTime;
89 std::vector<uint16_t> geEnergy;
90 std::vector<uint8_t> siId;
91 std::vector<uint16_t> siEnergy;
94 for(
size_t i = 4; i < usedData && i < size;) {
98 if(eventLength == 0) {
101 if(eventLength % 2 == 1) {
106 if(eventId == 0x0001) {
107 acquisitionClk =
ByteSwap(data[i++]);
108 acquisitionClk = (acquisitionClk << 16) |
ByteSwap(data[i++]);
110 cpuClk = (cpuClk << 16) |
ByteSwap(data[i++]);
112 if(eventLength != 0x000c) {
121 switch((eventId >> 8) & 0xff) {
124 i += eventLength - 2;
129 i += eventLength - 2;
134 i += eventLength - 2;
139 i += eventLength - 2;
144 eventNumber = (eventNumber << 16) |
ByteSwap(data[i++]);
146 eventTime = (eventTime << 16) |
ByteSwap(data[i++]);
147 eventTime = (eventTime << 16) |
ByteSwap(data[i++]);
148 eventTime = (eventTime << 16) |
ByteSwap(data[i++]);
152 if((pattern & 0xdf00) != 0x5500) {
158 if((pattern & 0xdf00) != 0x5500) {
164 if(bitPattern.any()) {
166 for(
int ch = 0; ch < 16; ++ch) {
167 if(bitPattern.test(ch)) {
172 if((pattern & 0xdf00) != 0x5500) {
175 geEnergy.push_back(
ByteSwap(data[i++]));
177 if((pattern & 0xdf00) != 0x5500) {
180 geId.push_back((
ByteSwap(data[i]) >> 12) & 0xf);
181 geTime.push_back(
ByteSwap(data[i++]) & 0xfff);
188 if((pattern & 0xdf00) != 0x5500) {
192 if(bitPattern.any()) {
194 for(
int ch = 0; ch < 16; ++ch) {
195 if(bitPattern.test(ch)) {
199 if((pattern & 0xdf00) != 0x5500) {
202 siId.push_back((
ByteSwap(data[i]) >> 12) & 0xf);
203 siEnergy.push_back(
ByteSwap(data[i++]) & 0xfff);
210 if((pattern & 0xdf00) != 0x5500) {
214 if(bitPattern.any()) {
216 for(
int ch = 0; ch < 16; ++ch) {
217 if(bitPattern.test(ch)) {
221 if((pattern & 0xdf00) != 0x5500) {
224 siId.push_back(((
ByteSwap(data[i]) >> 12) & 0xf) + 16);
225 siEnergy.push_back(
ByteSwap(data[i++]) & 0xfff);
232 if((pattern & 0xdf00) != 0x5500) {
236 if(bitPattern.any()) {
238 for(
int ch = 0; ch < 16; ++ch) {
239 if(bitPattern.test(ch)) {
243 if((pattern & 0xdf00) != 0x5500) {
246 siId.push_back(((
ByteSwap(data[i]) >> 12) & 0xf) + 32);
247 siEnergy.push_back(
ByteSwap(data[i++]) & 0xfff);
263 eventFrag = std::make_shared<THILFragment>();
266 eventFrag->SetAddress(0x100);
267 eventFrag->GermaniumId(geId);
268 eventFrag->GermaniumEnergy(geEnergy);
269 eventFrag->GermaniumTime(geTime);
270 eventFrag->SiliconId(siId);
271 eventFrag->SiliconEnergy(siEnergy);
274 eventFrag->EventNumber(eventNumber);
275 eventFrag->EventTime(eventTime);
276 eventFrag->MicrosecondTime(usTime);
277 if(eventFrag->Good()) {
295 i += eventLength - 2;