#include "hpiontrackertrackf.h"
#include "hpiontrackerdef.h"
#include "hpiontrackerhit.h"
#include "hpiontrackertrack.h"
#include "hpiontrackerdetector.h"
#include "hpiontrackertrackfpar.h"
#include "hpiontrackermompar.h"
#include "hpiontrackermomrunpar.h"
#include "hpiontrackerbeampar.h"
#include "HBeam.h"
#include "hades.h"
#include "hcategory.h"
#include "hdebug.h"
#include "hevent.h"
#include "hiterator.h"
#include "hruntimedb.h"
#include "hrun.h"
#include "hspectrometer.h"
#include <iomanip>
#include <iostream>
#include <algorithm>
#include <vector>
#include <fstream>
#include <cmath>
#include <stdlib.h>
#include <string.h>
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 (HPionTrackerTrackF)
    
    
    
    HPionTrackerTrackF::HPionTrackerTrackF (void)
{
    initVars();
    correction.clear();
    memset(corrs, 0, 2* sizeof(Double_t));
}
HPionTrackerTrackF::HPionTrackerTrackF (const Text_t * name, const Text_t * title, Bool_t skip)
: HReconstructor (name, title)
{
    
    
    initVars();
    correction.clear();
    memset(corrs, 0, 2* sizeof(Double_t));
}
HPionTrackerTrackF::~HPionTrackerTrackF (void)
{
    
    if (NULL != iter)
    {
	delete iter;
	iter = NULL;
    }
}
void HPionTrackerTrackF::initVars(void)
{
    pHitCat		   	= NULL;
    pTrackCat		= NULL;
    iter		   	= NULL;
    pTrackfpar		= NULL;
    pTrackBeampar	 	= NULL;
    idet1 = 0;
    idet2 = 1;
    id_det1 =16;  
    id_det2 =25;  
    id_outQ9=29;  
    id_targ =32;  
    
    
    T12[idet1] = -0.03919;
    T14[idet1] = -0.00111;
    T16[idet1] = -0.81235;
    T32[idet1] = -0.01312;
    T33[idet1] = -18.281;
    T34[idet1] = -0.00298;
    T36[idet1] = 0.3955;
    T126[idet1] = 0.03095;
    T146[idet1] = -0.0003049;
    T166[idet1] = 0.005611;
    T336[idet1] = 0.216;
    T346[idet1] =  0.0263;
    T366[idet1] = -0.003661;
    
    
    T12[idet2] = -0.47448;
    T14[idet2] =  0.00006;
    T16[idet2] = -0.03413;
    T32[idet2] = -0.06929;
    T33[idet2] = -67.86523;
    T34[idet2] = -0.08382;
    T36[idet2] =  1.42422;
    T126[idet2] = -0.0308;
    T146[idet2] = 0.0008834;
    T166[idet2] = -0.02265;
    T336[idet2] = 0.8774;
    T346[idet2] =  0.09678;
    T366[idet2] = -0.01531;
    
    
    T12_t = -0.12828;
    T14_t = 0.00014;
    T16_t = 0.00700;
    T126_t = -0.04456;
    T146_t = 0.001482;
    T166_t = -0.007186;
    T32_t = -0.05304;
    T33_t = -49.73210;
    T34_t = -0.06448;
    T36_t = 0.99967 ;
    T326_t = -0.0009558;
    T336_t = 0.08271;
    T346_t = 0.07017;
    T366_t = 0.0005012;
    
    T21_t = 3.76702;
    T22_t = 0.57575;
    T23_t = -1.16249;
    T24_t = 0.00019;
    T26_t = 0.07783;
    T226_t = -0.04209;
    T246_t = 0.001718;
    T266_t = 0.02538;
    T41_t = 1.00162;
    T42_t = 0.26582;
    T43_t = 263.23;
    T44_t =  0.32118; 
    T46_t = -5.58106;
    T426_t = - 0.003304;
    T436_t = - 8.291; 
    T446_t = - 0.3796; 
    T466_t = 0.1623;
    nev = 0;
#ifdef USE_FILE
    inputpos.open("trackdetpos-g05x-g05y.txt");
#endif
}
Bool_t HPionTrackerTrackF::momrec (Float_t x1, Float_t y1, Float_t x2, Float_t y2, Float_t momref, track & tr)
{
    
    
    
    
    
    
    
    Int_t yy_weight = pTrackerMompar->getYYWeight();
    Float_t yy_slope = pTrackerMompar->getYYSlope();
    Float_t yy_offset = pTrackerMompar->getYYOffset();
    Int_t mom_weight = pTrackerMompar->getMomWeight();
    
    Float_t mom_maxt = corrs[0] - corrs[1];
    Float_t mom_offset = - corrs[1];
    
    
    tr.fX1 = x1;
    tr.fY1 = y1;
    tr.fX2 = x2;
    tr.fY2 = y2;
    Double_t a_3 = T126[idet2] * T166[idet1] - T126[idet1] * T166[idet2];
    Double_t a_2 = T12[idet2] * T166[idet1] - T12[idet1]*T166[idet2] +
	T16[idet1] * T126[idet2] - T16[idet2] * T126[idet1];
    Double_t a_1 = T12[idet2] * T16[idet1] - T12[idet1] * T16[idet2] -
	x1 * T126[idet2] + x2 * T126[idet1];
    Double_t a_0 = x2 * T12[idet1] - x1 * T12[idet2];
    Double_t sol = 0.;
    Double_t yyy1 = 0.;
    Double_t yyp1 = 0.;
    for (Int_t isol = 1; isol < 4; ++isol)
    {
	yyy1 = a_3 *sol * sol * sol + a_2 * sol *sol + a_1 * sol + a_0;
	yyp1 = 3.* a_3 * sol * sol + 2. * a_2 * sol + a_1;
	sol = sol - yyy1 / yyp1;
    }
    Double_t alfa = 0, beta = 0, gamma = 0, deter = 0, xdetc1 = 0, xdetc2 = 0,alfap = 0,betap = 0, gammap = 0, sol1 = 0,theta1 = 0, yci1 = 0, phi1 = 0, x_0 = 0;
    Double_t theta, phi;
    
    theta = (x1-T16[idet1]*sol-T166[idet1]*sol*sol);
    theta = theta/(T12[idet1]+T126[idet1]*sol);
    
    alfa = T33[idet1]+T336[idet1]*sol;
    beta =T34[idet1]+T346[idet1]*sol;
    gamma = y1-T32[idet1]*theta -T36[idet1]*sol-T366[idet1]*sol*sol;
    alfap = T33[idet2]+T336[idet2]*sol;
    betap = T34[idet2]+T346[idet2]*sol;
    gammap = y2 -T32[idet2] * theta - T36[idet2] * sol - T366[idet2] * sol * sol;
    deter = alfa*betap-alfap*beta;
    
    phi = (alfa*gammap-gamma*alfap)/deter;
    xdetc1 = x1 - T14[idet1]*phi - T146[idet1]*phi*sol;
    xdetc2 = x2 - T14[idet2]*phi - T146[idet2]*phi*sol;
    
    
    a_3 = T126[idet2] * T166[idet1] - T126[idet1] * T166[idet2];
    a_2 = T12[idet2] * T166[idet1] - T12[idet1]*T166[idet2] +
	T16[idet1] * T126[idet2] - T16[idet2] * T126[idet1];
    a_1 = T12[idet2] * T16[idet1] - T12[idet1] * T16[idet2] -
	xdetc1 * T126[idet2] + xdetc2 * T126[idet1];
    a_0 = xdetc2 * T12[idet1] - xdetc1 * T12[idet2];
    sol1=sol;
    for (Int_t isol = 1; isol < 4; ++isol)
    {
	yyy1 = a_3 * sol1 * sol1 * sol1 + a_2 * sol1 * sol1 + a_1 * sol1 + a_0;
	yyp1 = 3.* a_3 * sol1 * sol1 + 2. * a_2 * sol1 + a_1;
	sol1 = sol1-yyy1/yyp1;
	
	
    }
    
    
    
    theta1 = (xdetc1-T16[idet1]*sol1-T166[idet1]*sol1*sol1) / (T12[idet1] + T126[idet1]*sol1);
    
    alfa = T33[idet1]+T336[idet1]*sol1;
    beta = T34[idet1]+T346[idet1]*sol1;
    gamma = y1-T32[idet1]*theta1 -T36[idet1]*sol1-T366[idet1]*sol1*sol1;
    alfap = T33[idet2]+T336[idet2]*sol1;
    betap = T34[idet2]+T346[idet2]*sol1;
    gammap = y2-T32[idet2]*theta1 - T36[idet2]*sol1 - T366[idet2]*sol1*sol1;
    deter = alfa * betap -alfap * beta;
    yci1 = (gamma * betap - beta * gammap)/deter;
    phi1 = (alfa * gammap - gamma * alfap)/deter;
    
    tr.fPhi0 = phi1/1000.;
    tr.fTheta0 = theta1/1000.;
    tr.fY0 = yci1;
    
    
    Float_t Theta_hades = T21_t*x_0+T22_t*theta1+T23_t*yci1+T24_t*phi1+T26_t*sol1+T226_t*theta1*sol1+T246_t*phi1*sol1+T266_t*sol1*sol1;
    Float_t Phi_hades = T41_t*x_0+T42_t*theta1+T43_t*yci1+T44_t*phi1+T46_t*sol1+T426_t*theta1*sol1+T436_t*yci1*sol1+T446_t*phi1*sol1+T466_t*sol1*sol1;
    Float_t x_hades = T12_t*theta1+T14_t*phi1+T16_t*sol1+T126_t*theta1*sol1+T146_t*phi1*sol1+T166_t*sol1*sol1;
    Float_t y_hades = T32_t*theta1+T33_t*yci1+T34_t*phi1+T36_t*sol1+T336_t*yci1*sol1+T346_t*phi1*sol1+T366_t*sol1*sol1;
    
    tr.fTheta = Theta_hades/1000.;
    tr.fPhi = Phi_hades/1000.;
    tr.fXh = x_hades;
    tr.fYh = y_hades;
    
    tr.fP = momref * (1. + sol1/100. )+mom_offset;
    
    
    
    Float_t RecMom = momref * (1. + sol1/100. )+mom_offset;
    Float_t MaxMom =  mom_maxt;
    
    tr.fDist = sqrt(yy_weight*pow((-yy_slope * y1 + y2 - yy_offset)/sqrt(pow(yy_slope,2) + 1.0),2) + mom_weight * pow((MaxMom - RecMom),2));
    
    
    
    
    
    
    
    return kTRUE;
}
Bool_t HPionTrackerTrackF::init (void)
{
    
    
    
    HPionTrackerDetector * det = (HPionTrackerDetector *) gHades->getSetup()->getDetector ("PionTracker");
    if (!det)
    {
	Error ("init", "No PionTracker found.");
	return kFALSE;
    }
    pTrackfpar = (HPionTrackerTrackFPar *) gHades->getRuntimeDb()->getContainer ("PionTrackerTrackFPar");
    if (!pTrackfpar) return kFALSE;
    pTrackBeampar = (HPionTrackerBeamPar *) gHades->getRuntimeDb()->getContainer ("PionTrackerBeamPar");
    if (!pTrackBeampar) {
	Error ("init", "Could not retrieve HPionTrackerBeamPar!");
	return kFALSE;
    }
    pHitCat = gHades->getCurrentEvent()->getCategory (catPionTrackerHit);
    if (!pHitCat)
    {
	Error ("init()", "HPionTrackerhit category not available!");
	return kFALSE;
    }
    
    
    pTrackerMompar = (HPionTrackerMomPar *) gHades->getRuntimeDb()->getContainer ("PionTrackerMomPar");
    if (!pTrackerMompar)
    {
	Error ("init", "Could not retrieve HPionTrackerMomPar!");
	return kFALSE;
    }
    pTrackerMomRunpar = (HPionTrackerMomRunPar *) gHades->getRuntimeDb()->getContainer ("PionTrackerMomRunPar");
    if (!pTrackerMomRunpar)
    {
	Error ("init", "Could not retrieve HPionTrackerBeamRunPar!");
	return kFALSE;
    }
    
    iter = (HIterator *) pHitCat->MakeIterator();
    lochit.set(2, 0, 0);
    pTrackCat = det->buildCategory (catPionTrackerTrack);
    if (!pTrackCat) return kFALSE;
    loc.set(0);
    fActive = kTRUE;
    return kTRUE;
}
Bool_t HPionTrackerTrackF::reinit (void)
{
    if(pTrackBeampar) {
	HBeamElement* edet1 = pTrackBeampar->getBeamElement(id_det1);
	HBeamElement* edet2 = pTrackBeampar->getBeamElement(id_det2);
	HBeamElement* eoutQ9= pTrackBeampar->getBeamElement(id_outQ9);
	HBeamElement* etarg = pTrackBeampar->getBeamElement(id_targ);
	if(edet1&&edet2&&eoutQ9&&etarg){
	    
	    
	    
	    T12[idet1]  = edet1->Tij[0][1];
	    T14[idet1]  = edet1->Tij[0][3];
	    T16[idet1]  = edet1->Tij[0][4];
	    T32[idet1]  = edet1->Tij[2][1];
	    T33[idet1]  = edet1->Tij[2][2];
	    T34[idet1]  = edet1->Tij[2][3];
	    T36[idet1]  = edet1->Tij[2][4];
	    T126[idet1] = edet1->Tijk[0][1][4];
	    T146[idet1] = edet1->Tijk[0][3][4];
	    T166[idet1] = edet1->Tijk[0][4][4];
	    T336[idet1] = edet1->Tijk[2][2][4];
	    T346[idet1] = edet1->Tijk[2][3][4];
	    T366[idet1] = edet1->Tijk[2][4][4];
	    
	    
	    T12[idet2]  = edet2->Tij[0][1];
	    T14[idet2]  = edet2->Tij[0][3];
	    T16[idet2]  = edet2->Tij[0][4];
	    T32[idet2]  = edet2->Tij[2][1];
	    T33[idet2]  = edet2->Tij[2][2];
	    T34[idet2]  = edet2->Tij[2][3];
	    T36[idet2]  = edet2->Tij[2][4];
	    T126[idet2] = edet2->Tijk[0][1][4];
	    T146[idet2] = edet2->Tijk[0][3][4];
	    T166[idet2] = edet2->Tijk[0][4][4];
	    T336[idet2] = edet2->Tijk[2][2][4];
	    T346[idet2] = edet2->Tijk[2][3][4];
	    T366[idet2] = edet2->Tijk[2][4][4];
	    
	    
	    T12_t  = eoutQ9->Tij[0][1];
	    T14_t  = eoutQ9->Tij[0][3];
	    T16_t  = eoutQ9->Tij[0][4];
	    T32_t  = eoutQ9->Tij[2][1];
	    T33_t  = eoutQ9->Tij[2][2];
	    T34_t  = eoutQ9->Tij[2][3];
	    T36_t  = eoutQ9->Tij[2][4];
	    T126_t = eoutQ9->Tijk[0][1][4];
	    T146_t = eoutQ9->Tijk[0][3][4];
	    T166_t = eoutQ9->Tijk[0][4][4];
	    T326_t = eoutQ9->Tijk[2][1][4];
	    T336_t = eoutQ9->Tijk[2][2][4];
	    T346_t = eoutQ9->Tijk[2][3][4];
	    T366_t = eoutQ9->Tijk[2][4][4];
	    
	    T21_t  = etarg->Tij[1][0];
	    T22_t  = etarg->Tij[1][1];
	    T23_t  = etarg->Tij[1][2];
	    T24_t  = etarg->Tij[1][3];
	    T26_t  = etarg->Tij[1][4];
	    T41_t  = etarg->Tij[3][0];
	    T42_t  = etarg->Tij[3][1];
	    T43_t  = etarg->Tij[3][2];
	    T44_t  = etarg->Tij[3][3];
	    T46_t  = etarg->Tij[3][4];
	    T226_t = etarg->Tijk[1][1][4];
	    T246_t = etarg->Tijk[1][3][4];
	    T266_t = etarg->Tijk[1][4][4];
	    T426_t = etarg->Tijk[3][1][4];
	    T436_t = etarg->Tijk[3][2][4];
	    T446_t = etarg->Tijk[3][3][4];
	    T466_t = etarg->Tijk[3][4][4];
	} else {
	    Error ("reinit", "Could not retrieve beam elements from HPionTrackerBeamPar!");
	    return kFALSE;
	}
    } else return kFALSE;
    {
	
	
	
	memset(corrs, 0, 2*sizeof(Double_t));
	if(!pTrackerMomRunpar)
	{
	    Error ("reinit", "Could not retrieve params from HPionTrackerMomRunPar!");
	    return kFALSE;
	}
	Int_t runID = gHades->getRuntimeDb()->getCurrentRun()->getRunId();
	correction.clear();
	pTrackerMomRunpar->getRun(runID, &correction);
	for (Int_t i =0; i < correction.getNVals(); ++i)
	{
	    corrs[i] = correction.getVal(i);
	}
    }
    return kTRUE;
    
}
Int_t HPionTrackerTrackF::execute (void)
{
    Float_t x1, x2, y1, y2, z1, z2; 
    
    HPionTrackerHit *pHit0 = NULL, *pHit1 = NULL;
    
    
    std::vector<track> trackcan;
    trackcan.clear();
    
    track tr;
    Int_t cnt0 = 0;
    while (true)	
    {
	Int_t cnt1 = 0;
	lochit[0] = 0;
	lochit[1] = cnt0++;
	pHit0 = (HPionTrackerHit*)pHitCat->getObject(lochit);
	
	if (!pHit0)
	    break;
	while (true)	
	{
	    lochit[0] = 1;
	    lochit[1] = cnt1++;
	    pHit1 = (HPionTrackerHit*)pHitCat->getObject(lochit);
	    
	    if (!pHit1)
		break;
	    
	    
	    if (pTrackfpar->getTrackingFlag() == 0)	
	    {
		tr.fP = pTrackfpar->getRefMom();
		tr.fTheta = 0.;
		tr.fPhi = 0.;
	    }
	    else
	    {
#ifdef USE_FILE
		nev = nev + 1;
		inputpos >> x1 >> y1 >> x2 >> y2 ;
#else
		pHit0->getLabPos(x1,y1,z1);
		pHit1->getLabPos(x2,y2,z2);
#endif
#ifdef USE_FILE_SCAN
		scanpos.open("poscan.txt");
		scanpos >> x_l >> x_u >> y_l >> y_u ;
		
		
		scanpos.close();
		if(x1<x_l||x1>x_u||y1<y_l||y1>y_u) continue;
		
#endif
		Bool_t success = momrec(x1, y1, x2, y2, pTrackfpar->getRefMom() * 1e-3, tr);
#ifdef USE_FILE
		if (nev > 10000) success = false;
		cout << "Positions from file : " << endl;
		cout << x1 << " " << x2 << " " << nev << endl;
#endif
		if (!success) return 0;	
	    }
	    trackcan.push_back(tr);
	}
    }
    if (trackcan.size())
    {
	
	std::sort(trackcan.begin(), trackcan.end(), HPionTrackerTrackF::sortfunction);
	Float_t eloss_corr = pTrackerMompar->getElossCorr();
	trackcan[0].fP = trackcan[0].fP + eloss_corr;
	for (UInt_t t = 0; t < trackcan.size(); ++t)
	{
	    insertTrack(trackcan[t]);
	}
    }
    
    
    return 0;
}
void HPionTrackerTrackF::insertTrack(const track& tr)
{
    HPionTrackerTrack * pTrack = NULL;
    pTrack = static_cast<HPionTrackerTrack*>(pTrackCat->getNewSlot(loc));
    if (pTrack != NULL)
    {
	pTrack = new(pTrack) HPionTrackerTrack;
	pTrack->setPThetaPhi(tr.fP, tr.fTheta, tr.fPhi, tr.fMatch);
	pTrack->setPosAll(tr.fX1, tr.fY1, tr.fX2, tr.fY2, tr.fXh, tr.fYh);
	pTrack->setProdAngles(tr.fTheta0, tr.fPhi0);
	pTrack->setProdY(tr.fY0);
    }
}
 hpiontrackertrackf.cc:100  hpiontrackertrackf.cc:101  hpiontrackertrackf.cc:102  hpiontrackertrackf.cc:103  hpiontrackertrackf.cc:104  hpiontrackertrackf.cc:105  hpiontrackertrackf.cc:106  hpiontrackertrackf.cc:107  hpiontrackertrackf.cc:108  hpiontrackertrackf.cc:109  hpiontrackertrackf.cc:110  hpiontrackertrackf.cc:111  hpiontrackertrackf.cc:112  hpiontrackertrackf.cc:113  hpiontrackertrackf.cc:114  hpiontrackertrackf.cc:115  hpiontrackertrackf.cc:116  hpiontrackertrackf.cc:117  hpiontrackertrackf.cc:118  hpiontrackertrackf.cc:119  hpiontrackertrackf.cc:120  hpiontrackertrackf.cc:121  hpiontrackertrackf.cc:122  hpiontrackertrackf.cc:123  hpiontrackertrackf.cc:124  hpiontrackertrackf.cc:125  hpiontrackertrackf.cc:126  hpiontrackertrackf.cc:127  hpiontrackertrackf.cc:128  hpiontrackertrackf.cc:129  hpiontrackertrackf.cc:130  hpiontrackertrackf.cc:131  hpiontrackertrackf.cc:132  hpiontrackertrackf.cc:133  hpiontrackertrackf.cc:134  hpiontrackertrackf.cc:135  hpiontrackertrackf.cc:136  hpiontrackertrackf.cc:137  hpiontrackertrackf.cc:138  hpiontrackertrackf.cc:139  hpiontrackertrackf.cc:140  hpiontrackertrackf.cc:141  hpiontrackertrackf.cc:142  hpiontrackertrackf.cc:143  hpiontrackertrackf.cc:144  hpiontrackertrackf.cc:145  hpiontrackertrackf.cc:146  hpiontrackertrackf.cc:147  hpiontrackertrackf.cc:148  hpiontrackertrackf.cc:149  hpiontrackertrackf.cc:150  hpiontrackertrackf.cc:151  hpiontrackertrackf.cc:152  hpiontrackertrackf.cc:153  hpiontrackertrackf.cc:154  hpiontrackertrackf.cc:155  hpiontrackertrackf.cc:156  hpiontrackertrackf.cc:157  hpiontrackertrackf.cc:158  hpiontrackertrackf.cc:159  hpiontrackertrackf.cc:160  hpiontrackertrackf.cc:161  hpiontrackertrackf.cc:162  hpiontrackertrackf.cc:163  hpiontrackertrackf.cc:164  hpiontrackertrackf.cc:165  hpiontrackertrackf.cc:166  hpiontrackertrackf.cc:167  hpiontrackertrackf.cc:168  hpiontrackertrackf.cc:169  hpiontrackertrackf.cc:170  hpiontrackertrackf.cc:171  hpiontrackertrackf.cc:172  hpiontrackertrackf.cc:173  hpiontrackertrackf.cc:174  hpiontrackertrackf.cc:175  hpiontrackertrackf.cc:176  hpiontrackertrackf.cc:177  hpiontrackertrackf.cc:178  hpiontrackertrackf.cc:179  hpiontrackertrackf.cc:180  hpiontrackertrackf.cc:181  hpiontrackertrackf.cc:182  hpiontrackertrackf.cc:183  hpiontrackertrackf.cc:184  hpiontrackertrackf.cc:185  hpiontrackertrackf.cc:186  hpiontrackertrackf.cc:187  hpiontrackertrackf.cc:188  hpiontrackertrackf.cc:189  hpiontrackertrackf.cc:190  hpiontrackertrackf.cc:191  hpiontrackertrackf.cc:192  hpiontrackertrackf.cc:193  hpiontrackertrackf.cc:194  hpiontrackertrackf.cc:195  hpiontrackertrackf.cc:196  hpiontrackertrackf.cc:197  hpiontrackertrackf.cc:198  hpiontrackertrackf.cc:199  hpiontrackertrackf.cc:200  hpiontrackertrackf.cc:201  hpiontrackertrackf.cc:202  hpiontrackertrackf.cc:203  hpiontrackertrackf.cc:204  hpiontrackertrackf.cc:205  hpiontrackertrackf.cc:206  hpiontrackertrackf.cc:207  hpiontrackertrackf.cc:208  hpiontrackertrackf.cc:209  hpiontrackertrackf.cc:210  hpiontrackertrackf.cc:211  hpiontrackertrackf.cc:212  hpiontrackertrackf.cc:213  hpiontrackertrackf.cc:214  hpiontrackertrackf.cc:215  hpiontrackertrackf.cc:216  hpiontrackertrackf.cc:217  hpiontrackertrackf.cc:218  hpiontrackertrackf.cc:219  hpiontrackertrackf.cc:220  hpiontrackertrackf.cc:221  hpiontrackertrackf.cc:222  hpiontrackertrackf.cc:223  hpiontrackertrackf.cc:224  hpiontrackertrackf.cc:225  hpiontrackertrackf.cc:226  hpiontrackertrackf.cc:227  hpiontrackertrackf.cc:228  hpiontrackertrackf.cc:229  hpiontrackertrackf.cc:230  hpiontrackertrackf.cc:231  hpiontrackertrackf.cc:232  hpiontrackertrackf.cc:233  hpiontrackertrackf.cc:234  hpiontrackertrackf.cc:235  hpiontrackertrackf.cc:236  hpiontrackertrackf.cc:237  hpiontrackertrackf.cc:238  hpiontrackertrackf.cc:239  hpiontrackertrackf.cc:240  hpiontrackertrackf.cc:241  hpiontrackertrackf.cc:242  hpiontrackertrackf.cc:243  hpiontrackertrackf.cc:244  hpiontrackertrackf.cc:245  hpiontrackertrackf.cc:246  hpiontrackertrackf.cc:247  hpiontrackertrackf.cc:248  hpiontrackertrackf.cc:249  hpiontrackertrackf.cc:250  hpiontrackertrackf.cc:251  hpiontrackertrackf.cc:252  hpiontrackertrackf.cc:253  hpiontrackertrackf.cc:254  hpiontrackertrackf.cc:255  hpiontrackertrackf.cc:256  hpiontrackertrackf.cc:257  hpiontrackertrackf.cc:258  hpiontrackertrackf.cc:259  hpiontrackertrackf.cc:260  hpiontrackertrackf.cc:261  hpiontrackertrackf.cc:262  hpiontrackertrackf.cc:263  hpiontrackertrackf.cc:264  hpiontrackertrackf.cc:265  hpiontrackertrackf.cc:266  hpiontrackertrackf.cc:267  hpiontrackertrackf.cc:268  hpiontrackertrackf.cc:269  hpiontrackertrackf.cc:270  hpiontrackertrackf.cc:271  hpiontrackertrackf.cc:272  hpiontrackertrackf.cc:273  hpiontrackertrackf.cc:274  hpiontrackertrackf.cc:275  hpiontrackertrackf.cc:276  hpiontrackertrackf.cc:277  hpiontrackertrackf.cc:278  hpiontrackertrackf.cc:279  hpiontrackertrackf.cc:280  hpiontrackertrackf.cc:281  hpiontrackertrackf.cc:282  hpiontrackertrackf.cc:283  hpiontrackertrackf.cc:284  hpiontrackertrackf.cc:285  hpiontrackertrackf.cc:286  hpiontrackertrackf.cc:287  hpiontrackertrackf.cc:288  hpiontrackertrackf.cc:289  hpiontrackertrackf.cc:290  hpiontrackertrackf.cc:291  hpiontrackertrackf.cc:292  hpiontrackertrackf.cc:293  hpiontrackertrackf.cc:294  hpiontrackertrackf.cc:295  hpiontrackertrackf.cc:296  hpiontrackertrackf.cc:297  hpiontrackertrackf.cc:298  hpiontrackertrackf.cc:299  hpiontrackertrackf.cc:300  hpiontrackertrackf.cc:301  hpiontrackertrackf.cc:302  hpiontrackertrackf.cc:303  hpiontrackertrackf.cc:304  hpiontrackertrackf.cc:305  hpiontrackertrackf.cc:306  hpiontrackertrackf.cc:307  hpiontrackertrackf.cc:308  hpiontrackertrackf.cc:309  hpiontrackertrackf.cc:310  hpiontrackertrackf.cc:311  hpiontrackertrackf.cc:312  hpiontrackertrackf.cc:313  hpiontrackertrackf.cc:314  hpiontrackertrackf.cc:315  hpiontrackertrackf.cc:316  hpiontrackertrackf.cc:317  hpiontrackertrackf.cc:318  hpiontrackertrackf.cc:319  hpiontrackertrackf.cc:320  hpiontrackertrackf.cc:321  hpiontrackertrackf.cc:322  hpiontrackertrackf.cc:323  hpiontrackertrackf.cc:324  hpiontrackertrackf.cc:325  hpiontrackertrackf.cc:326  hpiontrackertrackf.cc:327  hpiontrackertrackf.cc:328  hpiontrackertrackf.cc:329  hpiontrackertrackf.cc:330  hpiontrackertrackf.cc:331  hpiontrackertrackf.cc:332  hpiontrackertrackf.cc:333  hpiontrackertrackf.cc:334  hpiontrackertrackf.cc:335  hpiontrackertrackf.cc:336  hpiontrackertrackf.cc:337  hpiontrackertrackf.cc:338  hpiontrackertrackf.cc:339  hpiontrackertrackf.cc:340  hpiontrackertrackf.cc:341  hpiontrackertrackf.cc:342  hpiontrackertrackf.cc:343  hpiontrackertrackf.cc:344  hpiontrackertrackf.cc:345  hpiontrackertrackf.cc:346  hpiontrackertrackf.cc:347  hpiontrackertrackf.cc:348  hpiontrackertrackf.cc:349  hpiontrackertrackf.cc:350  hpiontrackertrackf.cc:351  hpiontrackertrackf.cc:352  hpiontrackertrackf.cc:353  hpiontrackertrackf.cc:354  hpiontrackertrackf.cc:355  hpiontrackertrackf.cc:356  hpiontrackertrackf.cc:357  hpiontrackertrackf.cc:358  hpiontrackertrackf.cc:359  hpiontrackertrackf.cc:360  hpiontrackertrackf.cc:361  hpiontrackertrackf.cc:362  hpiontrackertrackf.cc:363  hpiontrackertrackf.cc:364  hpiontrackertrackf.cc:365  hpiontrackertrackf.cc:366  hpiontrackertrackf.cc:367  hpiontrackertrackf.cc:368  hpiontrackertrackf.cc:369  hpiontrackertrackf.cc:370  hpiontrackertrackf.cc:371  hpiontrackertrackf.cc:372  hpiontrackertrackf.cc:373  hpiontrackertrackf.cc:374  hpiontrackertrackf.cc:375  hpiontrackertrackf.cc:376  hpiontrackertrackf.cc:377  hpiontrackertrackf.cc:378  hpiontrackertrackf.cc:379  hpiontrackertrackf.cc:380  hpiontrackertrackf.cc:381  hpiontrackertrackf.cc:382  hpiontrackertrackf.cc:383  hpiontrackertrackf.cc:384  hpiontrackertrackf.cc:385  hpiontrackertrackf.cc:386  hpiontrackertrackf.cc:387  hpiontrackertrackf.cc:388  hpiontrackertrackf.cc:389  hpiontrackertrackf.cc:390  hpiontrackertrackf.cc:391  hpiontrackertrackf.cc:392  hpiontrackertrackf.cc:393  hpiontrackertrackf.cc:394  hpiontrackertrackf.cc:395  hpiontrackertrackf.cc:396  hpiontrackertrackf.cc:397  hpiontrackertrackf.cc:398  hpiontrackertrackf.cc:399  hpiontrackertrackf.cc:400  hpiontrackertrackf.cc:401  hpiontrackertrackf.cc:402  hpiontrackertrackf.cc:403  hpiontrackertrackf.cc:404  hpiontrackertrackf.cc:405  hpiontrackertrackf.cc:406  hpiontrackertrackf.cc:407  hpiontrackertrackf.cc:408  hpiontrackertrackf.cc:409  hpiontrackertrackf.cc:410  hpiontrackertrackf.cc:411  hpiontrackertrackf.cc:412  hpiontrackertrackf.cc:413  hpiontrackertrackf.cc:414  hpiontrackertrackf.cc:415  hpiontrackertrackf.cc:416  hpiontrackertrackf.cc:417  hpiontrackertrackf.cc:418  hpiontrackertrackf.cc:419  hpiontrackertrackf.cc:420  hpiontrackertrackf.cc:421  hpiontrackertrackf.cc:422  hpiontrackertrackf.cc:423  hpiontrackertrackf.cc:424  hpiontrackertrackf.cc:425  hpiontrackertrackf.cc:426  hpiontrackertrackf.cc:427  hpiontrackertrackf.cc:428  hpiontrackertrackf.cc:429  hpiontrackertrackf.cc:430  hpiontrackertrackf.cc:431  hpiontrackertrackf.cc:432  hpiontrackertrackf.cc:433  hpiontrackertrackf.cc:434  hpiontrackertrackf.cc:435  hpiontrackertrackf.cc:436  hpiontrackertrackf.cc:437  hpiontrackertrackf.cc:438  hpiontrackertrackf.cc:439  hpiontrackertrackf.cc:440  hpiontrackertrackf.cc:441  hpiontrackertrackf.cc:442  hpiontrackertrackf.cc:443  hpiontrackertrackf.cc:444  hpiontrackertrackf.cc:445  hpiontrackertrackf.cc:446  hpiontrackertrackf.cc:447  hpiontrackertrackf.cc:448  hpiontrackertrackf.cc:449  hpiontrackertrackf.cc:450  hpiontrackertrackf.cc:451  hpiontrackertrackf.cc:452  hpiontrackertrackf.cc:453  hpiontrackertrackf.cc:454  hpiontrackertrackf.cc:455  hpiontrackertrackf.cc:456  hpiontrackertrackf.cc:457  hpiontrackertrackf.cc:458  hpiontrackertrackf.cc:459  hpiontrackertrackf.cc:460  hpiontrackertrackf.cc:461  hpiontrackertrackf.cc:462  hpiontrackertrackf.cc:463  hpiontrackertrackf.cc:464  hpiontrackertrackf.cc:465  hpiontrackertrackf.cc:466  hpiontrackertrackf.cc:467  hpiontrackertrackf.cc:468  hpiontrackertrackf.cc:469  hpiontrackertrackf.cc:470  hpiontrackertrackf.cc:471  hpiontrackertrackf.cc:472  hpiontrackertrackf.cc:473  hpiontrackertrackf.cc:474  hpiontrackertrackf.cc:475  hpiontrackertrackf.cc:476  hpiontrackertrackf.cc:477  hpiontrackertrackf.cc:478  hpiontrackertrackf.cc:479  hpiontrackertrackf.cc:480  hpiontrackertrackf.cc:481  hpiontrackertrackf.cc:482  hpiontrackertrackf.cc:483  hpiontrackertrackf.cc:484  hpiontrackertrackf.cc:485  hpiontrackertrackf.cc:486  hpiontrackertrackf.cc:487  hpiontrackertrackf.cc:488  hpiontrackertrackf.cc:489  hpiontrackertrackf.cc:490  hpiontrackertrackf.cc:491  hpiontrackertrackf.cc:492  hpiontrackertrackf.cc:493  hpiontrackertrackf.cc:494  hpiontrackertrackf.cc:495  hpiontrackertrackf.cc:496  hpiontrackertrackf.cc:497  hpiontrackertrackf.cc:498  hpiontrackertrackf.cc:499  hpiontrackertrackf.cc:500  hpiontrackertrackf.cc:501  hpiontrackertrackf.cc:502  hpiontrackertrackf.cc:503  hpiontrackertrackf.cc:504  hpiontrackertrackf.cc:505  hpiontrackertrackf.cc:506  hpiontrackertrackf.cc:507  hpiontrackertrackf.cc:508  hpiontrackertrackf.cc:509  hpiontrackertrackf.cc:510  hpiontrackertrackf.cc:511  hpiontrackertrackf.cc:512  hpiontrackertrackf.cc:513  hpiontrackertrackf.cc:514  hpiontrackertrackf.cc:515  hpiontrackertrackf.cc:516  hpiontrackertrackf.cc:517  hpiontrackertrackf.cc:518  hpiontrackertrackf.cc:519  hpiontrackertrackf.cc:520  hpiontrackertrackf.cc:521  hpiontrackertrackf.cc:522  hpiontrackertrackf.cc:523  hpiontrackertrackf.cc:524  hpiontrackertrackf.cc:525  hpiontrackertrackf.cc:526  hpiontrackertrackf.cc:527  hpiontrackertrackf.cc:528  hpiontrackertrackf.cc:529  hpiontrackertrackf.cc:530  hpiontrackertrackf.cc:531  hpiontrackertrackf.cc:532  hpiontrackertrackf.cc:533  hpiontrackertrackf.cc:534  hpiontrackertrackf.cc:535  hpiontrackertrackf.cc:536  hpiontrackertrackf.cc:537  hpiontrackertrackf.cc:538  hpiontrackertrackf.cc:539  hpiontrackertrackf.cc:540  hpiontrackertrackf.cc:541  hpiontrackertrackf.cc:542  hpiontrackertrackf.cc:543  hpiontrackertrackf.cc:544  hpiontrackertrackf.cc:545  hpiontrackertrackf.cc:546  hpiontrackertrackf.cc:547  hpiontrackertrackf.cc:548  hpiontrackertrackf.cc:549  hpiontrackertrackf.cc:550  hpiontrackertrackf.cc:551  hpiontrackertrackf.cc:552  hpiontrackertrackf.cc:553  hpiontrackertrackf.cc:554  hpiontrackertrackf.cc:555  hpiontrackertrackf.cc:556  hpiontrackertrackf.cc:557  hpiontrackertrackf.cc:558  hpiontrackertrackf.cc:559  hpiontrackertrackf.cc:560  hpiontrackertrackf.cc:561  hpiontrackertrackf.cc:562  hpiontrackertrackf.cc:563  hpiontrackertrackf.cc:564  hpiontrackertrackf.cc:565  hpiontrackertrackf.cc:566  hpiontrackertrackf.cc:567  hpiontrackertrackf.cc:568  hpiontrackertrackf.cc:569  hpiontrackertrackf.cc:570  hpiontrackertrackf.cc:571  hpiontrackertrackf.cc:572  hpiontrackertrackf.cc:573  hpiontrackertrackf.cc:574  hpiontrackertrackf.cc:575  hpiontrackertrackf.cc:576  hpiontrackertrackf.cc:577  hpiontrackertrackf.cc:578  hpiontrackertrackf.cc:579  hpiontrackertrackf.cc:580  hpiontrackertrackf.cc:581  hpiontrackertrackf.cc:582  hpiontrackertrackf.cc:583  hpiontrackertrackf.cc:584  hpiontrackertrackf.cc:585  hpiontrackertrackf.cc:586  hpiontrackertrackf.cc:587  hpiontrackertrackf.cc:588  hpiontrackertrackf.cc:589  hpiontrackertrackf.cc:590  hpiontrackertrackf.cc:591  hpiontrackertrackf.cc:592  hpiontrackertrackf.cc:593  hpiontrackertrackf.cc:594  hpiontrackertrackf.cc:595  hpiontrackertrackf.cc:596  hpiontrackertrackf.cc:597  hpiontrackertrackf.cc:598  hpiontrackertrackf.cc:599  hpiontrackertrackf.cc:600  hpiontrackertrackf.cc:601  hpiontrackertrackf.cc:602  hpiontrackertrackf.cc:603  hpiontrackertrackf.cc:604  hpiontrackertrackf.cc:605  hpiontrackertrackf.cc:606  hpiontrackertrackf.cc:607  hpiontrackertrackf.cc:608  hpiontrackertrackf.cc:609  hpiontrackertrackf.cc:610  hpiontrackertrackf.cc:611  hpiontrackertrackf.cc:612  hpiontrackertrackf.cc:613  hpiontrackertrackf.cc:614  hpiontrackertrackf.cc:615  hpiontrackertrackf.cc:616  hpiontrackertrackf.cc:617  hpiontrackertrackf.cc:618  hpiontrackertrackf.cc:619  hpiontrackertrackf.cc:620  hpiontrackertrackf.cc:621