#include "hparticlemetamatcher.h"
#include "hades.h"
#include "hspectrometer.h"
#include "hruntimedb.h"
#include "hcategory.h"
#include "hcategorymanager.h"
#include "hgeomvolume.h"
#include "hgeomcompositevolume.h"
#include "hgeomtransform.h"
#include "hemcdetector.h"
#include "hrpcgeompar.h"
#include "hrpcgeomcellpar.h"
#include "hemcgeompar.h"
#include "htofgeompar.h"
#include "hspecgeompar.h"
#include "hparticlecand.h"
#include "rpcdef.h"
#include "emcdef.h"
#include "tofdef.h"
#include "TMath.h"
ClassImp(HParticleMetaMatcher)
HParticleMetaMatcher::HParticleMetaMatcher(const Text_t *name,const Text_t *title)
	: HReconstructor(name,title) {
    fCatRpcCluster  = NULL;
    fCatEmcCluster  = NULL;
    fCatTofCluster  = NULL;
    fCatTofHit      = NULL;
    fRpcGeometry    = NULL;
    fEmcGeometry    = NULL;
    fTofGeometry    = NULL;
    pSpecGeomPar    = NULL;
    DPlanesRpc = 0;
    fDebug = kFALSE;
}
const HGeomVector* HParticleMetaMatcher::getRpcCellGeom(Int_t s,Int_t col,Int_t cell)
{
    
    
    
    if(s < 0 || s > 5) return 0;
    if(col < 0 || col > 5) return 0;
    if(cell < 0 || cell > RPCMAXCELL-1) return 0;
    return &cellRPC[s][col][cell][0];
}
const HGeomVector* HParticleMetaMatcher::getTofCellGeom(Int_t s,Int_t mod,Int_t cell)
{
    
    
    
    if(s < 0 || s > 5) return 0;
    if(mod < 0 || mod > 8) return 0;
    if(cell < 0 || cell > 8) return 0;
    return &cellRPC[s][mod][cell][0];
}
const HGeomVector* HParticleMetaMatcher::getEmcCellGeom(Int_t s,Int_t cell)
{
    
    
    
    if(s < 0 || s > 5) return 0;
    if(cell < 0 || cell > EMCMAXCELL-1) return 0;
    return &cellEMC[s][cell][0];
}
void HParticleMetaMatcher::calcSegPoints(TVector3& p1,TVector3& p2,Double_t phiseg,Double_t thetaseg,Double_t roseg,Double_t zseg)
{
    
    Double_t Xseg[2],Yseg[2],Zseg[2];
    Xseg[0] = roseg*cos(phiseg+TMath::Pi()/2);
    Yseg[0] = roseg*sin(phiseg+TMath::Pi()/2);
    Zseg[0] = zseg;
    Xseg[1] = Xseg[0]+cos(phiseg)*sin(thetaseg);
    Yseg[1] = Yseg[0]+sin(phiseg)*sin(thetaseg);
    Zseg[1] = Zseg[0]+cos(thetaseg);
    p1.SetXYZ(Xseg[0],Yseg[0],Zseg[0]);
    p2.SetXYZ(Xseg[1],Yseg[1],Zseg[1]);
}
Bool_t HParticleMetaMatcher::findIntersectionLinePlane(TVector3 &pointIntersect,
					       const TVector3 &pos, const TVector3 &dir,
					       const TVector3 &planeCenter, const  TVector3 &planeNormal) {
    
    
    
    
    
    
    Double_t denom = planeNormal.Dot(dir);
    if (denom != 0.0) {
	Double_t t = ((planeCenter.x() - pos.x()) * planeNormal.x() +
		      (planeCenter.y() - pos.y()) * planeNormal.y() +
		      (planeCenter.z() - pos.z()) * planeNormal.z()) / denom;
	pointIntersect = pos + (t * dir);
	return kTRUE;
    } else {
	cout<<"Warning \"findIntersection()\" : , No intersection point found : (plane || track)"<<endl;
        return kFALSE;
    }
    return kFALSE;
}
Bool_t HParticleMetaMatcher::traceToMeta(const HParticleCand* cand,TVector3 &metaHit, const TVector3 &metaCenter, const TVector3 &metaNorm)
{
    
    
    TVector3 p1;
    TVector3 p2;
    TVector3 dir;
    Double_t phiLab   = cand->getPhi2();    
    Double_t phi = fmod(phiLab,60.F) + 60;  
    Double_t theta = cand->getTheta2();  
    Double_t r     = cand->getR2();      
    Double_t z     = cand->getZ2();      
    calcSegPoints(p1,p2,phi*TMath::DegToRad(),theta*TMath::DegToRad(),r,z);  
    dir = p2 - p1;
    return  findIntersectionLinePlane(metaHit,p1,dir,metaCenter,metaNorm); 
}
Bool_t HParticleMetaMatcher::isInRpcCell(HGeomVector& vmod, Int_t s,Int_t col,Int_t c)
{
    
    
    
    
    
    
    
    
    
    HGeomVector& p0 = cellRPC[s][col][c][0];
    HGeomVector& p1 = cellRPC[s][col][c][1];
    if (p0.Y() > vmod.Y()) return kFALSE;   
    if (p1.Y() < vmod.Y()) return kFALSE;
    
    Double_t a = p1.X() - p0.X();
    Double_t b = p1.Y() - p0.Y();
    Double_t x = p0.X() + a * (( p0.Y() - vmod.Y())/b);
    if (x < vmod.X()) return kFALSE;
    HGeomVector& p2 = cellRPC[s][col][c][2];
    HGeomVector& p3 = cellRPC[s][col][c][3];
    
    a = p2.X() - p3.X();
    b = p2.Y() - p3.Y();
    Double_t x1 = p3.X() + a * (( p3.Y() - vmod.Y())/b);
    if (x1 > vmod.X()) return kFALSE;
    if(fDebug){
	cout<<"isInRpcCell  s "<<s<<" col "<<col<<" c "<<setw(2)<<c
	    <<" p1 "<<setw(10)<<  p0.X() <<" , "<<setw(10)<< p0.Y()
	    <<" p2 "<<setw(10)<<  p1.X() <<" , "<<setw(10)<< p1.Y()
	    <<" p3 "<<setw(10)<<  p2.X() <<" , "<<setw(10)<< p2.Y()
	    <<" p4 "<<setw(10)<<  p3.X() <<" , "<<setw(10)<< p3.Y()
	    <<" hit "<<setw(10)<<vmod.X()<<" , "<<setw(10)<<vmod.Y()<<" calc x "<<setw(10)<<x<<" "<<x1
	    <<endl;
    }
    return kTRUE;
}
Bool_t HParticleMetaMatcher::isInEmcCell(HGeomVector& vmod,Int_t s,Int_t c)
{
    
    
    
    
    
    
    
    
    HGeomVector& p0 = cellEMC[s][c][0];
    HGeomVector& p2 = cellEMC[s][c][2];
    if (p0.Y() > vmod.Y()) return kFALSE;   
    if (p2.Y() < vmod.Y()) return kFALSE;
    if (p0.X() < vmod.X()) return kFALSE;
    if (p2.X() > vmod.X()) return kFALSE;
    if(fDebug){
	HGeomVector& p1 = cellEMC[s][c][1];
	HGeomVector& p3 = cellEMC[s][c][3];
	Int_t cell = HEmcDetector::getCellFromPosition(c);
	cout<<"isInEmcCell  s "<<s<<" c "<<setw(3)<<cell<<" pos "<<setw(3)<<c
	    <<" p1 "<<setw(10)<<  p0.X() <<" , "<<setw(10)<< p0.Y()
	    <<" p2 "<<setw(10)<<  p1.X() <<" , "<<setw(10)<< p1.Y()
	    <<" p3 "<<setw(10)<<  p2.X() <<" , "<<setw(10)<< p2.Y()
	    <<" p4 "<<setw(10)<<  p3.X() <<" , "<<setw(10)<< p3.Y()
	    <<" hit "<<setw(10)<<vmod.X()<<" , "<<setw(10)<<vmod.Y()
	    <<endl;
        vector<Int_t> vcells;
	getEmcCellArray(s,cell,vcells);
	cout<<"neighboughrs: "<<flush;
	for(UInt_t k = 0; k < vcells.size(); k++){
	    if(k == 4)cout<<"|"<<vcells[k]<<"| "<<flush;
	    else      cout<<vcells[k]<<" "<<flush;
	}
        cout<<endl;
    }
    return kTRUE;
}
Bool_t HParticleMetaMatcher::isInTofCell(HGeomVector& vmod,Int_t s,Int_t m, Int_t c)
{
    
    
    
    
    
    
    
    
    HGeomVector& p0 = cellTOF[s][m][c][0];
    HGeomVector& p2 = cellTOF[s][m][c][2];
    if (p0.Y() > vmod.Y()) return kFALSE;   
    if (p2.Y() < vmod.Y()) return kFALSE;
    if (p0.X() < vmod.X()) return kFALSE;
    if (p2.X() > vmod.X()) return kFALSE;
    if(fDebug){
	HGeomVector& p1 = cellTOF[s][m][c][1];
	HGeomVector& p3 = cellTOF[s][m][c][3];
	cout<<"isInTofCell  s "<<s<<" mod "<<m<<" c "<<setw(3)<<c
	    <<" p1 "<<setw(10)<<  p0.X() <<" , "<<setw(10)<< p0.Y()
	    <<" p2 "<<setw(10)<<  p1.X() <<" , "<<setw(10)<< p1.Y()
	    <<" p3 "<<setw(10)<<  p2.X() <<" , "<<setw(10)<< p2.Y()
	    <<" p4 "<<setw(10)<<  p3.X() <<" , "<<setw(10)<< p3.Y()
	    <<" hit "<<setw(10)<<vmod.X()<<" , "<<setw(10)<<vmod.Y()
	    <<endl;
    }
    return kTRUE;
}
void HParticleMetaMatcher::getEmcCellArray(Int_t s,Int_t cell,vector<Int_t>& vcells)
{
    
    
    
    
    
    
    
    vcells.clear();
    for(Int_t j = -18; j < 17; j += 17){ 
	for(Int_t i = 0; i < 3; i ++){   
	    if(HEmcDetector::getPositionFromCell(cell + j + i) == -1 ) vcells.push_back(-1);
	    else                                                       vcells.push_back(cell + j + i);
	}
    }
}
Bool_t HParticleMetaMatcher::init()
{
    
    
    if(!gHades) {
        Error("init()", "HADES not initialized.");
        return kFALSE;
    }
    HRuntimeDb *rtdb=gHades->getRuntimeDb();
    if(!rtdb) {
        Error("init()", "HADES runtime database not found.");
        return kFALSE;
    }
    fCatRpcCluster  = HCategoryManager::getCategory(catRpcCluster);
    fCatEmcCluster  = HCategoryManager::getCategory(catEmcCluster);
    fCatTofCluster  = HCategoryManager::getCategory(catTofCluster);
    fCatTofHit      = HCategoryManager::getCategory(catTofHit);
    if(!fCatEmcCluster) Warning("init()", "Category catEmcCluster not found.");
    if(!fCatRpcCluster) Warning("init()", "Category catRpcCluster not found.");
    if(!fCatTofCluster) Warning("init()", "Category catTofCluster not found.");
    if(!fCatTofHit)     Warning("init()", "Category catTofHit not found.");
    fRpcGeometry = (HRpcGeomPar*)    rtdb->getContainer("RpcGeomPar");
    pGeomCellPar = (HRpcGeomCellPar*)rtdb->getContainer("RpcGeomCellPar");
    pSpecGeomPar = (HSpecGeomPar*)   rtdb->getContainer("SpecGeomPar");
    fEmcGeometry = (HEmcGeomPar *)   rtdb->getContainer("EmcGeomPar");
    fTofGeometry = (HTofGeomPar *)   rtdb->getContainer("TofGeomPar");
    return kTRUE;
}
Bool_t HParticleMetaMatcher::reinit() {
    if(pGeomCellPar){
	DPlanesRpc  = pGeomCellPar->getDPlanes();
    }
    
    for(Int_t i = 0; i < 6; i++) {
        labSecTrans[i] = pSpecGeomPar->getSector(i)->getTransform();
    }
    
    
    {
	for(Int_t s = 0; s < 6; s++) {
            Int_t col = 0;
            Int_t cell = 0;
	    
	    HModGeomPar* fmodgeom = fRpcGeometry->getModule(s);
	    HGeomCompositeVolume* fMod    = fmodgeom->getRefVolume();
	    for(Int_t c = 0; c < fMod->getNumComponents(); c++) {
		HGeomVolume* fVol = fMod->getComponent(c);
		if(cell == 31) {
		    col++;
		    cell = 0;
                    continue;
		}
		if(0&& s == 0){
		cout<<" col "<<5-col<<" cell " <<cell<<"----------------------------------"<<endl;
		HGeomVector v = fVol->getTransform().getTransVector();
		cout<<c<<" mod  (x,y,z) "<<v.X()<<" "<<v.Y()<<" "<<v.Z()<<" "<<fVol->GetName()<<" "<<fVol->getShape()<<" "<<fVol->getNumPoints()
		    << " p0 "<<fVol->getPoint(0)->getX()<< " , "<<fVol->getPoint(0)->getY()
		    << " p1 "<<fVol->getPoint(1)->getX()<< " , "<<fVol->getPoint(1)->getY()
		    << " p2 "<<fVol->getPoint(2)->getX()<< " , "<<fVol->getPoint(2)->getY()
		    << " p3 "<<fVol->getPoint(3)->getX()<< " , "<<fVol->getPoint(3)->getY()
		    <<endl;
		}
		
		for(Int_t i = 0; i < 4; i++) {  
		    cellRPC[s][5-col][cell][i] = *fVol->getPoint(i);
		}
		cell++;
	    }
	}
    }
    
    
    {
	for(Int_t s = 0; s < 6; s ++) {
	    for(Int_t m = 0; m < 8; m ++) {
		HModGeomPar* fmodgeom = fTofGeometry->getModule(s,m);
		HGeomCompositeVolume* fMod    = fmodgeom->getRefVolume();
		for(Int_t c = 0; c < fMod->getNumComponents(); c++) {
		    HGeomVolume* fVol=fMod->getComponent(c);
                    HGeomVector v = fVol->getTransform().getTransVector();
		    for(Int_t i = 0; i < 4; i++) {  
		        cellTOF[s][m][c][i] = v + *fVol->getPoint(i);
		    }
		    if(0&& s == 0){
			cout<<" mod "<<m<<" c "<<c<<" mod  (x,y,z) "<<setw(8)<<v.X()<<" "<<setw(8)<<v.Y()<<" "<<setw(8)<<v.Z()<<" "<<fVol->GetName()<<" "<<fVol->getShape()<<" "<<fVol->getNumPoints()
			    << " p0 "<<setw(8)<<cellTOF[s][m][c][0].X()<< " , "<<setw(8)<<cellTOF[s][m][c][0].Y()
			    << " p1 "<<setw(8)<<cellTOF[s][m][c][1].X()<< " , "<<setw(8)<<cellTOF[s][m][c][1].Y()
			    << " p2 "<<setw(8)<<cellTOF[s][m][c][2].X()<< " , "<<setw(8)<<cellTOF[s][m][c][2].Y()
			    << " p3 "<<setw(8)<<cellTOF[s][m][c][3].X()<< " , "<<setw(8)<<cellTOF[s][m][c][3].Y()
			    <<endl;
		    }
		}
	    }
	}
    }
    
    
    {
	for(Int_t s = 0; s < 6; s++) {
	    HModGeomPar* fmodgeom = fEmcGeometry->getModule(s);
	    HGeomCompositeVolume* fMod = fmodgeom->getRefVolume();
            Int_t n = 0;
	    for(Int_t c = 0; c < fMod->getNumComponents(); c++) {
		HGeomVolume* fVol=fMod->getComponent(c);
		if(fVol == NULL || fVol->getNumPoints() != 8) {
		    continue;
		}
		HGeomVector v = fVol->getTransform().getTransVector();
		if(0&& s == 0){
		    cout<<c<<" "<<n<<" mod  (x,y,z) "<<v.X()<<" "<<v.Y()<<" "<<v.Z()
			<< " p0 "<<fVol->getPoint(0)->getX()<< " , "<<fVol->getPoint(0)->getY()
			<< " p1 "<<fVol->getPoint(1)->getX()<< " , "<<fVol->getPoint(1)->getY()
			<< " p2 "<<fVol->getPoint(2)->getX()<< " , "<<fVol->getPoint(2)->getY()
			<< " p3 "<<fVol->getPoint(3)->getX()<< " , "<<fVol->getPoint(3)->getY()
			<<endl;
		}
		for(Int_t i = 0; i < 4; i++) {  
		    cellEMC[s][n][i] = v + *fVol->getPoint(i);
		}
                if(0&& s == 0){
		    cout<<c<<" "<<n<<" mod  (x,y,z) "<<v.X()<<" "<<v.Y()<<" "<<v.Z()
			<< " p0 "<<cellEMC[s][n][0].getX()<< " , "<<cellEMC[s][n][0].getY()
			<< " p1 "<<cellEMC[s][n][1].getX()<< " , "<<cellEMC[s][n][1].getY()
			<< " p2 "<<cellEMC[s][n][2].getX()<< " , "<<cellEMC[s][n][2].getY()
			<< " p3 "<<cellEMC[s][n][3].getX()<< " , "<<cellEMC[s][n][3].getY()
			<<endl;
		}
                n++;
	    }
	}
    }
    
    for(Int_t iSec = 0; iSec < 6; iSec++) {
	if(fRpcGeometry) {
	    HModGeomPar *module = fRpcGeometry->getModule(iSec,0);
	    if(module) {
		
                HGeomTransform modTrans(module->getLabTransform());
                
                
                modTrans.transTo(labSecTrans[iSec]);
                modSecTransRpc[iSec] = modTrans;
                
                HGeomVector r0_mod0(0.0, 0.0, -0.5*DPlanesRpc);  
                
                HGeomVector rz_mod(0.0, 0.0, 1.0);
                HGeomVector nRpc = modTrans.transFrom(rz_mod) - modTrans.transFrom(r0_mod0);
                normVecRpc[iSec][0].SetXYZ(nRpc.getX(), nRpc.getY(), nRpc.getZ());
                HGeomVector cRpc = modTrans.transFrom(r0_mod0);
                centerVecRpc[iSec][0].SetXYZ(cRpc.getX(), cRpc.getY(), cRpc.getZ());
                
                HGeomVector r0_mod1(0.0, 0.0, 0.5*DPlanesRpc);   
		nRpc = modTrans.transFrom(rz_mod) - modTrans.transFrom(r0_mod1);
                normVecRpc[iSec][1].SetXYZ(nRpc.getX(), nRpc.getY(), nRpc.getZ());
                cRpc = modTrans.transFrom(r0_mod1);
                centerVecRpc[iSec][1].SetXYZ(cRpc.getX(), cRpc.getY(), cRpc.getZ());
                HGeomVector r0_mod2(0.0, 0.0, 0);                 
		nRpc = modTrans.transFrom(rz_mod) - modTrans.transFrom(r0_mod2);
                normVecRpc[iSec][2].SetXYZ(nRpc.getX(), nRpc.getY(), nRpc.getZ());
                cRpc = modTrans.transFrom(r0_mod2);
                centerVecRpc[iSec][2].SetXYZ(cRpc.getX(), cRpc.getY(), cRpc.getZ());
	    }
        }
	if (fEmcGeometry) {
	    HModGeomPar *pmodgeom = fEmcGeometry->getModule(iSec);
	    HGeomTransform modTrans(pmodgeom->getLabTransform());
	    modTrans.transTo(labSecTrans[iSec]);
	    modSecTransEmc[iSec] = modTrans;
	    HGeomVector r0_mod(0.0, 0.0, 0.);
	    HGeomVector rz_mod(0.0, 0.0, 1.);
	    HGeomVector nEmc = modTrans.transFrom(rz_mod) - modTrans.transFrom(r0_mod);
	    normVecEmc[iSec].SetXYZ(nEmc.getX(), nEmc.getY(), nEmc.getZ()) ;
	    HGeomVector cEmc = modTrans.transFrom(r0_mod);
	    centerVecEmc[iSec].SetXYZ(cEmc.getX(), cEmc.getY(), cEmc.getZ()) ;
	}
	if (fTofGeometry) {
	    for(Int_t iTofMod = 0; iTofMod < 8; iTofMod++) {
		HModGeomPar *module = fTofGeometry->getModule(iSec,iTofMod);
		if(module) {
		    HGeomTransform modTrans(module->getLabTransform());
		    modTrans.transTo(labSecTrans[iSec]);
		    modSecTransTof[iSec][iTofMod] = modTrans;
                    HGeomVector r0_mod(0.0, 0.0, 0.0);
                    HGeomVector rz_mod(0.0, 0.0, 1.0);
                    HGeomVector nTof = modTrans.transFrom(rz_mod) - modTrans.transFrom(r0_mod);
                    normVecTof[iSec][iTofMod].SetXYZ(nTof.getX(), nTof.getY(), nTof.getZ());
                    HGeomVector cTof = modTrans.transFrom(r0_mod);
                    centerVecTof[iSec][iTofMod].SetXYZ(cTof.getX(), cTof.getY(), cTof.getZ());
                }
            }
        }
    }
    return kTRUE;
}
const HRpcCluster* HParticleMetaMatcher::recalcRpc(HParticleCand* cand)
{
    
    
    
    
    
    
    
    
    
    
    
    if(!cand) return 0;
    if(cand->getOuterSegInd() == -1) return 0;
    if(!cand->isRpcClstUsed()) return 0;
    if(fDebug){ cout <<"matchRpc--------------------------------"<<endl;}
    Int_t sec   = cand->getSector();
    Int_t mod0  = cand->getMetaModule(0);
    Int_t mod1  = cand->getMetaModule(1);
    Int_t cell0 = cand->getMetaCell(0);
    Int_t cell1 = cand->getMetaCell(1);
    if(mod0 == -1) return 0;
    Short_t type = 0;
    if(mod0 > -1) type = 1;
    if(mod1 > -1) type = 2;
    Float_t dx = cand->getRkMetaDx();
    Float_t dy = cand->getRkMetaDy();
    if(fDebug){
	HRpcCluster* pRpc = 0 ;
	if(fCatRpcCluster) {
	    pRpc = (HRpcCluster*) fCatRpcCluster ->getObject(cand->getRpcInd());
	}
	if(pRpc){
	    Float_t x,y,z;
	    pRpc->getXYZLab(x,y,z);
	    cout<<"rpc sec "<<pRpc->getSector()<<" col "<<pRpc->getColumn1()<<" cell "<<setw(2)<<pRpc->getCell1()<<" type "<<type
		<<" ,pos mod "<<setw(10)<<pRpc->getXMod()
		<<" "<<setw(10)<<pRpc->getYMod()
		<<" "<<setw(10)<<pRpc->getZMod()
		<<" ,pos sec "<<setw(10)<<pRpc->getXSec()
		<<" "<<setw(10)<<pRpc->getYSec()
		<<" "<<setw(10)<<pRpc->getZSec()
		<<" ,pos lab "<<setw(10)<<x
		<<" "<<setw(10)<<y
		<<" "<<setw(10)<<z
		<<" ,theta "<<setw(10)<<pRpc->getTheta()
		<<" phi "<<setw(10)<<pRpc->getPhi()
		<<" dx "<<dx
		<<" dy "<<dy
                <<" type "<<pRpc->getClusterType()
		<<endl;
	}
    }
    TVector3 metaHit;
    Int_t ind = mod0%2; 
    if(mod1 > -1) ind = 2;  
    traceToMeta(cand,metaHit,centerVecRpc[sec][ind],normVecRpc[sec][ind]);
    HGeomVector vsec(metaHit.X(),metaHit.Y(),metaHit.Z());    
    trackMetaSec = vsec;
    HGeomTransform& TransSec = pSpecGeomPar->getSector(sec)->getTransform();
    HGeomVector vlab  = TransSec.transFrom(vsec); 
    trackMetaLab = vlab;
    HGeomTransform& modToLab = fRpcGeometry->getModule(sec,0)->getLabTransform();
    HGeomVector vmod = modToLab.transTo(vlab);  
    trackMetaMod = vmod;
    vmod.setX(vmod.X()+dx);   
    vmod.setY(vmod.Y()+dy);   
    vlab = modToLab.transFrom(vmod); 
    vsec = TransSec.transTo(vlab);   
    Double_t theta = TMath::RadToDeg() * TMath::ATan2(TMath::Sqrt(vlab.X()*vlab.X()+vlab.Y()*vlab.Y()),vlab.Z());
    Double_t phi   = TMath::RadToDeg() * TMath::ATan2(vlab.Y(),vlab.X());
    if (phi < 0.) phi += 360.;
    if(fDebug){
	cout<<"mdc sec "<<sec<<" col "<<mod0<<" cell "<<setw(2)<<cell0<<" type "<<type
	    <<" ,pos mod "<<setw(10)<<vmod.X()
	    <<" "<<setw(10)<<vmod.Y()
	    <<" "<<setw(10)<<vmod.Z()
	    <<" ,pos sec "<<setw(10)<<vsec.X()
	    <<" "<<setw(10)<<vsec.Y()
	    <<" "<<setw(10)<<vsec.Z()
	    <<" ,pos lab "<<setw(10)<<vlab.X()
	    <<" "<<setw(10)<<vlab.Y()
	    <<" "<<setw(10)<<vlab.Z()
	    <<" ,theta "<<setw(10)<<theta
	    <<" phi "<<setw(10)<<phi
            <<" type "<<type
	    <<endl;
    }
    rpccluster.setDetID1(sec,mod0,cell0);
    rpccluster.setDetID2(sec,mod1,cell1);
    rpccluster.setTheta(theta);
    rpccluster.setPhi(phi);
    rpccluster.setXYZLab(vlab.X(),vlab.Y(),vlab.Z());
    rpccluster.setRSEC(vsec.X(),vsec.Y(),vsec.Z());
    rpccluster.setCluster(cand->getTof(),1.,vmod.X(),vmod.Y(),vmod.Z());
    rpccluster.setClusterType(type);
    return &rpccluster;
}
const HTofCluster* HParticleMetaMatcher::recalcTof(HParticleCand* cand)
{
    
    
    
    
    
    
    
    
    
    
    
    if(!cand) return 0;
    if(cand->getOuterSegInd() == -1) return 0;
    if(! (cand->isTofClstUsed() || cand->isTofHitUsed()) ) return 0;
    if(fDebug){ cout <<"matchTof--------------------------------"<<endl;}
    Int_t sec   = cand->getSector();
    Int_t mod0  = cand->getMetaModule(0);
    Int_t mod1  = cand->getMetaModule(1);
    Int_t cell0 = cand->getMetaCell(0);
    if(mod0 == -1) return 0;
    Short_t type = 0;
    if(mod0 > -1) type = 1;
    if(mod1 > -1) type = 2;
    Float_t dx = cand->getRkMetaDx();
    Float_t dy = cand->getRkMetaDy();
    if(fDebug){
	HTofCluster* pTof = 0 ;
	if(cand->isTofClstUsed() && fCatTofCluster) {
	    pTof = (HTofCluster*) fCatTofCluster ->getObject(cand->getTofClstInd());
	}
	if(cand->isTofHitUsed() && fCatTofHit) {
	    pTof = (HTofCluster*) fCatTofHit ->getObject(cand->getTofHitInd());
	}
	if(pTof){
	    Float_t x,y,z;
	    Float_t ph,th;
            pTof->getTheta(th);
            pTof->getPhi(ph);
	    pTof->getXYZLab(x,y,z);
	    cout<<"tof sec "<<(Int_t)pTof->getSector()<<" mod "<<(Int_t)pTof->getModule()<<" cell "<<setw(2)<<(Int_t)pTof->getCell()<<" type "<<type
		<<" ,pos mod "<<setw(10)<<pTof->getXpos()
		<<" ,pos lab "<<setw(10)<<x
		<<" "<<setw(10)<<y
		<<" "<<setw(10)<<z
		<<" ,theta "<<setw(10)<<th
		<<" phi "<<setw(10)<<ph
		<<" dx "<<dx
		<<" dy "<<dy
		<<endl;
	}
    }
    TVector3 metaHit;
    traceToMeta(cand,metaHit,centerVecTof[sec][mod0],normVecTof[sec][mod0]);
    HGeomVector vsec(metaHit.X(),metaHit.Y(),metaHit.Z());    
    trackMetaSec = vsec;
    HGeomTransform& TransSec = pSpecGeomPar->getSector(sec)->getTransform();
    HGeomVector vlab  = TransSec.transFrom(vsec); 
    trackMetaLab = vlab;
    HGeomTransform& modToLab = fTofGeometry->getModule(sec,mod0)->getLabTransform();
    HGeomVector vmod = modToLab.transTo(vlab);  
    trackMetaMod = vmod;
    vmod.setX(vmod.X()+dx);   
    vmod.setY(vmod.Y()+dy);   
    vlab = modToLab.transFrom(vmod); 
    vsec = TransSec.transTo(vlab);   
    Double_t theta = TMath::RadToDeg() * TMath::ATan2(TMath::Sqrt(vlab.X()*vlab.X()+vlab.Y()*vlab.Y()),vlab.Z());
    Double_t phi   = TMath::RadToDeg() * TMath::ATan2(vlab.Y(),vlab.X());
    if (phi < 0.) phi += 360.;
    if(fDebug){
	cout<<"mdc sec "<<sec<<" mod "<<mod0<<" cell "<<setw(2)<<cell0<<" type "<<type
	    <<" ,pos mod "<<setw(10)<<vmod.X()
	    <<" ,pos lab "<<setw(10)<<vlab.X()
	    <<" "<<setw(10)<<vlab.Y()
	    <<" "<<setw(10)<<vlab.Z()
	    <<" ,theta "<<setw(10)<<theta
	    <<" phi "<<setw(10)<<phi
	    <<endl;
    }
    tofcluster.setSector(sec);
    tofcluster.setModule(mod0);
    tofcluster.setCell(cell0);
    tofcluster.setTheta(theta);
    tofcluster.setPhi(phi);
    tofcluster.setXYZLab(vlab.X(),vlab.Y(),vlab.Z());
    tofcluster.setXpos(vmod.X());
    tofcluster.setTof(cand->getTof());
    tofcluster.setEdep(cand->getTofdEdx());
    tofcluster.setClusterSize(type);
    return &tofcluster;
}
const HEmcCluster* HParticleMetaMatcher::recalcEmc(HParticleCand* cand)
{
    
    
    
    
    
    
    
    
    
    
    
    
    if(!cand) return 0;
    if(cand->getOuterSegInd() == -1) return 0;
    if(cand->getEmcInd() == -1) return 0;
    if(fDebug){ cout <<"matchEmc--------------------------------"<<endl;}
    Int_t sec   = cand->getSector();
    Short_t type = 0;
    Float_t dx = cand->getRkMetaDxEmc();
    Float_t dy = cand->getRkMetaDyEmc();
    if(fDebug){
	HEmcCluster* pEmc = 0 ;
	if(cand->getEmcInd() > -1 && fCatEmcCluster) {
	    pEmc = (HEmcCluster*) fCatEmcCluster ->getObject(cand->getEmcInd());
	}
	if(pEmc){
	    Float_t x,y,z;
	    pEmc->getXYZLab(x,y,z);
	    cout<<"emc sec "<<(Int_t)pEmc->getSector()<<" cell "<<setw(3)<<(Int_t)pEmc->getCell()<<" type "<<(Int_t)pEmc->getNCells()
		<<" ,pos mod "<<setw(10)<<pEmc->getXMod()
		<<" "<<setw(10)<<pEmc->getYMod()
		<<" ,pos lab "<<setw(10)<<x
		<<" "<<setw(10)<<y
		<<" "<<setw(10)<<z
		<<" ,theta "<<setw(10)<<pEmc->getTheta()
		<<" phi "<<setw(10)<<pEmc->getPhi()
		<<" dx "<<dx
		<<" dy "<<dy
		<<endl;
	}
    }
    TVector3 metaHit;
    traceToMeta(cand,metaHit,centerVecEmc[sec],normVecEmc[sec]);
    HGeomVector vsec(metaHit.X(),metaHit.Y(),metaHit.Z());    
    trackMetaSec = vsec;
    HGeomTransform& TransSec = pSpecGeomPar->getSector(sec)->getTransform();
    HGeomVector vlab  = TransSec.transFrom(vsec); 
    trackMetaLab = vlab;
    HGeomTransform& modToLab = fEmcGeometry->getModule(sec,0)->getLabTransform();
    HGeomVector vmod = modToLab.transTo(vlab);  
    trackMetaMod = vmod;
    vmod.setX(vmod.X()+dx);   
    vmod.setY(vmod.Y()+dy);   
    vlab = modToLab.transFrom(vmod); 
    vsec = TransSec.transTo(vlab);   
    Double_t theta = TMath::RadToDeg() * TMath::ATan2(TMath::Sqrt(vlab.X()*vlab.X()+vlab.Y()*vlab.Y()),vlab.Z());
    Double_t phi   = TMath::RadToDeg() * TMath::ATan2(vlab.Y(),vlab.X());
    if (phi < 0.) phi += 360.;
    if(fDebug){
	cout<<"mdc sec "<<sec<<" cell "<<setw(3)<<0<<" type "<<type
	    <<" ,pos mod "<<setw(10)<<vmod.X()
	    <<" "<<setw(10)<<vmod.Y()
	    <<" ,pos lab "<<setw(10)<<vlab.X()
	    <<" "<<setw(10)<<vlab.Y()
	    <<" "<<setw(10)<<vlab.Z()
	    <<" ,theta "<<setw(10)<<theta
	    <<" phi "<<setw(10)<<phi
	    <<endl;
    }
    emccluster.setSector(sec);
    emccluster.setTheta(theta);
    emccluster.setPhi(phi);
    emccluster.setXYZLab(vlab.X(),vlab.Y(),vlab.Z());
    emccluster.setXYMod(vmod.X(),vmod.Y());
    emccluster.setTime(cand->getEmcTime());
    emccluster.setEnergy(cand->getEmcEnergy());
    return &emccluster;
}
Bool_t HParticleMetaMatcher::predictRpcCell(HParticleCand* cand,HGeomVector& hit0,HGeomVector& hit1,Int_t& s,Int_t& col0,Int_t& cell0,Int_t& col1,Int_t& cell1)
{
    
    
    
    
    
    
    
    if(!cand) return 0;
    if(cand->getOuterSegInd() == -1) return 0;
    if(fDebug){ cout <<"predictRpcCell--------------------------------"<<endl;}
    Int_t sec   = cand->getSector();
    if(fDebug && cand->getRpcInd() != -1){
	Int_t mod0  = cand->getMetaModule(0);
	Int_t mod1  = cand->getMetaModule(1);
	Int_t c0    = cand->getMetaCell(0);
	Int_t c1    = cand->getMetaCell(1);
	if(mod0 == -1) return 0;
	Short_t type = 0;
	if(mod0 > -1) type = 1;
	if(mod1 > -1) type = 2;
	HRpcCluster* pRpc = 0 ;
	if(fCatRpcCluster) {
	    pRpc = (HRpcCluster*) fCatRpcCluster ->getObject(cand->getRpcInd());
	}
	if(pRpc){
	    cout<<"rpc sec "<<pRpc->getSector()
		<<" col0 "<<mod0<<" cell0 "<<setw(2)<<c0
		<<" col1 "<<mod1<<" cell1 "<<setw(2)<<c1
		<<" type "<<type
		<<" ,pos mod "<<setw(10)<<pRpc->getXMod()
		<<" "<<setw(10)<<pRpc->getYMod()
		<<" "<<setw(10)<<pRpc->getZMod()
		<<endl;
	}
    }
    TVector3 metaHit;
    HGeomVector vmod[2];
    HGeomTransform& TransSec = pSpecGeomPar->getSector(sec)->getTransform();
    HGeomTransform& modToLab = fRpcGeometry->getModule(sec,0)->getLabTransform();
    for(Int_t i = 0; i < 2; i++){
	traceToMeta(cand,metaHit,centerVecRpc[sec][i],normVecRpc[sec][i]);
	HGeomVector vsec(metaHit.X(),metaHit.Y(),metaHit.Z());    
	HGeomVector vlab  = TransSec.transFrom(vsec); 
	vmod[i] = modToLab.transTo(vlab);  
    }
    hit0 = vmod[0];
    hit1 = vmod[1];
    s    = sec;
    col0 = col1 = -1;
    cell0= cell1= -1;
    Int_t ct = 0;
    for(Int_t col = 0; col < 6; col++){
	for(Int_t c = 0; c < RPCMAXCELL; c++){
	    HGeomVector v = vmod[col%2];
	    if(!isInRpcCell(v,sec,col,c)) continue;
	    if     (ct == 0) { col0 = col; cell0 = c;}
	    else if(ct == 1) { col1 = col; cell1 = c;}
	    else  {
		cout <<"predictRpcCell() : more than 2 Rpc cells found!"<<endl;
	    }
	    ct++;
	}
    }
    return ct > 0 ? kTRUE : kFALSE;
}
Bool_t HParticleMetaMatcher::predictTofCell(HParticleCand* cand,HGeomVector& hit0,HGeomVector& hit1,Int_t& s,Int_t& mod0,Int_t& cell0,Int_t& mod1,Int_t& cell1)
{
    
    
    
    
    
    
    
    
    if(!cand) return 0;
    if(cand->getOuterSegInd() == -1) return 0;
    if(fDebug){ cout <<"predictTofCell--------------------------------"<<endl;}
    Int_t sec   = cand->getSector();
    if(fDebug){
	HTofCluster* pTof    = 0 ;
	if(cand->getTofClstInd() != -1 && fCatTofCluster) {
	    pTof = (HTofCluster*) fCatTofCluster ->getObject(cand->getTofClstInd());
	}
	if(cand->getTofHitInd() != -1 && fCatTofHit) {
	    pTof = (HTofCluster*) fCatTofHit ->getObject(cand->getTofHitInd());
	}
	if(pTof){
	    Int_t mod0  = cand->getMetaModule(0);
	    Int_t mod1  = cand->getMetaModule(1);
	    Int_t c0    = cand->getMetaCell(0);
	    Int_t c1    = cand->getMetaCell(1);
	    Short_t type = 0;
	    if(mod0 > -1) type = 1;
	    if(mod1 > -1) type = 2;
	    cout<<"tof sec "<<(Int_t)pTof->getSector()
		<<" mod0 "<<mod0<<" cell0 "<<setw(2)<<c0
		<<" mod1 "<<mod1<<" cell1 "<<setw(2)<<c1
		<<" type "<<type
		<<" ,pos mod "<<setw(10)<<pTof->getXpos()
		<<endl;
	}
    }
    TVector3 metaHit;
    HGeomVector vmod[8];
    HGeomTransform& TransSec = pSpecGeomPar->getSector(sec)->getTransform();
    for(Int_t i = 0; i < 8; i++){ 
	HGeomTransform& modToLab=fTofGeometry->getModule(sec,i)->getLabTransform();
	traceToMeta(cand,metaHit,centerVecTof[sec][i],normVecTof[sec][i]);
	HGeomVector vsec(metaHit.X(),metaHit.Y(),metaHit.Z());    
	HGeomVector vlab  = TransSec.transFrom(vsec); 
	vmod[i] = modToLab.transTo(vlab);  
    }
    s    = sec;
    mod0 = mod1 = -1;
    cell0 = cell1= -1;
    hit0.setXYZ(0,0,0);
    hit1.setXYZ(0,0,0);
    Int_t ct = 0;
    for(Int_t m = 0; m < 8; m++){
	for(Int_t c = 0; c < 8; c++){
	    if(!isInTofCell(vmod[m],sec,m,c)) continue;
	    if     (ct == 0) { mod0 = m; cell0 = c; hit0 = vmod[m];}
	    else if(ct == 1) { mod1 = m; cell1 = c; hit1 = vmod[m];}
	    else  {
		cout <<"predictTofCell() : more than 2 Tof rods found!"<<endl;
	    }
	    ct++;
	}
    }
    return ct > 0 ? kTRUE : kFALSE;
}
Bool_t HParticleMetaMatcher::predictEmcCell(HParticleCand* cand,HGeomVector& hit,Int_t& s,Int_t& pos,Int_t& cell)
{
    
    
    
    
    
    
    if(!cand) return 0;
    if(cand->getOuterSegInd() == -1) return 0;
    if(fDebug){ cout <<"predictEmcCell--------------------------------"<<endl;}
    Int_t sec   = cand->getSector();
    if(fDebug && cand->getEmcInd() != -1){
	HEmcCluster* pEmc = 0 ;
	if(fCatEmcCluster) {
	    pEmc = (HEmcCluster*) fCatEmcCluster ->getObject(cand->getEmcInd());
	}
	if(pEmc){
	    cout<<"emc sec "<<(Int_t)pEmc->getSector()<<" cell "<<setw(3)<<(Int_t)pEmc->getCell()<<" pos "<<setw(3)<<HEmcDetector::getPositionFromCell(pEmc->getCell())<<" type "<<(Int_t)pEmc->getNCells()
		<<" ,pos mod "<<setw(10)<<pEmc->getXMod()
		<<" "<<setw(10)<<pEmc->getYMod()
                <<" radius "<<cand->getMetaMatchRadiusEmc()
		<<endl;
	}
    }
    TVector3 metaHit;
    HGeomVector vmod;
    HGeomTransform& TransSec = pSpecGeomPar->getSector(sec)->getTransform();
    HGeomTransform& modToLab = fRpcGeometry->getModule(sec,0)->getLabTransform();
    traceToMeta(cand,metaHit,centerVecEmc[sec],normVecEmc[sec]);
    HGeomVector vsec(metaHit.X(),metaHit.Y(),metaHit.Z());    
    HGeomVector vlab  = TransSec.transFrom(vsec); 
    vmod = modToLab.transTo(vlab);  
    hit  = vmod;
    s    = sec;
    pos  = -1;
    cell = -1;
    for(Int_t c = 0; c < EMCMAXCELL; c++){
	if(!isInEmcCell(vmod,sec,c)) continue;
	pos = c;
        cell = HEmcDetector::getCellFromPosition(pos);
	break;
    }
    return pos > -1 ? kTRUE : kFALSE;
}
 hparticlemetamatcher.cc:1  hparticlemetamatcher.cc:2  hparticlemetamatcher.cc:3  hparticlemetamatcher.cc:4  hparticlemetamatcher.cc:5  hparticlemetamatcher.cc:6  hparticlemetamatcher.cc:7  hparticlemetamatcher.cc:8  hparticlemetamatcher.cc:9  hparticlemetamatcher.cc:10  hparticlemetamatcher.cc:11  hparticlemetamatcher.cc:12  hparticlemetamatcher.cc:13  hparticlemetamatcher.cc:14  hparticlemetamatcher.cc:15  hparticlemetamatcher.cc:16  hparticlemetamatcher.cc:17  hparticlemetamatcher.cc:18  hparticlemetamatcher.cc:19  hparticlemetamatcher.cc:20  hparticlemetamatcher.cc:21  hparticlemetamatcher.cc:22  hparticlemetamatcher.cc:23  hparticlemetamatcher.cc:24  hparticlemetamatcher.cc:25  hparticlemetamatcher.cc:26  hparticlemetamatcher.cc:27  hparticlemetamatcher.cc:28  hparticlemetamatcher.cc:29  hparticlemetamatcher.cc:30  hparticlemetamatcher.cc:31  hparticlemetamatcher.cc:32  hparticlemetamatcher.cc:33  hparticlemetamatcher.cc:34  hparticlemetamatcher.cc:35  hparticlemetamatcher.cc:36  hparticlemetamatcher.cc:37  hparticlemetamatcher.cc:38  hparticlemetamatcher.cc:39  hparticlemetamatcher.cc:40  hparticlemetamatcher.cc:41  hparticlemetamatcher.cc:42  hparticlemetamatcher.cc:43  hparticlemetamatcher.cc:44  hparticlemetamatcher.cc:45  hparticlemetamatcher.cc:46  hparticlemetamatcher.cc:47  hparticlemetamatcher.cc:48  hparticlemetamatcher.cc:49  hparticlemetamatcher.cc:50  hparticlemetamatcher.cc:51  hparticlemetamatcher.cc:52  hparticlemetamatcher.cc:53  hparticlemetamatcher.cc:54  hparticlemetamatcher.cc:55  hparticlemetamatcher.cc:56  hparticlemetamatcher.cc:57  hparticlemetamatcher.cc:58  hparticlemetamatcher.cc:59  hparticlemetamatcher.cc:60  hparticlemetamatcher.cc:61  hparticlemetamatcher.cc:62  hparticlemetamatcher.cc:63  hparticlemetamatcher.cc:64  hparticlemetamatcher.cc:65  hparticlemetamatcher.cc:66  hparticlemetamatcher.cc:67  hparticlemetamatcher.cc:68  hparticlemetamatcher.cc:69  hparticlemetamatcher.cc:70  hparticlemetamatcher.cc:71  hparticlemetamatcher.cc:72  hparticlemetamatcher.cc:73  hparticlemetamatcher.cc:74  hparticlemetamatcher.cc:75  hparticlemetamatcher.cc:76  hparticlemetamatcher.cc:77  hparticlemetamatcher.cc:78  hparticlemetamatcher.cc:79  hparticlemetamatcher.cc:80  hparticlemetamatcher.cc:81  hparticlemetamatcher.cc:82  hparticlemetamatcher.cc:83  hparticlemetamatcher.cc:84  hparticlemetamatcher.cc:85  hparticlemetamatcher.cc:86  hparticlemetamatcher.cc:87  hparticlemetamatcher.cc:88  hparticlemetamatcher.cc:89  hparticlemetamatcher.cc:90  hparticlemetamatcher.cc:91  hparticlemetamatcher.cc:92  hparticlemetamatcher.cc:93  hparticlemetamatcher.cc:94  hparticlemetamatcher.cc:95  hparticlemetamatcher.cc:96  hparticlemetamatcher.cc:97  hparticlemetamatcher.cc:98  hparticlemetamatcher.cc:99  hparticlemetamatcher.cc:100  hparticlemetamatcher.cc:101  hparticlemetamatcher.cc:102  hparticlemetamatcher.cc:103  hparticlemetamatcher.cc:104  hparticlemetamatcher.cc:105  hparticlemetamatcher.cc:106  hparticlemetamatcher.cc:107  hparticlemetamatcher.cc:108  hparticlemetamatcher.cc:109  hparticlemetamatcher.cc:110  hparticlemetamatcher.cc:111  hparticlemetamatcher.cc:112  hparticlemetamatcher.cc:113  hparticlemetamatcher.cc:114  hparticlemetamatcher.cc:115  hparticlemetamatcher.cc:116  hparticlemetamatcher.cc:117  hparticlemetamatcher.cc:118  hparticlemetamatcher.cc:119  hparticlemetamatcher.cc:120  hparticlemetamatcher.cc:121  hparticlemetamatcher.cc:122  hparticlemetamatcher.cc:123  hparticlemetamatcher.cc:124  hparticlemetamatcher.cc:125  hparticlemetamatcher.cc:126  hparticlemetamatcher.cc:127  hparticlemetamatcher.cc:128  hparticlemetamatcher.cc:129  hparticlemetamatcher.cc:130  hparticlemetamatcher.cc:131  hparticlemetamatcher.cc:132  hparticlemetamatcher.cc:133  hparticlemetamatcher.cc:134  hparticlemetamatcher.cc:135  hparticlemetamatcher.cc:136  hparticlemetamatcher.cc:137  hparticlemetamatcher.cc:138  hparticlemetamatcher.cc:139  hparticlemetamatcher.cc:140  hparticlemetamatcher.cc:141  hparticlemetamatcher.cc:142  hparticlemetamatcher.cc:143  hparticlemetamatcher.cc:144  hparticlemetamatcher.cc:145  hparticlemetamatcher.cc:146  hparticlemetamatcher.cc:147  hparticlemetamatcher.cc:148  hparticlemetamatcher.cc:149  hparticlemetamatcher.cc:150  hparticlemetamatcher.cc:151  hparticlemetamatcher.cc:152  hparticlemetamatcher.cc:153  hparticlemetamatcher.cc:154  hparticlemetamatcher.cc:155  hparticlemetamatcher.cc:156  hparticlemetamatcher.cc:157  hparticlemetamatcher.cc:158  hparticlemetamatcher.cc:159  hparticlemetamatcher.cc:160  hparticlemetamatcher.cc:161  hparticlemetamatcher.cc:162  hparticlemetamatcher.cc:163  hparticlemetamatcher.cc:164  hparticlemetamatcher.cc:165  hparticlemetamatcher.cc:166  hparticlemetamatcher.cc:167  hparticlemetamatcher.cc:168  hparticlemetamatcher.cc:169  hparticlemetamatcher.cc:170  hparticlemetamatcher.cc:171  hparticlemetamatcher.cc:172  hparticlemetamatcher.cc:173  hparticlemetamatcher.cc:174  hparticlemetamatcher.cc:175  hparticlemetamatcher.cc:176  hparticlemetamatcher.cc:177  hparticlemetamatcher.cc:178  hparticlemetamatcher.cc:179  hparticlemetamatcher.cc:180  hparticlemetamatcher.cc:181  hparticlemetamatcher.cc:182  hparticlemetamatcher.cc:183  hparticlemetamatcher.cc:184  hparticlemetamatcher.cc:185  hparticlemetamatcher.cc:186  hparticlemetamatcher.cc:187  hparticlemetamatcher.cc:188  hparticlemetamatcher.cc:189  hparticlemetamatcher.cc:190  hparticlemetamatcher.cc:191  hparticlemetamatcher.cc:192  hparticlemetamatcher.cc:193  hparticlemetamatcher.cc:194  hparticlemetamatcher.cc:195  hparticlemetamatcher.cc:196  hparticlemetamatcher.cc:197  hparticlemetamatcher.cc:198  hparticlemetamatcher.cc:199  hparticlemetamatcher.cc:200  hparticlemetamatcher.cc:201  hparticlemetamatcher.cc:202  hparticlemetamatcher.cc:203  hparticlemetamatcher.cc:204  hparticlemetamatcher.cc:205  hparticlemetamatcher.cc:206  hparticlemetamatcher.cc:207  hparticlemetamatcher.cc:208  hparticlemetamatcher.cc:209  hparticlemetamatcher.cc:210  hparticlemetamatcher.cc:211  hparticlemetamatcher.cc:212  hparticlemetamatcher.cc:213  hparticlemetamatcher.cc:214  hparticlemetamatcher.cc:215  hparticlemetamatcher.cc:216  hparticlemetamatcher.cc:217  hparticlemetamatcher.cc:218  hparticlemetamatcher.cc:219  hparticlemetamatcher.cc:220  hparticlemetamatcher.cc:221  hparticlemetamatcher.cc:222  hparticlemetamatcher.cc:223  hparticlemetamatcher.cc:224  hparticlemetamatcher.cc:225  hparticlemetamatcher.cc:226  hparticlemetamatcher.cc:227  hparticlemetamatcher.cc:228  hparticlemetamatcher.cc:229  hparticlemetamatcher.cc:230  hparticlemetamatcher.cc:231  hparticlemetamatcher.cc:232  hparticlemetamatcher.cc:233  hparticlemetamatcher.cc:234  hparticlemetamatcher.cc:235  hparticlemetamatcher.cc:236  hparticlemetamatcher.cc:237  hparticlemetamatcher.cc:238  hparticlemetamatcher.cc:239  hparticlemetamatcher.cc:240  hparticlemetamatcher.cc:241  hparticlemetamatcher.cc:242  hparticlemetamatcher.cc:243  hparticlemetamatcher.cc:244  hparticlemetamatcher.cc:245  hparticlemetamatcher.cc:246  hparticlemetamatcher.cc:247  hparticlemetamatcher.cc:248  hparticlemetamatcher.cc:249  hparticlemetamatcher.cc:250  hparticlemetamatcher.cc:251  hparticlemetamatcher.cc:252  hparticlemetamatcher.cc:253  hparticlemetamatcher.cc:254  hparticlemetamatcher.cc:255  hparticlemetamatcher.cc:256  hparticlemetamatcher.cc:257  hparticlemetamatcher.cc:258  hparticlemetamatcher.cc:259  hparticlemetamatcher.cc:260  hparticlemetamatcher.cc:261  hparticlemetamatcher.cc:262  hparticlemetamatcher.cc:263  hparticlemetamatcher.cc:264  hparticlemetamatcher.cc:265  hparticlemetamatcher.cc:266  hparticlemetamatcher.cc:267  hparticlemetamatcher.cc:268  hparticlemetamatcher.cc:269  hparticlemetamatcher.cc:270  hparticlemetamatcher.cc:271  hparticlemetamatcher.cc:272  hparticlemetamatcher.cc:273  hparticlemetamatcher.cc:274  hparticlemetamatcher.cc:275  hparticlemetamatcher.cc:276  hparticlemetamatcher.cc:277  hparticlemetamatcher.cc:278  hparticlemetamatcher.cc:279  hparticlemetamatcher.cc:280  hparticlemetamatcher.cc:281  hparticlemetamatcher.cc:282  hparticlemetamatcher.cc:283  hparticlemetamatcher.cc:284  hparticlemetamatcher.cc:285  hparticlemetamatcher.cc:286  hparticlemetamatcher.cc:287  hparticlemetamatcher.cc:288  hparticlemetamatcher.cc:289  hparticlemetamatcher.cc:290  hparticlemetamatcher.cc:291  hparticlemetamatcher.cc:292  hparticlemetamatcher.cc:293  hparticlemetamatcher.cc:294  hparticlemetamatcher.cc:295  hparticlemetamatcher.cc:296  hparticlemetamatcher.cc:297  hparticlemetamatcher.cc:298  hparticlemetamatcher.cc:299  hparticlemetamatcher.cc:300  hparticlemetamatcher.cc:301  hparticlemetamatcher.cc:302  hparticlemetamatcher.cc:303  hparticlemetamatcher.cc:304  hparticlemetamatcher.cc:305  hparticlemetamatcher.cc:306  hparticlemetamatcher.cc:307  hparticlemetamatcher.cc:308  hparticlemetamatcher.cc:309  hparticlemetamatcher.cc:310  hparticlemetamatcher.cc:311  hparticlemetamatcher.cc:312  hparticlemetamatcher.cc:313  hparticlemetamatcher.cc:314  hparticlemetamatcher.cc:315  hparticlemetamatcher.cc:316  hparticlemetamatcher.cc:317  hparticlemetamatcher.cc:318  hparticlemetamatcher.cc:319  hparticlemetamatcher.cc:320  hparticlemetamatcher.cc:321  hparticlemetamatcher.cc:322  hparticlemetamatcher.cc:323  hparticlemetamatcher.cc:324  hparticlemetamatcher.cc:325  hparticlemetamatcher.cc:326  hparticlemetamatcher.cc:327  hparticlemetamatcher.cc:328  hparticlemetamatcher.cc:329  hparticlemetamatcher.cc:330  hparticlemetamatcher.cc:331  hparticlemetamatcher.cc:332  hparticlemetamatcher.cc:333  hparticlemetamatcher.cc:334  hparticlemetamatcher.cc:335  hparticlemetamatcher.cc:336  hparticlemetamatcher.cc:337  hparticlemetamatcher.cc:338  hparticlemetamatcher.cc:339  hparticlemetamatcher.cc:340  hparticlemetamatcher.cc:341  hparticlemetamatcher.cc:342  hparticlemetamatcher.cc:343  hparticlemetamatcher.cc:344  hparticlemetamatcher.cc:345  hparticlemetamatcher.cc:346  hparticlemetamatcher.cc:347  hparticlemetamatcher.cc:348  hparticlemetamatcher.cc:349  hparticlemetamatcher.cc:350  hparticlemetamatcher.cc:351  hparticlemetamatcher.cc:352  hparticlemetamatcher.cc:353  hparticlemetamatcher.cc:354  hparticlemetamatcher.cc:355  hparticlemetamatcher.cc:356  hparticlemetamatcher.cc:357  hparticlemetamatcher.cc:358  hparticlemetamatcher.cc:359  hparticlemetamatcher.cc:360  hparticlemetamatcher.cc:361  hparticlemetamatcher.cc:362  hparticlemetamatcher.cc:363  hparticlemetamatcher.cc:364  hparticlemetamatcher.cc:365  hparticlemetamatcher.cc:366  hparticlemetamatcher.cc:367  hparticlemetamatcher.cc:368  hparticlemetamatcher.cc:369  hparticlemetamatcher.cc:370  hparticlemetamatcher.cc:371  hparticlemetamatcher.cc:372  hparticlemetamatcher.cc:373  hparticlemetamatcher.cc:374  hparticlemetamatcher.cc:375  hparticlemetamatcher.cc:376  hparticlemetamatcher.cc:377  hparticlemetamatcher.cc:378  hparticlemetamatcher.cc:379  hparticlemetamatcher.cc:380  hparticlemetamatcher.cc:381  hparticlemetamatcher.cc:382  hparticlemetamatcher.cc:383  hparticlemetamatcher.cc:384  hparticlemetamatcher.cc:385  hparticlemetamatcher.cc:386  hparticlemetamatcher.cc:387  hparticlemetamatcher.cc:388  hparticlemetamatcher.cc:389  hparticlemetamatcher.cc:390  hparticlemetamatcher.cc:391  hparticlemetamatcher.cc:392  hparticlemetamatcher.cc:393  hparticlemetamatcher.cc:394  hparticlemetamatcher.cc:395  hparticlemetamatcher.cc:396  hparticlemetamatcher.cc:397  hparticlemetamatcher.cc:398  hparticlemetamatcher.cc:399  hparticlemetamatcher.cc:400  hparticlemetamatcher.cc:401  hparticlemetamatcher.cc:402  hparticlemetamatcher.cc:403  hparticlemetamatcher.cc:404  hparticlemetamatcher.cc:405  hparticlemetamatcher.cc:406  hparticlemetamatcher.cc:407  hparticlemetamatcher.cc:408  hparticlemetamatcher.cc:409  hparticlemetamatcher.cc:410  hparticlemetamatcher.cc:411  hparticlemetamatcher.cc:412  hparticlemetamatcher.cc:413  hparticlemetamatcher.cc:414  hparticlemetamatcher.cc:415  hparticlemetamatcher.cc:416  hparticlemetamatcher.cc:417  hparticlemetamatcher.cc:418  hparticlemetamatcher.cc:419  hparticlemetamatcher.cc:420  hparticlemetamatcher.cc:421  hparticlemetamatcher.cc:422  hparticlemetamatcher.cc:423  hparticlemetamatcher.cc:424  hparticlemetamatcher.cc:425  hparticlemetamatcher.cc:426  hparticlemetamatcher.cc:427  hparticlemetamatcher.cc:428  hparticlemetamatcher.cc:429  hparticlemetamatcher.cc:430  hparticlemetamatcher.cc:431  hparticlemetamatcher.cc:432  hparticlemetamatcher.cc:433  hparticlemetamatcher.cc:434  hparticlemetamatcher.cc:435  hparticlemetamatcher.cc:436  hparticlemetamatcher.cc:437  hparticlemetamatcher.cc:438  hparticlemetamatcher.cc:439  hparticlemetamatcher.cc:440  hparticlemetamatcher.cc:441  hparticlemetamatcher.cc:442  hparticlemetamatcher.cc:443  hparticlemetamatcher.cc:444  hparticlemetamatcher.cc:445  hparticlemetamatcher.cc:446  hparticlemetamatcher.cc:447  hparticlemetamatcher.cc:448  hparticlemetamatcher.cc:449  hparticlemetamatcher.cc:450  hparticlemetamatcher.cc:451  hparticlemetamatcher.cc:452  hparticlemetamatcher.cc:453  hparticlemetamatcher.cc:454  hparticlemetamatcher.cc:455  hparticlemetamatcher.cc:456  hparticlemetamatcher.cc:457  hparticlemetamatcher.cc:458  hparticlemetamatcher.cc:459  hparticlemetamatcher.cc:460  hparticlemetamatcher.cc:461  hparticlemetamatcher.cc:462  hparticlemetamatcher.cc:463  hparticlemetamatcher.cc:464  hparticlemetamatcher.cc:465  hparticlemetamatcher.cc:466  hparticlemetamatcher.cc:467  hparticlemetamatcher.cc:468  hparticlemetamatcher.cc:469  hparticlemetamatcher.cc:470  hparticlemetamatcher.cc:471  hparticlemetamatcher.cc:472  hparticlemetamatcher.cc:473  hparticlemetamatcher.cc:474  hparticlemetamatcher.cc:475  hparticlemetamatcher.cc:476  hparticlemetamatcher.cc:477  hparticlemetamatcher.cc:478  hparticlemetamatcher.cc:479  hparticlemetamatcher.cc:480  hparticlemetamatcher.cc:481  hparticlemetamatcher.cc:482  hparticlemetamatcher.cc:483  hparticlemetamatcher.cc:484  hparticlemetamatcher.cc:485  hparticlemetamatcher.cc:486  hparticlemetamatcher.cc:487  hparticlemetamatcher.cc:488  hparticlemetamatcher.cc:489  hparticlemetamatcher.cc:490  hparticlemetamatcher.cc:491  hparticlemetamatcher.cc:492  hparticlemetamatcher.cc:493  hparticlemetamatcher.cc:494  hparticlemetamatcher.cc:495  hparticlemetamatcher.cc:496  hparticlemetamatcher.cc:497  hparticlemetamatcher.cc:498  hparticlemetamatcher.cc:499  hparticlemetamatcher.cc:500  hparticlemetamatcher.cc:501  hparticlemetamatcher.cc:502  hparticlemetamatcher.cc:503  hparticlemetamatcher.cc:504  hparticlemetamatcher.cc:505  hparticlemetamatcher.cc:506  hparticlemetamatcher.cc:507  hparticlemetamatcher.cc:508  hparticlemetamatcher.cc:509  hparticlemetamatcher.cc:510  hparticlemetamatcher.cc:511  hparticlemetamatcher.cc:512  hparticlemetamatcher.cc:513  hparticlemetamatcher.cc:514  hparticlemetamatcher.cc:515  hparticlemetamatcher.cc:516  hparticlemetamatcher.cc:517  hparticlemetamatcher.cc:518  hparticlemetamatcher.cc:519  hparticlemetamatcher.cc:520  hparticlemetamatcher.cc:521  hparticlemetamatcher.cc:522  hparticlemetamatcher.cc:523  hparticlemetamatcher.cc:524  hparticlemetamatcher.cc:525  hparticlemetamatcher.cc:526  hparticlemetamatcher.cc:527  hparticlemetamatcher.cc:528  hparticlemetamatcher.cc:529  hparticlemetamatcher.cc:530  hparticlemetamatcher.cc:531  hparticlemetamatcher.cc:532  hparticlemetamatcher.cc:533  hparticlemetamatcher.cc:534  hparticlemetamatcher.cc:535  hparticlemetamatcher.cc:536  hparticlemetamatcher.cc:537  hparticlemetamatcher.cc:538  hparticlemetamatcher.cc:539  hparticlemetamatcher.cc:540  hparticlemetamatcher.cc:541  hparticlemetamatcher.cc:542  hparticlemetamatcher.cc:543  hparticlemetamatcher.cc:544  hparticlemetamatcher.cc:545  hparticlemetamatcher.cc:546  hparticlemetamatcher.cc:547  hparticlemetamatcher.cc:548  hparticlemetamatcher.cc:549  hparticlemetamatcher.cc:550  hparticlemetamatcher.cc:551  hparticlemetamatcher.cc:552  hparticlemetamatcher.cc:553  hparticlemetamatcher.cc:554  hparticlemetamatcher.cc:555  hparticlemetamatcher.cc:556  hparticlemetamatcher.cc:557  hparticlemetamatcher.cc:558  hparticlemetamatcher.cc:559  hparticlemetamatcher.cc:560  hparticlemetamatcher.cc:561  hparticlemetamatcher.cc:562  hparticlemetamatcher.cc:563  hparticlemetamatcher.cc:564  hparticlemetamatcher.cc:565  hparticlemetamatcher.cc:566  hparticlemetamatcher.cc:567  hparticlemetamatcher.cc:568  hparticlemetamatcher.cc:569  hparticlemetamatcher.cc:570  hparticlemetamatcher.cc:571  hparticlemetamatcher.cc:572  hparticlemetamatcher.cc:573  hparticlemetamatcher.cc:574  hparticlemetamatcher.cc:575  hparticlemetamatcher.cc:576  hparticlemetamatcher.cc:577  hparticlemetamatcher.cc:578  hparticlemetamatcher.cc:579  hparticlemetamatcher.cc:580  hparticlemetamatcher.cc:581  hparticlemetamatcher.cc:582  hparticlemetamatcher.cc:583  hparticlemetamatcher.cc:584  hparticlemetamatcher.cc:585  hparticlemetamatcher.cc:586  hparticlemetamatcher.cc:587  hparticlemetamatcher.cc:588  hparticlemetamatcher.cc:589  hparticlemetamatcher.cc:590  hparticlemetamatcher.cc:591  hparticlemetamatcher.cc:592  hparticlemetamatcher.cc:593  hparticlemetamatcher.cc:594  hparticlemetamatcher.cc:595  hparticlemetamatcher.cc:596  hparticlemetamatcher.cc:597  hparticlemetamatcher.cc:598  hparticlemetamatcher.cc:599  hparticlemetamatcher.cc:600  hparticlemetamatcher.cc:601  hparticlemetamatcher.cc:602  hparticlemetamatcher.cc:603  hparticlemetamatcher.cc:604  hparticlemetamatcher.cc:605  hparticlemetamatcher.cc:606  hparticlemetamatcher.cc:607  hparticlemetamatcher.cc:608  hparticlemetamatcher.cc:609  hparticlemetamatcher.cc:610  hparticlemetamatcher.cc:611  hparticlemetamatcher.cc:612  hparticlemetamatcher.cc:613  hparticlemetamatcher.cc:614  hparticlemetamatcher.cc:615  hparticlemetamatcher.cc:616  hparticlemetamatcher.cc:617  hparticlemetamatcher.cc:618  hparticlemetamatcher.cc:619  hparticlemetamatcher.cc:620  hparticlemetamatcher.cc:621  hparticlemetamatcher.cc:622  hparticlemetamatcher.cc:623  hparticlemetamatcher.cc:624  hparticlemetamatcher.cc:625  hparticlemetamatcher.cc:626  hparticlemetamatcher.cc:627  hparticlemetamatcher.cc:628  hparticlemetamatcher.cc:629  hparticlemetamatcher.cc:630  hparticlemetamatcher.cc:631  hparticlemetamatcher.cc:632  hparticlemetamatcher.cc:633  hparticlemetamatcher.cc:634  hparticlemetamatcher.cc:635  hparticlemetamatcher.cc:636  hparticlemetamatcher.cc:637  hparticlemetamatcher.cc:638  hparticlemetamatcher.cc:639  hparticlemetamatcher.cc:640  hparticlemetamatcher.cc:641  hparticlemetamatcher.cc:642  hparticlemetamatcher.cc:643  hparticlemetamatcher.cc:644  hparticlemetamatcher.cc:645  hparticlemetamatcher.cc:646  hparticlemetamatcher.cc:647  hparticlemetamatcher.cc:648  hparticlemetamatcher.cc:649  hparticlemetamatcher.cc:650  hparticlemetamatcher.cc:651  hparticlemetamatcher.cc:652  hparticlemetamatcher.cc:653  hparticlemetamatcher.cc:654  hparticlemetamatcher.cc:655  hparticlemetamatcher.cc:656  hparticlemetamatcher.cc:657  hparticlemetamatcher.cc:658  hparticlemetamatcher.cc:659  hparticlemetamatcher.cc:660  hparticlemetamatcher.cc:661  hparticlemetamatcher.cc:662  hparticlemetamatcher.cc:663  hparticlemetamatcher.cc:664  hparticlemetamatcher.cc:665  hparticlemetamatcher.cc:666  hparticlemetamatcher.cc:667  hparticlemetamatcher.cc:668  hparticlemetamatcher.cc:669  hparticlemetamatcher.cc:670  hparticlemetamatcher.cc:671  hparticlemetamatcher.cc:672  hparticlemetamatcher.cc:673  hparticlemetamatcher.cc:674  hparticlemetamatcher.cc:675  hparticlemetamatcher.cc:676  hparticlemetamatcher.cc:677  hparticlemetamatcher.cc:678  hparticlemetamatcher.cc:679  hparticlemetamatcher.cc:680  hparticlemetamatcher.cc:681  hparticlemetamatcher.cc:682  hparticlemetamatcher.cc:683  hparticlemetamatcher.cc:684  hparticlemetamatcher.cc:685  hparticlemetamatcher.cc:686  hparticlemetamatcher.cc:687  hparticlemetamatcher.cc:688  hparticlemetamatcher.cc:689  hparticlemetamatcher.cc:690  hparticlemetamatcher.cc:691  hparticlemetamatcher.cc:692  hparticlemetamatcher.cc:693  hparticlemetamatcher.cc:694  hparticlemetamatcher.cc:695  hparticlemetamatcher.cc:696  hparticlemetamatcher.cc:697  hparticlemetamatcher.cc:698  hparticlemetamatcher.cc:699  hparticlemetamatcher.cc:700  hparticlemetamatcher.cc:701  hparticlemetamatcher.cc:702  hparticlemetamatcher.cc:703  hparticlemetamatcher.cc:704  hparticlemetamatcher.cc:705  hparticlemetamatcher.cc:706  hparticlemetamatcher.cc:707  hparticlemetamatcher.cc:708  hparticlemetamatcher.cc:709  hparticlemetamatcher.cc:710  hparticlemetamatcher.cc:711  hparticlemetamatcher.cc:712  hparticlemetamatcher.cc:713  hparticlemetamatcher.cc:714  hparticlemetamatcher.cc:715  hparticlemetamatcher.cc:716  hparticlemetamatcher.cc:717  hparticlemetamatcher.cc:718  hparticlemetamatcher.cc:719  hparticlemetamatcher.cc:720  hparticlemetamatcher.cc:721  hparticlemetamatcher.cc:722  hparticlemetamatcher.cc:723  hparticlemetamatcher.cc:724  hparticlemetamatcher.cc:725  hparticlemetamatcher.cc:726  hparticlemetamatcher.cc:727  hparticlemetamatcher.cc:728  hparticlemetamatcher.cc:729  hparticlemetamatcher.cc:730  hparticlemetamatcher.cc:731  hparticlemetamatcher.cc:732  hparticlemetamatcher.cc:733  hparticlemetamatcher.cc:734  hparticlemetamatcher.cc:735  hparticlemetamatcher.cc:736  hparticlemetamatcher.cc:737  hparticlemetamatcher.cc:738  hparticlemetamatcher.cc:739  hparticlemetamatcher.cc:740  hparticlemetamatcher.cc:741  hparticlemetamatcher.cc:742  hparticlemetamatcher.cc:743  hparticlemetamatcher.cc:744  hparticlemetamatcher.cc:745  hparticlemetamatcher.cc:746  hparticlemetamatcher.cc:747  hparticlemetamatcher.cc:748  hparticlemetamatcher.cc:749  hparticlemetamatcher.cc:750  hparticlemetamatcher.cc:751  hparticlemetamatcher.cc:752  hparticlemetamatcher.cc:753  hparticlemetamatcher.cc:754  hparticlemetamatcher.cc:755  hparticlemetamatcher.cc:756  hparticlemetamatcher.cc:757  hparticlemetamatcher.cc:758  hparticlemetamatcher.cc:759  hparticlemetamatcher.cc:760  hparticlemetamatcher.cc:761  hparticlemetamatcher.cc:762  hparticlemetamatcher.cc:763  hparticlemetamatcher.cc:764  hparticlemetamatcher.cc:765  hparticlemetamatcher.cc:766  hparticlemetamatcher.cc:767  hparticlemetamatcher.cc:768  hparticlemetamatcher.cc:769  hparticlemetamatcher.cc:770  hparticlemetamatcher.cc:771  hparticlemetamatcher.cc:772  hparticlemetamatcher.cc:773  hparticlemetamatcher.cc:774  hparticlemetamatcher.cc:775  hparticlemetamatcher.cc:776  hparticlemetamatcher.cc:777  hparticlemetamatcher.cc:778  hparticlemetamatcher.cc:779  hparticlemetamatcher.cc:780  hparticlemetamatcher.cc:781  hparticlemetamatcher.cc:782  hparticlemetamatcher.cc:783  hparticlemetamatcher.cc:784  hparticlemetamatcher.cc:785  hparticlemetamatcher.cc:786  hparticlemetamatcher.cc:787  hparticlemetamatcher.cc:788  hparticlemetamatcher.cc:789  hparticlemetamatcher.cc:790  hparticlemetamatcher.cc:791  hparticlemetamatcher.cc:792  hparticlemetamatcher.cc:793  hparticlemetamatcher.cc:794  hparticlemetamatcher.cc:795  hparticlemetamatcher.cc:796  hparticlemetamatcher.cc:797  hparticlemetamatcher.cc:798  hparticlemetamatcher.cc:799  hparticlemetamatcher.cc:800  hparticlemetamatcher.cc:801  hparticlemetamatcher.cc:802  hparticlemetamatcher.cc:803  hparticlemetamatcher.cc:804  hparticlemetamatcher.cc:805  hparticlemetamatcher.cc:806  hparticlemetamatcher.cc:807  hparticlemetamatcher.cc:808  hparticlemetamatcher.cc:809  hparticlemetamatcher.cc:810  hparticlemetamatcher.cc:811  hparticlemetamatcher.cc:812  hparticlemetamatcher.cc:813  hparticlemetamatcher.cc:814  hparticlemetamatcher.cc:815  hparticlemetamatcher.cc:816  hparticlemetamatcher.cc:817  hparticlemetamatcher.cc:818  hparticlemetamatcher.cc:819  hparticlemetamatcher.cc:820  hparticlemetamatcher.cc:821  hparticlemetamatcher.cc:822  hparticlemetamatcher.cc:823  hparticlemetamatcher.cc:824  hparticlemetamatcher.cc:825  hparticlemetamatcher.cc:826  hparticlemetamatcher.cc:827  hparticlemetamatcher.cc:828  hparticlemetamatcher.cc:829  hparticlemetamatcher.cc:830  hparticlemetamatcher.cc:831  hparticlemetamatcher.cc:832  hparticlemetamatcher.cc:833  hparticlemetamatcher.cc:834  hparticlemetamatcher.cc:835  hparticlemetamatcher.cc:836  hparticlemetamatcher.cc:837  hparticlemetamatcher.cc:838  hparticlemetamatcher.cc:839  hparticlemetamatcher.cc:840  hparticlemetamatcher.cc:841  hparticlemetamatcher.cc:842  hparticlemetamatcher.cc:843  hparticlemetamatcher.cc:844  hparticlemetamatcher.cc:845  hparticlemetamatcher.cc:846  hparticlemetamatcher.cc:847  hparticlemetamatcher.cc:848  hparticlemetamatcher.cc:849  hparticlemetamatcher.cc:850  hparticlemetamatcher.cc:851  hparticlemetamatcher.cc:852  hparticlemetamatcher.cc:853  hparticlemetamatcher.cc:854  hparticlemetamatcher.cc:855  hparticlemetamatcher.cc:856  hparticlemetamatcher.cc:857  hparticlemetamatcher.cc:858  hparticlemetamatcher.cc:859  hparticlemetamatcher.cc:860  hparticlemetamatcher.cc:861  hparticlemetamatcher.cc:862  hparticlemetamatcher.cc:863  hparticlemetamatcher.cc:864  hparticlemetamatcher.cc:865  hparticlemetamatcher.cc:866  hparticlemetamatcher.cc:867  hparticlemetamatcher.cc:868  hparticlemetamatcher.cc:869  hparticlemetamatcher.cc:870  hparticlemetamatcher.cc:871  hparticlemetamatcher.cc:872  hparticlemetamatcher.cc:873  hparticlemetamatcher.cc:874  hparticlemetamatcher.cc:875  hparticlemetamatcher.cc:876  hparticlemetamatcher.cc:877  hparticlemetamatcher.cc:878  hparticlemetamatcher.cc:879  hparticlemetamatcher.cc:880  hparticlemetamatcher.cc:881  hparticlemetamatcher.cc:882  hparticlemetamatcher.cc:883  hparticlemetamatcher.cc:884  hparticlemetamatcher.cc:885  hparticlemetamatcher.cc:886  hparticlemetamatcher.cc:887  hparticlemetamatcher.cc:888  hparticlemetamatcher.cc:889  hparticlemetamatcher.cc:890  hparticlemetamatcher.cc:891  hparticlemetamatcher.cc:892  hparticlemetamatcher.cc:893  hparticlemetamatcher.cc:894  hparticlemetamatcher.cc:895  hparticlemetamatcher.cc:896  hparticlemetamatcher.cc:897  hparticlemetamatcher.cc:898  hparticlemetamatcher.cc:899  hparticlemetamatcher.cc:900  hparticlemetamatcher.cc:901  hparticlemetamatcher.cc:902  hparticlemetamatcher.cc:903  hparticlemetamatcher.cc:904  hparticlemetamatcher.cc:905  hparticlemetamatcher.cc:906  hparticlemetamatcher.cc:907  hparticlemetamatcher.cc:908  hparticlemetamatcher.cc:909  hparticlemetamatcher.cc:910  hparticlemetamatcher.cc:911  hparticlemetamatcher.cc:912  hparticlemetamatcher.cc:913  hparticlemetamatcher.cc:914  hparticlemetamatcher.cc:915  hparticlemetamatcher.cc:916  hparticlemetamatcher.cc:917  hparticlemetamatcher.cc:918  hparticlemetamatcher.cc:919  hparticlemetamatcher.cc:920  hparticlemetamatcher.cc:921  hparticlemetamatcher.cc:922  hparticlemetamatcher.cc:923  hparticlemetamatcher.cc:924  hparticlemetamatcher.cc:925  hparticlemetamatcher.cc:926  hparticlemetamatcher.cc:927  hparticlemetamatcher.cc:928  hparticlemetamatcher.cc:929  hparticlemetamatcher.cc:930  hparticlemetamatcher.cc:931  hparticlemetamatcher.cc:932  hparticlemetamatcher.cc:933  hparticlemetamatcher.cc:934  hparticlemetamatcher.cc:935  hparticlemetamatcher.cc:936  hparticlemetamatcher.cc:937  hparticlemetamatcher.cc:938  hparticlemetamatcher.cc:939  hparticlemetamatcher.cc:940  hparticlemetamatcher.cc:941  hparticlemetamatcher.cc:942  hparticlemetamatcher.cc:943  hparticlemetamatcher.cc:944  hparticlemetamatcher.cc:945  hparticlemetamatcher.cc:946  hparticlemetamatcher.cc:947  hparticlemetamatcher.cc:948  hparticlemetamatcher.cc:949  hparticlemetamatcher.cc:950  hparticlemetamatcher.cc:951  hparticlemetamatcher.cc:952  hparticlemetamatcher.cc:953  hparticlemetamatcher.cc:954  hparticlemetamatcher.cc:955  hparticlemetamatcher.cc:956  hparticlemetamatcher.cc:957  hparticlemetamatcher.cc:958  hparticlemetamatcher.cc:959  hparticlemetamatcher.cc:960  hparticlemetamatcher.cc:961  hparticlemetamatcher.cc:962  hparticlemetamatcher.cc:963  hparticlemetamatcher.cc:964  hparticlemetamatcher.cc:965  hparticlemetamatcher.cc:966  hparticlemetamatcher.cc:967  hparticlemetamatcher.cc:968  hparticlemetamatcher.cc:969  hparticlemetamatcher.cc:970  hparticlemetamatcher.cc:971  hparticlemetamatcher.cc:972  hparticlemetamatcher.cc:973  hparticlemetamatcher.cc:974  hparticlemetamatcher.cc:975  hparticlemetamatcher.cc:976  hparticlemetamatcher.cc:977  hparticlemetamatcher.cc:978  hparticlemetamatcher.cc:979  hparticlemetamatcher.cc:980  hparticlemetamatcher.cc:981  hparticlemetamatcher.cc:982  hparticlemetamatcher.cc:983  hparticlemetamatcher.cc:984  hparticlemetamatcher.cc:985  hparticlemetamatcher.cc:986  hparticlemetamatcher.cc:987  hparticlemetamatcher.cc:988  hparticlemetamatcher.cc:989  hparticlemetamatcher.cc:990  hparticlemetamatcher.cc:991  hparticlemetamatcher.cc:992  hparticlemetamatcher.cc:993  hparticlemetamatcher.cc:994  hparticlemetamatcher.cc:995  hparticlemetamatcher.cc:996  hparticlemetamatcher.cc:997  hparticlemetamatcher.cc:998  hparticlemetamatcher.cc:999  hparticlemetamatcher.cc:1000  hparticlemetamatcher.cc:1001  hparticlemetamatcher.cc:1002  hparticlemetamatcher.cc:1003  hparticlemetamatcher.cc:1004  hparticlemetamatcher.cc:1005  hparticlemetamatcher.cc:1006  hparticlemetamatcher.cc:1007  hparticlemetamatcher.cc:1008  hparticlemetamatcher.cc:1009  hparticlemetamatcher.cc:1010  hparticlemetamatcher.cc:1011  hparticlemetamatcher.cc:1012  hparticlemetamatcher.cc:1013  hparticlemetamatcher.cc:1014  hparticlemetamatcher.cc:1015  hparticlemetamatcher.cc:1016  hparticlemetamatcher.cc:1017  hparticlemetamatcher.cc:1018  hparticlemetamatcher.cc:1019  hparticlemetamatcher.cc:1020  hparticlemetamatcher.cc:1021  hparticlemetamatcher.cc:1022  hparticlemetamatcher.cc:1023  hparticlemetamatcher.cc:1024  hparticlemetamatcher.cc:1025  hparticlemetamatcher.cc:1026  hparticlemetamatcher.cc:1027  hparticlemetamatcher.cc:1028  hparticlemetamatcher.cc:1029  hparticlemetamatcher.cc:1030  hparticlemetamatcher.cc:1031  hparticlemetamatcher.cc:1032  hparticlemetamatcher.cc:1033  hparticlemetamatcher.cc:1034  hparticlemetamatcher.cc:1035  hparticlemetamatcher.cc:1036  hparticlemetamatcher.cc:1037  hparticlemetamatcher.cc:1038  hparticlemetamatcher.cc:1039  hparticlemetamatcher.cc:1040  hparticlemetamatcher.cc:1041  hparticlemetamatcher.cc:1042  hparticlemetamatcher.cc:1043  hparticlemetamatcher.cc:1044  hparticlemetamatcher.cc:1045  hparticlemetamatcher.cc:1046  hparticlemetamatcher.cc:1047  hparticlemetamatcher.cc:1048  hparticlemetamatcher.cc:1049  hparticlemetamatcher.cc:1050  hparticlemetamatcher.cc:1051  hparticlemetamatcher.cc:1052  hparticlemetamatcher.cc:1053  hparticlemetamatcher.cc:1054  hparticlemetamatcher.cc:1055  hparticlemetamatcher.cc:1056  hparticlemetamatcher.cc:1057  hparticlemetamatcher.cc:1058  hparticlemetamatcher.cc:1059  hparticlemetamatcher.cc:1060  hparticlemetamatcher.cc:1061  hparticlemetamatcher.cc:1062  hparticlemetamatcher.cc:1063  hparticlemetamatcher.cc:1064  hparticlemetamatcher.cc:1065  hparticlemetamatcher.cc:1066  hparticlemetamatcher.cc:1067  hparticlemetamatcher.cc:1068  hparticlemetamatcher.cc:1069  hparticlemetamatcher.cc:1070  hparticlemetamatcher.cc:1071  hparticlemetamatcher.cc:1072  hparticlemetamatcher.cc:1073  hparticlemetamatcher.cc:1074  hparticlemetamatcher.cc:1075  hparticlemetamatcher.cc:1076  hparticlemetamatcher.cc:1077  hparticlemetamatcher.cc:1078  hparticlemetamatcher.cc:1079  hparticlemetamatcher.cc:1080  hparticlemetamatcher.cc:1081  hparticlemetamatcher.cc:1082  hparticlemetamatcher.cc:1083  hparticlemetamatcher.cc:1084  hparticlemetamatcher.cc:1085  hparticlemetamatcher.cc:1086  hparticlemetamatcher.cc:1087  hparticlemetamatcher.cc:1088  hparticlemetamatcher.cc:1089  hparticlemetamatcher.cc:1090  hparticlemetamatcher.cc:1091  hparticlemetamatcher.cc:1092  hparticlemetamatcher.cc:1093  hparticlemetamatcher.cc:1094  hparticlemetamatcher.cc:1095  hparticlemetamatcher.cc:1096  hparticlemetamatcher.cc:1097  hparticlemetamatcher.cc:1098  hparticlemetamatcher.cc:1099  hparticlemetamatcher.cc:1100  hparticlemetamatcher.cc:1101  hparticlemetamatcher.cc:1102  hparticlemetamatcher.cc:1103  hparticlemetamatcher.cc:1104  hparticlemetamatcher.cc:1105  hparticlemetamatcher.cc:1106  hparticlemetamatcher.cc:1107  hparticlemetamatcher.cc:1108  hparticlemetamatcher.cc:1109  hparticlemetamatcher.cc:1110  hparticlemetamatcher.cc:1111  hparticlemetamatcher.cc:1112  hparticlemetamatcher.cc:1113  hparticlemetamatcher.cc:1114  hparticlemetamatcher.cc:1115  hparticlemetamatcher.cc:1116  hparticlemetamatcher.cc:1117  hparticlemetamatcher.cc:1118  hparticlemetamatcher.cc:1119  hparticlemetamatcher.cc:1120  hparticlemetamatcher.cc:1121  hparticlemetamatcher.cc:1122  hparticlemetamatcher.cc:1123  hparticlemetamatcher.cc:1124  hparticlemetamatcher.cc:1125  hparticlemetamatcher.cc:1126  hparticlemetamatcher.cc:1127  hparticlemetamatcher.cc:1128  hparticlemetamatcher.cc:1129  hparticlemetamatcher.cc:1130  hparticlemetamatcher.cc:1131  hparticlemetamatcher.cc:1132  hparticlemetamatcher.cc:1133  hparticlemetamatcher.cc:1134  hparticlemetamatcher.cc:1135  hparticlemetamatcher.cc:1136  hparticlemetamatcher.cc:1137  hparticlemetamatcher.cc:1138  hparticlemetamatcher.cc:1139  hparticlemetamatcher.cc:1140  hparticlemetamatcher.cc:1141  hparticlemetamatcher.cc:1142  hparticlemetamatcher.cc:1143  hparticlemetamatcher.cc:1144  hparticlemetamatcher.cc:1145  hparticlemetamatcher.cc:1146  hparticlemetamatcher.cc:1147  hparticlemetamatcher.cc:1148  hparticlemetamatcher.cc:1149  hparticlemetamatcher.cc:1150  hparticlemetamatcher.cc:1151  hparticlemetamatcher.cc:1152  hparticlemetamatcher.cc:1153  hparticlemetamatcher.cc:1154  hparticlemetamatcher.cc:1155  hparticlemetamatcher.cc:1156  hparticlemetamatcher.cc:1157  hparticlemetamatcher.cc:1158  hparticlemetamatcher.cc:1159  hparticlemetamatcher.cc:1160  hparticlemetamatcher.cc:1161  hparticlemetamatcher.cc:1162  hparticlemetamatcher.cc:1163  hparticlemetamatcher.cc:1164  hparticlemetamatcher.cc:1165  hparticlemetamatcher.cc:1166  hparticlemetamatcher.cc:1167  hparticlemetamatcher.cc:1168  hparticlemetamatcher.cc:1169  hparticlemetamatcher.cc:1170  hparticlemetamatcher.cc:1171  hparticlemetamatcher.cc:1172  hparticlemetamatcher.cc:1173  hparticlemetamatcher.cc:1174  hparticlemetamatcher.cc:1175  hparticlemetamatcher.cc:1176  hparticlemetamatcher.cc:1177  hparticlemetamatcher.cc:1178  hparticlemetamatcher.cc:1179  hparticlemetamatcher.cc:1180  hparticlemetamatcher.cc:1181  hparticlemetamatcher.cc:1182  hparticlemetamatcher.cc:1183  hparticlemetamatcher.cc:1184  hparticlemetamatcher.cc:1185  hparticlemetamatcher.cc:1186  hparticlemetamatcher.cc:1187  hparticlemetamatcher.cc:1188  hparticlemetamatcher.cc:1189  hparticlemetamatcher.cc:1190  hparticlemetamatcher.cc:1191  hparticlemetamatcher.cc:1192  hparticlemetamatcher.cc:1193  hparticlemetamatcher.cc:1194  hparticlemetamatcher.cc:1195  hparticlemetamatcher.cc:1196  hparticlemetamatcher.cc:1197  hparticlemetamatcher.cc:1198  hparticlemetamatcher.cc:1199  hparticlemetamatcher.cc:1200  hparticlemetamatcher.cc:1201  hparticlemetamatcher.cc:1202  hparticlemetamatcher.cc:1203  hparticlemetamatcher.cc:1204  hparticlemetamatcher.cc:1205  hparticlemetamatcher.cc:1206  hparticlemetamatcher.cc:1207  hparticlemetamatcher.cc:1208  hparticlemetamatcher.cc:1209  hparticlemetamatcher.cc:1210  hparticlemetamatcher.cc:1211  hparticlemetamatcher.cc:1212  hparticlemetamatcher.cc:1213  hparticlemetamatcher.cc:1214  hparticlemetamatcher.cc:1215  hparticlemetamatcher.cc:1216  hparticlemetamatcher.cc:1217  hparticlemetamatcher.cc:1218  hparticlemetamatcher.cc:1219  hparticlemetamatcher.cc:1220  hparticlemetamatcher.cc:1221  hparticlemetamatcher.cc:1222  hparticlemetamatcher.cc:1223  hparticlemetamatcher.cc:1224  hparticlemetamatcher.cc:1225  hparticlemetamatcher.cc:1226  hparticlemetamatcher.cc:1227  hparticlemetamatcher.cc:1228  hparticlemetamatcher.cc:1229  hparticlemetamatcher.cc:1230  hparticlemetamatcher.cc:1231  hparticlemetamatcher.cc:1232  hparticlemetamatcher.cc:1233  hparticlemetamatcher.cc:1234  hparticlemetamatcher.cc:1235  hparticlemetamatcher.cc:1236  hparticlemetamatcher.cc:1237  hparticlemetamatcher.cc:1238  hparticlemetamatcher.cc:1239  hparticlemetamatcher.cc:1240  hparticlemetamatcher.cc:1241  hparticlemetamatcher.cc:1242  hparticlemetamatcher.cc:1243  hparticlemetamatcher.cc:1244  hparticlemetamatcher.cc:1245