ROOT logo
//_HADES_CLASS_DESCRIPTION
/////////////////////////////////////////////////////////////
//
//  HPionTrackerTrb3Unpacker
//
//  Class for unpacking TRB3 data and filling
//    the PionTracker Raw category
//
/////////////////////////////////////////////////////////////

#include "hpiontrackertrb3unpacker.h"
#include "hades.h"
#include "hcategory.h"
#include "hdebug.h"
#include "hevent.h"
#include "heventheader.h"
#include "hldsource.h"
#include "hldsubevt.h"
#include "hruntimedb.h"
#include "hspectrometer.h"
#include "hpiontrackerdetector.h"
#include "hpiontrackerraw.h"
#include "hpiontrackertrb3lookup.h"
#include "hpiontrackerdef.h"
#include <iostream>

using namespace std;

#define PR(x) std::cout << "++DEBUG: " << #x << " = |" << x << "| (" << __FILE__ << ", " << __LINE__ << ")\n";
#define PRh(x) std::cout << "++DEBUG: " << #x << " = hex |" << std::hex << x << std::dec << "| (" << __FILE__ << ", " << __LINE__ << ")\n";

ClassImp (HPionTrackerTrb3Unpacker)

HPionTrackerTrb3Unpacker::HPionTrackerTrb3Unpacker (UInt_t id)
{
	// constructor
	subEvtId       = id;
	uTrbNetAddress = 0;
	nEvt = 0;

	debugFlag      = 0;
	quietMode      = kFALSE;
	reportCritical = kFALSE;

	pRawCat = NULL;
	pLookup = NULL;
	pTrbBoard = NULL;
}

Bool_t HPionTrackerTrb3Unpacker::init (void)
{
	// creates the raw category and gets the pointer to the TRB3 lookup table

	HPionTrackerDetector * det = (HPionTrackerDetector *) gHades->getSetup()->getDetector ("PionTracker");

	if (!det)
	{
		Error ("init", "No PionTracker found.");
		return kFALSE;
	}

	pRawCat = det->buildCategory (catPionTrackerRaw);
	loc.set (2, 0, 0);
// 	loc.set (1, 0);

	pLookup = (HPionTrackerTrb3Lookup *) (gHades->getRuntimeDb()->getContainer ("PionTrackerTrb3Lookup"));

	if (!pLookup)
	{
		Error ("init", "No Pointer to parameter container PionTrackerTrb3Lookup.");
		return kFALSE;
	}

	return kTRUE;
}

Int_t HPionTrackerTrb3Unpacker::execute (void)
{
	// decodes the subevent of the PionTracker and fills the Raw category
	if (gHades->isCalibration())
	{
		//calibration event
		return 1;
	}

	if (gHades->getCurrentEvent()->getHeader()->getId() == 0xe)
	{
		//scaler event
		return 1;
	}

	nEvt = gHades->getCurrentEvent()->getHeader()->getEventSeqNumber(); // Evt Seq. Nb.

	if (NULL == pSubEvt)
	{
#if DEBUG_LEVEL > 0
		Warning ("execute", "EvtId: 0x%x, Unpacker 0x%x ==> no data",
				 gHades->getCurrentEvent()->getHeader()->getId(), subEvtId);
#endif
		return 1;
	}

	// decode subevent data

// pSubEvt - make sure that there is something for decoding
	if (!pSubEvt)
		return 1;

	UInt_t * databeg = pSubEvt->getData();
	UInt_t * dataend  = pSubEvt->getEnd();

	nEvt = gHades->getCurrentEvent()->getHeader()->getEventSeqNumber();

	size_t data_size = dataend - databeg;

	if (data_size == 0)	return 0;

	size_t datanum = 0;
	size_t datacnt = 0;

	ptstate sm = sm_wait_for_board;

	ptheaderset pths;// = { des_none, -1, -1, -1, -1, -1 };
	ptdataset ptds;// = { -1, -1, -1, -1, -1 };

	for (size_t cnt = 0; cnt < data_size; ++cnt)
	{
		UInt_t d = * (databeg + cnt);

		switch (sm)
		{
			case sm_wait_for_board:
				datanum = (d >> 16) & 0xFFFF;   // No. of the data words from one TRB board
				uTrbNetAddress = d & 0xFFFF;     // TRB net Adddress (Old TRB subevent id)
// PRh(uTrbNetAddress);
				if (datanum == 0)
				{
					continue;
				}

				datacnt = 0;

				// which module
				if (uTrbNetAddress == 0x5555)
				{
					cnt += datanum;
					continue;
				}

				pTrbBoard = pLookup->getBoard (uTrbNetAddress);

				if (!pTrbBoard)
				{
					Warning ("HPionTrackerTrb3Unpacker::execute",
							 "Evt Nr : %i  TrbNetAdress: %x (%i) unpacked but TRB Board not in lookup table",
							 nEvt, uTrbNetAddress, uTrbNetAddress);
					// skip proper number of words and continue iwth next board
					cnt += datanum;
					continue;
				}

				// next step is sub-sub-event header
				sm = sm_header;

				break;

			// decode sub-sub-event header
			case sm_header:
				pths = decodeSubevent(d);
				++datacnt;
				sm = sm_data;

				break;

				// decode sub-sub-event data
			case sm_data:
			{
				++datacnt;

				if (d == 0xffffffff)
				{
					if (datacnt != datanum)
					{
						Error ("execute()", "Event %d --> datanum and datacnt differs. datanum=%lu, datacnt=%lu", nEvt, datanum, datacnt);
					}

					sm = sm_wait_for_board;

					break;
				}
				else
				{
					switch (pths.design)
					{
						case des_cosy13:
							ptds = decodeData_Cosy13(d, pths);
							break;
						case des_140115:
							ptds = decodeData_140115(d, pths);
							break;
						default:
							continue;
					}
					fillRaw (ptds);
				}
			}
			break;

			default:
				datacnt = 0;
				sm = sm_wait_for_board;
				break;
		}
	}

	// decode subsubevent data of this TRB
	// .....
	// call function fillRaw to store the data of a channel
	// .....

	return 1;
}


ptheaderset HPionTrackerTrb3Unpacker::decodeSubevent(UInt_t h)
{
	ptheaderset pths;

	bool olddesign = ((h >> 30) & 0x03) == 0x00;
	if (olddesign)
	{
		pths.design = des_cosy13;

		pths.tsref = h & 0xfff;
		pths.evcnt = (h >> 12) & 0x3ff;
		pths.romode = (h >> 22) & 0x3;
		pths.version = 0;
		pths.boardid = (h >> 24) & 0xff;
	}
	else
	{
		pths.design = des_140115;

		pths.tsref = h & 0xfff;
		pths.evcnt = (h >> 12) & 0x3ff;
		pths.romode = (h >> 22) & 0x3;
		pths.version = (h >> 26) & 0xf;
		pths.boardid = (h >> 30) & 0x3;
	}

	return pths;
}

ptdataset HPionTrackerTrb3Unpacker::decodeData_Cosy13(UInt_t d, const ptheaderset & pths)
{
	ptdataset ptds;
	ptds.ts = (d >> 0) & 0xfff;
	ptds.adc = (d >> 12) & 0xfff;
	ptds.strip = (d >> 24) & 0x7f;
	ptds.pileup = (d >> 31) & 0x01;
	ptds.overflow = 0;

	return ptds;
}

ptdataset HPionTrackerTrb3Unpacker::decodeData_140115(UInt_t d, const ptheaderset& hs)
{
	ptdataset ptds;//PR(hs.romode);
	switch (hs.romode)
	{
		case 0x00:
			ptds.ts = d & 0x7ff;
			ptds.adc = (d >> 11) & 0xfff;
			ptds.overflow = (d >> 23) & 0x01;
			ptds.pileup = (d >> 24) & 0x01;
			ptds.strip = (d >> 25) & 0x7f;
			break;
		case 0x01:
			ptds.ts = d & 0xfff;
			ptds.adc = (d >> 11) & 0xffe; // adc[11:1]
			ptds.overflow = (d >> 23) & 0x01;
			ptds.pileup = (d >> 24) & 0x01;
			ptds.strip = (d >> 25) & 0x7f;
			break;
		case 0x02:
			ptds.ts = d & 0x3fff;
			ptds.adc = (d >> 11) & 0xff8; // adc[11:1]
			ptds.overflow = (d >> 23) & 0x01;
			ptds.pileup = (d >> 24) & 0x01;
			ptds.strip = (d >> 25) & 0x7f;
			break;
		case 0x03:
			ptds.ts = d & 0x3fff;
			ptds.adc = (d >> 13) & 0xffe; // adc[11:1]
			ptds.overflow = -1;
			ptds.pileup = -1;
			ptds.strip = (d >> 25) & 0x7f;
			break;
		default:
			ptds.ts = -1;
			ptds.adc = -1;
			ptds.overflow = -1;
			ptds.pileup = -1;
			ptds.strip = 0;
			break;
	}

	return ptds;
}

Bool_t HPionTrackerTrb3Unpacker::fillRaw(const ptdataset& ptds)
{
	return fillRaw(ptds.strip, ptds.ts, ptds.adc, ptds.pileup, ptds.overflow);
}


Bool_t HPionTrackerTrb3Unpacker::fillRaw (Int_t channel, Float_t time, Float_t charge, Char_t pileup, Char_t overflow)
{
	// fill the raw category of the PionTracker for the channel "

	if (pTrbBoard)
	{
		HPionTrackerTrb3LookupChan * ch = pTrbBoard->getChannel (channel);
		ch->getAddress (loc[0], loc[1]);

		if (loc[0] >= 0)
		{
			HPionTrackerRaw * pRaw = (HPionTrackerRaw *) pRawCat->getObject (loc);

			if (!pRaw)
			{
				pRaw = (HPionTrackerRaw *) pRawCat->getSlot (loc);

// 							PRh(pRaw);
// 			if (pRaw) delete pRaw;
// PR(pRaw);
				if (pRaw)
				{
// 					printf("=== new pRaw\n");
					pRaw = new (pRaw) HPionTrackerRaw;
					pRaw->setAddress (loc[0], loc[1]);
				}
				else
				{
					Warning ("HPionTrackerTrb3Unpacker::execute()",
							 "Can't get slot mod=%i, chan=%i", loc[0], loc[1]);
					return kFALSE;
				}
				
			}
// 			printf("+ pRaw: %x at %x\n", pRaw, &pRaw);

			pRaw->setData (time, charge, pileup, overflow);
		}
		else
		{
			Warning ("HPionTrackerTrb3Unpacker::execute()",
					 "Not found in lookup table: TrbNetAddress=%i, channel=%i", uTrbNetAddress, channel);
		}
	}

	return kTRUE;
}

 hpiontrackertrb3unpacker.cc:1
 hpiontrackertrb3unpacker.cc:2
 hpiontrackertrb3unpacker.cc:3
 hpiontrackertrb3unpacker.cc:4
 hpiontrackertrb3unpacker.cc:5
 hpiontrackertrb3unpacker.cc:6
 hpiontrackertrb3unpacker.cc:7
 hpiontrackertrb3unpacker.cc:8
 hpiontrackertrb3unpacker.cc:9
 hpiontrackertrb3unpacker.cc:10
 hpiontrackertrb3unpacker.cc:11
 hpiontrackertrb3unpacker.cc:12
 hpiontrackertrb3unpacker.cc:13
 hpiontrackertrb3unpacker.cc:14
 hpiontrackertrb3unpacker.cc:15
 hpiontrackertrb3unpacker.cc:16
 hpiontrackertrb3unpacker.cc:17
 hpiontrackertrb3unpacker.cc:18
 hpiontrackertrb3unpacker.cc:19
 hpiontrackertrb3unpacker.cc:20
 hpiontrackertrb3unpacker.cc:21
 hpiontrackertrb3unpacker.cc:22
 hpiontrackertrb3unpacker.cc:23
 hpiontrackertrb3unpacker.cc:24
 hpiontrackertrb3unpacker.cc:25
 hpiontrackertrb3unpacker.cc:26
 hpiontrackertrb3unpacker.cc:27
 hpiontrackertrb3unpacker.cc:28
 hpiontrackertrb3unpacker.cc:29
 hpiontrackertrb3unpacker.cc:30
 hpiontrackertrb3unpacker.cc:31
 hpiontrackertrb3unpacker.cc:32
 hpiontrackertrb3unpacker.cc:33
 hpiontrackertrb3unpacker.cc:34
 hpiontrackertrb3unpacker.cc:35
 hpiontrackertrb3unpacker.cc:36
 hpiontrackertrb3unpacker.cc:37
 hpiontrackertrb3unpacker.cc:38
 hpiontrackertrb3unpacker.cc:39
 hpiontrackertrb3unpacker.cc:40
 hpiontrackertrb3unpacker.cc:41
 hpiontrackertrb3unpacker.cc:42
 hpiontrackertrb3unpacker.cc:43
 hpiontrackertrb3unpacker.cc:44
 hpiontrackertrb3unpacker.cc:45
 hpiontrackertrb3unpacker.cc:46
 hpiontrackertrb3unpacker.cc:47
 hpiontrackertrb3unpacker.cc:48
 hpiontrackertrb3unpacker.cc:49
 hpiontrackertrb3unpacker.cc:50
 hpiontrackertrb3unpacker.cc:51
 hpiontrackertrb3unpacker.cc:52
 hpiontrackertrb3unpacker.cc:53
 hpiontrackertrb3unpacker.cc:54
 hpiontrackertrb3unpacker.cc:55
 hpiontrackertrb3unpacker.cc:56
 hpiontrackertrb3unpacker.cc:57
 hpiontrackertrb3unpacker.cc:58
 hpiontrackertrb3unpacker.cc:59
 hpiontrackertrb3unpacker.cc:60
 hpiontrackertrb3unpacker.cc:61
 hpiontrackertrb3unpacker.cc:62
 hpiontrackertrb3unpacker.cc:63
 hpiontrackertrb3unpacker.cc:64
 hpiontrackertrb3unpacker.cc:65
 hpiontrackertrb3unpacker.cc:66
 hpiontrackertrb3unpacker.cc:67
 hpiontrackertrb3unpacker.cc:68
 hpiontrackertrb3unpacker.cc:69
 hpiontrackertrb3unpacker.cc:70
 hpiontrackertrb3unpacker.cc:71
 hpiontrackertrb3unpacker.cc:72
 hpiontrackertrb3unpacker.cc:73
 hpiontrackertrb3unpacker.cc:74
 hpiontrackertrb3unpacker.cc:75
 hpiontrackertrb3unpacker.cc:76
 hpiontrackertrb3unpacker.cc:77
 hpiontrackertrb3unpacker.cc:78
 hpiontrackertrb3unpacker.cc:79
 hpiontrackertrb3unpacker.cc:80
 hpiontrackertrb3unpacker.cc:81
 hpiontrackertrb3unpacker.cc:82
 hpiontrackertrb3unpacker.cc:83
 hpiontrackertrb3unpacker.cc:84
 hpiontrackertrb3unpacker.cc:85
 hpiontrackertrb3unpacker.cc:86
 hpiontrackertrb3unpacker.cc:87
 hpiontrackertrb3unpacker.cc:88
 hpiontrackertrb3unpacker.cc:89
 hpiontrackertrb3unpacker.cc:90
 hpiontrackertrb3unpacker.cc:91
 hpiontrackertrb3unpacker.cc:92
 hpiontrackertrb3unpacker.cc:93
 hpiontrackertrb3unpacker.cc:94
 hpiontrackertrb3unpacker.cc:95
 hpiontrackertrb3unpacker.cc:96
 hpiontrackertrb3unpacker.cc:97
 hpiontrackertrb3unpacker.cc:98
 hpiontrackertrb3unpacker.cc:99
 hpiontrackertrb3unpacker.cc:100
 hpiontrackertrb3unpacker.cc:101
 hpiontrackertrb3unpacker.cc:102
 hpiontrackertrb3unpacker.cc:103
 hpiontrackertrb3unpacker.cc:104
 hpiontrackertrb3unpacker.cc:105
 hpiontrackertrb3unpacker.cc:106
 hpiontrackertrb3unpacker.cc:107
 hpiontrackertrb3unpacker.cc:108
 hpiontrackertrb3unpacker.cc:109
 hpiontrackertrb3unpacker.cc:110
 hpiontrackertrb3unpacker.cc:111
 hpiontrackertrb3unpacker.cc:112
 hpiontrackertrb3unpacker.cc:113
 hpiontrackertrb3unpacker.cc:114
 hpiontrackertrb3unpacker.cc:115
 hpiontrackertrb3unpacker.cc:116
 hpiontrackertrb3unpacker.cc:117
 hpiontrackertrb3unpacker.cc:118
 hpiontrackertrb3unpacker.cc:119
 hpiontrackertrb3unpacker.cc:120
 hpiontrackertrb3unpacker.cc:121
 hpiontrackertrb3unpacker.cc:122
 hpiontrackertrb3unpacker.cc:123
 hpiontrackertrb3unpacker.cc:124
 hpiontrackertrb3unpacker.cc:125
 hpiontrackertrb3unpacker.cc:126
 hpiontrackertrb3unpacker.cc:127
 hpiontrackertrb3unpacker.cc:128
 hpiontrackertrb3unpacker.cc:129
 hpiontrackertrb3unpacker.cc:130
 hpiontrackertrb3unpacker.cc:131
 hpiontrackertrb3unpacker.cc:132
 hpiontrackertrb3unpacker.cc:133
 hpiontrackertrb3unpacker.cc:134
 hpiontrackertrb3unpacker.cc:135
 hpiontrackertrb3unpacker.cc:136
 hpiontrackertrb3unpacker.cc:137
 hpiontrackertrb3unpacker.cc:138
 hpiontrackertrb3unpacker.cc:139
 hpiontrackertrb3unpacker.cc:140
 hpiontrackertrb3unpacker.cc:141
 hpiontrackertrb3unpacker.cc:142
 hpiontrackertrb3unpacker.cc:143
 hpiontrackertrb3unpacker.cc:144
 hpiontrackertrb3unpacker.cc:145
 hpiontrackertrb3unpacker.cc:146
 hpiontrackertrb3unpacker.cc:147
 hpiontrackertrb3unpacker.cc:148
 hpiontrackertrb3unpacker.cc:149
 hpiontrackertrb3unpacker.cc:150
 hpiontrackertrb3unpacker.cc:151
 hpiontrackertrb3unpacker.cc:152
 hpiontrackertrb3unpacker.cc:153
 hpiontrackertrb3unpacker.cc:154
 hpiontrackertrb3unpacker.cc:155
 hpiontrackertrb3unpacker.cc:156
 hpiontrackertrb3unpacker.cc:157
 hpiontrackertrb3unpacker.cc:158
 hpiontrackertrb3unpacker.cc:159
 hpiontrackertrb3unpacker.cc:160
 hpiontrackertrb3unpacker.cc:161
 hpiontrackertrb3unpacker.cc:162
 hpiontrackertrb3unpacker.cc:163
 hpiontrackertrb3unpacker.cc:164
 hpiontrackertrb3unpacker.cc:165
 hpiontrackertrb3unpacker.cc:166
 hpiontrackertrb3unpacker.cc:167
 hpiontrackertrb3unpacker.cc:168
 hpiontrackertrb3unpacker.cc:169
 hpiontrackertrb3unpacker.cc:170
 hpiontrackertrb3unpacker.cc:171
 hpiontrackertrb3unpacker.cc:172
 hpiontrackertrb3unpacker.cc:173
 hpiontrackertrb3unpacker.cc:174
 hpiontrackertrb3unpacker.cc:175
 hpiontrackertrb3unpacker.cc:176
 hpiontrackertrb3unpacker.cc:177
 hpiontrackertrb3unpacker.cc:178
 hpiontrackertrb3unpacker.cc:179
 hpiontrackertrb3unpacker.cc:180
 hpiontrackertrb3unpacker.cc:181
 hpiontrackertrb3unpacker.cc:182
 hpiontrackertrb3unpacker.cc:183
 hpiontrackertrb3unpacker.cc:184
 hpiontrackertrb3unpacker.cc:185
 hpiontrackertrb3unpacker.cc:186
 hpiontrackertrb3unpacker.cc:187
 hpiontrackertrb3unpacker.cc:188
 hpiontrackertrb3unpacker.cc:189
 hpiontrackertrb3unpacker.cc:190
 hpiontrackertrb3unpacker.cc:191
 hpiontrackertrb3unpacker.cc:192
 hpiontrackertrb3unpacker.cc:193
 hpiontrackertrb3unpacker.cc:194
 hpiontrackertrb3unpacker.cc:195
 hpiontrackertrb3unpacker.cc:196
 hpiontrackertrb3unpacker.cc:197
 hpiontrackertrb3unpacker.cc:198
 hpiontrackertrb3unpacker.cc:199
 hpiontrackertrb3unpacker.cc:200
 hpiontrackertrb3unpacker.cc:201
 hpiontrackertrb3unpacker.cc:202
 hpiontrackertrb3unpacker.cc:203
 hpiontrackertrb3unpacker.cc:204
 hpiontrackertrb3unpacker.cc:205
 hpiontrackertrb3unpacker.cc:206
 hpiontrackertrb3unpacker.cc:207
 hpiontrackertrb3unpacker.cc:208
 hpiontrackertrb3unpacker.cc:209
 hpiontrackertrb3unpacker.cc:210
 hpiontrackertrb3unpacker.cc:211
 hpiontrackertrb3unpacker.cc:212
 hpiontrackertrb3unpacker.cc:213
 hpiontrackertrb3unpacker.cc:214
 hpiontrackertrb3unpacker.cc:215
 hpiontrackertrb3unpacker.cc:216
 hpiontrackertrb3unpacker.cc:217
 hpiontrackertrb3unpacker.cc:218
 hpiontrackertrb3unpacker.cc:219
 hpiontrackertrb3unpacker.cc:220
 hpiontrackertrb3unpacker.cc:221
 hpiontrackertrb3unpacker.cc:222
 hpiontrackertrb3unpacker.cc:223
 hpiontrackertrb3unpacker.cc:224
 hpiontrackertrb3unpacker.cc:225
 hpiontrackertrb3unpacker.cc:226
 hpiontrackertrb3unpacker.cc:227
 hpiontrackertrb3unpacker.cc:228
 hpiontrackertrb3unpacker.cc:229
 hpiontrackertrb3unpacker.cc:230
 hpiontrackertrb3unpacker.cc:231
 hpiontrackertrb3unpacker.cc:232
 hpiontrackertrb3unpacker.cc:233
 hpiontrackertrb3unpacker.cc:234
 hpiontrackertrb3unpacker.cc:235
 hpiontrackertrb3unpacker.cc:236
 hpiontrackertrb3unpacker.cc:237
 hpiontrackertrb3unpacker.cc:238
 hpiontrackertrb3unpacker.cc:239
 hpiontrackertrb3unpacker.cc:240
 hpiontrackertrb3unpacker.cc:241
 hpiontrackertrb3unpacker.cc:242
 hpiontrackertrb3unpacker.cc:243
 hpiontrackertrb3unpacker.cc:244
 hpiontrackertrb3unpacker.cc:245
 hpiontrackertrb3unpacker.cc:246
 hpiontrackertrb3unpacker.cc:247
 hpiontrackertrb3unpacker.cc:248
 hpiontrackertrb3unpacker.cc:249
 hpiontrackertrb3unpacker.cc:250
 hpiontrackertrb3unpacker.cc:251
 hpiontrackertrb3unpacker.cc:252
 hpiontrackertrb3unpacker.cc:253
 hpiontrackertrb3unpacker.cc:254
 hpiontrackertrb3unpacker.cc:255
 hpiontrackertrb3unpacker.cc:256
 hpiontrackertrb3unpacker.cc:257
 hpiontrackertrb3unpacker.cc:258
 hpiontrackertrb3unpacker.cc:259
 hpiontrackertrb3unpacker.cc:260
 hpiontrackertrb3unpacker.cc:261
 hpiontrackertrb3unpacker.cc:262
 hpiontrackertrb3unpacker.cc:263
 hpiontrackertrb3unpacker.cc:264
 hpiontrackertrb3unpacker.cc:265
 hpiontrackertrb3unpacker.cc:266
 hpiontrackertrb3unpacker.cc:267
 hpiontrackertrb3unpacker.cc:268
 hpiontrackertrb3unpacker.cc:269
 hpiontrackertrb3unpacker.cc:270
 hpiontrackertrb3unpacker.cc:271
 hpiontrackertrb3unpacker.cc:272
 hpiontrackertrb3unpacker.cc:273
 hpiontrackertrb3unpacker.cc:274
 hpiontrackertrb3unpacker.cc:275
 hpiontrackertrb3unpacker.cc:276
 hpiontrackertrb3unpacker.cc:277
 hpiontrackertrb3unpacker.cc:278
 hpiontrackertrb3unpacker.cc:279
 hpiontrackertrb3unpacker.cc:280
 hpiontrackertrb3unpacker.cc:281
 hpiontrackertrb3unpacker.cc:282
 hpiontrackertrb3unpacker.cc:283
 hpiontrackertrb3unpacker.cc:284
 hpiontrackertrb3unpacker.cc:285
 hpiontrackertrb3unpacker.cc:286
 hpiontrackertrb3unpacker.cc:287
 hpiontrackertrb3unpacker.cc:288
 hpiontrackertrb3unpacker.cc:289
 hpiontrackertrb3unpacker.cc:290
 hpiontrackertrb3unpacker.cc:291
 hpiontrackertrb3unpacker.cc:292
 hpiontrackertrb3unpacker.cc:293
 hpiontrackertrb3unpacker.cc:294
 hpiontrackertrb3unpacker.cc:295
 hpiontrackertrb3unpacker.cc:296
 hpiontrackertrb3unpacker.cc:297
 hpiontrackertrb3unpacker.cc:298
 hpiontrackertrb3unpacker.cc:299
 hpiontrackertrb3unpacker.cc:300
 hpiontrackertrb3unpacker.cc:301
 hpiontrackertrb3unpacker.cc:302
 hpiontrackertrb3unpacker.cc:303
 hpiontrackertrb3unpacker.cc:304
 hpiontrackertrb3unpacker.cc:305
 hpiontrackertrb3unpacker.cc:306
 hpiontrackertrb3unpacker.cc:307
 hpiontrackertrb3unpacker.cc:308
 hpiontrackertrb3unpacker.cc:309
 hpiontrackertrb3unpacker.cc:310
 hpiontrackertrb3unpacker.cc:311
 hpiontrackertrb3unpacker.cc:312
 hpiontrackertrb3unpacker.cc:313
 hpiontrackertrb3unpacker.cc:314
 hpiontrackertrb3unpacker.cc:315
 hpiontrackertrb3unpacker.cc:316
 hpiontrackertrb3unpacker.cc:317
 hpiontrackertrb3unpacker.cc:318
 hpiontrackertrb3unpacker.cc:319
 hpiontrackertrb3unpacker.cc:320
 hpiontrackertrb3unpacker.cc:321
 hpiontrackertrb3unpacker.cc:322
 hpiontrackertrb3unpacker.cc:323
 hpiontrackertrb3unpacker.cc:324
 hpiontrackertrb3unpacker.cc:325
 hpiontrackertrb3unpacker.cc:326
 hpiontrackertrb3unpacker.cc:327
 hpiontrackertrb3unpacker.cc:328
 hpiontrackertrb3unpacker.cc:329
 hpiontrackertrb3unpacker.cc:330
 hpiontrackertrb3unpacker.cc:331
 hpiontrackertrb3unpacker.cc:332
 hpiontrackertrb3unpacker.cc:333
 hpiontrackertrb3unpacker.cc:334
 hpiontrackertrb3unpacker.cc:335
 hpiontrackertrb3unpacker.cc:336
 hpiontrackertrb3unpacker.cc:337
 hpiontrackertrb3unpacker.cc:338
 hpiontrackertrb3unpacker.cc:339
 hpiontrackertrb3unpacker.cc:340
 hpiontrackertrb3unpacker.cc:341
 hpiontrackertrb3unpacker.cc:342
 hpiontrackertrb3unpacker.cc:343
 hpiontrackertrb3unpacker.cc:344
 hpiontrackertrb3unpacker.cc:345
 hpiontrackertrb3unpacker.cc:346
 hpiontrackertrb3unpacker.cc:347
 hpiontrackertrb3unpacker.cc:348
 hpiontrackertrb3unpacker.cc:349
 hpiontrackertrb3unpacker.cc:350
 hpiontrackertrb3unpacker.cc:351
 hpiontrackertrb3unpacker.cc:352
 hpiontrackertrb3unpacker.cc:353
 hpiontrackertrb3unpacker.cc:354
 hpiontrackertrb3unpacker.cc:355
 hpiontrackertrb3unpacker.cc:356
 hpiontrackertrb3unpacker.cc:357
 hpiontrackertrb3unpacker.cc:358
 hpiontrackertrb3unpacker.cc:359
 hpiontrackertrb3unpacker.cc:360
 hpiontrackertrb3unpacker.cc:361
 hpiontrackertrb3unpacker.cc:362
 hpiontrackertrb3unpacker.cc:363
 hpiontrackertrb3unpacker.cc:364