ROOT logo
#include "hparticlebooker.h"
#include "hades.h"
#include "hcategory.h"
#include "hparticledef.h"
#include "tofdef.h"
#include "rpcdef.h"
#include "showerdef.h"
#include "emcdef.h"
#include "hmdcdef.h"
#include "richdef.h"

#include "hparticlecand.h"
#include "htofhit.h"
#include "htofcluster.h"
#include "hrpccluster.h"
#include "hshowerhit.h"
#include "hemccluster.h"
#include "hmdcseg.h"
#include "hrichhit.h"
#include "hparticlecandsim.h"
#include "htofhitsim.h"
#include "htofclustersim.h"
#include "hrpcclustersim.h"
#include "hshowerhitsim.h"
#include "hemcclustersim.h"
#include "hmdcsegsim.h"
#include "hrichhitsim.h"
#include "hparticletool.h"
#include "hcategorymanager.h"

#include <iostream>
#include <iomanip>

HParticleBooker* gParticleBooker;

ClassImp(HParticleBooker)

//_HADES_CLASS_DESCRIPTION
////////////////////////////////////////////////////////////////////////////////
//
//
// HParticleBooker
//
// Creates maps form each Detctor hit index to the list
// of HParticleCands in the current event who are using
// a given hit
//
//-----------------------------------------------------------------------------
// USAGE:
// #include  "hparticlebooker.h"
// #include  "hcategorymanager.h"
// #include  "hcategory.h"
// #include  "hades.h"
// #include  "hparticlecand.h"
// #include  "hparticledef.h"
// #include  <vector>
// using namespace std;
// ....
//
//
// {
// // setup HLoop etc ....
//
// ....
// //---------------------------------------------
// // HPARTICLEBOOKER SETUP :
// HParticleBooker booker;
// //---------------------------------------------
//
// vector<HParticleCand*> vCandidates;
//
// HCategory* catCand = HCategoryManager::getCategory(catParticleCand);
// if(!catCand) { exit(1); }
//
// for (Int_t i=0; i < entries; i++) {
//    Int_t nbytes =  loop.nextEvent(i);             // get next event. categories will be cleared before
//    if(nbytes <= 0) { cout<<nbytes<<endl; break; } // last event reached
//
//
//    //###########################################################################
//    // HPARTICLEPAIRMAKER ACTION:
//    booker.nextEvent();  // fills all tables
//
//	  if(catCand){
//	      HParticleCand* cand=0;
//	      for(Int_t j=0; j<catCand->getEntries();j++){
//	          cand = HCategoryManager::getObject(cand,catCand,j);
//                  // do something  ....
//             Int_t n =booker.getSameMeta(cand,vCandidates); // fill a list of all cand sharing the same metahit
//
//
//       } // end loop cand
//	  } //catCand
// }
////////////////////////////////////////////////////////////////////////////////

HParticleBooker::HParticleBooker()
{
    gParticleBooker = this;
}

HParticleBooker::~HParticleBooker()
{

    mTofHittoCand  .clear();
    mTofClsttoCand .clear();
    mRpcClsttoCand .clear();
    mShowertoCand  .clear();
    mEmctoCand     .clear();
    mInnerMdctoCand.clear();
    mOuterMdctoCand.clear();
    mRichtoCand    .clear();

    vTofHitInd  .clear();
    vTofClstInd .clear();
    vRpcClstInd .clear();
    vShowerInd  .clear();
    vEmcInd     .clear();
    vInnerMdcInd.clear();
    vOuterMdcInd.clear();
    vRichInd    .clear();

    vTofHit  .clear();
    vTofClst .clear();
    vRpcClst .clear();
    vShower  .clear();
    vEmc     .clear();
    vInnerMdc.clear();
    vOuterMdc.clear();
    vRich    .clear();

    vTofHitAll  .clear();
    vTofClstAll .clear();
    vRpcClstAll .clear();
    vShowerAll  .clear();
    vEmcAll     .clear();
    vInnerMdcAll.clear();
    vOuterMdcAll.clear();
    vRichAll    .clear();

    mTracktoCand      .clear();
    mTracktoAnyCand   .clear();
    mTracktoTofHit    .clear();
    mTracktoTofCluster.clear();
    mTracktoRpcCluster.clear();
    mTracktoShowerHit .clear();
    mTracktoEmcCluster.clear();
    mTracktoInnerMdc  .clear();
    mTracktoOuterMdc  .clear();
    mTracktoRichHit   .clear();

    mTracktoCandInd      .clear();
    mTracktoAnyCandInd   .clear();
    mTracktoTofHitInd    .clear();
    mTracktoTofClusterInd.clear();
    mTracktoRpcClusterInd.clear();
    mTracktoShowerHitInd .clear();
    mTracktoEmcClusterInd.clear();
    mTracktoInnerMdcInd  .clear();
    mTracktoOuterMdcInd  .clear();
    mTracktoRichHitInd   .clear();

    gParticleBooker = NULL;
}



void HParticleBooker::bookHits(HParticleCand* cand1)
{
    // add candidate hits to maps
    HParticleCandSim* candS = dynamic_cast<HParticleCandSim*>(cand1);

    if(cand1->getRichInd() !=-1 ) {
	if(mRichtoCand.find(cand1->getRichInd()) == mRichtoCand.end()){
	    vector<HParticleCand*> v;
	    v.push_back(cand1);
	    mRichtoCand[cand1->getRichInd()] = v;
            vRichInd.push_back(cand1->getRichInd());
	} else {
	    mRichtoCand[cand1->getRichInd()].push_back(cand1);
	}

	if(candS)   // SIM ONLY
	{
	    for(Int_t i = 0; i < 3; i ++){
		Int_t tr = candS->getGeantTrackRich(i);
		if(tr > 0)
		{
		    if(mTracktoRichHitInd.find(tr) == mTracktoRichHitInd.end()){  // new Track
			vector<Int_t> vI;
			vI.push_back(cand1->getRichInd());
			mTracktoRichHitInd[tr] = vI;
			if(richhitCat){
			    HRichHitSim* hitS;
			    hitS = HCategoryManager::getObject(hitS,richhitCat,cand1->getRichInd());
			    vector<HRichHitSim*> v;
			    v.push_back(hitS);
			    mTracktoRichHit[tr] = v;
			}
		    } else {
			if(find(mTracktoRichHitInd[tr].begin(),mTracktoRichHitInd[tr].end(),cand1->getRichInd()) == mTracktoRichHitInd[tr].end()){
			    mTracktoRichHitInd[tr].push_back(cand1->getRichInd());
			    if(richhitCat){
				HRichHitSim* hitS;
				hitS = HCategoryManager::getObject(hitS,richhitCat,cand1->getRichInd());
				mTracktoRichHit[tr].push_back(hitS);
			    }
			}
		    }

                    // map all tracks of all hits to candidates
		    if(mTracktoAnyCandInd.find(tr) == mTracktoAnyCandInd.end()){  // new Track
			vector<Int_t> vI;
			vI.push_back(cand1->getIndex());
			mTracktoAnyCandInd[tr] = vI;
			vector<HParticleCandSim*> v;
			v.push_back(candS);
			mTracktoAnyCand[tr] = v;
		    } else {
			if(find(mTracktoAnyCandInd[tr].begin(),mTracktoAnyCandInd[tr].end(),cand1->getIndex()) == mTracktoAnyCandInd[tr].end()){
			    mTracktoAnyCandInd[tr].push_back(cand1->getIndex());
			    mTracktoAnyCand[tr].push_back(candS);
			}
		    }
		}
	    }
	}
    }

    if(cand1->getInnerSegInd() !=-1 ) {
	if(mInnerMdctoCand.find(cand1->getInnerSegInd()) == mInnerMdctoCand.end()){
	    vector<HParticleCand*> v;
	    v.push_back(cand1);
	    mInnerMdctoCand[cand1->getInnerSegInd()] = v;
            vInnerMdcInd.push_back(cand1->getInnerSegInd());
	    HMdcSeg* hit = HParticleTool::getMdcSeg(cand1->getInnerSegInd());
	    if(hit) vInnerMdc.push_back(hit);
	} else {
	    mInnerMdctoCand[cand1->getInnerSegInd()].push_back(cand1);
	}

	if(candS)  // SIM ONLY
	{
	    for(Int_t i = 0; i < 2; i ++){
		Int_t tr = candS->getGeantTrackInnerMdc(i);
		if(tr > 0)
		{
		    if(mTracktoInnerMdcInd.find(tr) == mTracktoInnerMdcInd.end()){  // new Track
			vector<Int_t> vI;
			vI.push_back(cand1->getInnerSegInd());
			mTracktoInnerMdcInd[tr] = vI;
			if(mdcsegCat){
			    HMdcSegSim* hitS;
			    hitS = HCategoryManager::getObject(hitS,mdcsegCat,cand1->getInnerSegInd());
			    vector<HMdcSegSim*> v;
			    v.push_back(hitS);
			    mTracktoInnerMdc[tr] = v;
			}
		    } else {
			if(find(mTracktoInnerMdcInd[tr].begin(),mTracktoInnerMdcInd[tr].end(),cand1->getInnerSegInd()) == mTracktoInnerMdcInd[tr].end()){
			    mTracktoInnerMdcInd[tr].push_back(cand1->getInnerSegInd());
			    if(mdcsegCat){
				HMdcSegSim* hitS;
				hitS = HCategoryManager::getObject(hitS,mdcsegCat,cand1->getInnerSegInd());
				mTracktoInnerMdc[tr].push_back(hitS);
			    }
			}
		    }

                    // map all tracks of all hits to candidates
		    if(mTracktoAnyCandInd.find(tr) == mTracktoAnyCandInd.end()){    // new Track
			vector<Int_t> vI;
			vI.push_back(cand1->getIndex());
			mTracktoAnyCandInd[tr] = vI;
			vector<HParticleCandSim*> v;
			v.push_back(candS);
			mTracktoAnyCand[tr] = v;
		    } else {
			if(find(mTracktoAnyCandInd[tr].begin(),mTracktoAnyCandInd[tr].end(),cand1->getIndex()) == mTracktoAnyCandInd[tr].end()){
			    mTracktoAnyCandInd[tr].push_back(cand1->getIndex());
			    mTracktoAnyCand[tr].push_back(candS);
			}
		    }
		}
	    }
	}
    }

    if(cand1->getOuterSegInd() !=-1 ) {
	if(mOuterMdctoCand.find(cand1->getOuterSegInd()) == mOuterMdctoCand.end()){
	    vector<HParticleCand*> v;
	    v.push_back(cand1);
	    mOuterMdctoCand[cand1->getOuterSegInd()] = v;
            vOuterMdcInd.push_back(cand1->getOuterSegInd());
	    HMdcSeg* hit = HParticleTool::getMdcSeg(cand1->getOuterSegInd());
	    if(hit) vOuterMdc.push_back(hit);
	} else {
	    mOuterMdctoCand[cand1->getOuterSegInd()].push_back(cand1);
	}

	if(candS)  // SIM ONLY
	{
	    for(Int_t i = 0; i < 2; i ++){
		Int_t tr = candS->getGeantTrackOuterMdc(i);
		if(tr > 0)
		{
		    if(mTracktoOuterMdcInd.find(tr) == mTracktoOuterMdcInd.end()){   // new Track
			vector<Int_t> vI;
			vI.push_back(cand1->getOuterSegInd());
			mTracktoOuterMdcInd[tr] = vI;
			if(mdcsegCat){
			    HMdcSegSim* hitS;
			    hitS = HCategoryManager::getObject(hitS,mdcsegCat,cand1->getOuterSegInd());
			    vector<HMdcSegSim*> v;
			    v.push_back(hitS);
			    mTracktoOuterMdc[tr] = v;
			}
		    } else {
			if(find(mTracktoOuterMdcInd[tr].begin(),mTracktoOuterMdcInd[tr].end(),cand1->getOuterSegInd()) == mTracktoOuterMdcInd[tr].end()){
			    mTracktoOuterMdcInd[tr].push_back(cand1->getOuterSegInd());
			    if(mdcsegCat){
				HMdcSegSim* hitS;
				hitS = HCategoryManager::getObject(hitS,mdcsegCat,cand1->getOuterSegInd());
				mTracktoOuterMdc[tr].push_back(hitS);
			    }
			}
		    }

                    // map all tracks of all hits to candidates
		    if(mTracktoAnyCandInd.find(tr) == mTracktoAnyCandInd.end()){    // new Track
			vector<Int_t> vI;
			vI.push_back(cand1->getIndex());
			mTracktoAnyCandInd[tr] = vI;
			vector<HParticleCandSim*> v;
			v.push_back(candS);
			mTracktoAnyCand[tr] = v;
		    } else {
			if(find(mTracktoAnyCandInd[tr].begin(),mTracktoAnyCandInd[tr].end(),cand1->getIndex()) == mTracktoAnyCandInd[tr].end()){
			    mTracktoAnyCandInd[tr].push_back(cand1->getIndex());
			    mTracktoAnyCand[tr].push_back(candS);
			}
		    }
		}
	    }
	}
    }

    if(cand1->getSystemUsed() != -1){
	Int_t meta = cand1->getMetaHitInd();
        Int_t showerInd = cand1->getShowerInd();
        Int_t emcInd    = cand1->getEmcInd();
	if(cand1->isTofHitUsed()){
	    if(mTofHittoCand.find(meta) == mTofHittoCand.end()){
		vector<HParticleCand*> v;
		v.push_back(cand1);
		mTofHittoCand[meta] = v;
		vTofHitInd.push_back(cand1->getTofHitInd());

		HTofHit* hit = HParticleTool::getTofHit(cand1->getTofHitInd());
		if(hit) vTofHit.push_back(hit);
	    } else {
		mTofHittoCand[meta].push_back(cand1);
	    }

	    if(candS) // SIM ONLY
	    {
		for(Int_t i = 0; i < 4; i ++){
		    Int_t tr = candS->getGeantTrackMeta(i);
		    if(tr > 0)
		    {
			if(mTracktoTofHitInd.find(tr) == mTracktoTofHitInd.end()){     // new Track
			    vector<Int_t> vI;
			    vI.push_back(meta);
			    mTracktoTofHitInd[tr] = vI;
			    if(tofhitCat){
				HTofHitSim* hitS;
				hitS = HCategoryManager::getObject(hitS,tofhitCat,meta);
				vector<HTofHitSim*> v;
				v.push_back(hitS);
				mTracktoTofHit[tr] = v;
			    }
			} else {
			    if(find(mTracktoTofHitInd[tr].begin(),mTracktoTofHitInd[tr].end(),meta) == mTracktoTofHitInd[tr].end()){
				mTracktoTofHitInd[tr].push_back(meta);
				if(tofhitCat){
				    HTofHitSim* hitS;
				    hitS = HCategoryManager::getObject(hitS,tofhitCat,meta);
				    mTracktoTofHit[tr].push_back(hitS);
				}
			    }
			}

			// map all tracks of all hits to candidates
			if(mTracktoAnyCandInd.find(tr) == mTracktoAnyCandInd.end()){   // new Track
			    vector<Int_t> vI;
			    vI.push_back(cand1->getIndex());
			    mTracktoAnyCandInd[tr] = vI;
			    vector<HParticleCandSim*> v;
			    v.push_back(candS);
			    mTracktoAnyCand[tr] = v;
			} else {
			    if(find(mTracktoAnyCandInd[tr].begin(),mTracktoAnyCandInd[tr].end(),cand1->getIndex()) == mTracktoAnyCandInd[tr].end()){
				mTracktoAnyCandInd[tr].push_back(cand1->getIndex());
				mTracktoAnyCand[tr].push_back(candS);
			    }
			}
		    }
		}
	    }

	} else if (cand1->isTofClstUsed()){
	    if(mTofClsttoCand.find(meta) == mTofClsttoCand.end()){
		vector<HParticleCand*> v;
		v.push_back(cand1);
		mTofClsttoCand[meta] = v;
		vTofClstInd.push_back(cand1->getTofClstInd());
		HTofCluster* hit = HParticleTool::getTofCluster(cand1->getTofClstInd());
		if(hit) vTofClst.push_back(hit);
	    } else {
		mTofClsttoCand[meta].push_back(cand1);
	    }

	    if(candS)  // SIM ONLY
	    {
		for(Int_t i = 0; i < 4; i ++){
		    Int_t tr = candS->getGeantTrackMeta(i);
		    if(tr > 0)
		    {
			if(mTracktoTofClusterInd.find(tr) == mTracktoTofClusterInd.end()){  // new Track
			    vector<Int_t> vI;
			    vI.push_back(meta);
			    mTracktoTofClusterInd[tr] = vI;
			    if(tofclstCat){
				HTofClusterSim* hitS;
				hitS = HCategoryManager::getObject(hitS,tofclstCat,meta);
				vector<HTofClusterSim*> v;
				v.push_back(hitS);
				mTracktoTofCluster[tr] = v;
			    }
			} else {
			    if(find(mTracktoTofClusterInd[tr].begin(),mTracktoTofClusterInd[tr].end(),meta) == mTracktoTofClusterInd[tr].end()){
				mTracktoTofClusterInd[tr].push_back(meta);
				if(tofclstCat){
				    HTofClusterSim* hitS;
				    hitS = HCategoryManager::getObject(hitS,tofclstCat,meta);
				    mTracktoTofCluster[tr].push_back(hitS);
				}
			    }
			}

			// map all tracks of all hits to candidates
			if(mTracktoAnyCandInd.find(tr) == mTracktoAnyCandInd.end()){        // new Track
			    vector<Int_t> vI;
			    vI.push_back(cand1->getIndex());
			    mTracktoAnyCandInd[tr] = vI;
			    vector<HParticleCandSim*> v;
			    v.push_back(candS);
			    mTracktoAnyCand[tr] = v;
			} else {
			    if(find(mTracktoAnyCandInd[tr].begin(),mTracktoAnyCandInd[tr].end(),cand1->getIndex()) == mTracktoAnyCandInd[tr].end()){
				mTracktoAnyCandInd[tr].push_back(cand1->getIndex());
				mTracktoAnyCand[tr].push_back(candS);
			    }
			}
		    }
		}
	    }
	} else if (cand1->isRpcClstUsed()){
	    if(mRpcClsttoCand.find(meta) == mRpcClsttoCand.end()){
		vector<HParticleCand*> v;
		v.push_back(cand1);
		mRpcClsttoCand[meta] = v;
		vRpcClstInd.push_back(cand1->getRpcInd());
		HRpcCluster* hit = HParticleTool::getRpcCluster(cand1->getRpcInd());
		if(hit) vRpcClst.push_back(hit);
	    } else {
		mRpcClsttoCand[meta].push_back(cand1);
	    }

	    if(candS)  // SIM ONLY
	    {
		for(Int_t i = 0; i < 4; i ++){
		    Int_t tr = candS->getGeantTrackMeta(i);
		    if(tr > 0)
		    {
			if(mTracktoRpcClusterInd.find(tr) == mTracktoRpcClusterInd.end()){   // new Track
			    vector<Int_t> vI;
			    vI.push_back(meta);
			    mTracktoRpcClusterInd[tr] = vI;
			    if(rpcclstCat){
				HRpcClusterSim* hitS;
				hitS = HCategoryManager::getObject(hitS,rpcclstCat,meta);
				vector<HRpcClusterSim*> v;
				v.push_back(hitS);
				mTracktoRpcCluster[tr] = v;
			    }
			} else {
			    if(find(mTracktoRpcClusterInd[tr].begin(),mTracktoRpcClusterInd[tr].end(),meta) == mTracktoRpcClusterInd[tr].end()){
				mTracktoRpcClusterInd[tr].push_back(meta);
				if(rpcclstCat){
				    HRpcClusterSim* hitS;
				    hitS = HCategoryManager::getObject(hitS,rpcclstCat,meta);
				    mTracktoRpcCluster[tr].push_back(hitS);
				}
			    }
			}

			// map all tracks of all hits to candidates
			if(mTracktoAnyCandInd.find(tr) == mTracktoAnyCandInd.end()){        // new Track
			    vector<Int_t> vI;
			    vI.push_back(cand1->getIndex());
			    mTracktoAnyCandInd[tr] = vI;
			    vector<HParticleCandSim*> v;
			    v.push_back(candS);
			    mTracktoAnyCand[tr] = v;
			} else {
			    if(find(mTracktoAnyCandInd[tr].begin(),mTracktoAnyCandInd[tr].end(),cand1->getIndex()) == mTracktoAnyCandInd[tr].end()){
				mTracktoAnyCandInd[tr].push_back(cand1->getIndex());
				mTracktoAnyCand[tr].push_back(candS);
			    }
			}
		    }
		}
	    }
	}

	if(cand1->isEmc())
	{
	    if (emcInd!=-1){
		if(mEmctoCand.find(emcInd) == mEmctoCand.end()){
		    vector<HParticleCand*> v;
		    v.push_back(cand1);
		    mEmctoCand[emcInd] = v;
		    vEmcInd.push_back(emcInd);
		    HEmcCluster* hit = HParticleTool::getEmcCluster(emcInd);
		    if(hit) vEmc.push_back(hit);
		} else {
		    mEmctoCand[emcInd].push_back(cand1);
		}

		if(candS)  // SIM ONLY
		{
		    for(Int_t i = 0; i < 4; i ++){
			Int_t tr = candS->getGeantTrackMeta(i);
			if(tr > 0)
			{
			    if(mTracktoEmcClusterInd.find(tr) == mTracktoEmcClusterInd.end()){    // new Track
				vector<Int_t> vI;
				vI.push_back(meta);
				mTracktoEmcClusterInd[tr] = vI;
				if(emcclusterCat){
				    HEmcClusterSim* hitS;
				    hitS = HCategoryManager::getObject(hitS,emcclusterCat,meta);
				    vector<HEmcClusterSim*> v;
				    v.push_back(hitS);
				    mTracktoEmcCluster[tr] = v;
				}
			    } else {
				if(find(mTracktoEmcClusterInd[tr].begin(),mTracktoEmcClusterInd[tr].end(),meta) == mTracktoEmcClusterInd[tr].end()){
				    mTracktoEmcClusterInd[tr].push_back(meta);
				    if(emcclusterCat){
					HEmcClusterSim* hitS;
					hitS = HCategoryManager::getObject(hitS,emcclusterCat,meta);
					mTracktoEmcCluster[tr].push_back(hitS);
				    }
				}
			    }

			    // map all tracks of all hits to candidates
			    if(mTracktoAnyCandInd.find(tr) == mTracktoAnyCandInd.end()){      // new Track
				vector<Int_t> vI;
				vI.push_back(cand1->getIndex());
				mTracktoAnyCandInd[tr] = vI;
				vector<HParticleCandSim*> v;
				v.push_back(candS);
				mTracktoAnyCand[tr] = v;
			    } else {
				if(find(mTracktoAnyCandInd[tr].begin(),mTracktoAnyCandInd[tr].end(),cand1->getIndex()) == mTracktoAnyCandInd[tr].end()){
				    mTracktoAnyCandInd[tr].push_back(cand1->getIndex());
				    mTracktoAnyCand[tr].push_back(candS);
				}
			    }
			}
		    }
		}
	    }

	} else {
	    if (showerInd!=-1){
		if(mShowertoCand.find(showerInd) == mShowertoCand.end()){
		    vector<HParticleCand*> v;
		    v.push_back(cand1);
		    mShowertoCand[showerInd] = v;
		    vShowerInd.push_back(showerInd);
		    HShowerHit* hit = HParticleTool::getShowerHit(showerInd);
		    if(hit) vShower.push_back(hit);
		} else {
		    mShowertoCand[showerInd].push_back(cand1);
		}

		if(candS)  // SIM ONLY
		{
		    for(Int_t i = 0; i < 4; i ++){
			Int_t tr = candS->getGeantTrackMeta(i);
			if(tr > 0)
			{
			    if(mTracktoShowerHitInd.find(tr) == mTracktoShowerHitInd.end()){    // new Track
				vector<Int_t> vI;
				vI.push_back(meta);
				mTracktoShowerHitInd[tr] = vI;
				if(showerhitCat){
				    HShowerHitSim* hitS;
				    hitS = HCategoryManager::getObject(hitS,showerhitCat,meta);
				    vector<HShowerHitSim*> v;
				    v.push_back(hitS);
				    mTracktoShowerHit[tr] = v;
				}
			    } else {
				if(find(mTracktoShowerHitInd[tr].begin(),mTracktoShowerHitInd[tr].end(),meta) == mTracktoShowerHitInd[tr].end()){
				    mTracktoShowerHitInd[tr].push_back(meta);
				    if(showerhitCat){
					HShowerHitSim* hitS;
					hitS = HCategoryManager::getObject(hitS,showerhitCat,meta);
					mTracktoShowerHit[tr].push_back(hitS);
				    }
				}
			    }

			    // map all tracks of all hits to candidates
			    if(mTracktoAnyCandInd.find(tr) == mTracktoAnyCandInd.end()){      // new Track
				vector<Int_t> vI;
				vI.push_back(cand1->getIndex());
				mTracktoAnyCandInd[tr] = vI;
				vector<HParticleCandSim*> v;
				v.push_back(candS);
				mTracktoAnyCand[tr] = v;
			    } else {
				if(find(mTracktoAnyCandInd[tr].begin(),mTracktoAnyCandInd[tr].end(),cand1->getIndex()) == mTracktoAnyCandInd[tr].end()){
				    mTracktoAnyCandInd[tr].push_back(cand1->getIndex());
				    mTracktoAnyCand[tr].push_back(candS);
				}
			    }
			}
		    }
		}
	    }

	}
    }


    // map global track to candidates
    if(candS)  // SIM ONLY
    {
	Int_t tr = candS->getGeantTrack();
	if(tr > 0)
	{
	    if(mTracktoCandInd.find(tr) == mTracktoCandInd.end()){       // new Track
		vector<Int_t> vI;
		vI.push_back(cand1->getIndex());
		mTracktoCandInd[tr] = vI;
		vector<HParticleCandSim*> v;
		v.push_back(candS);
		mTracktoCand[tr] = v;
	    } else {
		if(find(mTracktoCandInd[tr].begin(),mTracktoCandInd[tr].end(),cand1->getIndex()) == mTracktoCandInd[tr].end()){
		    mTracktoCandInd[tr].push_back(cand1->getIndex());
		    mTracktoCand[tr].push_back(candS);
		}
	    }
	}
    }

}

void HParticleBooker::nextEvent()
{
    mTofHittoCand  .clear();
    mTofClsttoCand .clear();
    mRpcClsttoCand .clear();
    mShowertoCand  .clear();
    mEmctoCand     .clear();
    mInnerMdctoCand.clear();
    mOuterMdctoCand.clear();
    mRichtoCand    .clear();

    vTofHitInd  .clear();
    vTofClstInd .clear();
    vRpcClstInd .clear();
    vShowerInd  .clear();
    vEmcInd     .clear();
    vInnerMdcInd.clear();
    vOuterMdcInd.clear();
    vRichInd    .clear();

    vTofHit  .clear();
    vTofClst .clear();
    vRpcClst .clear();
    vShower  .clear();
    vEmc     .clear();
    vInnerMdc.clear();
    vOuterMdc.clear();
    vRich    .clear();

    vTofHitAll  .clear();
    vTofClstAll .clear();
    vRpcClstAll .clear();
    vShowerAll  .clear();
    vEmcAll     .clear();
    vInnerMdcAll.clear();
    vOuterMdcAll.clear();
    vRichAll    .clear();

    mTracktoCand      .clear();
    mTracktoAnyCand   .clear();
    mTracktoTofHit    .clear();
    mTracktoTofCluster.clear();
    mTracktoRpcCluster.clear();
    mTracktoShowerHit .clear();
    mTracktoEmcCluster.clear();
    mTracktoInnerMdc  .clear();
    mTracktoOuterMdc  .clear();
    mTracktoRichHit   .clear();

    mTracktoCandInd      .clear();
    mTracktoAnyCandInd   .clear();
    mTracktoTofHitInd    .clear();
    mTracktoTofClusterInd.clear();
    mTracktoRpcClusterInd.clear();
    mTracktoShowerHitInd .clear();
    mTracktoEmcClusterInd.clear();
    mTracktoInnerMdcInd  .clear();
    mTracktoOuterMdcInd  .clear();
    mTracktoRichHitInd   .clear();


    tofhitCat = HCategoryManager::getCategory(catTofHit,2);
    if(tofhitCat)
    {
	Int_t size = tofhitCat->getEntries();
	HTofHit* hit = 0;
	HTofHitSim* hitS = 0;
	for(Int_t j = 0; j < size; j++) {
	    hit = HCategoryManager::getObject(hit,tofhitCat,j);
	    if(hit)
	    {
		vTofHitAll.push_back(hit);
		hitS = dynamic_cast<HTofHitSim*>(hit);
		if(hitS)
		{
		    Int_t tr = hitS->getNTrack1();
		    if(tr > 0){
			if(mTracktoTofHit.find(tr) == mTracktoTofHit.end()){
			    vector<HTofHitSim*> v;
			    vector<Int_t> vI;
			    v.push_back(hitS);
			    vI.push_back(j);
			    mTracktoTofHit[tr] = v;
			    mTracktoTofHitInd[tr] = vI;
			} else {
			    if(find(mTracktoTofHit[tr].begin(),mTracktoTofHit[tr].end(),hitS) == mTracktoTofHit[tr].end()){
				mTracktoTofHit[tr].push_back(hitS);
				mTracktoTofHitInd[tr].push_back(j);
			    }
			}
		    }
		    tr = hitS->getNTrack2();
		    if(tr > 0){
			if(mTracktoTofHit.find(tr) == mTracktoTofHit.end()){
			    vector<HTofHitSim*> v;
			    vector<Int_t> vI;
			    v.push_back(hitS);
			    vI.push_back(j);
			    mTracktoTofHit[tr] = v;
			    mTracktoTofHitInd[tr] = vI;
			} else {
			    if(find(mTracktoTofHit[tr].begin(),mTracktoTofHit[tr].end(),hitS) == mTracktoTofHit[tr].end()){
				mTracktoTofHit[tr].push_back(hitS);
				mTracktoTofHitInd[tr].push_back(j);
			    }
			}
		    }
		}
	    }
	}
    }

    tofclstCat = HCategoryManager::getCategory(catTofCluster,2);
    if(tofclstCat)
    {
	Int_t size = tofclstCat->getEntries();
	HTofCluster* hit = 0;
	HTofClusterSim* hitS = 0;
	for(Int_t j = 0; j < size; j++) {
	    hit = HCategoryManager::getObject(hit,tofclstCat,j);
	    if(hit)
	    {
		vTofClstAll.push_back(hit);
		hitS = dynamic_cast<HTofClusterSim*>(hit);
		if(hitS)
		{

		    for(Int_t i = 0; i < hit->getClusterSize()&&i<3; i ++)
		    {

			Int_t tr = hitS->getNTrack1(i);
			if(tr > 0){
			    if(mTracktoTofCluster.find(tr) == mTracktoTofCluster.end()){
				vector<HTofClusterSim*> v;
				vector<Int_t> vI;
				v.push_back(hitS);
				vI.push_back(j);
				mTracktoTofCluster[tr] = v;
				mTracktoTofClusterInd[tr] = vI;
			    } else {
				if(find(mTracktoTofCluster[tr].begin(),mTracktoTofCluster[tr].end(),hitS) == mTracktoTofCluster[tr].end()){
				    mTracktoTofCluster[tr].push_back(hitS);
				    mTracktoTofClusterInd[tr].push_back(j);
				}
			    }
			}
			tr = hitS->getNTrack2(i);
			if(tr > 0){
			    if(mTracktoTofCluster.find(tr) == mTracktoTofCluster.end()){
				vector<HTofClusterSim*> v;
				vector<Int_t> vI;
				v.push_back(hitS);
				vI.push_back(j);
				mTracktoTofCluster[tr] = v;
				mTracktoTofClusterInd[tr] = vI;
			    } else {
				if(find(mTracktoTofCluster[tr].begin(),mTracktoTofCluster[tr].end(),hitS) == mTracktoTofCluster[tr].end()){
				    mTracktoTofCluster[tr].push_back(hitS);
				    mTracktoTofClusterInd[tr].push_back(j);
				}
			    }
			}
		    }
		}
	    }
	}
    }

    rpcclstCat = HCategoryManager::getCategory(catRpcCluster,2);
    if(rpcclstCat)
    {
	Int_t size = rpcclstCat->getEntries();
	HRpcCluster* hit = 0;
	HRpcClusterSim* hitS = 0;
	for(Int_t j = 0; j < size; j++) {
	    hit = HCategoryManager::getObject(hit,rpcclstCat,j);
	    if(hit)
	    {
		vRpcClstAll.push_back(hit);
		hitS = dynamic_cast<HRpcClusterSim*>(hit);
		if(hitS)
		{
		    Int_t TrackList[4];
		    hitS->getTrackList(TrackList);
		    for(Int_t i = 0;i < 4; i ++)
		    {
			Int_t tr = TrackList[i];
			if(tr > 0){
			    if(mTracktoRpcCluster.find(tr) == mTracktoRpcCluster.end()){
				vector<HRpcClusterSim*> v;
				vector<Int_t> vI;
				v.push_back(hitS);
				vI.push_back(j);
				mTracktoRpcCluster[tr] = v;
				mTracktoRpcClusterInd[tr] = vI;
			    } else {
				if(find(mTracktoRpcCluster[tr].begin(),mTracktoRpcCluster[tr].end(),hitS) == mTracktoRpcCluster[tr].end()){
				    mTracktoRpcCluster[tr].push_back(hitS);
				    mTracktoRpcClusterInd[tr].push_back(j);
				}
			    }
			}
		    }
		}
	    }
	}
    }

    showerhitCat = HCategoryManager::getCategory(catShowerHit,2);
    if(showerhitCat)
    {
	Int_t size = showerhitCat->getEntries();
	HShowerHit* hit = 0;
	HShowerHitSim* hitS = 0;
	for(Int_t j = 0; j < size; j++) {
	    hit = HCategoryManager::getObject(hit,showerhitCat,j);
	    if(hit)
	    {
		vShowerAll.push_back(hit);
		hitS = dynamic_cast<HShowerHitSim*>(hit);
		if(hitS)
		{
		    for(Int_t i = 0; i <hitS->getNTracks() ; i ++)
		    {
			Int_t tr = hitS->getTrack(i);
			if(tr > 0){
			    if(mTracktoShowerHit.find(tr) == mTracktoShowerHit.end()){
				vector<HShowerHitSim*> v;
				vector<Int_t> vI;
				v.push_back(hitS);
				vI.push_back(j);
				mTracktoShowerHit[tr] = v;
				mTracktoShowerHitInd[tr] = vI;
			    } else {
				if(find(mTracktoShowerHit[tr].begin(),mTracktoShowerHit[tr].end(),hitS) == mTracktoShowerHit[tr].end()){
				    mTracktoShowerHit[tr].push_back(hitS);
				    mTracktoShowerHitInd[tr].push_back(j);
				}
			    }
			}
		    }
		}
	    }
	}
    }

    emcclusterCat = HCategoryManager::getCategory(catEmcCluster,2);
    if(emcclusterCat)
    {
	Int_t size = emcclusterCat->getEntries();
	HEmcCluster* hit = 0;
	HEmcClusterSim* hitS = 0;
	for(Int_t j = 0; j < size; j++) {
	    hit = HCategoryManager::getObject(hit,emcclusterCat,j);
	    if(hit)
	    {
		vEmcAll.push_back(hit);
		hitS = dynamic_cast<HEmcClusterSim*>(hit);
		if(hitS)
		{
		    for(Int_t i = 0; i <hitS->getNTracks() ; i ++)
		    {
			Int_t tr = hitS->getTrack(i);
			if(tr > 0){
			    if(mTracktoEmcCluster.find(tr) == mTracktoEmcCluster.end()){
				vector<HEmcClusterSim*> v;
				vector<Int_t> vI;
				v.push_back(hitS);
				vI.push_back(j);
				mTracktoEmcCluster[tr] = v;
				mTracktoEmcClusterInd[tr] = vI;
			    } else {
				if(find(mTracktoEmcCluster[tr].begin(),mTracktoEmcCluster[tr].end(),hitS) == mTracktoEmcCluster[tr].end()){
				    mTracktoEmcCluster[tr].push_back(hitS);
				    mTracktoEmcClusterInd[tr].push_back(j);
				}
			    }
			}
		    }
		}
	    }
	}
    }

    mdcsegCat = HCategoryManager::getCategory(catMdcSeg,2);
    if(mdcsegCat)
    {
	Int_t size = mdcsegCat->getEntries();
	HMdcSeg* hit = 0;
	HMdcSegSim* hitS = 0;
	for(Int_t j = 0; j < size; j++) {
	    hit = HCategoryManager::getObject(hit,mdcsegCat,j);
	    if(hit)
	    {

		if(hit->getIOSeg() == 0)
		{
		    vInnerMdcAll.push_back(hit);
		    hitS = dynamic_cast<HMdcSegSim*>(hit);
		    if(hitS)
		    {
			for(Int_t i = 0; i <hitS->getNTracks() ; i ++)
			{
			    Int_t tr = hitS->getTrack(i);
			    if(tr > 0){
				if(mTracktoInnerMdc.find(tr) == mTracktoInnerMdc.end()){
				    vector<HMdcSegSim*> v;
				    vector<Int_t> vI;
				    v.push_back(hitS);
				    vI.push_back(j);
				    mTracktoInnerMdc[tr] = v;
				    mTracktoInnerMdcInd[tr] = vI;
				} else {
				    if(find(mTracktoInnerMdc[tr].begin(),mTracktoInnerMdc[tr].end(),hitS) == mTracktoInnerMdc[tr].end()){
					mTracktoInnerMdc[tr].push_back(hitS);
					mTracktoInnerMdcInd[tr].push_back(j);
				    }
				}
			    }
			}
		    }
		}
		if(hit->getIOSeg() == 1) {
		    vOuterMdcAll.push_back(hit);
		    hitS = dynamic_cast<HMdcSegSim*>(hit);
		    if(hitS)
		    {
			for(Int_t i = 0; i <hitS->getNTracks() ; i ++)
			{
			    Int_t tr = hitS->getTrack(i);
			    if(tr > 0){
				if(mTracktoOuterMdc.find(tr) == mTracktoOuterMdc.end()){
				    vector<HMdcSegSim*> v;
				    vector<Int_t> vI;
				    v.push_back(hitS);
				    vI.push_back(j);
				    mTracktoOuterMdc[tr] = v;
				    mTracktoOuterMdcInd[tr] = vI;
				} else {
				    if(find(mTracktoOuterMdc[tr].begin(),mTracktoOuterMdc[tr].end(),hitS) == mTracktoOuterMdc[tr].end()){
					mTracktoOuterMdc[tr].push_back(hitS);
					mTracktoOuterMdcInd[tr].push_back(j);
				    }
				}
			    }
			}
		    }
		}
	    }
	}
    }

    richhitCat = HCategoryManager::getCategory(catRichHit,2);
    if(richhitCat)
    {
	Int_t size = richhitCat->getEntries();
	HRichHit* hit = 0;
	HRichHitSim* hitS = 0;
	for(Int_t j = 0; j < size; j++) {
	    hit = HCategoryManager::getObject(hit,richhitCat,j);
	    if(hit)
	    {
		vRichAll.push_back(hit);
		hitS = dynamic_cast<HRichHitSim*>(hit);
		if(hitS)
		{
		    for(Int_t i = 0; i < 3 ; i ++)
		    {
			Int_t tr = 0;
			if     (i==0)tr = hitS->track1;
			else if(i==1)tr = hitS->track2;
			else         tr = hitS->track3;

			if(tr > 0){
			    if(mTracktoRichHit.find(tr) == mTracktoRichHit.end()){
				vector<HRichHitSim*> v;
				vector<Int_t> vI;
				v.push_back(hitS);
				vI.push_back(j);
				mTracktoRichHit[tr] = v;
				mTracktoRichHitInd[tr] = vI;
			    } else {
				if(find(mTracktoRichHit[tr].begin(),mTracktoRichHit[tr].end(),hitS) == mTracktoRichHit[tr].end()){
				    mTracktoRichHit[tr].push_back(hitS);
				    mTracktoRichHitInd[tr].push_back(j);
				}
			    }
			}
		    }
		}
	    }
	}
    }

    candCat = (HCategory*) gHades->getCurrentEvent()->getCategory(catParticleCand);
    if(candCat){
	UInt_t n = candCat->getEntries();
	HParticleCand* cand1 = 0 ;
	//-------------------------------------------------------
	// fill lists for reference and others
	for(UInt_t i=0; i < n; i++){
	    cand1 = HCategoryManager::getObject(cand1,candCat,i);

	    //-------------------------------------------------------
	    //  book the hits -> candiate lists
	    bookHits(cand1);
	    //-------------------------------------------------------
	}
    }
}


Int_t HParticleBooker::getCandidatesForTofHit(Int_t index,vector<HParticleCand*>& hits)
{
    // fills vector of candidates using this hit index. returns the size of the vector
    hits.clear();
    map<Int_t,vector<HParticleCand*> > :: iterator it;
    it = mTofHittoCand.find(index);
    if(it!=mTofHittoCand.end()){
	hits.assign(it->second.begin(),it->second.end());
        return hits.size();
    } else {
	return 0;
    }
}

Int_t HParticleBooker::getCandidatesForTofCluster(Int_t index,vector<HParticleCand*>& hits)
{
    // fills vector of candidates using this hit index. returns the size of the vector
    hits.clear();
    map<Int_t,vector<HParticleCand*> > :: iterator it;
    it = mTofClsttoCand.find(index);
    if(it!=mTofClsttoCand.end()){
	hits.assign(it->second.begin(),it->second.end());
	return hits.size();
    } else {
	return 0;
    }
}

Int_t HParticleBooker::getCandidatesForRpcCluster(Int_t index,vector<HParticleCand*>& hits)
{
    // fills vector of candidates using this hit index. returns the size of the vector
    hits.clear();
    map<Int_t,vector<HParticleCand*> > :: iterator it;
    it = mRpcClsttoCand.find(index);
    if(it!=mRpcClsttoCand.end()){
	hits.assign(it->second.begin(),it->second.end());
	return hits.size();
    } else {
	return 0;
    }
}

Int_t HParticleBooker::getCandidatesForShower(Int_t index,vector<HParticleCand*>& hits)
{
    // fills vector of candidates using this hit index. returns the size of the vector
    hits.clear();
    map<Int_t,vector<HParticleCand*> > :: iterator it;
    it = mShowertoCand.find(index);
    if(it!=mShowertoCand.end()){
	hits.assign(it->second.begin(),it->second.end());
	return hits.size();
    } else {
	return 0;
    }
}

Int_t HParticleBooker::getCandidatesForEmc(Int_t index,vector<HParticleCand*>& hits)
{
    // fills vector of candidates using this hit index. returns the size of the vector
    hits.clear();
    map<Int_t,vector<HParticleCand*> > :: iterator it;
    it = mEmctoCand.find(index);
    if(it!=mEmctoCand.end()){
	hits.assign(it->second.begin(),it->second.end());
	return hits.size();
    } else {
	return 0;
    }
}

Int_t HParticleBooker::getCandidatesForInnerMdc(Int_t index,vector<HParticleCand*>& hits)
{
    // fills vector of candidates using this hit index. returns the size of the vector
    hits.clear();
    map<Int_t,vector<HParticleCand*> > :: iterator it;
    it = mInnerMdctoCand.find(index);
    if(it!=mInnerMdctoCand.end()){
	hits.assign(it->second.begin(),it->second.end());
	return hits.size();
    } else {
	return 0;
    }
}

Int_t HParticleBooker::getCandidatesForOuterMdc(Int_t index,vector<HParticleCand*>& hits)
{
    // fills vector of candidates using this hit index. returns the size of the vector
    hits.clear();
    map<Int_t,vector<HParticleCand*> > :: iterator it;
    it = mOuterMdctoCand.find(index);
    if(it!=mOuterMdctoCand.end()){
	hits.assign(it->second.begin(),it->second.end());
	return hits.size();
    } else {
	return 0;
    }
}

Int_t HParticleBooker::getCandidatesForRich(Int_t index,vector<HParticleCand*>& hits)
{
    // fills vector of candidates using this hit index. returns the size of the vector
    hits.clear();
    map<Int_t,vector<HParticleCand*> > :: iterator it;
    it = mRichtoCand.find(index);
    if(it!=mRichtoCand.end()){
	hits.assign(it->second.begin(),it->second.end());
	return hits.size();
    } else {
	return 0;
    }
}

Int_t HParticleBooker::getCandidatesAnyDetectorForTrack     (Int_t track,vector<HParticleCandSim*>& cands)
{
    // fills vector of candidates using this track in any detector hit.
    // returns the size of the vector
    cands.clear();
    map<Int_t,vector<HParticleCandSim*> > :: iterator it;
    it = mTracktoAnyCand.find(track);
    if(it!=mTracktoAnyCand.end()){
	cands.assign(it->second.begin(),it->second.end());
	return cands.size();
    } else {
	return 0;
    }
}

Int_t HParticleBooker::getCandidatesForTrack     (Int_t track,vector<HParticleCandSim*>& cands)
{
    // fills vector of candidates using this global track. returns the size of the vector
    cands.clear();
    map<Int_t,vector<HParticleCandSim*> > :: iterator it;
    it = mTracktoCand.find(track);
    if(it!=mTracktoCand.end()){
	cands.assign(it->second.begin(),it->second.end());
	return cands.size();
    } else {
	return 0;
    }
}


Int_t HParticleBooker::getTofHitForTrack         (Int_t track,vector<HTofHitSim*>&       cands)
{
    // fills vector of hit using this track. returns the size of the vector
    cands.clear();
    map<Int_t,vector<HTofHitSim*> > :: iterator it;
    it = mTracktoTofHit.find(track);
    if(it!=mTracktoTofHit.end()){
	cands.assign(it->second.begin(),it->second.end());
	return cands.size();
    } else {
	return 0;
    }
}

Int_t HParticleBooker::getTofClusterForTrack     (Int_t track,vector<HTofClusterSim*>&   cands)
{
    // fills vector of hit using this track. returns the size of the vector
    cands.clear();
    map<Int_t,vector<HTofClusterSim*> > :: iterator it;
    it = mTracktoTofCluster.find(track);
    if(it!=mTracktoTofCluster.end()){
	cands.assign(it->second.begin(),it->second.end());
	return cands.size();
    } else {
	return 0;
    }
}

Int_t HParticleBooker::getRpcClusterForTrack     (Int_t track,vector<HRpcClusterSim*>&   cands)
{
    // fills vector of hit using this track. returns the size of the vector
    cands.clear();
    map<Int_t,vector<HRpcClusterSim*> > :: iterator it;
    it = mTracktoRpcCluster.find(track);
    if(it!=mTracktoRpcCluster.end()){
	cands.assign(it->second.begin(),it->second.end());
	return cands.size();
    } else {
	return 0;
    }
}

Int_t HParticleBooker::getShowerHitForTrack      (Int_t track,vector<HShowerHitSim*>&    cands)
{
    // fills vector of hit using this track. returns the size of the vector
    cands.clear();
    map<Int_t,vector<HShowerHitSim*> > :: iterator it;
    it = mTracktoShowerHit.find(track);
    if(it!=mTracktoShowerHit.end()){
	cands.assign(it->second.begin(),it->second.end());
	return cands.size();
    } else {
	return 0;
    }
}

Int_t HParticleBooker::getEmcClusterForTrack      (Int_t track,vector<HEmcClusterSim*>&    cands)
{
    // fills vector of hit using this track. returns the size of the vector
    cands.clear();
    map<Int_t,vector<HEmcClusterSim*> > :: iterator it;
    it = mTracktoEmcCluster.find(track);
    if(it!=mTracktoEmcCluster.end()){
	cands.assign(it->second.begin(),it->second.end());
	return cands.size();
    } else {
	return 0;
    }
}

Int_t HParticleBooker::getInnerMdcSegForTrack    (Int_t track,vector<HMdcSegSim*>&       cands)
{
    // fills vector of hit using this track. returns the size of the vector
    cands.clear();
    map<Int_t,vector<HMdcSegSim*> > :: iterator it;
    it = mTracktoInnerMdc.find(track);
    if(it!=mTracktoInnerMdc.end()){
	cands.assign(it->second.begin(),it->second.end());
	return cands.size();
    } else {
	return 0;
    }
}

Int_t HParticleBooker::getOuterMdcSegForTrack    (Int_t track,vector<HMdcSegSim*>&       cands)
{
    // fills vector of hit using this track. returns the size of the vector
    cands.clear();
    map<Int_t,vector<HMdcSegSim*> > :: iterator it;
    it = mTracktoOuterMdc.find(track);
    if(it!=mTracktoOuterMdc.end()){
	cands.assign(it->second.begin(),it->second.end());
	return cands.size();
    } else {
	return 0;
    }
}

Int_t HParticleBooker::getRichHitForTrack        (Int_t track,vector<HRichHitSim*>&      cands)
{
    // fills vector of hit using this track. returns the size of the vector
    cands.clear();
    map<Int_t,vector<HRichHitSim*> > :: iterator it;
    it = mTracktoRichHit.find(track);
    if(it!=mTracktoRichHit.end()){
	cands.assign(it->second.begin(),it->second.end());
	return cands.size();
    } else {
	return 0;
    }
}

Int_t HParticleBooker::getCandidatesIndAnyDetectorForTrack     (Int_t track,vector<Int_t>& cands)
{
    // fills vector of candidates indices using this track in any detector hit.
    // returns the size of the vector
    cands.clear();
    map<Int_t,vector<Int_t> > :: iterator it;
    it = mTracktoAnyCandInd.find(track);
    if(it!=mTracktoAnyCandInd.end()){
	cands.assign(it->second.begin(),it->second.end());
	return cands.size();
    } else {
	return 0;
    }
}

Int_t HParticleBooker::getCandidatesIndForTrack     (Int_t track,vector<Int_t>& cands)
{
    // fills vector of candidates indices using this global track. returns the size of the vector
    cands.clear();
    map<Int_t,vector<Int_t> > :: iterator it;
    it = mTracktoCandInd.find(track);
    if(it!=mTracktoCandInd.end()){
	cands.assign(it->second.begin(),it->second.end());
	return cands.size();
    } else {
	return 0;
    }
}


Int_t HParticleBooker::getTofHitIndForTrack         (Int_t track,vector<Int_t>&       cands)
{
    // fills vector of hit indices using this track. returns the size of the vector
    cands.clear();
    map<Int_t,vector<Int_t> > :: iterator it;
    it = mTracktoTofHitInd.find(track);
    if(it!=mTracktoTofHitInd.end()){
	cands.assign(it->second.begin(),it->second.end());
	return cands.size();
    } else {
	return 0;
    }
}

Int_t HParticleBooker::getTofClusterIndForTrack     (Int_t track,vector<Int_t>&   cands)
{
    // fills vector of hit indices using this track. returns the size of the vector
    cands.clear();
    map<Int_t,vector<Int_t> > :: iterator it;
    it = mTracktoTofClusterInd.find(track);
    if(it!=mTracktoTofClusterInd.end()){
	cands.assign(it->second.begin(),it->second.end());
	return cands.size();
    } else {
	return 0;
    }
}

Int_t HParticleBooker::getRpcClusterIndForTrack     (Int_t track,vector<Int_t>&   cands)
{
    // fills vector of hit indices using this track. returns the size of the vector
    cands.clear();
    map<Int_t,vector<Int_t> > :: iterator it;
    it = mTracktoRpcClusterInd.find(track);
    if(it!=mTracktoRpcClusterInd.end()){
	cands.assign(it->second.begin(),it->second.end());
	return cands.size();
    } else {
	return 0;
    }
}

Int_t HParticleBooker::getShowerHitIndForTrack      (Int_t track,vector<Int_t>&    cands)
{
    // fills vector of hit indices using this track. returns the size of the vector
    cands.clear();
    map<Int_t,vector<Int_t> > :: iterator it;
    it = mTracktoShowerHitInd.find(track);
    if(it!=mTracktoShowerHitInd.end()){
	cands.assign(it->second.begin(),it->second.end());
	return cands.size();
    } else {
	return 0;
    }
}

Int_t HParticleBooker::getEmcClusterIndForTrack      (Int_t track,vector<Int_t>&    cands)
{
    // fills vector of hit indices using this track. returns the size of the vector
    cands.clear();
    map<Int_t,vector<Int_t> > :: iterator it;
    it = mTracktoEmcClusterInd.find(track);
    if(it!=mTracktoEmcClusterInd.end()){
	cands.assign(it->second.begin(),it->second.end());
	return cands.size();
    } else {
	return 0;
    }
}

Int_t HParticleBooker::getInnerMdcSegIndForTrack    (Int_t track,vector<Int_t>&       cands)
{
    // fills vector of hit indices using this track. returns the size of the vector
    cands.clear();
    map<Int_t,vector<Int_t> > :: iterator it;
    it = mTracktoInnerMdcInd.find(track);
    if(it!=mTracktoInnerMdcInd.end()){
	cands.assign(it->second.begin(),it->second.end());
	return cands.size();
    } else {
	return 0;
    }
}

Int_t HParticleBooker::getOuterMdcSegIndForTrack    (Int_t track,vector<Int_t>&       cands)
{
    // fills vector of hit indices using this track. returns the size of the vector
    cands.clear();
    map<Int_t,vector<Int_t> > :: iterator it;
    it = mTracktoOuterMdcInd.find(track);
    if(it!=mTracktoOuterMdcInd.end()){
	cands.assign(it->second.begin(),it->second.end());
	return cands.size();
    } else {
	return 0;
    }
}

Int_t HParticleBooker::getRichHitIndForTrack        (Int_t track,vector<Int_t>&      cands)
{
    // fills vector of hit indices using this track. returns the size of the vector
    cands.clear();
    map<Int_t,vector<Int_t> > :: iterator it;
    it = mTracktoRichHitInd.find(track);
    if(it!=mTracktoRichHitInd.end()){
	cands.assign(it->second.begin(),it->second.end());
	return cands.size();
    } else {
	return 0;
    }
}


Int_t HParticleBooker::getSameRich(HParticleCand* cand,vector<HParticleCand*>& candidates,UInt_t flag,Bool_t isReference)
{
    // fills list of candidates which share the same RICH. If the RICH is not found
    // at all -1 is returned, other wise the number of candidates found for the hit.
    // The input candidate will be not included in candidates. Candidates can be filtered
    // by flag ( 0 == no filter, see flags eClosePairSelect+ ePairCase (hparticledef.h)).
    // The input candidate will be treated as refererence if isReference == kTRUE.

    candidates.clear();
    if(cand->getRichInd() !=-1 ){
	map<Int_t,vector<HParticleCand*> >::iterator it = mRichtoCand.find(cand->getRichInd());
	if(it != mRichtoCand.end()){
	    vector<HParticleCand*>& v = it->second;
	    for(UInt_t i = 0 ; i < v.size(); i++){

		if(v[i] != cand) {  // skip same cand
		    if(flag == 0 ) candidates.push_back(v[i]);
		    else {
			Bool_t res = kFALSE;
			if(!isReference) res=HParticleTool::evalPairsFlags(flag,cand,v[i]);
			else             res=HParticleTool::evalPairsFlags(flag,v[i],cand);
			if(res){
			    candidates.push_back(v[i]);
			}
		    }
		}
	    } //end loop
	} else return -1;
    }
    return candidates.size();
}

Int_t HParticleBooker::getSameInnerMdc(HParticleCand* cand,vector<HParticleCand*>& candidates,UInt_t flag,Bool_t isReference)
{
    // fills list of candidates which share the same inner MDC seg. If the seg is not found
    // at all -1 is returned, other wise the number of candidates found for the hit.
    // The input candidate will be not included in candidates. Candidates can be filtered
    // by flag ( 0 == no filter, see flags eClosePairSelect+ ePairCase (hparticledef.h)).
    // The input candidate will be treated as refererence if isReference == kTRUE.

    candidates.clear();
    if(cand->getInnerSegInd() !=-1 ){
	map<Int_t,vector<HParticleCand*> >::iterator it = mInnerMdctoCand.find(cand->getInnerSegInd());
	if(it != mInnerMdctoCand.end()){
	    vector<HParticleCand*>& v = it->second;
	    for(UInt_t i = 0 ; i < v.size(); i++){

		if(v[i] != cand) {  // skip same cand
		    if(flag == 0 ) candidates.push_back(v[i]);
		    else {
			Bool_t res = kFALSE;
			if(!isReference) res=HParticleTool::evalPairsFlags(flag,cand,v[i]);
			else             res=HParticleTool::evalPairsFlags(flag,v[i],cand);
			if(res){
			    candidates.push_back(v[i]);
			}
		    }
		}
	    } //end loop
	} else return -1;
    }
    return candidates.size();
}

Int_t HParticleBooker::getSameOuterMdc(HParticleCand* cand,vector<HParticleCand*>& candidates,UInt_t flag,Bool_t isReference)
{
    // fills list of candidates which share the same outer MDC seg. If the seg is not found
    // at all -1 is returned, other wise the number of candidates found for the hit.
    // The input candidate will be not included in candidates. Candidates can be filtered
    // by flag ( 0 == no filter, see flags eClosePairSelect+ ePairCase (hparticledef.h)).
    // The input candidate will be treated as refererence if isReference == kTRUE.

    candidates.clear();
    if(cand->getOuterSegInd() !=-1 ){
	map<Int_t,vector<HParticleCand*> >::iterator it = mOuterMdctoCand.find(cand->getOuterSegInd());
	if(it != mOuterMdctoCand.end()){
	    vector<HParticleCand*>& v = it->second;
	    for(UInt_t i = 0 ; i < v.size(); i++){

		if(v[i] != cand) {  // skip same cand
		    if(flag == 0 ) candidates.push_back(v[i]);
		    else {
			Bool_t res = kFALSE;
			if(!isReference) res=HParticleTool::evalPairsFlags(flag,cand,v[i]);
			else             res=HParticleTool::evalPairsFlags(flag,v[i],cand);
			if(res){
			    candidates.push_back(v[i]);
			}
		    }
		}
	    } //end loop
	} else return -1;
    }
    return candidates.size();
}

Int_t HParticleBooker::getSameMeta(HParticleCand* cand,vector<HParticleCand*>& candidates,UInt_t flag,Bool_t isReference)
{
    // fills list of candidates which share the same META hit. The number of candidates
    // found for the hit is returned or -1 if the hit is not found at all..
    // The input candidate will be not included in candidates. Candidates can be filtered
    // by flag ( 0 == no filter, see flags eClosePairSelect+ ePairCase (hparticledef.h)).
    // The input candidate will be treated as refererence if isReference == kTRUE.

    candidates.clear();

    Int_t metaind = cand->getMetaHitInd();
    Int_t sel     = cand->getSelectedMeta();

    if(metaind != -1 ){
	map<Int_t,vector<HParticleCand*> >* mp =0;

	if     (sel == kTofClst)           mp = &mTofClsttoCand;
	else if(sel == kTofHit1||sel==kTofHit2) mp = &mTofHittoCand;
	else if(sel == kRpcClst)           mp = &mRpcClsttoCand;
	else if(sel == kShowerHit)         mp = &mShowertoCand;
	else if(sel == kEmcClst)           mp = &mEmctoCand;
	else  {
	    Error("getSameMeta()","unknown Meta case!"); return 0;
	}
	map<Int_t,vector<HParticleCand*> >::iterator it = mp->find(metaind);

	if(it != mp->end()){
	    vector<HParticleCand*>& v = it->second;
	    for(UInt_t i = 0 ; i < v.size(); i++){

		if(v[i] != cand) {  // skip same cand
		    if(flag == 0 ) candidates.push_back(v[i]);
		    else {
			Bool_t res = kFALSE;
			if(!isReference) res=HParticleTool::evalPairsFlags(flag,cand,v[i]);
			else             res=HParticleTool::evalPairsFlags(flag,v[i],cand);
			if(res){
			    candidates.push_back(v[i]);
			}
		    }
		}
	    } //end loop
	} else return -1;
    }
    return candidates.size();
}

Int_t HParticleBooker::getSameAny(HParticleCand* cand,vector<HParticleCand*>& candidates,UInt_t flag,UInt_t detswitch,Bool_t isReference)
{
    // fills list of candidates which share any detector hit. Detectors can be selected by
    // detswitch setting the bit using eClosePairSelect (default is 0. in this case all
    // detectors are filled).
    // The number of candidatefound for the hit is returned or -1 if the hit is not found at all..
    // The input candidate will be not included in candidates. Candidates can be filtered
    // by flag ( 0 == no filter, see flags eClosePairSelect+ ePairCase (hparticledef.h)).
    // The input candidate will be treated as refererence if isReference == kTRUE.

    candidates.clear();
    vector<HParticleCand*> vtemp;
    vector<HParticleCand*> vtemp2;

    if(detswitch == 0 || HParticleTool::isPairsFlagsBit(detswitch,kSameRICH)){
	getSameRich(cand,vtemp,0,kTRUE);
	vtemp2.insert(vtemp2.end(),vtemp.begin(),vtemp.end());
    }
    if(detswitch == 0 || HParticleTool::isPairsFlagsBit(detswitch, kSameInnerMDC)){
	getSameInnerMdc(cand,vtemp,0,kTRUE);
	vtemp2.insert(vtemp2.end(),vtemp.begin(),vtemp.end());
    }
    if(detswitch == 0 || HParticleTool::isPairsFlagsBit(detswitch, kSameOuterMDC)){
	getSameOuterMdc(cand,vtemp,0,kTRUE);
	vtemp2.insert(vtemp2.end(),vtemp.begin(),vtemp.end());
    }
    if(detswitch == 0 || HParticleTool::isPairsFlagsBit(detswitch, kSameMETA)){
	getSameMeta(cand,vtemp,0,kTRUE);
	vtemp2.insert(vtemp2.end(),vtemp.begin(),vtemp.end());
    }
    sort(vtemp2.begin(),vtemp2.end());           // needs sort before unique

    vector<HParticleCand*>::iterator it;
    it = unique(vtemp2.begin(),vtemp2.end());    // remove doubles
    vtemp2.resize(distance(vtemp2.begin(),it));  // shrink it to real size

    for(UInt_t i=0;i<vtemp2.size();i++){
        HParticleCand* c = vtemp2[i] ;
	if(flag == 0 )  candidates.push_back(c);
	else {
	    Bool_t res = kFALSE;
	    if(!isReference) res=HParticleTool::evalPairsFlags(flag,cand,c);
	    else             res=HParticleTool::evalPairsFlags(flag,c,cand);
	    if(res){
		candidates.push_back(c);
	    }
	}
    }

    return candidates.size()==0 ? -1 : candidates.size();
}




 hparticlebooker.cc:1
 hparticlebooker.cc:2
 hparticlebooker.cc:3
 hparticlebooker.cc:4
 hparticlebooker.cc:5
 hparticlebooker.cc:6
 hparticlebooker.cc:7
 hparticlebooker.cc:8
 hparticlebooker.cc:9
 hparticlebooker.cc:10
 hparticlebooker.cc:11
 hparticlebooker.cc:12
 hparticlebooker.cc:13
 hparticlebooker.cc:14
 hparticlebooker.cc:15
 hparticlebooker.cc:16
 hparticlebooker.cc:17
 hparticlebooker.cc:18
 hparticlebooker.cc:19
 hparticlebooker.cc:20
 hparticlebooker.cc:21
 hparticlebooker.cc:22
 hparticlebooker.cc:23
 hparticlebooker.cc:24
 hparticlebooker.cc:25
 hparticlebooker.cc:26
 hparticlebooker.cc:27
 hparticlebooker.cc:28
 hparticlebooker.cc:29
 hparticlebooker.cc:30
 hparticlebooker.cc:31
 hparticlebooker.cc:32
 hparticlebooker.cc:33
 hparticlebooker.cc:34
 hparticlebooker.cc:35
 hparticlebooker.cc:36
 hparticlebooker.cc:37
 hparticlebooker.cc:38
 hparticlebooker.cc:39
 hparticlebooker.cc:40
 hparticlebooker.cc:41
 hparticlebooker.cc:42
 hparticlebooker.cc:43
 hparticlebooker.cc:44
 hparticlebooker.cc:45
 hparticlebooker.cc:46
 hparticlebooker.cc:47
 hparticlebooker.cc:48
 hparticlebooker.cc:49
 hparticlebooker.cc:50
 hparticlebooker.cc:51
 hparticlebooker.cc:52
 hparticlebooker.cc:53
 hparticlebooker.cc:54
 hparticlebooker.cc:55
 hparticlebooker.cc:56
 hparticlebooker.cc:57
 hparticlebooker.cc:58
 hparticlebooker.cc:59
 hparticlebooker.cc:60
 hparticlebooker.cc:61
 hparticlebooker.cc:62
 hparticlebooker.cc:63
 hparticlebooker.cc:64
 hparticlebooker.cc:65
 hparticlebooker.cc:66
 hparticlebooker.cc:67
 hparticlebooker.cc:68
 hparticlebooker.cc:69
 hparticlebooker.cc:70
 hparticlebooker.cc:71
 hparticlebooker.cc:72
 hparticlebooker.cc:73
 hparticlebooker.cc:74
 hparticlebooker.cc:75
 hparticlebooker.cc:76
 hparticlebooker.cc:77
 hparticlebooker.cc:78
 hparticlebooker.cc:79
 hparticlebooker.cc:80
 hparticlebooker.cc:81
 hparticlebooker.cc:82
 hparticlebooker.cc:83
 hparticlebooker.cc:84
 hparticlebooker.cc:85
 hparticlebooker.cc:86
 hparticlebooker.cc:87
 hparticlebooker.cc:88
 hparticlebooker.cc:89
 hparticlebooker.cc:90
 hparticlebooker.cc:91
 hparticlebooker.cc:92
 hparticlebooker.cc:93
 hparticlebooker.cc:94
 hparticlebooker.cc:95
 hparticlebooker.cc:96
 hparticlebooker.cc:97
 hparticlebooker.cc:98
 hparticlebooker.cc:99
 hparticlebooker.cc:100
 hparticlebooker.cc:101
 hparticlebooker.cc:102
 hparticlebooker.cc:103
 hparticlebooker.cc:104
 hparticlebooker.cc:105
 hparticlebooker.cc:106
 hparticlebooker.cc:107
 hparticlebooker.cc:108
 hparticlebooker.cc:109
 hparticlebooker.cc:110
 hparticlebooker.cc:111
 hparticlebooker.cc:112
 hparticlebooker.cc:113
 hparticlebooker.cc:114
 hparticlebooker.cc:115
 hparticlebooker.cc:116
 hparticlebooker.cc:117
 hparticlebooker.cc:118
 hparticlebooker.cc:119
 hparticlebooker.cc:120
 hparticlebooker.cc:121
 hparticlebooker.cc:122
 hparticlebooker.cc:123
 hparticlebooker.cc:124
 hparticlebooker.cc:125
 hparticlebooker.cc:126
 hparticlebooker.cc:127
 hparticlebooker.cc:128
 hparticlebooker.cc:129
 hparticlebooker.cc:130
 hparticlebooker.cc:131
 hparticlebooker.cc:132
 hparticlebooker.cc:133
 hparticlebooker.cc:134
 hparticlebooker.cc:135
 hparticlebooker.cc:136
 hparticlebooker.cc:137
 hparticlebooker.cc:138
 hparticlebooker.cc:139
 hparticlebooker.cc:140
 hparticlebooker.cc:141
 hparticlebooker.cc:142
 hparticlebooker.cc:143
 hparticlebooker.cc:144
 hparticlebooker.cc:145
 hparticlebooker.cc:146
 hparticlebooker.cc:147
 hparticlebooker.cc:148
 hparticlebooker.cc:149
 hparticlebooker.cc:150
 hparticlebooker.cc:151
 hparticlebooker.cc:152
 hparticlebooker.cc:153
 hparticlebooker.cc:154
 hparticlebooker.cc:155
 hparticlebooker.cc:156
 hparticlebooker.cc:157
 hparticlebooker.cc:158
 hparticlebooker.cc:159
 hparticlebooker.cc:160
 hparticlebooker.cc:161
 hparticlebooker.cc:162
 hparticlebooker.cc:163
 hparticlebooker.cc:164
 hparticlebooker.cc:165
 hparticlebooker.cc:166
 hparticlebooker.cc:167
 hparticlebooker.cc:168
 hparticlebooker.cc:169
 hparticlebooker.cc:170
 hparticlebooker.cc:171
 hparticlebooker.cc:172
 hparticlebooker.cc:173
 hparticlebooker.cc:174
 hparticlebooker.cc:175
 hparticlebooker.cc:176
 hparticlebooker.cc:177
 hparticlebooker.cc:178
 hparticlebooker.cc:179
 hparticlebooker.cc:180
 hparticlebooker.cc:181
 hparticlebooker.cc:182
 hparticlebooker.cc:183
 hparticlebooker.cc:184
 hparticlebooker.cc:185
 hparticlebooker.cc:186
 hparticlebooker.cc:187
 hparticlebooker.cc:188
 hparticlebooker.cc:189
 hparticlebooker.cc:190
 hparticlebooker.cc:191
 hparticlebooker.cc:192
 hparticlebooker.cc:193
 hparticlebooker.cc:194
 hparticlebooker.cc:195
 hparticlebooker.cc:196
 hparticlebooker.cc:197
 hparticlebooker.cc:198
 hparticlebooker.cc:199
 hparticlebooker.cc:200
 hparticlebooker.cc:201
 hparticlebooker.cc:202
 hparticlebooker.cc:203
 hparticlebooker.cc:204
 hparticlebooker.cc:205
 hparticlebooker.cc:206
 hparticlebooker.cc:207
 hparticlebooker.cc:208
 hparticlebooker.cc:209
 hparticlebooker.cc:210
 hparticlebooker.cc:211
 hparticlebooker.cc:212
 hparticlebooker.cc:213
 hparticlebooker.cc:214
 hparticlebooker.cc:215
 hparticlebooker.cc:216
 hparticlebooker.cc:217
 hparticlebooker.cc:218
 hparticlebooker.cc:219
 hparticlebooker.cc:220
 hparticlebooker.cc:221
 hparticlebooker.cc:222
 hparticlebooker.cc:223
 hparticlebooker.cc:224
 hparticlebooker.cc:225
 hparticlebooker.cc:226
 hparticlebooker.cc:227
 hparticlebooker.cc:228
 hparticlebooker.cc:229
 hparticlebooker.cc:230
 hparticlebooker.cc:231
 hparticlebooker.cc:232
 hparticlebooker.cc:233
 hparticlebooker.cc:234
 hparticlebooker.cc:235
 hparticlebooker.cc:236
 hparticlebooker.cc:237
 hparticlebooker.cc:238
 hparticlebooker.cc:239
 hparticlebooker.cc:240
 hparticlebooker.cc:241
 hparticlebooker.cc:242
 hparticlebooker.cc:243
 hparticlebooker.cc:244
 hparticlebooker.cc:245
 hparticlebooker.cc:246
 hparticlebooker.cc:247
 hparticlebooker.cc:248
 hparticlebooker.cc:249
 hparticlebooker.cc:250
 hparticlebooker.cc:251
 hparticlebooker.cc:252
 hparticlebooker.cc:253
 hparticlebooker.cc:254
 hparticlebooker.cc:255
 hparticlebooker.cc:256
 hparticlebooker.cc:257
 hparticlebooker.cc:258
 hparticlebooker.cc:259
 hparticlebooker.cc:260
 hparticlebooker.cc:261
 hparticlebooker.cc:262
 hparticlebooker.cc:263
 hparticlebooker.cc:264
 hparticlebooker.cc:265
 hparticlebooker.cc:266
 hparticlebooker.cc:267
 hparticlebooker.cc:268
 hparticlebooker.cc:269
 hparticlebooker.cc:270
 hparticlebooker.cc:271
 hparticlebooker.cc:272
 hparticlebooker.cc:273
 hparticlebooker.cc:274
 hparticlebooker.cc:275
 hparticlebooker.cc:276
 hparticlebooker.cc:277
 hparticlebooker.cc:278
 hparticlebooker.cc:279
 hparticlebooker.cc:280
 hparticlebooker.cc:281
 hparticlebooker.cc:282
 hparticlebooker.cc:283
 hparticlebooker.cc:284
 hparticlebooker.cc:285
 hparticlebooker.cc:286
 hparticlebooker.cc:287
 hparticlebooker.cc:288
 hparticlebooker.cc:289
 hparticlebooker.cc:290
 hparticlebooker.cc:291
 hparticlebooker.cc:292
 hparticlebooker.cc:293
 hparticlebooker.cc:294
 hparticlebooker.cc:295
 hparticlebooker.cc:296
 hparticlebooker.cc:297
 hparticlebooker.cc:298
 hparticlebooker.cc:299
 hparticlebooker.cc:300
 hparticlebooker.cc:301
 hparticlebooker.cc:302
 hparticlebooker.cc:303
 hparticlebooker.cc:304
 hparticlebooker.cc:305
 hparticlebooker.cc:306
 hparticlebooker.cc:307
 hparticlebooker.cc:308
 hparticlebooker.cc:309
 hparticlebooker.cc:310
 hparticlebooker.cc:311
 hparticlebooker.cc:312
 hparticlebooker.cc:313
 hparticlebooker.cc:314
 hparticlebooker.cc:315
 hparticlebooker.cc:316
 hparticlebooker.cc:317
 hparticlebooker.cc:318
 hparticlebooker.cc:319
 hparticlebooker.cc:320
 hparticlebooker.cc:321
 hparticlebooker.cc:322
 hparticlebooker.cc:323
 hparticlebooker.cc:324
 hparticlebooker.cc:325
 hparticlebooker.cc:326
 hparticlebooker.cc:327
 hparticlebooker.cc:328
 hparticlebooker.cc:329
 hparticlebooker.cc:330
 hparticlebooker.cc:331
 hparticlebooker.cc:332
 hparticlebooker.cc:333
 hparticlebooker.cc:334
 hparticlebooker.cc:335
 hparticlebooker.cc:336
 hparticlebooker.cc:337
 hparticlebooker.cc:338
 hparticlebooker.cc:339
 hparticlebooker.cc:340
 hparticlebooker.cc:341
 hparticlebooker.cc:342
 hparticlebooker.cc:343
 hparticlebooker.cc:344
 hparticlebooker.cc:345
 hparticlebooker.cc:346
 hparticlebooker.cc:347
 hparticlebooker.cc:348
 hparticlebooker.cc:349
 hparticlebooker.cc:350
 hparticlebooker.cc:351
 hparticlebooker.cc:352
 hparticlebooker.cc:353
 hparticlebooker.cc:354
 hparticlebooker.cc:355
 hparticlebooker.cc:356
 hparticlebooker.cc:357
 hparticlebooker.cc:358
 hparticlebooker.cc:359
 hparticlebooker.cc:360
 hparticlebooker.cc:361
 hparticlebooker.cc:362
 hparticlebooker.cc:363
 hparticlebooker.cc:364
 hparticlebooker.cc:365
 hparticlebooker.cc:366
 hparticlebooker.cc:367
 hparticlebooker.cc:368
 hparticlebooker.cc:369
 hparticlebooker.cc:370
 hparticlebooker.cc:371
 hparticlebooker.cc:372
 hparticlebooker.cc:373
 hparticlebooker.cc:374
 hparticlebooker.cc:375
 hparticlebooker.cc:376
 hparticlebooker.cc:377
 hparticlebooker.cc:378
 hparticlebooker.cc:379
 hparticlebooker.cc:380
 hparticlebooker.cc:381
 hparticlebooker.cc:382
 hparticlebooker.cc:383
 hparticlebooker.cc:384
 hparticlebooker.cc:385
 hparticlebooker.cc:386
 hparticlebooker.cc:387
 hparticlebooker.cc:388
 hparticlebooker.cc:389
 hparticlebooker.cc:390
 hparticlebooker.cc:391
 hparticlebooker.cc:392
 hparticlebooker.cc:393
 hparticlebooker.cc:394
 hparticlebooker.cc:395
 hparticlebooker.cc:396
 hparticlebooker.cc:397
 hparticlebooker.cc:398
 hparticlebooker.cc:399
 hparticlebooker.cc:400
 hparticlebooker.cc:401
 hparticlebooker.cc:402
 hparticlebooker.cc:403
 hparticlebooker.cc:404
 hparticlebooker.cc:405
 hparticlebooker.cc:406
 hparticlebooker.cc:407
 hparticlebooker.cc:408
 hparticlebooker.cc:409
 hparticlebooker.cc:410
 hparticlebooker.cc:411
 hparticlebooker.cc:412
 hparticlebooker.cc:413
 hparticlebooker.cc:414
 hparticlebooker.cc:415
 hparticlebooker.cc:416
 hparticlebooker.cc:417
 hparticlebooker.cc:418
 hparticlebooker.cc:419
 hparticlebooker.cc:420
 hparticlebooker.cc:421
 hparticlebooker.cc:422
 hparticlebooker.cc:423
 hparticlebooker.cc:424
 hparticlebooker.cc:425
 hparticlebooker.cc:426
 hparticlebooker.cc:427
 hparticlebooker.cc:428
 hparticlebooker.cc:429
 hparticlebooker.cc:430
 hparticlebooker.cc:431
 hparticlebooker.cc:432
 hparticlebooker.cc:433
 hparticlebooker.cc:434
 hparticlebooker.cc:435
 hparticlebooker.cc:436
 hparticlebooker.cc:437
 hparticlebooker.cc:438
 hparticlebooker.cc:439
 hparticlebooker.cc:440
 hparticlebooker.cc:441
 hparticlebooker.cc:442
 hparticlebooker.cc:443
 hparticlebooker.cc:444
 hparticlebooker.cc:445
 hparticlebooker.cc:446
 hparticlebooker.cc:447
 hparticlebooker.cc:448
 hparticlebooker.cc:449
 hparticlebooker.cc:450
 hparticlebooker.cc:451
 hparticlebooker.cc:452
 hparticlebooker.cc:453
 hparticlebooker.cc:454
 hparticlebooker.cc:455
 hparticlebooker.cc:456
 hparticlebooker.cc:457
 hparticlebooker.cc:458
 hparticlebooker.cc:459
 hparticlebooker.cc:460
 hparticlebooker.cc:461
 hparticlebooker.cc:462
 hparticlebooker.cc:463
 hparticlebooker.cc:464
 hparticlebooker.cc:465
 hparticlebooker.cc:466
 hparticlebooker.cc:467
 hparticlebooker.cc:468
 hparticlebooker.cc:469
 hparticlebooker.cc:470
 hparticlebooker.cc:471
 hparticlebooker.cc:472
 hparticlebooker.cc:473
 hparticlebooker.cc:474
 hparticlebooker.cc:475
 hparticlebooker.cc:476
 hparticlebooker.cc:477
 hparticlebooker.cc:478
 hparticlebooker.cc:479
 hparticlebooker.cc:480
 hparticlebooker.cc:481
 hparticlebooker.cc:482
 hparticlebooker.cc:483
 hparticlebooker.cc:484
 hparticlebooker.cc:485
 hparticlebooker.cc:486
 hparticlebooker.cc:487
 hparticlebooker.cc:488
 hparticlebooker.cc:489
 hparticlebooker.cc:490
 hparticlebooker.cc:491
 hparticlebooker.cc:492
 hparticlebooker.cc:493
 hparticlebooker.cc:494
 hparticlebooker.cc:495
 hparticlebooker.cc:496
 hparticlebooker.cc:497
 hparticlebooker.cc:498
 hparticlebooker.cc:499
 hparticlebooker.cc:500
 hparticlebooker.cc:501
 hparticlebooker.cc:502
 hparticlebooker.cc:503
 hparticlebooker.cc:504
 hparticlebooker.cc:505
 hparticlebooker.cc:506
 hparticlebooker.cc:507
 hparticlebooker.cc:508
 hparticlebooker.cc:509
 hparticlebooker.cc:510
 hparticlebooker.cc:511
 hparticlebooker.cc:512
 hparticlebooker.cc:513
 hparticlebooker.cc:514
 hparticlebooker.cc:515
 hparticlebooker.cc:516
 hparticlebooker.cc:517
 hparticlebooker.cc:518
 hparticlebooker.cc:519
 hparticlebooker.cc:520
 hparticlebooker.cc:521
 hparticlebooker.cc:522
 hparticlebooker.cc:523
 hparticlebooker.cc:524
 hparticlebooker.cc:525
 hparticlebooker.cc:526
 hparticlebooker.cc:527
 hparticlebooker.cc:528
 hparticlebooker.cc:529
 hparticlebooker.cc:530
 hparticlebooker.cc:531
 hparticlebooker.cc:532
 hparticlebooker.cc:533
 hparticlebooker.cc:534
 hparticlebooker.cc:535
 hparticlebooker.cc:536
 hparticlebooker.cc:537
 hparticlebooker.cc:538
 hparticlebooker.cc:539
 hparticlebooker.cc:540
 hparticlebooker.cc:541
 hparticlebooker.cc:542
 hparticlebooker.cc:543
 hparticlebooker.cc:544
 hparticlebooker.cc:545
 hparticlebooker.cc:546
 hparticlebooker.cc:547
 hparticlebooker.cc:548
 hparticlebooker.cc:549
 hparticlebooker.cc:550
 hparticlebooker.cc:551
 hparticlebooker.cc:552
 hparticlebooker.cc:553
 hparticlebooker.cc:554
 hparticlebooker.cc:555
 hparticlebooker.cc:556
 hparticlebooker.cc:557
 hparticlebooker.cc:558
 hparticlebooker.cc:559
 hparticlebooker.cc:560
 hparticlebooker.cc:561
 hparticlebooker.cc:562
 hparticlebooker.cc:563
 hparticlebooker.cc:564
 hparticlebooker.cc:565
 hparticlebooker.cc:566
 hparticlebooker.cc:567
 hparticlebooker.cc:568
 hparticlebooker.cc:569
 hparticlebooker.cc:570
 hparticlebooker.cc:571
 hparticlebooker.cc:572
 hparticlebooker.cc:573
 hparticlebooker.cc:574
 hparticlebooker.cc:575
 hparticlebooker.cc:576
 hparticlebooker.cc:577
 hparticlebooker.cc:578
 hparticlebooker.cc:579
 hparticlebooker.cc:580
 hparticlebooker.cc:581
 hparticlebooker.cc:582
 hparticlebooker.cc:583
 hparticlebooker.cc:584
 hparticlebooker.cc:585
 hparticlebooker.cc:586
 hparticlebooker.cc:587
 hparticlebooker.cc:588
 hparticlebooker.cc:589
 hparticlebooker.cc:590
 hparticlebooker.cc:591
 hparticlebooker.cc:592
 hparticlebooker.cc:593
 hparticlebooker.cc:594
 hparticlebooker.cc:595
 hparticlebooker.cc:596
 hparticlebooker.cc:597
 hparticlebooker.cc:598
 hparticlebooker.cc:599
 hparticlebooker.cc:600
 hparticlebooker.cc:601
 hparticlebooker.cc:602
 hparticlebooker.cc:603
 hparticlebooker.cc:604
 hparticlebooker.cc:605
 hparticlebooker.cc:606
 hparticlebooker.cc:607
 hparticlebooker.cc:608
 hparticlebooker.cc:609
 hparticlebooker.cc:610
 hparticlebooker.cc:611
 hparticlebooker.cc:612
 hparticlebooker.cc:613
 hparticlebooker.cc:614
 hparticlebooker.cc:615
 hparticlebooker.cc:616
 hparticlebooker.cc:617
 hparticlebooker.cc:618
 hparticlebooker.cc:619
 hparticlebooker.cc:620
 hparticlebooker.cc:621
 hparticlebooker.cc:622
 hparticlebooker.cc:623
 hparticlebooker.cc:624
 hparticlebooker.cc:625
 hparticlebooker.cc:626
 hparticlebooker.cc:627
 hparticlebooker.cc:628
 hparticlebooker.cc:629
 hparticlebooker.cc:630
 hparticlebooker.cc:631
 hparticlebooker.cc:632
 hparticlebooker.cc:633
 hparticlebooker.cc:634
 hparticlebooker.cc:635
 hparticlebooker.cc:636
 hparticlebooker.cc:637
 hparticlebooker.cc:638
 hparticlebooker.cc:639
 hparticlebooker.cc:640
 hparticlebooker.cc:641
 hparticlebooker.cc:642
 hparticlebooker.cc:643
 hparticlebooker.cc:644
 hparticlebooker.cc:645
 hparticlebooker.cc:646
 hparticlebooker.cc:647
 hparticlebooker.cc:648
 hparticlebooker.cc:649
 hparticlebooker.cc:650
 hparticlebooker.cc:651
 hparticlebooker.cc:652
 hparticlebooker.cc:653
 hparticlebooker.cc:654
 hparticlebooker.cc:655
 hparticlebooker.cc:656
 hparticlebooker.cc:657
 hparticlebooker.cc:658
 hparticlebooker.cc:659
 hparticlebooker.cc:660
 hparticlebooker.cc:661
 hparticlebooker.cc:662
 hparticlebooker.cc:663
 hparticlebooker.cc:664
 hparticlebooker.cc:665
 hparticlebooker.cc:666
 hparticlebooker.cc:667
 hparticlebooker.cc:668
 hparticlebooker.cc:669
 hparticlebooker.cc:670
 hparticlebooker.cc:671
 hparticlebooker.cc:672
 hparticlebooker.cc:673
 hparticlebooker.cc:674
 hparticlebooker.cc:675
 hparticlebooker.cc:676
 hparticlebooker.cc:677
 hparticlebooker.cc:678
 hparticlebooker.cc:679
 hparticlebooker.cc:680
 hparticlebooker.cc:681
 hparticlebooker.cc:682
 hparticlebooker.cc:683
 hparticlebooker.cc:684
 hparticlebooker.cc:685
 hparticlebooker.cc:686
 hparticlebooker.cc:687
 hparticlebooker.cc:688
 hparticlebooker.cc:689
 hparticlebooker.cc:690
 hparticlebooker.cc:691
 hparticlebooker.cc:692
 hparticlebooker.cc:693
 hparticlebooker.cc:694
 hparticlebooker.cc:695
 hparticlebooker.cc:696
 hparticlebooker.cc:697
 hparticlebooker.cc:698
 hparticlebooker.cc:699
 hparticlebooker.cc:700
 hparticlebooker.cc:701
 hparticlebooker.cc:702
 hparticlebooker.cc:703
 hparticlebooker.cc:704
 hparticlebooker.cc:705
 hparticlebooker.cc:706
 hparticlebooker.cc:707
 hparticlebooker.cc:708
 hparticlebooker.cc:709
 hparticlebooker.cc:710
 hparticlebooker.cc:711
 hparticlebooker.cc:712
 hparticlebooker.cc:713
 hparticlebooker.cc:714
 hparticlebooker.cc:715
 hparticlebooker.cc:716
 hparticlebooker.cc:717
 hparticlebooker.cc:718
 hparticlebooker.cc:719
 hparticlebooker.cc:720
 hparticlebooker.cc:721
 hparticlebooker.cc:722
 hparticlebooker.cc:723
 hparticlebooker.cc:724
 hparticlebooker.cc:725
 hparticlebooker.cc:726
 hparticlebooker.cc:727
 hparticlebooker.cc:728
 hparticlebooker.cc:729
 hparticlebooker.cc:730
 hparticlebooker.cc:731
 hparticlebooker.cc:732
 hparticlebooker.cc:733
 hparticlebooker.cc:734
 hparticlebooker.cc:735
 hparticlebooker.cc:736
 hparticlebooker.cc:737
 hparticlebooker.cc:738
 hparticlebooker.cc:739
 hparticlebooker.cc:740
 hparticlebooker.cc:741
 hparticlebooker.cc:742
 hparticlebooker.cc:743
 hparticlebooker.cc:744
 hparticlebooker.cc:745
 hparticlebooker.cc:746
 hparticlebooker.cc:747
 hparticlebooker.cc:748
 hparticlebooker.cc:749
 hparticlebooker.cc:750
 hparticlebooker.cc:751
 hparticlebooker.cc:752
 hparticlebooker.cc:753
 hparticlebooker.cc:754
 hparticlebooker.cc:755
 hparticlebooker.cc:756
 hparticlebooker.cc:757
 hparticlebooker.cc:758
 hparticlebooker.cc:759
 hparticlebooker.cc:760
 hparticlebooker.cc:761
 hparticlebooker.cc:762
 hparticlebooker.cc:763
 hparticlebooker.cc:764
 hparticlebooker.cc:765
 hparticlebooker.cc:766
 hparticlebooker.cc:767
 hparticlebooker.cc:768
 hparticlebooker.cc:769
 hparticlebooker.cc:770
 hparticlebooker.cc:771
 hparticlebooker.cc:772
 hparticlebooker.cc:773
 hparticlebooker.cc:774
 hparticlebooker.cc:775
 hparticlebooker.cc:776
 hparticlebooker.cc:777
 hparticlebooker.cc:778
 hparticlebooker.cc:779
 hparticlebooker.cc:780
 hparticlebooker.cc:781
 hparticlebooker.cc:782
 hparticlebooker.cc:783
 hparticlebooker.cc:784
 hparticlebooker.cc:785
 hparticlebooker.cc:786
 hparticlebooker.cc:787
 hparticlebooker.cc:788
 hparticlebooker.cc:789
 hparticlebooker.cc:790
 hparticlebooker.cc:791
 hparticlebooker.cc:792
 hparticlebooker.cc:793
 hparticlebooker.cc:794
 hparticlebooker.cc:795
 hparticlebooker.cc:796
 hparticlebooker.cc:797
 hparticlebooker.cc:798
 hparticlebooker.cc:799
 hparticlebooker.cc:800
 hparticlebooker.cc:801
 hparticlebooker.cc:802
 hparticlebooker.cc:803
 hparticlebooker.cc:804
 hparticlebooker.cc:805
 hparticlebooker.cc:806
 hparticlebooker.cc:807
 hparticlebooker.cc:808
 hparticlebooker.cc:809
 hparticlebooker.cc:810
 hparticlebooker.cc:811
 hparticlebooker.cc:812
 hparticlebooker.cc:813
 hparticlebooker.cc:814
 hparticlebooker.cc:815
 hparticlebooker.cc:816
 hparticlebooker.cc:817
 hparticlebooker.cc:818
 hparticlebooker.cc:819
 hparticlebooker.cc:820
 hparticlebooker.cc:821
 hparticlebooker.cc:822
 hparticlebooker.cc:823
 hparticlebooker.cc:824
 hparticlebooker.cc:825
 hparticlebooker.cc:826
 hparticlebooker.cc:827
 hparticlebooker.cc:828
 hparticlebooker.cc:829
 hparticlebooker.cc:830
 hparticlebooker.cc:831
 hparticlebooker.cc:832
 hparticlebooker.cc:833
 hparticlebooker.cc:834
 hparticlebooker.cc:835
 hparticlebooker.cc:836
 hparticlebooker.cc:837
 hparticlebooker.cc:838
 hparticlebooker.cc:839
 hparticlebooker.cc:840
 hparticlebooker.cc:841
 hparticlebooker.cc:842
 hparticlebooker.cc:843
 hparticlebooker.cc:844
 hparticlebooker.cc:845
 hparticlebooker.cc:846
 hparticlebooker.cc:847
 hparticlebooker.cc:848
 hparticlebooker.cc:849
 hparticlebooker.cc:850
 hparticlebooker.cc:851
 hparticlebooker.cc:852
 hparticlebooker.cc:853
 hparticlebooker.cc:854
 hparticlebooker.cc:855
 hparticlebooker.cc:856
 hparticlebooker.cc:857
 hparticlebooker.cc:858
 hparticlebooker.cc:859
 hparticlebooker.cc:860
 hparticlebooker.cc:861
 hparticlebooker.cc:862
 hparticlebooker.cc:863
 hparticlebooker.cc:864
 hparticlebooker.cc:865
 hparticlebooker.cc:866
 hparticlebooker.cc:867
 hparticlebooker.cc:868
 hparticlebooker.cc:869
 hparticlebooker.cc:870
 hparticlebooker.cc:871
 hparticlebooker.cc:872
 hparticlebooker.cc:873
 hparticlebooker.cc:874
 hparticlebooker.cc:875
 hparticlebooker.cc:876
 hparticlebooker.cc:877
 hparticlebooker.cc:878
 hparticlebooker.cc:879
 hparticlebooker.cc:880
 hparticlebooker.cc:881
 hparticlebooker.cc:882
 hparticlebooker.cc:883
 hparticlebooker.cc:884
 hparticlebooker.cc:885
 hparticlebooker.cc:886
 hparticlebooker.cc:887
 hparticlebooker.cc:888
 hparticlebooker.cc:889
 hparticlebooker.cc:890
 hparticlebooker.cc:891
 hparticlebooker.cc:892
 hparticlebooker.cc:893
 hparticlebooker.cc:894
 hparticlebooker.cc:895
 hparticlebooker.cc:896
 hparticlebooker.cc:897
 hparticlebooker.cc:898
 hparticlebooker.cc:899
 hparticlebooker.cc:900
 hparticlebooker.cc:901
 hparticlebooker.cc:902
 hparticlebooker.cc:903
 hparticlebooker.cc:904
 hparticlebooker.cc:905
 hparticlebooker.cc:906
 hparticlebooker.cc:907
 hparticlebooker.cc:908
 hparticlebooker.cc:909
 hparticlebooker.cc:910
 hparticlebooker.cc:911
 hparticlebooker.cc:912
 hparticlebooker.cc:913
 hparticlebooker.cc:914
 hparticlebooker.cc:915
 hparticlebooker.cc:916
 hparticlebooker.cc:917
 hparticlebooker.cc:918
 hparticlebooker.cc:919
 hparticlebooker.cc:920
 hparticlebooker.cc:921
 hparticlebooker.cc:922
 hparticlebooker.cc:923
 hparticlebooker.cc:924
 hparticlebooker.cc:925
 hparticlebooker.cc:926
 hparticlebooker.cc:927
 hparticlebooker.cc:928
 hparticlebooker.cc:929
 hparticlebooker.cc:930
 hparticlebooker.cc:931
 hparticlebooker.cc:932
 hparticlebooker.cc:933
 hparticlebooker.cc:934
 hparticlebooker.cc:935
 hparticlebooker.cc:936
 hparticlebooker.cc:937
 hparticlebooker.cc:938
 hparticlebooker.cc:939
 hparticlebooker.cc:940
 hparticlebooker.cc:941
 hparticlebooker.cc:942
 hparticlebooker.cc:943
 hparticlebooker.cc:944
 hparticlebooker.cc:945
 hparticlebooker.cc:946
 hparticlebooker.cc:947
 hparticlebooker.cc:948
 hparticlebooker.cc:949
 hparticlebooker.cc:950
 hparticlebooker.cc:951
 hparticlebooker.cc:952
 hparticlebooker.cc:953
 hparticlebooker.cc:954
 hparticlebooker.cc:955
 hparticlebooker.cc:956
 hparticlebooker.cc:957
 hparticlebooker.cc:958
 hparticlebooker.cc:959
 hparticlebooker.cc:960
 hparticlebooker.cc:961
 hparticlebooker.cc:962
 hparticlebooker.cc:963
 hparticlebooker.cc:964
 hparticlebooker.cc:965
 hparticlebooker.cc:966
 hparticlebooker.cc:967
 hparticlebooker.cc:968
 hparticlebooker.cc:969
 hparticlebooker.cc:970
 hparticlebooker.cc:971
 hparticlebooker.cc:972
 hparticlebooker.cc:973
 hparticlebooker.cc:974
 hparticlebooker.cc:975
 hparticlebooker.cc:976
 hparticlebooker.cc:977
 hparticlebooker.cc:978
 hparticlebooker.cc:979
 hparticlebooker.cc:980
 hparticlebooker.cc:981
 hparticlebooker.cc:982
 hparticlebooker.cc:983
 hparticlebooker.cc:984
 hparticlebooker.cc:985
 hparticlebooker.cc:986
 hparticlebooker.cc:987
 hparticlebooker.cc:988
 hparticlebooker.cc:989
 hparticlebooker.cc:990
 hparticlebooker.cc:991
 hparticlebooker.cc:992
 hparticlebooker.cc:993
 hparticlebooker.cc:994
 hparticlebooker.cc:995
 hparticlebooker.cc:996
 hparticlebooker.cc:997
 hparticlebooker.cc:998
 hparticlebooker.cc:999
 hparticlebooker.cc:1000
 hparticlebooker.cc:1001
 hparticlebooker.cc:1002
 hparticlebooker.cc:1003
 hparticlebooker.cc:1004
 hparticlebooker.cc:1005
 hparticlebooker.cc:1006
 hparticlebooker.cc:1007
 hparticlebooker.cc:1008
 hparticlebooker.cc:1009
 hparticlebooker.cc:1010
 hparticlebooker.cc:1011
 hparticlebooker.cc:1012
 hparticlebooker.cc:1013
 hparticlebooker.cc:1014
 hparticlebooker.cc:1015
 hparticlebooker.cc:1016
 hparticlebooker.cc:1017
 hparticlebooker.cc:1018
 hparticlebooker.cc:1019
 hparticlebooker.cc:1020
 hparticlebooker.cc:1021
 hparticlebooker.cc:1022
 hparticlebooker.cc:1023
 hparticlebooker.cc:1024
 hparticlebooker.cc:1025
 hparticlebooker.cc:1026
 hparticlebooker.cc:1027
 hparticlebooker.cc:1028
 hparticlebooker.cc:1029
 hparticlebooker.cc:1030
 hparticlebooker.cc:1031
 hparticlebooker.cc:1032
 hparticlebooker.cc:1033
 hparticlebooker.cc:1034
 hparticlebooker.cc:1035
 hparticlebooker.cc:1036
 hparticlebooker.cc:1037
 hparticlebooker.cc:1038
 hparticlebooker.cc:1039
 hparticlebooker.cc:1040
 hparticlebooker.cc:1041
 hparticlebooker.cc:1042
 hparticlebooker.cc:1043
 hparticlebooker.cc:1044
 hparticlebooker.cc:1045
 hparticlebooker.cc:1046
 hparticlebooker.cc:1047
 hparticlebooker.cc:1048
 hparticlebooker.cc:1049
 hparticlebooker.cc:1050
 hparticlebooker.cc:1051
 hparticlebooker.cc:1052
 hparticlebooker.cc:1053
 hparticlebooker.cc:1054
 hparticlebooker.cc:1055
 hparticlebooker.cc:1056
 hparticlebooker.cc:1057
 hparticlebooker.cc:1058
 hparticlebooker.cc:1059
 hparticlebooker.cc:1060
 hparticlebooker.cc:1061
 hparticlebooker.cc:1062
 hparticlebooker.cc:1063
 hparticlebooker.cc:1064
 hparticlebooker.cc:1065
 hparticlebooker.cc:1066
 hparticlebooker.cc:1067
 hparticlebooker.cc:1068
 hparticlebooker.cc:1069
 hparticlebooker.cc:1070
 hparticlebooker.cc:1071
 hparticlebooker.cc:1072
 hparticlebooker.cc:1073
 hparticlebooker.cc:1074
 hparticlebooker.cc:1075
 hparticlebooker.cc:1076
 hparticlebooker.cc:1077
 hparticlebooker.cc:1078
 hparticlebooker.cc:1079
 hparticlebooker.cc:1080
 hparticlebooker.cc:1081
 hparticlebooker.cc:1082
 hparticlebooker.cc:1083
 hparticlebooker.cc:1084
 hparticlebooker.cc:1085
 hparticlebooker.cc:1086
 hparticlebooker.cc:1087
 hparticlebooker.cc:1088
 hparticlebooker.cc:1089
 hparticlebooker.cc:1090
 hparticlebooker.cc:1091
 hparticlebooker.cc:1092
 hparticlebooker.cc:1093
 hparticlebooker.cc:1094
 hparticlebooker.cc:1095
 hparticlebooker.cc:1096
 hparticlebooker.cc:1097
 hparticlebooker.cc:1098
 hparticlebooker.cc:1099
 hparticlebooker.cc:1100
 hparticlebooker.cc:1101
 hparticlebooker.cc:1102
 hparticlebooker.cc:1103
 hparticlebooker.cc:1104
 hparticlebooker.cc:1105
 hparticlebooker.cc:1106
 hparticlebooker.cc:1107
 hparticlebooker.cc:1108
 hparticlebooker.cc:1109
 hparticlebooker.cc:1110
 hparticlebooker.cc:1111
 hparticlebooker.cc:1112
 hparticlebooker.cc:1113
 hparticlebooker.cc:1114
 hparticlebooker.cc:1115
 hparticlebooker.cc:1116
 hparticlebooker.cc:1117
 hparticlebooker.cc:1118
 hparticlebooker.cc:1119
 hparticlebooker.cc:1120
 hparticlebooker.cc:1121
 hparticlebooker.cc:1122
 hparticlebooker.cc:1123
 hparticlebooker.cc:1124
 hparticlebooker.cc:1125
 hparticlebooker.cc:1126
 hparticlebooker.cc:1127
 hparticlebooker.cc:1128
 hparticlebooker.cc:1129
 hparticlebooker.cc:1130
 hparticlebooker.cc:1131
 hparticlebooker.cc:1132
 hparticlebooker.cc:1133
 hparticlebooker.cc:1134
 hparticlebooker.cc:1135
 hparticlebooker.cc:1136
 hparticlebooker.cc:1137
 hparticlebooker.cc:1138
 hparticlebooker.cc:1139
 hparticlebooker.cc:1140
 hparticlebooker.cc:1141
 hparticlebooker.cc:1142
 hparticlebooker.cc:1143
 hparticlebooker.cc:1144
 hparticlebooker.cc:1145
 hparticlebooker.cc:1146
 hparticlebooker.cc:1147
 hparticlebooker.cc:1148
 hparticlebooker.cc:1149
 hparticlebooker.cc:1150
 hparticlebooker.cc:1151
 hparticlebooker.cc:1152
 hparticlebooker.cc:1153
 hparticlebooker.cc:1154
 hparticlebooker.cc:1155
 hparticlebooker.cc:1156
 hparticlebooker.cc:1157
 hparticlebooker.cc:1158
 hparticlebooker.cc:1159
 hparticlebooker.cc:1160
 hparticlebooker.cc:1161
 hparticlebooker.cc:1162
 hparticlebooker.cc:1163
 hparticlebooker.cc:1164
 hparticlebooker.cc:1165
 hparticlebooker.cc:1166
 hparticlebooker.cc:1167
 hparticlebooker.cc:1168
 hparticlebooker.cc:1169
 hparticlebooker.cc:1170
 hparticlebooker.cc:1171
 hparticlebooker.cc:1172
 hparticlebooker.cc:1173
 hparticlebooker.cc:1174
 hparticlebooker.cc:1175
 hparticlebooker.cc:1176
 hparticlebooker.cc:1177
 hparticlebooker.cc:1178
 hparticlebooker.cc:1179
 hparticlebooker.cc:1180
 hparticlebooker.cc:1181
 hparticlebooker.cc:1182
 hparticlebooker.cc:1183
 hparticlebooker.cc:1184
 hparticlebooker.cc:1185
 hparticlebooker.cc:1186
 hparticlebooker.cc:1187
 hparticlebooker.cc:1188
 hparticlebooker.cc:1189
 hparticlebooker.cc:1190
 hparticlebooker.cc:1191
 hparticlebooker.cc:1192
 hparticlebooker.cc:1193
 hparticlebooker.cc:1194
 hparticlebooker.cc:1195
 hparticlebooker.cc:1196
 hparticlebooker.cc:1197
 hparticlebooker.cc:1198
 hparticlebooker.cc:1199
 hparticlebooker.cc:1200
 hparticlebooker.cc:1201
 hparticlebooker.cc:1202
 hparticlebooker.cc:1203
 hparticlebooker.cc:1204
 hparticlebooker.cc:1205
 hparticlebooker.cc:1206
 hparticlebooker.cc:1207
 hparticlebooker.cc:1208
 hparticlebooker.cc:1209
 hparticlebooker.cc:1210
 hparticlebooker.cc:1211
 hparticlebooker.cc:1212
 hparticlebooker.cc:1213
 hparticlebooker.cc:1214
 hparticlebooker.cc:1215
 hparticlebooker.cc:1216
 hparticlebooker.cc:1217
 hparticlebooker.cc:1218
 hparticlebooker.cc:1219
 hparticlebooker.cc:1220
 hparticlebooker.cc:1221
 hparticlebooker.cc:1222
 hparticlebooker.cc:1223
 hparticlebooker.cc:1224
 hparticlebooker.cc:1225
 hparticlebooker.cc:1226
 hparticlebooker.cc:1227
 hparticlebooker.cc:1228
 hparticlebooker.cc:1229
 hparticlebooker.cc:1230
 hparticlebooker.cc:1231
 hparticlebooker.cc:1232
 hparticlebooker.cc:1233
 hparticlebooker.cc:1234
 hparticlebooker.cc:1235
 hparticlebooker.cc:1236
 hparticlebooker.cc:1237
 hparticlebooker.cc:1238
 hparticlebooker.cc:1239
 hparticlebooker.cc:1240
 hparticlebooker.cc:1241
 hparticlebooker.cc:1242
 hparticlebooker.cc:1243
 hparticlebooker.cc:1244
 hparticlebooker.cc:1245
 hparticlebooker.cc:1246
 hparticlebooker.cc:1247
 hparticlebooker.cc:1248
 hparticlebooker.cc:1249
 hparticlebooker.cc:1250
 hparticlebooker.cc:1251
 hparticlebooker.cc:1252
 hparticlebooker.cc:1253
 hparticlebooker.cc:1254
 hparticlebooker.cc:1255
 hparticlebooker.cc:1256
 hparticlebooker.cc:1257
 hparticlebooker.cc:1258
 hparticlebooker.cc:1259
 hparticlebooker.cc:1260
 hparticlebooker.cc:1261
 hparticlebooker.cc:1262
 hparticlebooker.cc:1263
 hparticlebooker.cc:1264
 hparticlebooker.cc:1265
 hparticlebooker.cc:1266
 hparticlebooker.cc:1267
 hparticlebooker.cc:1268
 hparticlebooker.cc:1269
 hparticlebooker.cc:1270
 hparticlebooker.cc:1271
 hparticlebooker.cc:1272
 hparticlebooker.cc:1273
 hparticlebooker.cc:1274
 hparticlebooker.cc:1275
 hparticlebooker.cc:1276
 hparticlebooker.cc:1277
 hparticlebooker.cc:1278
 hparticlebooker.cc:1279
 hparticlebooker.cc:1280
 hparticlebooker.cc:1281
 hparticlebooker.cc:1282
 hparticlebooker.cc:1283
 hparticlebooker.cc:1284
 hparticlebooker.cc:1285
 hparticlebooker.cc:1286
 hparticlebooker.cc:1287
 hparticlebooker.cc:1288
 hparticlebooker.cc:1289
 hparticlebooker.cc:1290
 hparticlebooker.cc:1291
 hparticlebooker.cc:1292
 hparticlebooker.cc:1293
 hparticlebooker.cc:1294
 hparticlebooker.cc:1295
 hparticlebooker.cc:1296
 hparticlebooker.cc:1297
 hparticlebooker.cc:1298
 hparticlebooker.cc:1299
 hparticlebooker.cc:1300
 hparticlebooker.cc:1301
 hparticlebooker.cc:1302
 hparticlebooker.cc:1303
 hparticlebooker.cc:1304
 hparticlebooker.cc:1305
 hparticlebooker.cc:1306
 hparticlebooker.cc:1307
 hparticlebooker.cc:1308
 hparticlebooker.cc:1309
 hparticlebooker.cc:1310
 hparticlebooker.cc:1311
 hparticlebooker.cc:1312
 hparticlebooker.cc:1313
 hparticlebooker.cc:1314
 hparticlebooker.cc:1315
 hparticlebooker.cc:1316
 hparticlebooker.cc:1317
 hparticlebooker.cc:1318
 hparticlebooker.cc:1319
 hparticlebooker.cc:1320
 hparticlebooker.cc:1321
 hparticlebooker.cc:1322
 hparticlebooker.cc:1323
 hparticlebooker.cc:1324
 hparticlebooker.cc:1325
 hparticlebooker.cc:1326
 hparticlebooker.cc:1327
 hparticlebooker.cc:1328
 hparticlebooker.cc:1329
 hparticlebooker.cc:1330
 hparticlebooker.cc:1331
 hparticlebooker.cc:1332
 hparticlebooker.cc:1333
 hparticlebooker.cc:1334
 hparticlebooker.cc:1335
 hparticlebooker.cc:1336
 hparticlebooker.cc:1337
 hparticlebooker.cc:1338
 hparticlebooker.cc:1339
 hparticlebooker.cc:1340
 hparticlebooker.cc:1341
 hparticlebooker.cc:1342
 hparticlebooker.cc:1343
 hparticlebooker.cc:1344
 hparticlebooker.cc:1345
 hparticlebooker.cc:1346
 hparticlebooker.cc:1347
 hparticlebooker.cc:1348
 hparticlebooker.cc:1349
 hparticlebooker.cc:1350
 hparticlebooker.cc:1351
 hparticlebooker.cc:1352
 hparticlebooker.cc:1353
 hparticlebooker.cc:1354
 hparticlebooker.cc:1355
 hparticlebooker.cc:1356
 hparticlebooker.cc:1357
 hparticlebooker.cc:1358
 hparticlebooker.cc:1359
 hparticlebooker.cc:1360
 hparticlebooker.cc:1361
 hparticlebooker.cc:1362
 hparticlebooker.cc:1363
 hparticlebooker.cc:1364
 hparticlebooker.cc:1365
 hparticlebooker.cc:1366
 hparticlebooker.cc:1367
 hparticlebooker.cc:1368
 hparticlebooker.cc:1369
 hparticlebooker.cc:1370
 hparticlebooker.cc:1371
 hparticlebooker.cc:1372
 hparticlebooker.cc:1373
 hparticlebooker.cc:1374
 hparticlebooker.cc:1375
 hparticlebooker.cc:1376
 hparticlebooker.cc:1377
 hparticlebooker.cc:1378
 hparticlebooker.cc:1379
 hparticlebooker.cc:1380
 hparticlebooker.cc:1381
 hparticlebooker.cc:1382
 hparticlebooker.cc:1383
 hparticlebooker.cc:1384
 hparticlebooker.cc:1385
 hparticlebooker.cc:1386
 hparticlebooker.cc:1387
 hparticlebooker.cc:1388
 hparticlebooker.cc:1389
 hparticlebooker.cc:1390
 hparticlebooker.cc:1391
 hparticlebooker.cc:1392
 hparticlebooker.cc:1393
 hparticlebooker.cc:1394
 hparticlebooker.cc:1395
 hparticlebooker.cc:1396
 hparticlebooker.cc:1397
 hparticlebooker.cc:1398
 hparticlebooker.cc:1399
 hparticlebooker.cc:1400
 hparticlebooker.cc:1401
 hparticlebooker.cc:1402
 hparticlebooker.cc:1403
 hparticlebooker.cc:1404
 hparticlebooker.cc:1405
 hparticlebooker.cc:1406
 hparticlebooker.cc:1407
 hparticlebooker.cc:1408
 hparticlebooker.cc:1409
 hparticlebooker.cc:1410
 hparticlebooker.cc:1411
 hparticlebooker.cc:1412
 hparticlebooker.cc:1413
 hparticlebooker.cc:1414
 hparticlebooker.cc:1415
 hparticlebooker.cc:1416
 hparticlebooker.cc:1417
 hparticlebooker.cc:1418
 hparticlebooker.cc:1419
 hparticlebooker.cc:1420
 hparticlebooker.cc:1421
 hparticlebooker.cc:1422
 hparticlebooker.cc:1423
 hparticlebooker.cc:1424
 hparticlebooker.cc:1425
 hparticlebooker.cc:1426
 hparticlebooker.cc:1427
 hparticlebooker.cc:1428
 hparticlebooker.cc:1429
 hparticlebooker.cc:1430
 hparticlebooker.cc:1431
 hparticlebooker.cc:1432
 hparticlebooker.cc:1433
 hparticlebooker.cc:1434
 hparticlebooker.cc:1435
 hparticlebooker.cc:1436
 hparticlebooker.cc:1437
 hparticlebooker.cc:1438
 hparticlebooker.cc:1439
 hparticlebooker.cc:1440
 hparticlebooker.cc:1441
 hparticlebooker.cc:1442
 hparticlebooker.cc:1443
 hparticlebooker.cc:1444
 hparticlebooker.cc:1445
 hparticlebooker.cc:1446
 hparticlebooker.cc:1447
 hparticlebooker.cc:1448
 hparticlebooker.cc:1449
 hparticlebooker.cc:1450
 hparticlebooker.cc:1451
 hparticlebooker.cc:1452
 hparticlebooker.cc:1453
 hparticlebooker.cc:1454
 hparticlebooker.cc:1455
 hparticlebooker.cc:1456
 hparticlebooker.cc:1457
 hparticlebooker.cc:1458
 hparticlebooker.cc:1459
 hparticlebooker.cc:1460
 hparticlebooker.cc:1461
 hparticlebooker.cc:1462
 hparticlebooker.cc:1463
 hparticlebooker.cc:1464
 hparticlebooker.cc:1465
 hparticlebooker.cc:1466
 hparticlebooker.cc:1467
 hparticlebooker.cc:1468
 hparticlebooker.cc:1469
 hparticlebooker.cc:1470
 hparticlebooker.cc:1471
 hparticlebooker.cc:1472
 hparticlebooker.cc:1473
 hparticlebooker.cc:1474
 hparticlebooker.cc:1475
 hparticlebooker.cc:1476
 hparticlebooker.cc:1477
 hparticlebooker.cc:1478
 hparticlebooker.cc:1479
 hparticlebooker.cc:1480
 hparticlebooker.cc:1481
 hparticlebooker.cc:1482
 hparticlebooker.cc:1483
 hparticlebooker.cc:1484
 hparticlebooker.cc:1485
 hparticlebooker.cc:1486
 hparticlebooker.cc:1487
 hparticlebooker.cc:1488
 hparticlebooker.cc:1489
 hparticlebooker.cc:1490
 hparticlebooker.cc:1491
 hparticlebooker.cc:1492
 hparticlebooker.cc:1493
 hparticlebooker.cc:1494
 hparticlebooker.cc:1495
 hparticlebooker.cc:1496
 hparticlebooker.cc:1497
 hparticlebooker.cc:1498
 hparticlebooker.cc:1499
 hparticlebooker.cc:1500
 hparticlebooker.cc:1501
 hparticlebooker.cc:1502
 hparticlebooker.cc:1503
 hparticlebooker.cc:1504
 hparticlebooker.cc:1505
 hparticlebooker.cc:1506
 hparticlebooker.cc:1507
 hparticlebooker.cc:1508
 hparticlebooker.cc:1509
 hparticlebooker.cc:1510
 hparticlebooker.cc:1511
 hparticlebooker.cc:1512
 hparticlebooker.cc:1513
 hparticlebooker.cc:1514
 hparticlebooker.cc:1515
 hparticlebooker.cc:1516
 hparticlebooker.cc:1517
 hparticlebooker.cc:1518
 hparticlebooker.cc:1519
 hparticlebooker.cc:1520
 hparticlebooker.cc:1521
 hparticlebooker.cc:1522
 hparticlebooker.cc:1523
 hparticlebooker.cc:1524
 hparticlebooker.cc:1525
 hparticlebooker.cc:1526
 hparticlebooker.cc:1527
 hparticlebooker.cc:1528
 hparticlebooker.cc:1529
 hparticlebooker.cc:1530
 hparticlebooker.cc:1531
 hparticlebooker.cc:1532
 hparticlebooker.cc:1533
 hparticlebooker.cc:1534
 hparticlebooker.cc:1535
 hparticlebooker.cc:1536
 hparticlebooker.cc:1537
 hparticlebooker.cc:1538
 hparticlebooker.cc:1539
 hparticlebooker.cc:1540
 hparticlebooker.cc:1541
 hparticlebooker.cc:1542
 hparticlebooker.cc:1543
 hparticlebooker.cc:1544
 hparticlebooker.cc:1545
 hparticlebooker.cc:1546
 hparticlebooker.cc:1547
 hparticlebooker.cc:1548
 hparticlebooker.cc:1549
 hparticlebooker.cc:1550
 hparticlebooker.cc:1551
 hparticlebooker.cc:1552
 hparticlebooker.cc:1553
 hparticlebooker.cc:1554
 hparticlebooker.cc:1555
 hparticlebooker.cc:1556
 hparticlebooker.cc:1557
 hparticlebooker.cc:1558
 hparticlebooker.cc:1559
 hparticlebooker.cc:1560
 hparticlebooker.cc:1561
 hparticlebooker.cc:1562
 hparticlebooker.cc:1563
 hparticlebooker.cc:1564
 hparticlebooker.cc:1565
 hparticlebooker.cc:1566
 hparticlebooker.cc:1567
 hparticlebooker.cc:1568
 hparticlebooker.cc:1569
 hparticlebooker.cc:1570
 hparticlebooker.cc:1571
 hparticlebooker.cc:1572
 hparticlebooker.cc:1573
 hparticlebooker.cc:1574
 hparticlebooker.cc:1575
 hparticlebooker.cc:1576
 hparticlebooker.cc:1577
 hparticlebooker.cc:1578
 hparticlebooker.cc:1579
 hparticlebooker.cc:1580
 hparticlebooker.cc:1581
 hparticlebooker.cc:1582
 hparticlebooker.cc:1583
 hparticlebooker.cc:1584
 hparticlebooker.cc:1585
 hparticlebooker.cc:1586
 hparticlebooker.cc:1587
 hparticlebooker.cc:1588
 hparticlebooker.cc:1589
 hparticlebooker.cc:1590
 hparticlebooker.cc:1591
 hparticlebooker.cc:1592
 hparticlebooker.cc:1593
 hparticlebooker.cc:1594
 hparticlebooker.cc:1595
 hparticlebooker.cc:1596
 hparticlebooker.cc:1597
 hparticlebooker.cc:1598
 hparticlebooker.cc:1599
 hparticlebooker.cc:1600
 hparticlebooker.cc:1601
 hparticlebooker.cc:1602
 hparticlebooker.cc:1603
 hparticlebooker.cc:1604
 hparticlebooker.cc:1605
 hparticlebooker.cc:1606
 hparticlebooker.cc:1607
 hparticlebooker.cc:1608
 hparticlebooker.cc:1609
 hparticlebooker.cc:1610
 hparticlebooker.cc:1611
 hparticlebooker.cc:1612
 hparticlebooker.cc:1613
 hparticlebooker.cc:1614
 hparticlebooker.cc:1615
 hparticlebooker.cc:1616
 hparticlebooker.cc:1617
 hparticlebooker.cc:1618
 hparticlebooker.cc:1619
 hparticlebooker.cc:1620
 hparticlebooker.cc:1621
 hparticlebooker.cc:1622
 hparticlebooker.cc:1623
 hparticlebooker.cc:1624
 hparticlebooker.cc:1625
 hparticlebooker.cc:1626
 hparticlebooker.cc:1627
 hparticlebooker.cc:1628
 hparticlebooker.cc:1629
 hparticlebooker.cc:1630
 hparticlebooker.cc:1631
 hparticlebooker.cc:1632
 hparticlebooker.cc:1633
 hparticlebooker.cc:1634
 hparticlebooker.cc:1635
 hparticlebooker.cc:1636
 hparticlebooker.cc:1637
 hparticlebooker.cc:1638
 hparticlebooker.cc:1639
 hparticlebooker.cc:1640
 hparticlebooker.cc:1641
 hparticlebooker.cc:1642
 hparticlebooker.cc:1643
 hparticlebooker.cc:1644
 hparticlebooker.cc:1645
 hparticlebooker.cc:1646
 hparticlebooker.cc:1647
 hparticlebooker.cc:1648
 hparticlebooker.cc:1649
 hparticlebooker.cc:1650
 hparticlebooker.cc:1651
 hparticlebooker.cc:1652
 hparticlebooker.cc:1653
 hparticlebooker.cc:1654
 hparticlebooker.cc:1655
 hparticlebooker.cc:1656
 hparticlebooker.cc:1657
 hparticlebooker.cc:1658
 hparticlebooker.cc:1659
 hparticlebooker.cc:1660
 hparticlebooker.cc:1661
 hparticlebooker.cc:1662
 hparticlebooker.cc:1663
 hparticlebooker.cc:1664
 hparticlebooker.cc:1665
 hparticlebooker.cc:1666
 hparticlebooker.cc:1667
 hparticlebooker.cc:1668
 hparticlebooker.cc:1669
 hparticlebooker.cc:1670
 hparticlebooker.cc:1671
 hparticlebooker.cc:1672
 hparticlebooker.cc:1673
 hparticlebooker.cc:1674
 hparticlebooker.cc:1675
 hparticlebooker.cc:1676
 hparticlebooker.cc:1677
 hparticlebooker.cc:1678
 hparticlebooker.cc:1679
 hparticlebooker.cc:1680
 hparticlebooker.cc:1681
 hparticlebooker.cc:1682