61 std::shared_ptr<THILFragment> eventFrag;
66 uint16_t usedData =
ByteSwap(data[0]);
73 if(data[1] != 0x0200) {
77 uint32_t bufferNumber =
ByteSwap(data[2]);
78 bufferNumber = (bufferNumber << 16) |
ByteSwap(data[3]);
79 uint16_t eventLength = 0;
81 uint32_t acquisitionClk = 0;
83 uint32_t eventNumber = 0;
84 uint64_t eventTime = 0;
87 std::bitset<16> bitPattern;
88 std::vector<uint8_t> geId;
89 std::vector<uint16_t> geTime;
90 std::vector<uint16_t> geEnergy;
91 std::vector<uint8_t> siId;
92 std::vector<uint16_t> siEnergy;
95 for(
size_t i = 4; i < usedData && i < size;) {
99 if(eventLength == 0) {
102 if(eventLength%2 == 1) {
107 if(eventId == 0x0001) {
108 acquisitionClk =
ByteSwap(data[i++]);
109 acquisitionClk = (acquisitionClk << 16) |
ByteSwap(data[i++]);
111 cpuClk = (cpuClk << 16) |
ByteSwap(data[i++]);
113 if(eventLength != 0x000c) {
122 switch((eventId>>8)&0xff) {
145 eventNumber = (eventNumber << 16) |
ByteSwap(data[i++]);
147 eventTime = (eventTime << 16) |
ByteSwap(data[i++]);
148 eventTime = (eventTime << 16) |
ByteSwap(data[i++]);
149 eventTime = (eventTime << 16) |
ByteSwap(data[i++]);
153 if((pattern&0xdf00) != 0x5500) {
159 if((pattern&0xdf00) != 0x5500) {
165 if(bitPattern.any()) {
167 for(
int ch = 0; ch < 16; ++ch) {
168 if(bitPattern.test(ch)) {
173 if((pattern&0xdf00) != 0x5500) {
176 geEnergy.push_back(
ByteSwap(data[i++]));
178 if((pattern&0xdf00) != 0x5500) {
181 geId.push_back((
ByteSwap(data[i])>>12)&0xf);
182 geTime.push_back(
ByteSwap(data[i++])&0xfff);
189 if((pattern&0xdf00) != 0x5500) {
193 if(bitPattern.any()) {
195 for(
int ch = 0; ch < 16; ++ch) {
196 if(bitPattern.test(ch)) {
200 if((pattern&0xdf00) != 0x5500) {
203 siId.push_back((
ByteSwap(data[i])>>12)&0xf);
204 siEnergy.push_back(
ByteSwap(data[i++])&0xfff);
211 if((pattern&0xdf00) != 0x5500) {
215 if(bitPattern.any()) {
217 for(
int ch = 0; ch < 16; ++ch) {
218 if(bitPattern.test(ch)) {
222 if((pattern&0xdf00) != 0x5500) {
225 siId.push_back(((
ByteSwap(data[i])>>12)&0xf)+16);
226 siEnergy.push_back(
ByteSwap(data[i++])&0xfff);
233 if((pattern&0xdf00) != 0x5500) {
237 if(bitPattern.any()) {
239 for(
int ch = 0; ch < 16; ++ch) {
240 if(bitPattern.test(ch)) {
244 if((pattern&0xdf00) != 0x5500) {
247 siId.push_back(((
ByteSwap(data[i])>>12)&0xf)+32);
248 siEnergy.push_back(
ByteSwap(data[i++])&0xfff);
264 eventFrag = std::make_shared<THILFragment>();
267 eventFrag->SetAddress(0x100);
268 eventFrag->GermaniumId(geId);
269 eventFrag->GermaniumEnergy(geEnergy);
270 eventFrag->GermaniumTime(geTime);
271 eventFrag->SiliconId(siId);
272 eventFrag->SiliconEnergy(siEnergy);
275 eventFrag->EventNumber(eventNumber);
276 eventFrag->EventTime(eventTime);
277 eventFrag->MicrosecondTime(usTime);
278 if(eventFrag->Good()) {