#include "hparticletracksorter.h"
#include "hparticletool.h"
#include "hades.h"
#include "hruntimedb.h"
#include "hevent.h"
#include "hparticlecand.h"
#include "hemccluster.h"
#include "hparticledef.h"
#include "emcdef.h"
#include "htool.h"
#include <algorithm>
#include <iostream>
#include <iomanip>
using namespace std;
#define DEBUG 0
ClassImp(sorter_setup)
ClassImp(HParticleTrackSorter)
Bool_t  HParticleTrackSorter::kDebug               = kFALSE;
Int_t   HParticleTrackSorter::printLevel           = 1;
Int_t   HParticleTrackSorter::kSwitchIndex         = 0;
Int_t   HParticleTrackSorter::kSwitchQuality       = 0;
Int_t   HParticleTrackSorter::kSwitchParticle      = 0;
Int_t   HParticleTrackSorter::kSwitchRICHMatching  = Particle::kUseRKRICHWindowSorter;
Float_t HParticleTrackSorter::fRICHMDCWindow       = 4.;
Bool_t  HParticleTrackSorter::kIsFieldOn           = kTRUE;
Bool_t  HParticleTrackSorter::kIgnoreRICH          = kFALSE;
Bool_t  HParticleTrackSorter::kIgnoreInnerMDC      = kFALSE;
Bool_t  HParticleTrackSorter::kIgnoreOuterMDC      = kFALSE;
Bool_t  HParticleTrackSorter::kIgnoreMETA          = kFALSE;
Bool_t  HParticleTrackSorter::kIgnorePreviousIndex = kFALSE;
Bool_t  HParticleTrackSorter::kUseYMatching        = kTRUE;
Bool_t  HParticleTrackSorter::kUseYMatchingScaling = kTRUE;
Float_t HParticleTrackSorter::fMetaBoundary        = 4.0;
Bool_t  HParticleTrackSorter::kUseBeta             = kTRUE;
Float_t HParticleTrackSorter::fBetaLepCut          = 0.9;
Bool_t  HParticleTrackSorter::kUseFakeRejection    = kTRUE;
Bool_t  HParticleTrackSorter::kUseMETAQA           = kTRUE;
Float_t HParticleTrackSorter::fMETAQACut           = 3.0;
Float_t HParticleTrackSorter::fTOFMAXCut           = 60.0;
Float_t HParticleTrackSorter::fDeltaSegCut         = 2.0;
Bool_t (*HParticleTrackSorter::pUserSort)(candidateSort*, candidateSort*) = NULL;
HParticleTrackSorter::HParticleTrackSorter(void)
    : TNamed("ParticleSorter","PID track candidate sorter")
{
    clear();
    setup.setDefault();
}
HParticleTrackSorter::HParticleTrackSorter(TString name, TString title)
: TNamed(name, title)
{
    clear();
    setup.setDefault();
}
HParticleTrackSorter::~HParticleTrackSorter(void)
{
    if(nameIndex)           delete [] nameIndex;
    if(nameQuality)         delete [] nameQuality;
    if(iterParticleCandCat) delete iterParticleCandCat;
}
void HParticleTrackSorter::clear()
{
    
    nt                   = NULL;
    isSimulation         = kFALSE;
    nameIndex            = 0;
    nameQuality          = 0;
    pParticleCandCat     =  NULL;
    pEmcClusterCat       =  NULL;
    iterParticleCandCat  =  NULL;
    fill_Iteration       =  0;
    selectBest_Iteration =  0;
    currentEvent         = 100000000;
    fEvent               = NULL;
}
Bool_t HParticleTrackSorter::init(HRecEvent* evt)
{
    
    
    
    if(evt) { fEvent = evt; }
    else    { fEvent = (HRecEvent*)gHades->getCurrentEvent(); }
    pParticleCandCat = fEvent->getCategory(catParticleCand);
    if (!pParticleCandCat) {
	Error("HParticleTrackSorter::init()"," No HParticleCand Input -> Switching HParticleTrackSorter OFF");
    }
    else {
        if(iterParticleCandCat) delete iterParticleCandCat;
	iterParticleCandCat = (HIterator *) pParticleCandCat->MakeIterator();
    }
    pEmcClusterCat   = fEvent->getCategory(catEmcCluster);
    HCategory* catKine = fEvent->getCategory(catGeantKine);
    if(catKine) isSimulation = kTRUE;
    if(kDebug) {
	Int_t size;
	nameIndex   = HTool::parseString("kIsIndexRICH,kIsIndexInnerMDC,kIsIndexOuterMDC,"
					 "kIsIndexTOF,kIsIndexSHOWER,kIsIndexRPC,kIsIndexMETA",size,",",kFALSE);
        cout<<"-------------------------------------------"<<endl;
	cout<<"HParticleTrackSorter::init() :"<<endl;
	cout<<"index :: " <<endl;
	for(Int_t i = 0; i < size; i ++){
	    cout<<i <<" "<<nameIndex[i].Data()<<endl;
	}
	nameQuality = HTool::parseString("kIsBestHitRICH,kIsBestHitInnerMDC,kIsBestHitOuterMDC,kIsBestHitMETA,"
					 "kIsBestRK,kIsBestRKRKMETA,kIsBestRKRKMETARadius",size,",",kFALSE);
        for(Int_t i = 0; i < size; i ++){
	    cout<<i + SORTER_NUMBER_OF_INDEX<<" "<<nameQuality[i].Data()<<endl;
	}
	cout<<"-------------------------------------------"<<endl;
    }
     return kTRUE;
}
Bool_t HParticleTrackSorter::finalize(void)
{
    
    
    cleanUp(kTRUE);
    return kTRUE ;
}
Bool_t  HParticleTrackSorter::isDeltaSegOk(HParticleCand* cand)
{
    
    
    if(cand->getTheta2() ==-1) return kFALSE;
    if((fabs(cand->getPhi()   - cand->getPhi2())   < fDeltaSegCut) &&
       (fabs(cand->getTheta() - cand->getTheta2()) < fDeltaSegCut)
      ) return kTRUE;
    return kFALSE;
}
Int_t HParticleTrackSorter::clearVector( vector<candidateSort*>& all_candidateSorts)
{
    
    
    
    for(UInt_t i = 0; i < all_candidates.size() ; ++ i)
    {
	candidateSort* cand = all_candidates[i];
        delete cand;
    }
    all_candidates.clear();
    return 0;
}
Bool_t HParticleTrackSorter::cmpIndex(candidateSort* a, candidateSort* b)
{
    
    
    switch (kSwitchIndex) {
    case Particle::kIsIndexRICHSorter:
	
	return a->ind_RICH     < b->ind_RICH;
    case Particle::kIsIndexInnerMDCSorter:
	
	return a->ind_innerMDC < b->ind_innerMDC;
    case Particle::kIsIndexOuterMDCSorter:
	
	return a->ind_outerMDC < b->ind_outerMDC;
    case Particle::kIsIndexTOFSorter:
	
	return a->ind_TOF      < b->ind_TOF;
    case Particle::kIsIndexSHOWERSorter:
	
	return a->ind_SHOWER   < b->ind_SHOWER;
    case Particle::kIsIndexRPCSorter:
	
	return a->ind_RPC      < b->ind_RPC;
    default:
	::Error("HParticleTrackSorter::CmpIndex()","Unknown switch statement %i!",kSwitchIndex);
	return kFALSE;
    }
}
Bool_t HParticleTrackSorter::cmpQuality(candidateSort* a, candidateSort* b)
{
    
    
    
    switch (kSwitchQuality) {
    case Particle::kIsBestHitRICHSorter:
	
	return a->nPadsRich             < b->nPadsRich;
    case Particle::kIsBestHitInnerMDCSorter:
	
	return a->innerMDCChi2          < b->innerMDCChi2;
    case Particle::kIsBestHitOuterMDCSorter:
	
	return a->outerMDCChi2          < b->outerMDCChi2;
    case Particle::kIsBestHitMETASorter:
	
	return a->RK_META_match_Quality < b->RK_META_match_Quality;
    case Particle::kIsBestRKSorter:
        
	return a->RK_Chi2               < b->RK_Chi2;
    case Particle::kIsBestRKRKMETASorter:
	
        return (a->RK_Chi2 * a->RK_META_match_Quality)  < (b->RK_Chi2 * b->RK_META_match_Quality);
    case Particle::kIsBestRKRKMETARadiusSorter:
	
        return (a->RK_Chi2 * a->RK_META_match_Radius)  < (b->RK_Chi2 * b->RK_META_match_Radius);
    case Particle::kIsBestUserSorter:
	
	if(pUserSort == NULL) {
            ::Error("HParticleTrackSorter::CmpQuality()","kIsBestUser is set but user function pointer i NULL!");
	    return kTRUE;
	}
        else return (*pUserSort)(a,b);
    default:
	::Error("HParticleTrackSorter::CmpQuality()","Unknown switch statement %i!",kSwitchQuality);
        return kFALSE;
    }
}
Bool_t HParticleTrackSorter::rejectIndex(candidateSort* a, Particle::ESwitch byIndex, Int_t& index)
{
    
    
    
    switch (byIndex) {
    case Particle::kIsIndexRICHSorter:
	
	return ( index = a->ind_RICH )     < 0;
    case Particle::kIsIndexInnerMDCSorter:
	
	return ( index = a->ind_innerMDC ) < 0;
    case Particle::kIsIndexOuterMDCSorter:
	
	return ( index = a->ind_outerMDC ) < 0;
    case Particle::kIsIndexTOFSorter:
	
	return ( index = a->ind_TOF )      < 0;
    case Particle::kIsIndexSHOWERSorter:
	
	return ( index = a->ind_SHOWER )   < 0;
    case Particle::kIsIndexRPCSorter:
	
	return ( index = a->ind_RPC )      < 0;
    default:
	::Error("HParticleTrackSorter::rejectIndex()","Unknown switch statement %i!",byIndex);
        return kFALSE;
    }
}
Bool_t HParticleTrackSorter::rejectQuality(candidateSort* a, Particle::ESwitch byQuality)
{
    
    
    
    switch (byQuality) {
    case Particle::kIsBestHitRICHSorter:
	
	return a->ind_RICH < 0;
    case Particle::kIsBestHitInnerMDCSorter:
	
	return a->innerMDCChi2 < 0;
    case Particle::kIsBestHitOuterMDCSorter:
	
	return (a->outerMDCChi2 < 0 || a->ind_outerMDC < 0);
    case Particle::kIsBestHitMETASorter:
	
	return (a->ind_TOF < 0 && a->ind_SHOWER < 0 && a->ind_RPC < 0);
    case Particle::kIsBestRKSorter:
	
	return (a->RK_Chi2 < 0);
    case Particle::kIsBestRKRKMETASorter:
	
        return (a->ind_TOF < 0 && a->ind_SHOWER < 0 && a->ind_RPC < 0) || (a->RK_Chi2 < 0);
    case Particle::kIsBestRKRKMETARadiusSorter:
	
        return (a->ind_TOF < 0 && a->ind_SHOWER < 0 && a->ind_RPC < 0) || (a->RK_Chi2 < 0);
    case Particle::kIsBestUserSorter:
	
        return (a->ind_TOF < 0 && a->ind_SHOWER < 0 && a->ind_RPC < 0) || (a->RK_Chi2 < 0);
    default:
	::Error("HParticleTrackSorter::rejectQuality()","Unknown switch statement %i!",byQuality);
        return kFALSE;
    }
}
Int_t HParticleTrackSorter::flagAccepted(vector <candidateSort*>& all_candidates, Particle::ESwitch byQuality)
{
    
    
    
    
    Int_t ctAll           = 0;
    Int_t ctAcceptQuality = 0;
    HParticleCand* pcand;
    for(UInt_t i = 0; i < all_candidates.size(); ++ i)
    {
        ++ ctAll;
	candidateSort* cand = all_candidates[i];
	if(rejectQuality(cand, byQuality))      continue;
	++ ctAcceptQuality;
	pcand = dynamic_cast<HParticleCand*>(pParticleCandCat->getObject(cand->ind_Cand));
	if(!pcand) {
	    Error("HParticleTrackSorter::flagAccepted()","NULL pointer retrieved for HParticleCand at index %i",cand->ind_Cand);
	    continue;
	}
	switch (byQuality) {
	case Particle::kIsBestHitRICHSorter:
	    pcand -> setFlagBit(Particle::kIsAcceptedHitRICH);
            
            
	    if(pcand->getChi2() >= 0){
		if( pcand->getRingCorr() == Particle::kIsRICHRK ||
		    pcand->getRingCorr() == (Particle::kIsRICHRK|Particle::kIsRICHMDC)
		  ) pcand->setFlagBit(Particle::kIsAcceptedRKRICH);
	    }
	    if( pcand->getRingCorr() == Particle::kIsRICHMDC ||
	        pcand->getRingCorr() == (Particle::kIsRICHRK|Particle::kIsRICHMDC)
	      ) pcand->setFlagBit(Particle::kIsAcceptedHitRICHMDC);
            
	    break;
	case Particle::kIsBestHitInnerMDCSorter:
	    pcand -> setFlagBit(Particle::kIsAcceptedHitInnerMDC);
	    break;
	case Particle::kIsBestHitOuterMDCSorter:
	    pcand -> setFlagBit(Particle::kIsAcceptedHitOuterMDC);
	    break;
	case Particle::kIsBestHitMETASorter:
	    pcand -> setFlagBit(Particle::kIsAcceptedHitMETA);
            
            
	    if(pcand->getChi2() >= 0) {
		pcand-> setFlagBit(Particle::kIsAcceptedRKMETA);
	    }
            
	    break;
	case Particle::kIsBestRKSorter:
	    pcand -> setFlagBit(Particle::kIsAcceptedRK);
	    break;
	case Particle::kIsBestRKRKMETASorter:
	    pcand -> setFlagBit(Particle::kIsAcceptedRKRKMETA);
	    break;
	case Particle::kIsBestRKRKMETARadiusSorter:
	    pcand -> setFlagBit(Particle::kIsAcceptedRKRKMETARadius);
	    break;
	case Particle::kIsBestUserSorter:
	    pcand -> setFlagBit(Particle::kIsAcceptedUser);
	    break;
	default :
	    Error("HParticleTrackSorter::flagAccepted()","Unknown switch statement : %i!",byQuality);
	    exit(1);
	    break;
	}
    }
    if(kDebug && printLevel >= 2){
	cout<<"flagAccepted(): "
	    <<"s: "                  <<selectBest_Iteration
	    <<", f: "                <<fill_Iteration
	    <<", kSwitchParticle: "  <<kSwitchParticle
	    <<", quality "           <<nameQuality[byQuality-SORTER_NUMBER_OF_INDEX].Data()
	    <<", candidate= "        <<ctAll
	    <<", acc. quality = "    <<ctAcceptQuality
	    <<endl;
    }
    return 0;
}
Int_t HParticleTrackSorter::flagDouble(vector <candidateSort*>& all_candidates, Particle::ESwitch byIndex)
{
    
    
    
    
    
    
    kSwitchIndex   = byIndex;
    sort(all_candidates.begin(), all_candidates.end(), this->cmpIndex);
    Int_t index;
    Int_t old_index =-99;
    vector <candidateSort*> daughter;
    Int_t ctAll          = 0;
    Int_t ctAcceptIndex  = 0;
    Int_t ctAcceptDoubles= 0;
    Int_t ctCheck        = 0;
    for(UInt_t i = 0; i < all_candidates.size(); ++ i)
    {
        ++ ctAll;
	candidateSort* cand = all_candidates[i];
	if(rejectIndex  (cand, byIndex, index)) continue;
        ++ ctAcceptIndex;
	if(index == old_index || old_index == -99)
	{ 
	    daughter.push_back(cand);
	} else {
            
	    if(!daughter.empty())
	    {
                setFlagsDouble(daughter,byIndex);
		if(daughter.size() >= 2){
		    ctAcceptDoubles += daughter.size();
		}
		ctCheck += daughter.size();
		daughter.clear();
	    }
	    daughter.push_back(cand);
	}
	old_index = index;
    }
    
    if(!daughter.empty())
    {
	setFlagsDouble(daughter, byIndex);
	if(daughter.size() >= 2){
	    ctAcceptDoubles += daughter.size();
	}
	ctCheck += daughter.size();
    }
    if(kDebug && printLevel >= 2){
	cout<<"flagDouble(): "
	    <<"s: "                <<selectBest_Iteration
	    <<", f: "              <<fill_Iteration
	    <<", kSwitchParticle: "<<kSwitchParticle
	    <<", index "           <<nameIndex  [byIndex].Data()
	    <<", candidate= "      <<ctAll
	    <<", acc. index = "    <<ctAcceptIndex
            <<", acc. doubles = "  <<ctAcceptDoubles
            <<", check = "         <<ctCheck
	    <<endl;
    }
    return 0;
}
Int_t HParticleTrackSorter::setFlagsDouble(vector<candidateSort*>& daughter, Particle::ESwitch byIndex)
{
    
    
    
    if(daughter.empty()   ) return 0;    
    if(daughter.size() < 2) return 0;    
    HParticleCand* cand;
    for(UInt_t i = 0; i < daughter.size(); ++ i)
    {  
	cand = dynamic_cast<HParticleCand*>(pParticleCandCat->getObject(daughter[i]->ind_Cand));
	if(!cand) {
	    Error("HParticleTrackSorter::setFlagsDouble()","NULL pointer retrieved for HParticleCand at index %i",daughter[i]->ind_Cand);
	    continue;
	}
	switch (byIndex)
	{
	case Particle::kIsIndexRICHSorter:
	    cand -> setFlagBit(Particle::kIsDoubleHitRICH);
	    break;
	case Particle::kIsIndexInnerMDCSorter:
	    cand -> setFlagBit(Particle::kIsDoubleHitInnerMDC);
	    break;
	case Particle::kIsIndexOuterMDCSorter:
	    cand -> setFlagBit(Particle::kIsDoubleHitOuterMDC);
	    break;
	case Particle::kIsIndexTOFSorter:
	    cand -> setFlagBit(Particle::kIsDoubleHitMETA);
	    break;
	case Particle::kIsIndexSHOWERSorter:
	    cand -> setFlagBit(Particle::kIsDoubleHitMETA);
	    break;
	case Particle::kIsIndexRPCSorter:
	    cand -> setFlagBit(Particle::kIsDoubleHitMETA);
	    break;
	default :
	    Error("HParticleTrackSorter::setFlagsDouble()","Unknown switch statement : %i!",byIndex);
	    exit(1);
	    break;
	}
    }
    return 0;
}
Bool_t HParticleTrackSorter::flagEmcClusters()
{
    
    
    
    if(pEmcClusterCat&&pParticleCandCat)
    {
        HEmcCluster* emc = 0;
	Int_t n = pEmcClusterCat->getEntries();
	for(Int_t i = 0; i < n; i ++){
            emc = (HEmcCluster*) pEmcClusterCat->getObject(i);
            if(emc) emc -> unsetIsUsedInParticleCand();
	}
        HParticleCand* cand = 0;
	n = pParticleCandCat->getEntries();
	for(Int_t i = 0; i < n; i ++){
	    cand = dynamic_cast<HParticleCand*>(pParticleCandCat->getObject(i));
	    if(cand->isFlagBit(Particle::kIsUsed) ){
		Int_t ind = cand->getEmcInd();
		if(ind>=0){
		    emc = (HEmcCluster*) pEmcClusterCat->getObject(ind);
                    if(emc)  emc->setIsUsedInParticleCand();
		}
	    }
	}
    }
     return kTRUE;
}
Int_t HParticleTrackSorter::fillInput(vector < candidateSort* >& all_candidates)
{
    
    
    
    
    HParticleCand* pCand ;
    candidateSort* cand;
    iterParticleCandCat->Reset();
    while ((pCand = dynamic_cast<HParticleCand*>(iterParticleCandCat->Next())) != 0 )
    {
	if(pCand->isFlagBit(Particle::kIsUsed))
	{
	    if(!kIgnorePreviousIndex && fill_Iteration == 2)
	    {
		
		
		
		if(pCand->getRichInd()     >= 0 &&
		   (find(index_RICH.begin(),index_RICH.end()        ,pCand->getRichInd())     == index_RICH.end()) ){
		    index_RICH.push_back(pCand->getRichInd());
		}
		if(pCand->getInnerSegInd() >= 0 &&
		   (find(index_InnerMDC.begin(),index_InnerMDC.end(),pCand->getInnerSegInd()) == index_InnerMDC.end()) ){
		    index_InnerMDC.push_back(pCand->getInnerSegInd());
		}
		if(pCand->getOuterSegInd() >= 0 &&
		   (find(index_OuterMDC.begin(),index_OuterMDC.end(),pCand->getOuterSegInd()) == index_OuterMDC.end()) ){
		    index_OuterMDC.push_back(pCand->getOuterSegInd());
		}
		
                
		if(pCand->getSelectedMeta() == Particle::kTofClst && pCand->getTofClstInd()      >= 0 &&
		   (find(index_TOFClst.begin(),index_TOFClst.end()  ,pCand->getTofClstInd())  == index_TOFClst.end()) ){
		    index_TOFClst.push_back(pCand->getTofClstInd());
		}
		if((pCand->getSelectedMeta() == Particle::kTofHit1 || pCand->getSelectedMeta() == Particle::kTofHit2) &&
		   pCand->getTofHitInd()       >= 0 &&
		   (find(index_TOFHit.begin(),index_TOFHit.end()    ,pCand->getTofHitInd()+1000)  == index_TOFHit.end()) ){
		    index_TOFHit.push_back(pCand->getTofHitInd()+1000);
		}
		
		if(pCand->getSelectedMeta() == Particle::kShowerHit && pCand->getShowerInd()   >= 0 &&
		   (find(index_SHOWER.begin(),index_SHOWER.end()    ,pCand->getShowerInd())   == index_SHOWER.end()) ){
		    index_SHOWER.push_back(pCand->getShowerInd());
		}
		if(pCand->getSelectedMeta() == Particle::kRpcClst && pCand->getRpcInd()      >= 0 &&
		   (find(index_RPC.begin(),index_RPC.end()          ,pCand->getRpcInd())      == index_RPC.end()) ){
		    index_RPC.push_back(pCand->getRpcInd());
		}
	    }
	    
	    continue; 
	}
	if(pCand->isFlagBit(Particle::kIsRejected))  continue; 
	for(Int_t i = 0; i < 29; i ++) { pCand->unsetFlagBit(i);  }  
        
	
        
	cand = new candidateSort;
        cand->cand                  = pCand;
	cand->ind_Cand              = pCand->getIndex();
	cand->ind_RICH              = pCand->getRichInd();
	cand->ind_innerMDC          = pCand->getInnerSegInd();
	cand->ind_outerMDC          = pCand->getOuterSegInd();
	cand->ind_TOF               = (pCand->getTofClstInd() >= 0)? pCand->getTofClstInd() : (pCand->getTofHitInd() >= 0)? pCand->getTofHitInd() + 1000 : -1 ; 
	cand->ind_SHOWER            = pCand->getShowerInd();
	cand->ind_RPC               = pCand->getRpcInd();
	cand->selectedMeta          = pCand->getSelectedMeta();
        cand->nPadsRich             = pCand->getRingNumPads();
	cand->innerMDCChi2          = pCand->getInnerSegmentChi2();
	cand->outerMDCChi2          = pCand->getOuterSegmentChi2();
                                      
	cand->sec                   =  pCand->getSector();
	cand->beta                  =  pCand->getBeta();
	cand->mom                   =  pCand->getMomentum();
	cand->MDC_dEdx              =  pCand->getMdcdEdx();
	cand->nMdcLayerInnerSeg     =  pCand->getNLayer(0);
        cand->nMdcLayerOuterSeg     =  pCand->getNLayer(1);
	cand->RK_Chi2               = (pCand->getOuterSegmentChi2() < 0 && pCand->getChi2() >= 0 )? pCand->getChi2() + 100 : pCand->getChi2(); 
        cand->RICH_RK_Corr          =  pCand->getRingCorr();
	cand->RK_RICH_match_Quality = (pCand->getRichInd() >= 0)?  pCand->getRichMatchingQuality(): -1;
	cand->RK_META_match_Quality = (finite(pCand->getMetaMatchQuality()))? pCand->getMetaMatchQuality() : -1;
	cand->RK_META_match_Radius  = (finite(pCand->getMetaMatchRadius()))? pCand->getMetaMatchRadius() : -1;
	cand->RK_META_dx            = (finite(pCand->getRkMetaDx()))? pCand->getRkMetaDx() : -1;
	cand->RK_META_dy            = (finite(pCand->getRkMetaDy()))? pCand->getRkMetaDy() : -1;
	cand->RK_META_match_Shr_Quality = pCand->getMetaMatchQualityShower();
        cand->innerMDCTheta = pCand->getTheta();
        cand->innerMDCPhi   = pCand->getPhi();
        cand->outerMDCTheta = pCand->getTheta2();
        cand->outerMDCPhi   = pCand->getPhi2();
	cand->userSort1=0;
	cand->userSort2=0;
	cand->userSort3=0;
	if(pCand->getSelectedMeta() == kTofClst ||
	   pCand->getSelectedMeta() == kTofHit1 ||
	   pCand->getSelectedMeta() == kRpcClst
	  ) {
	    cand->MetaModule = pCand->getMetaModule(0);
	    cand->MetaCell   = pCand->getMetaCell(0);
	} else if (pCand->getSelectedMeta() == kTofHit2){
	    cand->MetaModule = pCand->getMetaModule(1);
	    cand->MetaCell   = pCand->getMetaCell(1);
	} else {
	    cand->MetaModule = -1;
            cand->MetaCell   = -1;
	}
	if(cand->RK_Chi2 < 0){
	    cand->RK_META_match_Quality += 100; 
	    cand->RK_META_match_Radius  += 1000; 
	}
	
	all_candidates.push_back(cand);
    }
    return 0;
}
void HParticleTrackSorter::printCand(candidateSort* cand, Int_t i,TString spacer)
{
    
    
    cout<<spacer.Data()<<i<<" --------------------------------------------"<<endl;
    cout<<spacer.Data()<<"cand " <<cand->ind_Cand
	<<", R: "  <<cand->ind_RICH
	<<", iM: " <<cand->ind_innerMDC
	<<", oM: " <<cand->ind_outerMDC
	<<", T: "  <<cand->ind_TOF
	<<", S: "  <<cand->ind_SHOWER
	<<", RPC: "<<cand->ind_RPC
	<<", selMeta: "<<cand->selectedMeta
	<<endl;
    cout<<spacer.Data()
	<<"Npads:"    <<cand->nPadsRich
	<<", ichi2: " <<cand->innerMDCChi2
	<<", ochi2: " <<cand->outerMDCChi2
	<<", RKM: "   <<cand->RK_META_match_Quality
	<<", RKMSHR: "<<cand->RK_META_match_Shr_Quality
	<<", RK: "    <<cand->RK_Chi2
	<<", RKRKMETA: "  <<(cand->RK_Chi2 != -1 && cand->RK_META_match_Quality != -1 ? cand->RK_Chi2*cand->RK_META_match_Quality : -1)
	<<", RKRKMETARadius: "  <<(cand->RK_Chi2 != -1 && cand->RK_META_match_Radius != -1 ? cand->RK_Chi2*cand->RK_META_match_Radius : -1)
	<<", isRingRK: "<<(Int_t) cand->RICH_RK_Corr
	<<endl;
    HParticleCand* pcand = dynamic_cast<HParticleCand*>(pParticleCandCat->getObject(cand->ind_Cand));
    if(cand)
    {
	cout<<spacer.Data()<<flush;
	pcand->printFlags();
    } else {
	::Error("HParticleTrackSorter::printCand()","NULL pointer retrieved for HParticleCand Index %i",cand->ind_Cand);
    }
}
void HParticleTrackSorter::printEvent(TString comment)
{
    Int_t ctcand = 0;
    cout<<"----------------------------------------"<<endl;
    cout<<"Event kSwitchParticle: "<<kSwitchParticle<<" "
 	<<setw(6)                  <<fEvent->getHeader()->getEventSeqNumber()
	<<"s: "                    <<selectBest_Iteration
	<<", f: "                  <<fill_Iteration
	<<" "                      <<comment.Data()
	<<endl;
    HParticleCand* pcand;
    iterParticleCandCat->Reset();
    while ((pcand = dynamic_cast<HParticleCand*>(iterParticleCandCat->Next())) != 0 )
    {
	cout <<setw(6)<<ctcand<<" "<<flush;
	pcand->print();
	++ ctcand;
    }
}
void HParticleTrackSorter::printSetup()
{
    
    
    
    
    cout<<"--------------------------------------------------------------------"<<endl;
    cout<<"HParticleTrackSorter: evt "<<gHades->getEventCounter()<<endl;
    cout<<"                        backup  setup  actual"<<endl;
    cout<<"kSwitchRICHMatching  "<<setup_backup.kSwitchRICHMatching <<" : "<<setup.kSwitchRICHMatching <<" : "<<kSwitchRICHMatching <<endl;
    cout<<"fRICHMDCWindow       "<<setup_backup.fRICHMDCWindow      <<" : "<<setup.fRICHMDCWindow      <<" : "<<fRICHMDCWindow      <<endl;
    cout<<"kIsFieldOn           "<<setup_backup.kIsFieldOn          <<" : "<<setup.kIsFieldOn          <<" : "<<kIsFieldOn          <<endl;
    cout<<"kIgnoreRICH          "<<setup_backup.kIgnoreRICH         <<" : "<<setup.kIgnoreRICH         <<" : "<<kIgnoreRICH         <<endl;
    cout<<"kIgnoreInnerMDC      "<<setup_backup.kIgnoreInnerMDC     <<" : "<<setup.kIgnoreInnerMDC     <<" : "<<kIgnoreInnerMDC     <<endl;
    cout<<"kIgnoreOuterMDCB     "<<setup_backup.kIgnoreOuterMDC     <<" : "<<setup.kIgnoreOuterMDC     <<" : "<<kIgnoreOuterMDC     <<endl;
    cout<<"kIgnoreMETA          "<<setup_backup.kIgnoreMETA         <<" : "<<setup.kIgnoreMETA         <<" : "<<kIgnoreMETA         <<endl;
    cout<<"kIgnorePreviousIndex "<<setup_backup.kIgnorePreviousIndex<<" : "<<setup.kIgnorePreviousIndex<<" : "<<kIgnorePreviousIndex<<endl;
    cout<<"pUserSort            "<<setup_backup.pUserSort           <<" : "<<setup.pUserSort           <<" : "<<pUserSort           <<endl;
    cout<<"kUseYMatching        "<<setup_backup.kUseYMatching       <<" : "<<setup.kUseYMatching       <<" : "<<kUseYMatching       <<endl;
    cout<<"kUseYMatchingScaling "<<setup_backup.kUseYMatchingScaling<<" : "<<setup.kUseYMatchingScaling<<" : "<<kUseYMatchingScaling<<endl;
    cout<<"fMetaBoundary        "<<setup_backup.fMetaBoundary       <<" : "<<setup.fMetaBoundary       <<" : "<<fMetaBoundary       <<endl;
    cout<<"kUseBeta             "<<setup_backup.kUseBeta            <<" : "<<setup.kUseBeta            <<" : "<<kUseBeta            <<endl;
    cout<<"fBetaLepCut          "<<setup_backup.fBetaLepCut         <<" : "<<setup.fBetaLepCut         <<" : "<<fBetaLepCut         <<endl;
    cout<<"kUseFakeRejection    "<<setup_backup.kUseFakeRejection   <<" : "<<setup.kUseFakeRejection   <<" : "<<kUseFakeRejection   <<endl;
    cout<<"kUseMETAQA           "<<setup_backup.kUseMETAQA          <<" : "<<setup.kUseMETAQA          <<" : "<<kUseMETAQA          <<endl;
    cout<<"fMetaBoundary        "<<setup_backup.fMetaBoundary       <<" : "<<setup.fMetaBoundary       <<" : "<<fMetaBoundary       <<endl;
    cout<<"fMETAQACut           "<<setup_backup.fMETAQACut          <<" : "<<setup.fMETAQACut          <<" : "<<fMETAQACut          <<endl;
    cout<<"fTOFMAXCut           "<<setup_backup.fTOFMAXCut          <<" : "<<setup.fTOFMAXCut          <<" : "<<fTOFMAXCut          <<endl;
    cout<<"fDeltaSegCut         "<<setup_backup.fDeltaSegCut        <<" : "<<setup.fDeltaSegCut        <<" : "<<fDeltaSegCut        <<endl;
    cout<<"--------------------------------------------------------------------"<<endl;
}
void HParticleTrackSorter::resetFlags(Bool_t flag, Bool_t reject, Bool_t used, Bool_t lepton)
{
    
    
    
    
    
    if(!iterParticleCandCat) return;
    HParticleCand* pCand;
    iterParticleCandCat->Reset();
    while ((pCand = dynamic_cast<HParticleCand*>(iterParticleCandCat->Next())) != 0) 
    {
	if(flag){
	    if((pCand->isFlagBit(Particle::kIsUsed) && used)  ||
	       !pCand->isFlagBit(Particle::kIsUsed) ){
		
		
		for(Int_t i=0;i<Particle::kIsLepton;i++) { pCand->unsetFlagBit(i);  }  
	    }
	}
	if(reject) pCand->unsetFlagBit(Particle::kIsRejected);
	if(used)   pCand->unsetFlagBit(Particle::kIsUsed);
	if(lepton) pCand->unsetFlagBit(Particle::kIsLepton);
    }
}
void HParticleTrackSorter::selection(Bool_t (*function)(HParticleCand* ))
{
    
    
    
    if(!iterParticleCandCat) return;
    HParticleCand* pCand;
    iterParticleCandCat->Reset();
    while ((pCand = dynamic_cast<HParticleCand*>(iterParticleCandCat->Next())) != 0) 
    {
	if( pCand->isFlagBit(Particle::kIsUsed)) { continue;} 
	if(!pCand->select(function)) {pCand->setFlagBit(Particle::kIsRejected); }
    }
}
void HParticleTrackSorter::cleanUp(Bool_t final)
{
    
    
    
    clearVector(all_candidates);
    if(kIgnorePreviousIndex || final){
	index_RICH    .clear();
	index_InnerMDC.clear();
	index_OuterMDC.clear();
	index_SHOWER  .clear();
	index_TOFHit  .clear();
	index_TOFClst .clear();
	index_RPC     .clear();
    }
}
Int_t  HParticleTrackSorter::fillAndSetFlags()
{
    
    
    
    
    
    if(!pParticleCandCat) return 0; 
    fill_Iteration++;
    cleanUp(kFALSE);
    
    
    
    
    fillInput(all_candidates);
    
    
    Particle::ESwitch myIndex  [] = {
	Particle::kIsIndexRICHSorter,
	Particle::kIsIndexInnerMDCSorter,
	Particle::kIsIndexOuterMDCSorter,
	Particle::kIsIndexTOFSorter,
	Particle::kIsIndexSHOWERSorter,
        Particle::kIsIndexRPCSorter
    };
    
    Particle::ESwitch myQuality[] = {
        Particle::kIsBestHitRICHSorter,
        Particle::kIsBestHitInnerMDCSorter,
        Particle::kIsBestHitOuterMDCSorter,
        Particle::kIsBestHitMETASorter,
        Particle::kIsBestRKSorter,
	Particle::kIsBestRKRKMETASorter,
	Particle::kIsBestRKRKMETARadiusSorter,
        Particle::kIsBestUserSorter
   };
    kSwitchIndex   = Particle::kIsIndexRICHSorter;
    kSwitchQuality = Particle::kIsBestHitRICHSorter;
    
    
    for(UInt_t i = 0; i < (sizeof(myQuality) / sizeof(Int_t)); i ++){
	flagAccepted(all_candidates,myQuality[i]);
    }
    
    
    for(UInt_t i = 0; i < (sizeof(myIndex) / sizeof(Int_t)); i ++){
        flagDouble(all_candidates,myIndex[i]);
    }
    return all_candidates.empty() ? 0 : all_candidates.size();
}
void  HParticleTrackSorter::backupFlags(Bool_t onlyFlags)
{
    
    
    
    if(!onlyFlags){
	setup_backup.copyFromStatic();
    }
    old_flags.clear();
    old_flags_emc.clear();
    if(!iterParticleCandCat) return;
    HParticleCand* pCand ;
    iterParticleCandCat->Reset();
    while ((pCand = dynamic_cast<HParticleCand*>(iterParticleCandCat->Next())) != 0 )
    {
         old_flags.push_back(pCand->getFlagField());
    }
    if(pEmcClusterCat){
	HEmcCluster* emc = 0;
	Int_t n = pEmcClusterCat->getEntries();
	for(Int_t i = 0; i < n; i ++){
	    emc = (HEmcCluster*) pEmcClusterCat->getObject(i);
	    if(emc) {
		Int_t fl = emc -> isUsedInParticleCand();
		old_flags_emc.push_back(fl);
	    }
	}
    }
}
Bool_t  HParticleTrackSorter::restoreFlags(Bool_t onlyFlags)
{
    
    
    
    if(!onlyFlags){
	setup_backup.copyToStatic();
    }
    if(!iterParticleCandCat) return kFALSE;
    HParticleCand* pCand ;
    iterParticleCandCat->Reset();
    vector<Int_t>::iterator iter;
    iter = old_flags.begin();
    while ((pCand = dynamic_cast<HParticleCand*>(iterParticleCandCat->Next())) != 0 )
    {
	if(iter != old_flags.end()){
	    pCand->setFlagField(*iter);
	    iter ++;
	} else {
            Error("restoreFlags()","Size of backuped flags does not match number of HParticleCand objects!");
	    return kFALSE;
	}
    }
    if(pEmcClusterCat){
	HEmcCluster* emc = 0;
	Int_t n = pEmcClusterCat->getEntries();
	for(Int_t i = 0; i < n; i ++){
	    emc = (HEmcCluster*) pEmcClusterCat->getObject(i);
	    if(emc) {
		emc -> unsetIsUsedInParticleCand();
                if(old_flags_emc[i] == 1 ) emc -> isUsedInParticleCand();
	    }
	}
    }
    return kTRUE;
}
void  HParticleTrackSorter::backupSetup()
{
    
    
    setup_backup.copyFromStatic();
}
Bool_t  HParticleTrackSorter::restoreSetup()
{
    
    
    setup_backup.copyToStatic();
    return kTRUE;
}
Int_t HParticleTrackSorter::fill(Bool_t (*function)(HParticleCand* ))
{
    
    
    
    
    
    
    
    resetFlags(kTRUE,kTRUE,kFALSE,kFALSE);  
    Int_t first  = fillAndSetFlags();       
    selection(function);                    
    Int_t second = fillAndSetFlags();       
    if(kDebug && printLevel >= 1) {
	cout<<"fill(): "
	    <<"s: "                <<selectBest_Iteration
	    <<", f: "              <<fill_Iteration
	    <<", kSwitchParticle: "<<kSwitchParticle
	    <<", nCands first: "   <<first
	    <<", nCands second :"  <<second
	    <<endl;
    }
    return all_candidates.empty() ?  0 : all_candidates.size();
}
Int_t HParticleTrackSorter::selectBest(Particle::ESwitch byQuality, Int_t byParticle)
{
    
    
    
    
    
    
    
    
    
    
    
    if(fEvent->getHeader()->getEventSeqNumber() != currentEvent){
	currentEvent         = fEvent->getHeader()->getEventSeqNumber();
        selectBest_Iteration = 0;
    }
    selectBest_Iteration++;
    kSwitchQuality  = byQuality;
    kSwitchParticle = byParticle;
    Int_t ct        = 0;
    Int_t ctdouble[4] = {0};
    if(kSwitchQuality==Particle::kIsBestUserSorter && pUserSort==NULL){
	::Error ("selectBest()","qualtiy is kIsBestUser, but pUserSort==NULL. No sort done.");
    } else {
	sort(all_candidates.begin(),all_candidates.end(),this->cmpQuality);
    }
    for(UInt_t i = 0; i < all_candidates.size(); ++ i)
    {
        candidateSort* cand = all_candidates[i];
        
	
        
        Int_t isDoubleHit = 0;
        
	if( !kIgnoreInnerMDC ) {
	    if(cand->ind_innerMDC >= 0 &&
	       (find(index_InnerMDC.begin(),index_InnerMDC.end(),cand->ind_innerMDC) != index_InnerMDC.end()) ){
		isDoubleHit |= 0x1 << 1;
		ctdouble[1] ++;
	    }
	}
	if( !kIgnoreOuterMDC ) {
	    if(cand->ind_outerMDC >= 0 &&
	       (find(index_OuterMDC.begin(),index_OuterMDC.end(),cand->ind_outerMDC) != index_OuterMDC.end()) ){
		isDoubleHit |= 0x1 << 2;
		ctdouble[2] ++;
	    }
	}
	if( !kIgnoreMETA ) {
	    if( (cand->selectedMeta == Particle::kTofHit1 || cand->selectedMeta == Particle::kTofHit2)  &&
	       cand->ind_TOF      >= 0 &&
	       (find(index_TOFHit.begin(),index_TOFHit.end()    ,cand->ind_TOF)      != index_TOFHit.end()) ){
		isDoubleHit |= 0x1 << 3;
		ctdouble[3] ++;
	    }
	    if(cand->selectedMeta == Particle::kTofClst && cand->ind_TOF      >= 0 &&
	       (find(index_TOFClst.begin(),index_TOFClst.end()   ,cand->ind_TOF)     != index_TOFClst.end()) ){
		isDoubleHit |= 0x1 << 3;
		ctdouble[3] ++;
	    }
            
	    if(cand->selectedMeta == Particle::kRpcClst   && cand->ind_RPC      >= 0 &&
	       (find(index_RPC.begin(),index_RPC.end()          ,cand->ind_RPC)      != index_RPC.end()) ){
		isDoubleHit |= 0x1 << 3;
		ctdouble[3] ++;
	    }
	}
	if(isDoubleHit){
            if(kDebug && printLevel >= 1){
		TString out="";
		for(Int_t j = 3; j >= 0; j --){
		    out += ( (isDoubleHit>>j) & 0x1 );
		}
		cout<<"--selectBest(): skip Double_t hit with pattern : "<<out.Data()<<endl;
		printCand(cand,i);
	    }
	    continue;
	}
        
        
	
	
	
	if(cand->ind_innerMDC >= 0 ){
	    index_InnerMDC.push_back(cand->ind_innerMDC);
	}
	if(cand->ind_outerMDC >= 0 ){
	    index_OuterMDC.push_back(cand->ind_outerMDC);
	}
	if( (cand->selectedMeta == Particle::kTofHit1 || cand->selectedMeta == Particle::kTofHit2) &&
	   cand->ind_TOF      >= 0 ){
	    index_TOFHit.push_back(cand->ind_TOF);
	}
	if(cand->selectedMeta == Particle::kTofClst &&
	   cand->ind_TOF      >= 0 ){
	    index_TOFClst.push_back(cand->ind_TOF);
	}
        
	if(cand->selectedMeta == Particle::kRpcClst &&
	   cand->ind_RPC      >= 0 ){
	    index_RPC.push_back(cand->ind_RPC);
	}
	HParticleCand* pcand = dynamic_cast<HParticleCand*>(pParticleCandCat->getObject(cand->ind_Cand));
	if(!pcand) {
	    Error("HParticleTrackSorter::selectBest()","NULL pointer retrieved for HParticleCand at index %i",cand->ind_Cand);
	    continue;
	}
	switch (byQuality)
	{
	case Particle::kIsBestHitRICHSorter:
	    pcand -> setFlagBit(Particle::kIsBestHitRICH);
	    break;
	case Particle::kIsBestHitInnerMDCSorter:
	    pcand -> setFlagBit(Particle::kIsBestHitInnerMDC);
	    break;
	case Particle::kIsBestHitOuterMDCSorter:
	    pcand -> setFlagBit(Particle::kIsBestHitOuterMDC);
	    break;
	case Particle::kIsBestHitMETASorter:
	    pcand -> setFlagBit(Particle::kIsBestHitMETA);
	    break;
	case Particle::kIsBestRKSorter:
	    pcand -> setFlagBit(Particle::kIsBestRK);
	    break;
	case Particle::kIsBestRKRKMETASorter:
	    pcand -> setFlagBit(Particle::kIsBestRKRKMETA);
	    break;
	case Particle::kIsBestRKRKMETARadiusSorter:
	    pcand -> setFlagBit(Particle::kIsBestRKRKMETARadius);
	    break;
	case Particle::kIsBestUserSorter:
	    pcand -> setFlagBit(Particle::kIsBestUser);
	    break;
	default :
	    Error("HParticleTrackSorter::selectBest()","Unknown switch statement : %i!",byQuality);
	    exit(1);
	    break;
	}
        ++ ct;
	pcand ->setFlagBit(Particle::kIsUsed);
	if(byParticle == Particle::kIsLeptonSorter){
	    pcand ->setFlagBit(Particle::kIsLepton);
	}
	if(kDebug && printLevel >= 1){
	    cout<<"++selectBest(): select hit : "<<endl;
	    printCand(cand,i);
	}
	
    }
    if(kDebug && printLevel >= 1)
    {
	cout<<"selectBest(): "
	    <<"s: "                  <<selectBest_Iteration
	    <<", f: "                <<fill_Iteration
	    <<", kSwitchParticle: "  <<kSwitchParticle
	    <<", nBest cand: "       <<ct
	    <<", Double_t RICH: "    <<ctdouble[0]
            <<", InnerMDC: "         <<ctdouble[1]
            <<", Double_t OuterMDC: "<<ctdouble[2]
            <<", Double_t META: "    <<ctdouble[3]
	    <<endl;
    }
    fill_Iteration = 0;
    flagEmcClusters();
  return ct;
}
void HParticleTrackSorter::setRICHMatching(Particle::ERichMatch match, Float_t window)
{
    
    
	kSwitchRICHMatching = match;
	fRICHMDCWindow      = window;
	setup.kSwitchRICHMatching = match;
	setup.fRICHMDCWindow      = window;
}
Bool_t HParticleTrackSorter::selectLeptons(HParticleCand* pcand)
{
    
    
    
    
    
    
    if(kUseFakeRejection&&pcand->isFakeRejected()) return kFALSE;
    Bool_t test = kFALSE;
    if( pcand->isFlagAND(5,
			 Particle::kIsAcceptedHitRICH,
			 Particle::kIsAcceptedHitInnerMDC,
			 Particle::kIsAcceptedHitOuterMDC,
			 Particle::kIsAcceptedHitMETA,
			 Particle::kIsAcceptedRK
			)
       &&
       pcand->getInnerSegmentChi2() > 0
       &&
       pcand->getChi2()             < 1000      
      ) test = kTRUE;
    if(!test) return kFALSE;
    if(kUseMETAQA && (pcand->getMetaMatchQuality() > fMETAQACut || pcand->getMetaMatchQuality() < 0)) return kFALSE;
    if(kUseYMatching && !HParticleTool::isGoodMetaCell(pcand,fMetaBoundary,kUseYMatchingScaling)) return kFALSE;
    if(kUseBeta && pcand->getBeta()<fBetaLepCut) return kFALSE;
    if(!kIsFieldOn && !isDeltaSegOk(pcand)) return kFALSE;
    if(test)
    {   
	if( kSwitchRICHMatching == Particle::kUseRICHIndexSorter)
	{
	    return kTRUE;
	}
	else if ( kSwitchRICHMatching == Particle::kUseRKRICHCorrelationSorter	&&  pcand -> getRingCorr() )
	{
	    return kTRUE;
	}
	else if ( kSwitchRICHMatching == Particle::kUseRKRICHWindowSorter
		 &&
		 fabs(pcand->getDeltaTheta()) < fRICHMDCWindow
		 &&
		 fabs(pcand->getDeltaPhi())   < fRICHMDCWindow
		)
	{
	    return kTRUE;
	}
	else return kFALSE;
    }
    else return kFALSE;
}
Bool_t HParticleTrackSorter::selectLeptonsNoOuterFit(HParticleCand* pcand)
{
    
    
    
    
    
    
    
    if(kUseFakeRejection&&pcand->isFakeRejected()) return kFALSE;
    Bool_t test = kFALSE;
    if( pcand->isFlagAND(4,
			 Particle::kIsAcceptedHitRICH,
			 Particle::kIsAcceptedHitInnerMDC,
			 Particle::kIsAcceptedHitMETA,
			 Particle::kIsAcceptedRK
			)
       &&
       pcand->getInnerSegmentChi2() > 0
       &&
       pcand->getOuterSegInd()      > 0
       &&
       pcand->getChi2()             < 1000      
      ) test = kTRUE;
    if(!test) return kFALSE;
    if(kUseMETAQA && (pcand->getMetaMatchQuality() > fMETAQACut || pcand->getMetaMatchQuality() < 0)) return kFALSE;
    if(kUseYMatching && !HParticleTool::isGoodMetaCell(pcand,fMetaBoundary,kUseYMatchingScaling)) return kFALSE;
    if(kUseBeta && pcand->getBeta()<fBetaLepCut) return kFALSE;
    if(!kIsFieldOn && !isDeltaSegOk(pcand)) return kFALSE;
    if(test)
    {   
	if( kSwitchRICHMatching == Particle::kUseRICHIndexSorter)
	{
	    return kTRUE;
	}
	else if ( kSwitchRICHMatching == Particle::kUseRKRICHCorrelationSorter	&&  pcand -> getRingCorr() )
	{
	    return kTRUE;
	}
	else if ( kSwitchRICHMatching == Particle::kUseRKRICHWindowSorter
		 &&
		 fabs(pcand->getDeltaTheta()) < fRICHMDCWindow
		 &&
		 fabs(pcand->getDeltaPhi())   < fRICHMDCWindow
		)
	{
	    return kTRUE;
	}
	else return kFALSE;
    }
    else return kFALSE;
}
Bool_t HParticleTrackSorter::selectHadrons(HParticleCand* pcand )
{
    
    
    if(kUseFakeRejection&&pcand->isFakeRejected()) return kFALSE;
    Bool_t test=kFALSE;
    if( pcand->isFlagAND(4,
			 Particle::kIsAcceptedHitInnerMDC,
			 Particle::kIsAcceptedHitOuterMDC,
			 Particle::kIsAcceptedHitMETA,
			 Particle::kIsAcceptedRK
			)
       &&
       pcand->getInnerSegmentChi2() > 0
       &&
       pcand->getChi2()             < 1000
      ) test=kTRUE;
    if(!test) return kFALSE;
    if(kUseMETAQA && (pcand->getMetaMatchQuality() > fMETAQACut || pcand->getMetaMatchQuality() < 0)) return kFALSE;
    if(kUseYMatching && !HParticleTool::isGoodMetaCell(pcand,fMetaBoundary,kUseYMatchingScaling)) return kFALSE;
    if(kUseBeta && (pcand->getBeta()<0 || pcand->getTof()>fTOFMAXCut)) return kFALSE;
    if(!kIsFieldOn && !isDeltaSegOk(pcand)) return kFALSE;
    return test;
}
Bool_t HParticleTrackSorter::selectHadronsNoOuterFit(HParticleCand* pcand )
{
    
    
    
    if(kUseFakeRejection&&pcand->isFakeRejected()) return kFALSE;
    Bool_t test=kFALSE;
    if( pcand->isFlagAND(3,
			 Particle::kIsAcceptedHitInnerMDC,
			 Particle::kIsAcceptedHitMETA,
			 Particle::kIsAcceptedRK
			)
       &&
       pcand->getInnerSegmentChi2() > 0
       &&
       pcand->getOuterSegInd()      > 0
       &&
       pcand->getChi2()             < 1000
      ) test=kTRUE;
    if(!test) return kFALSE;
    if(kUseMETAQA && (pcand->getMetaMatchQuality() > fMETAQACut || pcand->getMetaMatchQuality() < 0)) return kFALSE;
    if(kUseYMatching && !HParticleTool::isGoodMetaCell(pcand,fMetaBoundary,kUseYMatchingScaling)) return kFALSE;
    if(kUseBeta && (pcand->getBeta()<0 || pcand->getTof()>fTOFMAXCut)) return kFALSE;
    if(!kIsFieldOn && !isDeltaSegOk(pcand)) return kFALSE;
    return test;
}
void sorter_setup::copyFromStatic()
{
	kSwitchRICHMatching  = HParticleTrackSorter::kSwitchRICHMatching;
	fRICHMDCWindow       = HParticleTrackSorter::fRICHMDCWindow;
	kIsFieldOn           = HParticleTrackSorter::kIsFieldOn;
	kIgnoreRICH          = HParticleTrackSorter::kIgnoreRICH;
	kIgnoreInnerMDC      = HParticleTrackSorter::kIgnoreInnerMDC;
	kIgnoreOuterMDC      = HParticleTrackSorter::kIgnoreOuterMDC;
	kIgnoreMETA          = HParticleTrackSorter::kIgnoreMETA;
	kIgnorePreviousIndex = HParticleTrackSorter::kIgnorePreviousIndex;
	pUserSort            = HParticleTrackSorter::pUserSort;
	kUseYMatching        = HParticleTrackSorter::kUseYMatching;
	kUseYMatchingScaling = HParticleTrackSorter::kUseYMatchingScaling;
	fMetaBoundary        = HParticleTrackSorter::fMetaBoundary;
	kUseBeta             = HParticleTrackSorter::kUseBeta;
	fBetaLepCut          = HParticleTrackSorter::fBetaLepCut;
	kUseFakeRejection    = HParticleTrackSorter::kUseFakeRejection;
	kUseMETAQA           = HParticleTrackSorter::kUseMETAQA;
	fMETAQACut           = HParticleTrackSorter::fMETAQACut;
	fTOFMAXCut           = HParticleTrackSorter::fTOFMAXCut;
	fDeltaSegCut         = HParticleTrackSorter::fDeltaSegCut;
};
void sorter_setup::copyToStatic()
{
	HParticleTrackSorter::kSwitchRICHMatching  = kSwitchRICHMatching ;
	HParticleTrackSorter::fRICHMDCWindow       = fRICHMDCWindow;
	HParticleTrackSorter::kIsFieldOn           = kIsFieldOn;
	HParticleTrackSorter::kIgnoreRICH          = kIgnoreRICH;
	HParticleTrackSorter::kIgnoreInnerMDC      = kIgnoreInnerMDC;
	HParticleTrackSorter::kIgnoreOuterMDC      = kIgnoreOuterMDC;
	HParticleTrackSorter::kIgnoreMETA          = kIgnoreMETA;
	HParticleTrackSorter::kIgnorePreviousIndex = kIgnorePreviousIndex;
	HParticleTrackSorter::pUserSort            = pUserSort;
	HParticleTrackSorter::kUseYMatching        = kUseYMatching;
	HParticleTrackSorter::kUseYMatchingScaling = kUseYMatchingScaling;
	HParticleTrackSorter::fMetaBoundary        = fMetaBoundary;
	HParticleTrackSorter::kUseBeta             = kUseBeta;
	HParticleTrackSorter::fBetaLepCut          = fBetaLepCut;
	HParticleTrackSorter::kUseFakeRejection    = kUseFakeRejection;
	HParticleTrackSorter::kUseMETAQA           = kUseMETAQA;
	HParticleTrackSorter::fMETAQACut           = fMETAQACut;
	HParticleTrackSorter::fTOFMAXCut           = fTOFMAXCut;
	HParticleTrackSorter::fDeltaSegCut         = fDeltaSegCut;
};
 hparticletracksorter.cc:1  hparticletracksorter.cc:2  hparticletracksorter.cc:3  hparticletracksorter.cc:4  hparticletracksorter.cc:5  hparticletracksorter.cc:6  hparticletracksorter.cc:7  hparticletracksorter.cc:8  hparticletracksorter.cc:9  hparticletracksorter.cc:10  hparticletracksorter.cc:11  hparticletracksorter.cc:12  hparticletracksorter.cc:13  hparticletracksorter.cc:14  hparticletracksorter.cc:15  hparticletracksorter.cc:16  hparticletracksorter.cc:17  hparticletracksorter.cc:18  hparticletracksorter.cc:19  hparticletracksorter.cc:20  hparticletracksorter.cc:21  hparticletracksorter.cc:22  hparticletracksorter.cc:23  hparticletracksorter.cc:24  hparticletracksorter.cc:25  hparticletracksorter.cc:26  hparticletracksorter.cc:27  hparticletracksorter.cc:28  hparticletracksorter.cc:29  hparticletracksorter.cc:30  hparticletracksorter.cc:31  hparticletracksorter.cc:32  hparticletracksorter.cc:33  hparticletracksorter.cc:34  hparticletracksorter.cc:35  hparticletracksorter.cc:36  hparticletracksorter.cc:37  hparticletracksorter.cc:38  hparticletracksorter.cc:39  hparticletracksorter.cc:40  hparticletracksorter.cc:41  hparticletracksorter.cc:42  hparticletracksorter.cc:43  hparticletracksorter.cc:44  hparticletracksorter.cc:45  hparticletracksorter.cc:46  hparticletracksorter.cc:47  hparticletracksorter.cc:48  hparticletracksorter.cc:49  hparticletracksorter.cc:50  hparticletracksorter.cc:51  hparticletracksorter.cc:52  hparticletracksorter.cc:53  hparticletracksorter.cc:54  hparticletracksorter.cc:55  hparticletracksorter.cc:56  hparticletracksorter.cc:57  hparticletracksorter.cc:58  hparticletracksorter.cc:59  hparticletracksorter.cc:60  hparticletracksorter.cc:61  hparticletracksorter.cc:62  hparticletracksorter.cc:63  hparticletracksorter.cc:64  hparticletracksorter.cc:65  hparticletracksorter.cc:66  hparticletracksorter.cc:67  hparticletracksorter.cc:68  hparticletracksorter.cc:69  hparticletracksorter.cc:70  hparticletracksorter.cc:71  hparticletracksorter.cc:72  hparticletracksorter.cc:73  hparticletracksorter.cc:74  hparticletracksorter.cc:75  hparticletracksorter.cc:76  hparticletracksorter.cc:77  hparticletracksorter.cc:78  hparticletracksorter.cc:79  hparticletracksorter.cc:80  hparticletracksorter.cc:81  hparticletracksorter.cc:82  hparticletracksorter.cc:83  hparticletracksorter.cc:84  hparticletracksorter.cc:85  hparticletracksorter.cc:86  hparticletracksorter.cc:87  hparticletracksorter.cc:88  hparticletracksorter.cc:89  hparticletracksorter.cc:90  hparticletracksorter.cc:91  hparticletracksorter.cc:92  hparticletracksorter.cc:93  hparticletracksorter.cc:94  hparticletracksorter.cc:95  hparticletracksorter.cc:96  hparticletracksorter.cc:97  hparticletracksorter.cc:98  hparticletracksorter.cc:99  hparticletracksorter.cc:100  hparticletracksorter.cc:101  hparticletracksorter.cc:102  hparticletracksorter.cc:103  hparticletracksorter.cc:104  hparticletracksorter.cc:105  hparticletracksorter.cc:106  hparticletracksorter.cc:107  hparticletracksorter.cc:108  hparticletracksorter.cc:109  hparticletracksorter.cc:110  hparticletracksorter.cc:111  hparticletracksorter.cc:112  hparticletracksorter.cc:113  hparticletracksorter.cc:114  hparticletracksorter.cc:115  hparticletracksorter.cc:116  hparticletracksorter.cc:117  hparticletracksorter.cc:118  hparticletracksorter.cc:119  hparticletracksorter.cc:120  hparticletracksorter.cc:121  hparticletracksorter.cc:122  hparticletracksorter.cc:123  hparticletracksorter.cc:124  hparticletracksorter.cc:125  hparticletracksorter.cc:126  hparticletracksorter.cc:127  hparticletracksorter.cc:128  hparticletracksorter.cc:129  hparticletracksorter.cc:130  hparticletracksorter.cc:131  hparticletracksorter.cc:132  hparticletracksorter.cc:133  hparticletracksorter.cc:134  hparticletracksorter.cc:135  hparticletracksorter.cc:136  hparticletracksorter.cc:137  hparticletracksorter.cc:138  hparticletracksorter.cc:139  hparticletracksorter.cc:140  hparticletracksorter.cc:141  hparticletracksorter.cc:142  hparticletracksorter.cc:143  hparticletracksorter.cc:144  hparticletracksorter.cc:145  hparticletracksorter.cc:146  hparticletracksorter.cc:147  hparticletracksorter.cc:148  hparticletracksorter.cc:149  hparticletracksorter.cc:150  hparticletracksorter.cc:151  hparticletracksorter.cc:152  hparticletracksorter.cc:153  hparticletracksorter.cc:154  hparticletracksorter.cc:155  hparticletracksorter.cc:156  hparticletracksorter.cc:157  hparticletracksorter.cc:158  hparticletracksorter.cc:159  hparticletracksorter.cc:160  hparticletracksorter.cc:161  hparticletracksorter.cc:162  hparticletracksorter.cc:163  hparticletracksorter.cc:164  hparticletracksorter.cc:165  hparticletracksorter.cc:166  hparticletracksorter.cc:167  hparticletracksorter.cc:168  hparticletracksorter.cc:169  hparticletracksorter.cc:170  hparticletracksorter.cc:171  hparticletracksorter.cc:172  hparticletracksorter.cc:173  hparticletracksorter.cc:174  hparticletracksorter.cc:175  hparticletracksorter.cc:176  hparticletracksorter.cc:177  hparticletracksorter.cc:178  hparticletracksorter.cc:179  hparticletracksorter.cc:180  hparticletracksorter.cc:181  hparticletracksorter.cc:182  hparticletracksorter.cc:183  hparticletracksorter.cc:184  hparticletracksorter.cc:185  hparticletracksorter.cc:186  hparticletracksorter.cc:187  hparticletracksorter.cc:188  hparticletracksorter.cc:189  hparticletracksorter.cc:190  hparticletracksorter.cc:191  hparticletracksorter.cc:192  hparticletracksorter.cc:193  hparticletracksorter.cc:194  hparticletracksorter.cc:195  hparticletracksorter.cc:196  hparticletracksorter.cc:197  hparticletracksorter.cc:198  hparticletracksorter.cc:199  hparticletracksorter.cc:200  hparticletracksorter.cc:201  hparticletracksorter.cc:202  hparticletracksorter.cc:203  hparticletracksorter.cc:204  hparticletracksorter.cc:205  hparticletracksorter.cc:206  hparticletracksorter.cc:207  hparticletracksorter.cc:208  hparticletracksorter.cc:209  hparticletracksorter.cc:210  hparticletracksorter.cc:211  hparticletracksorter.cc:212  hparticletracksorter.cc:213  hparticletracksorter.cc:214  hparticletracksorter.cc:215  hparticletracksorter.cc:216  hparticletracksorter.cc:217  hparticletracksorter.cc:218  hparticletracksorter.cc:219  hparticletracksorter.cc:220  hparticletracksorter.cc:221  hparticletracksorter.cc:222  hparticletracksorter.cc:223  hparticletracksorter.cc:224  hparticletracksorter.cc:225  hparticletracksorter.cc:226  hparticletracksorter.cc:227  hparticletracksorter.cc:228  hparticletracksorter.cc:229  hparticletracksorter.cc:230  hparticletracksorter.cc:231  hparticletracksorter.cc:232  hparticletracksorter.cc:233  hparticletracksorter.cc:234  hparticletracksorter.cc:235  hparticletracksorter.cc:236  hparticletracksorter.cc:237  hparticletracksorter.cc:238  hparticletracksorter.cc:239  hparticletracksorter.cc:240  hparticletracksorter.cc:241  hparticletracksorter.cc:242  hparticletracksorter.cc:243  hparticletracksorter.cc:244  hparticletracksorter.cc:245  hparticletracksorter.cc:246  hparticletracksorter.cc:247  hparticletracksorter.cc:248  hparticletracksorter.cc:249  hparticletracksorter.cc:250  hparticletracksorter.cc:251  hparticletracksorter.cc:252  hparticletracksorter.cc:253  hparticletracksorter.cc:254  hparticletracksorter.cc:255  hparticletracksorter.cc:256  hparticletracksorter.cc:257  hparticletracksorter.cc:258  hparticletracksorter.cc:259  hparticletracksorter.cc:260  hparticletracksorter.cc:261  hparticletracksorter.cc:262  hparticletracksorter.cc:263  hparticletracksorter.cc:264  hparticletracksorter.cc:265  hparticletracksorter.cc:266  hparticletracksorter.cc:267  hparticletracksorter.cc:268  hparticletracksorter.cc:269  hparticletracksorter.cc:270  hparticletracksorter.cc:271  hparticletracksorter.cc:272  hparticletracksorter.cc:273  hparticletracksorter.cc:274  hparticletracksorter.cc:275  hparticletracksorter.cc:276  hparticletracksorter.cc:277  hparticletracksorter.cc:278  hparticletracksorter.cc:279  hparticletracksorter.cc:280  hparticletracksorter.cc:281  hparticletracksorter.cc:282  hparticletracksorter.cc:283  hparticletracksorter.cc:284  hparticletracksorter.cc:285  hparticletracksorter.cc:286  hparticletracksorter.cc:287  hparticletracksorter.cc:288  hparticletracksorter.cc:289  hparticletracksorter.cc:290  hparticletracksorter.cc:291  hparticletracksorter.cc:292  hparticletracksorter.cc:293  hparticletracksorter.cc:294  hparticletracksorter.cc:295  hparticletracksorter.cc:296  hparticletracksorter.cc:297  hparticletracksorter.cc:298  hparticletracksorter.cc:299  hparticletracksorter.cc:300  hparticletracksorter.cc:301  hparticletracksorter.cc:302  hparticletracksorter.cc:303  hparticletracksorter.cc:304  hparticletracksorter.cc:305  hparticletracksorter.cc:306  hparticletracksorter.cc:307  hparticletracksorter.cc:308  hparticletracksorter.cc:309  hparticletracksorter.cc:310  hparticletracksorter.cc:311  hparticletracksorter.cc:312  hparticletracksorter.cc:313  hparticletracksorter.cc:314  hparticletracksorter.cc:315  hparticletracksorter.cc:316  hparticletracksorter.cc:317  hparticletracksorter.cc:318  hparticletracksorter.cc:319  hparticletracksorter.cc:320  hparticletracksorter.cc:321  hparticletracksorter.cc:322  hparticletracksorter.cc:323  hparticletracksorter.cc:324  hparticletracksorter.cc:325  hparticletracksorter.cc:326  hparticletracksorter.cc:327  hparticletracksorter.cc:328  hparticletracksorter.cc:329  hparticletracksorter.cc:330  hparticletracksorter.cc:331  hparticletracksorter.cc:332  hparticletracksorter.cc:333  hparticletracksorter.cc:334  hparticletracksorter.cc:335  hparticletracksorter.cc:336  hparticletracksorter.cc:337  hparticletracksorter.cc:338  hparticletracksorter.cc:339  hparticletracksorter.cc:340  hparticletracksorter.cc:341  hparticletracksorter.cc:342  hparticletracksorter.cc:343  hparticletracksorter.cc:344  hparticletracksorter.cc:345  hparticletracksorter.cc:346  hparticletracksorter.cc:347  hparticletracksorter.cc:348  hparticletracksorter.cc:349  hparticletracksorter.cc:350  hparticletracksorter.cc:351  hparticletracksorter.cc:352  hparticletracksorter.cc:353  hparticletracksorter.cc:354  hparticletracksorter.cc:355  hparticletracksorter.cc:356  hparticletracksorter.cc:357  hparticletracksorter.cc:358  hparticletracksorter.cc:359  hparticletracksorter.cc:360  hparticletracksorter.cc:361  hparticletracksorter.cc:362  hparticletracksorter.cc:363  hparticletracksorter.cc:364  hparticletracksorter.cc:365  hparticletracksorter.cc:366  hparticletracksorter.cc:367  hparticletracksorter.cc:368  hparticletracksorter.cc:369  hparticletracksorter.cc:370  hparticletracksorter.cc:371  hparticletracksorter.cc:372  hparticletracksorter.cc:373  hparticletracksorter.cc:374  hparticletracksorter.cc:375  hparticletracksorter.cc:376  hparticletracksorter.cc:377  hparticletracksorter.cc:378  hparticletracksorter.cc:379  hparticletracksorter.cc:380  hparticletracksorter.cc:381  hparticletracksorter.cc:382  hparticletracksorter.cc:383  hparticletracksorter.cc:384  hparticletracksorter.cc:385  hparticletracksorter.cc:386  hparticletracksorter.cc:387  hparticletracksorter.cc:388  hparticletracksorter.cc:389  hparticletracksorter.cc:390  hparticletracksorter.cc:391  hparticletracksorter.cc:392  hparticletracksorter.cc:393  hparticletracksorter.cc:394  hparticletracksorter.cc:395  hparticletracksorter.cc:396  hparticletracksorter.cc:397  hparticletracksorter.cc:398  hparticletracksorter.cc:399  hparticletracksorter.cc:400  hparticletracksorter.cc:401  hparticletracksorter.cc:402  hparticletracksorter.cc:403  hparticletracksorter.cc:404  hparticletracksorter.cc:405  hparticletracksorter.cc:406  hparticletracksorter.cc:407  hparticletracksorter.cc:408  hparticletracksorter.cc:409  hparticletracksorter.cc:410  hparticletracksorter.cc:411  hparticletracksorter.cc:412  hparticletracksorter.cc:413  hparticletracksorter.cc:414  hparticletracksorter.cc:415  hparticletracksorter.cc:416  hparticletracksorter.cc:417  hparticletracksorter.cc:418  hparticletracksorter.cc:419  hparticletracksorter.cc:420  hparticletracksorter.cc:421  hparticletracksorter.cc:422  hparticletracksorter.cc:423  hparticletracksorter.cc:424  hparticletracksorter.cc:425  hparticletracksorter.cc:426  hparticletracksorter.cc:427  hparticletracksorter.cc:428  hparticletracksorter.cc:429  hparticletracksorter.cc:430  hparticletracksorter.cc:431  hparticletracksorter.cc:432  hparticletracksorter.cc:433  hparticletracksorter.cc:434  hparticletracksorter.cc:435  hparticletracksorter.cc:436  hparticletracksorter.cc:437  hparticletracksorter.cc:438  hparticletracksorter.cc:439  hparticletracksorter.cc:440  hparticletracksorter.cc:441  hparticletracksorter.cc:442  hparticletracksorter.cc:443  hparticletracksorter.cc:444  hparticletracksorter.cc:445  hparticletracksorter.cc:446  hparticletracksorter.cc:447  hparticletracksorter.cc:448  hparticletracksorter.cc:449  hparticletracksorter.cc:450  hparticletracksorter.cc:451  hparticletracksorter.cc:452  hparticletracksorter.cc:453  hparticletracksorter.cc:454  hparticletracksorter.cc:455  hparticletracksorter.cc:456  hparticletracksorter.cc:457  hparticletracksorter.cc:458  hparticletracksorter.cc:459  hparticletracksorter.cc:460  hparticletracksorter.cc:461  hparticletracksorter.cc:462  hparticletracksorter.cc:463  hparticletracksorter.cc:464  hparticletracksorter.cc:465  hparticletracksorter.cc:466  hparticletracksorter.cc:467  hparticletracksorter.cc:468  hparticletracksorter.cc:469  hparticletracksorter.cc:470  hparticletracksorter.cc:471  hparticletracksorter.cc:472  hparticletracksorter.cc:473  hparticletracksorter.cc:474  hparticletracksorter.cc:475  hparticletracksorter.cc:476  hparticletracksorter.cc:477  hparticletracksorter.cc:478  hparticletracksorter.cc:479  hparticletracksorter.cc:480  hparticletracksorter.cc:481  hparticletracksorter.cc:482  hparticletracksorter.cc:483  hparticletracksorter.cc:484  hparticletracksorter.cc:485  hparticletracksorter.cc:486  hparticletracksorter.cc:487  hparticletracksorter.cc:488  hparticletracksorter.cc:489  hparticletracksorter.cc:490  hparticletracksorter.cc:491  hparticletracksorter.cc:492  hparticletracksorter.cc:493  hparticletracksorter.cc:494  hparticletracksorter.cc:495  hparticletracksorter.cc:496  hparticletracksorter.cc:497  hparticletracksorter.cc:498  hparticletracksorter.cc:499  hparticletracksorter.cc:500  hparticletracksorter.cc:501  hparticletracksorter.cc:502  hparticletracksorter.cc:503  hparticletracksorter.cc:504  hparticletracksorter.cc:505  hparticletracksorter.cc:506  hparticletracksorter.cc:507  hparticletracksorter.cc:508  hparticletracksorter.cc:509  hparticletracksorter.cc:510  hparticletracksorter.cc:511  hparticletracksorter.cc:512  hparticletracksorter.cc:513  hparticletracksorter.cc:514  hparticletracksorter.cc:515  hparticletracksorter.cc:516  hparticletracksorter.cc:517  hparticletracksorter.cc:518  hparticletracksorter.cc:519  hparticletracksorter.cc:520  hparticletracksorter.cc:521  hparticletracksorter.cc:522  hparticletracksorter.cc:523  hparticletracksorter.cc:524  hparticletracksorter.cc:525  hparticletracksorter.cc:526  hparticletracksorter.cc:527  hparticletracksorter.cc:528  hparticletracksorter.cc:529  hparticletracksorter.cc:530  hparticletracksorter.cc:531  hparticletracksorter.cc:532  hparticletracksorter.cc:533  hparticletracksorter.cc:534  hparticletracksorter.cc:535  hparticletracksorter.cc:536  hparticletracksorter.cc:537  hparticletracksorter.cc:538  hparticletracksorter.cc:539  hparticletracksorter.cc:540  hparticletracksorter.cc:541  hparticletracksorter.cc:542  hparticletracksorter.cc:543  hparticletracksorter.cc:544  hparticletracksorter.cc:545  hparticletracksorter.cc:546  hparticletracksorter.cc:547  hparticletracksorter.cc:548  hparticletracksorter.cc:549  hparticletracksorter.cc:550  hparticletracksorter.cc:551  hparticletracksorter.cc:552  hparticletracksorter.cc:553  hparticletracksorter.cc:554  hparticletracksorter.cc:555  hparticletracksorter.cc:556  hparticletracksorter.cc:557  hparticletracksorter.cc:558  hparticletracksorter.cc:559  hparticletracksorter.cc:560  hparticletracksorter.cc:561  hparticletracksorter.cc:562  hparticletracksorter.cc:563  hparticletracksorter.cc:564  hparticletracksorter.cc:565  hparticletracksorter.cc:566  hparticletracksorter.cc:567  hparticletracksorter.cc:568  hparticletracksorter.cc:569  hparticletracksorter.cc:570  hparticletracksorter.cc:571  hparticletracksorter.cc:572  hparticletracksorter.cc:573  hparticletracksorter.cc:574  hparticletracksorter.cc:575  hparticletracksorter.cc:576  hparticletracksorter.cc:577  hparticletracksorter.cc:578  hparticletracksorter.cc:579  hparticletracksorter.cc:580  hparticletracksorter.cc:581  hparticletracksorter.cc:582  hparticletracksorter.cc:583  hparticletracksorter.cc:584  hparticletracksorter.cc:585  hparticletracksorter.cc:586  hparticletracksorter.cc:587  hparticletracksorter.cc:588  hparticletracksorter.cc:589  hparticletracksorter.cc:590  hparticletracksorter.cc:591  hparticletracksorter.cc:592  hparticletracksorter.cc:593  hparticletracksorter.cc:594  hparticletracksorter.cc:595  hparticletracksorter.cc:596  hparticletracksorter.cc:597  hparticletracksorter.cc:598  hparticletracksorter.cc:599  hparticletracksorter.cc:600  hparticletracksorter.cc:601  hparticletracksorter.cc:602  hparticletracksorter.cc:603  hparticletracksorter.cc:604  hparticletracksorter.cc:605  hparticletracksorter.cc:606  hparticletracksorter.cc:607  hparticletracksorter.cc:608  hparticletracksorter.cc:609  hparticletracksorter.cc:610  hparticletracksorter.cc:611  hparticletracksorter.cc:612  hparticletracksorter.cc:613  hparticletracksorter.cc:614  hparticletracksorter.cc:615  hparticletracksorter.cc:616  hparticletracksorter.cc:617  hparticletracksorter.cc:618  hparticletracksorter.cc:619  hparticletracksorter.cc:620  hparticletracksorter.cc:621  hparticletracksorter.cc:622  hparticletracksorter.cc:623  hparticletracksorter.cc:624  hparticletracksorter.cc:625  hparticletracksorter.cc:626  hparticletracksorter.cc:627  hparticletracksorter.cc:628  hparticletracksorter.cc:629  hparticletracksorter.cc:630  hparticletracksorter.cc:631  hparticletracksorter.cc:632  hparticletracksorter.cc:633  hparticletracksorter.cc:634  hparticletracksorter.cc:635  hparticletracksorter.cc:636  hparticletracksorter.cc:637  hparticletracksorter.cc:638  hparticletracksorter.cc:639  hparticletracksorter.cc:640  hparticletracksorter.cc:641  hparticletracksorter.cc:642  hparticletracksorter.cc:643  hparticletracksorter.cc:644  hparticletracksorter.cc:645  hparticletracksorter.cc:646  hparticletracksorter.cc:647  hparticletracksorter.cc:648  hparticletracksorter.cc:649  hparticletracksorter.cc:650  hparticletracksorter.cc:651  hparticletracksorter.cc:652  hparticletracksorter.cc:653  hparticletracksorter.cc:654  hparticletracksorter.cc:655  hparticletracksorter.cc:656  hparticletracksorter.cc:657  hparticletracksorter.cc:658  hparticletracksorter.cc:659  hparticletracksorter.cc:660  hparticletracksorter.cc:661  hparticletracksorter.cc:662  hparticletracksorter.cc:663  hparticletracksorter.cc:664  hparticletracksorter.cc:665  hparticletracksorter.cc:666  hparticletracksorter.cc:667  hparticletracksorter.cc:668  hparticletracksorter.cc:669  hparticletracksorter.cc:670  hparticletracksorter.cc:671  hparticletracksorter.cc:672  hparticletracksorter.cc:673  hparticletracksorter.cc:674  hparticletracksorter.cc:675  hparticletracksorter.cc:676  hparticletracksorter.cc:677  hparticletracksorter.cc:678  hparticletracksorter.cc:679  hparticletracksorter.cc:680  hparticletracksorter.cc:681  hparticletracksorter.cc:682  hparticletracksorter.cc:683  hparticletracksorter.cc:684  hparticletracksorter.cc:685  hparticletracksorter.cc:686  hparticletracksorter.cc:687  hparticletracksorter.cc:688  hparticletracksorter.cc:689  hparticletracksorter.cc:690  hparticletracksorter.cc:691  hparticletracksorter.cc:692  hparticletracksorter.cc:693  hparticletracksorter.cc:694  hparticletracksorter.cc:695  hparticletracksorter.cc:696  hparticletracksorter.cc:697  hparticletracksorter.cc:698  hparticletracksorter.cc:699  hparticletracksorter.cc:700  hparticletracksorter.cc:701  hparticletracksorter.cc:702  hparticletracksorter.cc:703  hparticletracksorter.cc:704  hparticletracksorter.cc:705  hparticletracksorter.cc:706  hparticletracksorter.cc:707  hparticletracksorter.cc:708  hparticletracksorter.cc:709  hparticletracksorter.cc:710  hparticletracksorter.cc:711  hparticletracksorter.cc:712  hparticletracksorter.cc:713  hparticletracksorter.cc:714  hparticletracksorter.cc:715  hparticletracksorter.cc:716  hparticletracksorter.cc:717  hparticletracksorter.cc:718  hparticletracksorter.cc:719  hparticletracksorter.cc:720  hparticletracksorter.cc:721  hparticletracksorter.cc:722  hparticletracksorter.cc:723  hparticletracksorter.cc:724  hparticletracksorter.cc:725  hparticletracksorter.cc:726  hparticletracksorter.cc:727  hparticletracksorter.cc:728  hparticletracksorter.cc:729  hparticletracksorter.cc:730  hparticletracksorter.cc:731  hparticletracksorter.cc:732  hparticletracksorter.cc:733  hparticletracksorter.cc:734  hparticletracksorter.cc:735  hparticletracksorter.cc:736  hparticletracksorter.cc:737  hparticletracksorter.cc:738  hparticletracksorter.cc:739  hparticletracksorter.cc:740  hparticletracksorter.cc:741  hparticletracksorter.cc:742  hparticletracksorter.cc:743  hparticletracksorter.cc:744  hparticletracksorter.cc:745  hparticletracksorter.cc:746  hparticletracksorter.cc:747  hparticletracksorter.cc:748  hparticletracksorter.cc:749  hparticletracksorter.cc:750  hparticletracksorter.cc:751  hparticletracksorter.cc:752  hparticletracksorter.cc:753  hparticletracksorter.cc:754  hparticletracksorter.cc:755  hparticletracksorter.cc:756  hparticletracksorter.cc:757  hparticletracksorter.cc:758  hparticletracksorter.cc:759  hparticletracksorter.cc:760  hparticletracksorter.cc:761  hparticletracksorter.cc:762  hparticletracksorter.cc:763  hparticletracksorter.cc:764  hparticletracksorter.cc:765  hparticletracksorter.cc:766  hparticletracksorter.cc:767  hparticletracksorter.cc:768  hparticletracksorter.cc:769  hparticletracksorter.cc:770  hparticletracksorter.cc:771  hparticletracksorter.cc:772  hparticletracksorter.cc:773  hparticletracksorter.cc:774  hparticletracksorter.cc:775  hparticletracksorter.cc:776  hparticletracksorter.cc:777  hparticletracksorter.cc:778  hparticletracksorter.cc:779  hparticletracksorter.cc:780  hparticletracksorter.cc:781  hparticletracksorter.cc:782  hparticletracksorter.cc:783  hparticletracksorter.cc:784  hparticletracksorter.cc:785  hparticletracksorter.cc:786  hparticletracksorter.cc:787  hparticletracksorter.cc:788  hparticletracksorter.cc:789  hparticletracksorter.cc:790  hparticletracksorter.cc:791  hparticletracksorter.cc:792  hparticletracksorter.cc:793  hparticletracksorter.cc:794  hparticletracksorter.cc:795  hparticletracksorter.cc:796  hparticletracksorter.cc:797  hparticletracksorter.cc:798  hparticletracksorter.cc:799  hparticletracksorter.cc:800  hparticletracksorter.cc:801  hparticletracksorter.cc:802  hparticletracksorter.cc:803  hparticletracksorter.cc:804  hparticletracksorter.cc:805  hparticletracksorter.cc:806  hparticletracksorter.cc:807  hparticletracksorter.cc:808  hparticletracksorter.cc:809  hparticletracksorter.cc:810  hparticletracksorter.cc:811  hparticletracksorter.cc:812  hparticletracksorter.cc:813  hparticletracksorter.cc:814  hparticletracksorter.cc:815  hparticletracksorter.cc:816  hparticletracksorter.cc:817  hparticletracksorter.cc:818  hparticletracksorter.cc:819  hparticletracksorter.cc:820  hparticletracksorter.cc:821  hparticletracksorter.cc:822  hparticletracksorter.cc:823  hparticletracksorter.cc:824  hparticletracksorter.cc:825  hparticletracksorter.cc:826  hparticletracksorter.cc:827  hparticletracksorter.cc:828  hparticletracksorter.cc:829  hparticletracksorter.cc:830  hparticletracksorter.cc:831  hparticletracksorter.cc:832  hparticletracksorter.cc:833  hparticletracksorter.cc:834  hparticletracksorter.cc:835  hparticletracksorter.cc:836  hparticletracksorter.cc:837  hparticletracksorter.cc:838  hparticletracksorter.cc:839  hparticletracksorter.cc:840  hparticletracksorter.cc:841  hparticletracksorter.cc:842  hparticletracksorter.cc:843  hparticletracksorter.cc:844  hparticletracksorter.cc:845  hparticletracksorter.cc:846  hparticletracksorter.cc:847  hparticletracksorter.cc:848  hparticletracksorter.cc:849  hparticletracksorter.cc:850  hparticletracksorter.cc:851  hparticletracksorter.cc:852  hparticletracksorter.cc:853  hparticletracksorter.cc:854  hparticletracksorter.cc:855  hparticletracksorter.cc:856  hparticletracksorter.cc:857  hparticletracksorter.cc:858  hparticletracksorter.cc:859  hparticletracksorter.cc:860  hparticletracksorter.cc:861  hparticletracksorter.cc:862  hparticletracksorter.cc:863  hparticletracksorter.cc:864  hparticletracksorter.cc:865  hparticletracksorter.cc:866  hparticletracksorter.cc:867  hparticletracksorter.cc:868  hparticletracksorter.cc:869  hparticletracksorter.cc:870  hparticletracksorter.cc:871  hparticletracksorter.cc:872  hparticletracksorter.cc:873  hparticletracksorter.cc:874  hparticletracksorter.cc:875  hparticletracksorter.cc:876  hparticletracksorter.cc:877  hparticletracksorter.cc:878  hparticletracksorter.cc:879  hparticletracksorter.cc:880  hparticletracksorter.cc:881  hparticletracksorter.cc:882  hparticletracksorter.cc:883  hparticletracksorter.cc:884  hparticletracksorter.cc:885  hparticletracksorter.cc:886  hparticletracksorter.cc:887  hparticletracksorter.cc:888  hparticletracksorter.cc:889  hparticletracksorter.cc:890  hparticletracksorter.cc:891  hparticletracksorter.cc:892  hparticletracksorter.cc:893  hparticletracksorter.cc:894  hparticletracksorter.cc:895  hparticletracksorter.cc:896  hparticletracksorter.cc:897  hparticletracksorter.cc:898  hparticletracksorter.cc:899  hparticletracksorter.cc:900  hparticletracksorter.cc:901  hparticletracksorter.cc:902  hparticletracksorter.cc:903  hparticletracksorter.cc:904  hparticletracksorter.cc:905  hparticletracksorter.cc:906  hparticletracksorter.cc:907  hparticletracksorter.cc:908  hparticletracksorter.cc:909  hparticletracksorter.cc:910  hparticletracksorter.cc:911  hparticletracksorter.cc:912  hparticletracksorter.cc:913  hparticletracksorter.cc:914  hparticletracksorter.cc:915  hparticletracksorter.cc:916  hparticletracksorter.cc:917  hparticletracksorter.cc:918  hparticletracksorter.cc:919  hparticletracksorter.cc:920  hparticletracksorter.cc:921  hparticletracksorter.cc:922  hparticletracksorter.cc:923  hparticletracksorter.cc:924  hparticletracksorter.cc:925  hparticletracksorter.cc:926  hparticletracksorter.cc:927  hparticletracksorter.cc:928  hparticletracksorter.cc:929  hparticletracksorter.cc:930  hparticletracksorter.cc:931  hparticletracksorter.cc:932  hparticletracksorter.cc:933  hparticletracksorter.cc:934  hparticletracksorter.cc:935  hparticletracksorter.cc:936  hparticletracksorter.cc:937  hparticletracksorter.cc:938  hparticletracksorter.cc:939  hparticletracksorter.cc:940  hparticletracksorter.cc:941  hparticletracksorter.cc:942  hparticletracksorter.cc:943  hparticletracksorter.cc:944  hparticletracksorter.cc:945  hparticletracksorter.cc:946  hparticletracksorter.cc:947  hparticletracksorter.cc:948  hparticletracksorter.cc:949  hparticletracksorter.cc:950  hparticletracksorter.cc:951  hparticletracksorter.cc:952  hparticletracksorter.cc:953  hparticletracksorter.cc:954  hparticletracksorter.cc:955  hparticletracksorter.cc:956  hparticletracksorter.cc:957  hparticletracksorter.cc:958  hparticletracksorter.cc:959  hparticletracksorter.cc:960  hparticletracksorter.cc:961  hparticletracksorter.cc:962  hparticletracksorter.cc:963  hparticletracksorter.cc:964  hparticletracksorter.cc:965  hparticletracksorter.cc:966  hparticletracksorter.cc:967  hparticletracksorter.cc:968  hparticletracksorter.cc:969  hparticletracksorter.cc:970  hparticletracksorter.cc:971  hparticletracksorter.cc:972  hparticletracksorter.cc:973  hparticletracksorter.cc:974  hparticletracksorter.cc:975  hparticletracksorter.cc:976  hparticletracksorter.cc:977  hparticletracksorter.cc:978  hparticletracksorter.cc:979  hparticletracksorter.cc:980  hparticletracksorter.cc:981  hparticletracksorter.cc:982  hparticletracksorter.cc:983  hparticletracksorter.cc:984  hparticletracksorter.cc:985  hparticletracksorter.cc:986  hparticletracksorter.cc:987  hparticletracksorter.cc:988  hparticletracksorter.cc:989  hparticletracksorter.cc:990  hparticletracksorter.cc:991  hparticletracksorter.cc:992  hparticletracksorter.cc:993  hparticletracksorter.cc:994  hparticletracksorter.cc:995  hparticletracksorter.cc:996  hparticletracksorter.cc:997  hparticletracksorter.cc:998  hparticletracksorter.cc:999  hparticletracksorter.cc:1000  hparticletracksorter.cc:1001  hparticletracksorter.cc:1002  hparticletracksorter.cc:1003  hparticletracksorter.cc:1004  hparticletracksorter.cc:1005  hparticletracksorter.cc:1006  hparticletracksorter.cc:1007  hparticletracksorter.cc:1008  hparticletracksorter.cc:1009  hparticletracksorter.cc:1010  hparticletracksorter.cc:1011  hparticletracksorter.cc:1012  hparticletracksorter.cc:1013  hparticletracksorter.cc:1014  hparticletracksorter.cc:1015  hparticletracksorter.cc:1016  hparticletracksorter.cc:1017  hparticletracksorter.cc:1018  hparticletracksorter.cc:1019  hparticletracksorter.cc:1020  hparticletracksorter.cc:1021  hparticletracksorter.cc:1022  hparticletracksorter.cc:1023  hparticletracksorter.cc:1024  hparticletracksorter.cc:1025  hparticletracksorter.cc:1026  hparticletracksorter.cc:1027  hparticletracksorter.cc:1028  hparticletracksorter.cc:1029  hparticletracksorter.cc:1030  hparticletracksorter.cc:1031  hparticletracksorter.cc:1032  hparticletracksorter.cc:1033  hparticletracksorter.cc:1034  hparticletracksorter.cc:1035  hparticletracksorter.cc:1036  hparticletracksorter.cc:1037  hparticletracksorter.cc:1038  hparticletracksorter.cc:1039  hparticletracksorter.cc:1040  hparticletracksorter.cc:1041  hparticletracksorter.cc:1042  hparticletracksorter.cc:1043  hparticletracksorter.cc:1044  hparticletracksorter.cc:1045  hparticletracksorter.cc:1046  hparticletracksorter.cc:1047  hparticletracksorter.cc:1048  hparticletracksorter.cc:1049  hparticletracksorter.cc:1050  hparticletracksorter.cc:1051  hparticletracksorter.cc:1052  hparticletracksorter.cc:1053  hparticletracksorter.cc:1054  hparticletracksorter.cc:1055  hparticletracksorter.cc:1056  hparticletracksorter.cc:1057  hparticletracksorter.cc:1058  hparticletracksorter.cc:1059  hparticletracksorter.cc:1060  hparticletracksorter.cc:1061  hparticletracksorter.cc:1062  hparticletracksorter.cc:1063  hparticletracksorter.cc:1064  hparticletracksorter.cc:1065  hparticletracksorter.cc:1066  hparticletracksorter.cc:1067  hparticletracksorter.cc:1068  hparticletracksorter.cc:1069  hparticletracksorter.cc:1070  hparticletracksorter.cc:1071  hparticletracksorter.cc:1072  hparticletracksorter.cc:1073  hparticletracksorter.cc:1074  hparticletracksorter.cc:1075  hparticletracksorter.cc:1076  hparticletracksorter.cc:1077  hparticletracksorter.cc:1078  hparticletracksorter.cc:1079  hparticletracksorter.cc:1080  hparticletracksorter.cc:1081  hparticletracksorter.cc:1082  hparticletracksorter.cc:1083  hparticletracksorter.cc:1084  hparticletracksorter.cc:1085  hparticletracksorter.cc:1086  hparticletracksorter.cc:1087  hparticletracksorter.cc:1088  hparticletracksorter.cc:1089  hparticletracksorter.cc:1090  hparticletracksorter.cc:1091  hparticletracksorter.cc:1092  hparticletracksorter.cc:1093  hparticletracksorter.cc:1094  hparticletracksorter.cc:1095  hparticletracksorter.cc:1096  hparticletracksorter.cc:1097  hparticletracksorter.cc:1098  hparticletracksorter.cc:1099  hparticletracksorter.cc:1100  hparticletracksorter.cc:1101  hparticletracksorter.cc:1102  hparticletracksorter.cc:1103  hparticletracksorter.cc:1104  hparticletracksorter.cc:1105  hparticletracksorter.cc:1106  hparticletracksorter.cc:1107  hparticletracksorter.cc:1108  hparticletracksorter.cc:1109  hparticletracksorter.cc:1110  hparticletracksorter.cc:1111  hparticletracksorter.cc:1112  hparticletracksorter.cc:1113  hparticletracksorter.cc:1114  hparticletracksorter.cc:1115  hparticletracksorter.cc:1116  hparticletracksorter.cc:1117  hparticletracksorter.cc:1118  hparticletracksorter.cc:1119  hparticletracksorter.cc:1120  hparticletracksorter.cc:1121  hparticletracksorter.cc:1122  hparticletracksorter.cc:1123  hparticletracksorter.cc:1124  hparticletracksorter.cc:1125  hparticletracksorter.cc:1126  hparticletracksorter.cc:1127  hparticletracksorter.cc:1128  hparticletracksorter.cc:1129  hparticletracksorter.cc:1130  hparticletracksorter.cc:1131  hparticletracksorter.cc:1132  hparticletracksorter.cc:1133  hparticletracksorter.cc:1134  hparticletracksorter.cc:1135  hparticletracksorter.cc:1136  hparticletracksorter.cc:1137  hparticletracksorter.cc:1138  hparticletracksorter.cc:1139  hparticletracksorter.cc:1140  hparticletracksorter.cc:1141  hparticletracksorter.cc:1142  hparticletracksorter.cc:1143  hparticletracksorter.cc:1144  hparticletracksorter.cc:1145  hparticletracksorter.cc:1146  hparticletracksorter.cc:1147  hparticletracksorter.cc:1148  hparticletracksorter.cc:1149  hparticletracksorter.cc:1150  hparticletracksorter.cc:1151  hparticletracksorter.cc:1152  hparticletracksorter.cc:1153  hparticletracksorter.cc:1154  hparticletracksorter.cc:1155  hparticletracksorter.cc:1156  hparticletracksorter.cc:1157  hparticletracksorter.cc:1158  hparticletracksorter.cc:1159  hparticletracksorter.cc:1160  hparticletracksorter.cc:1161  hparticletracksorter.cc:1162  hparticletracksorter.cc:1163  hparticletracksorter.cc:1164  hparticletracksorter.cc:1165  hparticletracksorter.cc:1166  hparticletracksorter.cc:1167  hparticletracksorter.cc:1168  hparticletracksorter.cc:1169  hparticletracksorter.cc:1170  hparticletracksorter.cc:1171  hparticletracksorter.cc:1172  hparticletracksorter.cc:1173  hparticletracksorter.cc:1174  hparticletracksorter.cc:1175  hparticletracksorter.cc:1176  hparticletracksorter.cc:1177  hparticletracksorter.cc:1178  hparticletracksorter.cc:1179  hparticletracksorter.cc:1180  hparticletracksorter.cc:1181  hparticletracksorter.cc:1182  hparticletracksorter.cc:1183  hparticletracksorter.cc:1184  hparticletracksorter.cc:1185  hparticletracksorter.cc:1186  hparticletracksorter.cc:1187  hparticletracksorter.cc:1188  hparticletracksorter.cc:1189  hparticletracksorter.cc:1190  hparticletracksorter.cc:1191  hparticletracksorter.cc:1192  hparticletracksorter.cc:1193  hparticletracksorter.cc:1194  hparticletracksorter.cc:1195  hparticletracksorter.cc:1196  hparticletracksorter.cc:1197  hparticletracksorter.cc:1198  hparticletracksorter.cc:1199  hparticletracksorter.cc:1200  hparticletracksorter.cc:1201  hparticletracksorter.cc:1202  hparticletracksorter.cc:1203  hparticletracksorter.cc:1204  hparticletracksorter.cc:1205  hparticletracksorter.cc:1206  hparticletracksorter.cc:1207  hparticletracksorter.cc:1208  hparticletracksorter.cc:1209  hparticletracksorter.cc:1210  hparticletracksorter.cc:1211  hparticletracksorter.cc:1212  hparticletracksorter.cc:1213  hparticletracksorter.cc:1214  hparticletracksorter.cc:1215  hparticletracksorter.cc:1216  hparticletracksorter.cc:1217  hparticletracksorter.cc:1218  hparticletracksorter.cc:1219  hparticletracksorter.cc:1220  hparticletracksorter.cc:1221  hparticletracksorter.cc:1222  hparticletracksorter.cc:1223  hparticletracksorter.cc:1224  hparticletracksorter.cc:1225  hparticletracksorter.cc:1226  hparticletracksorter.cc:1227  hparticletracksorter.cc:1228  hparticletracksorter.cc:1229  hparticletracksorter.cc:1230  hparticletracksorter.cc:1231  hparticletracksorter.cc:1232  hparticletracksorter.cc:1233  hparticletracksorter.cc:1234  hparticletracksorter.cc:1235  hparticletracksorter.cc:1236  hparticletracksorter.cc:1237  hparticletracksorter.cc:1238  hparticletracksorter.cc:1239  hparticletracksorter.cc:1240  hparticletracksorter.cc:1241  hparticletracksorter.cc:1242  hparticletracksorter.cc:1243  hparticletracksorter.cc:1244  hparticletracksorter.cc:1245  hparticletracksorter.cc:1246  hparticletracksorter.cc:1247  hparticletracksorter.cc:1248  hparticletracksorter.cc:1249  hparticletracksorter.cc:1250  hparticletracksorter.cc:1251  hparticletracksorter.cc:1252  hparticletracksorter.cc:1253  hparticletracksorter.cc:1254  hparticletracksorter.cc:1255  hparticletracksorter.cc:1256  hparticletracksorter.cc:1257  hparticletracksorter.cc:1258  hparticletracksorter.cc:1259  hparticletracksorter.cc:1260  hparticletracksorter.cc:1261  hparticletracksorter.cc:1262  hparticletracksorter.cc:1263  hparticletracksorter.cc:1264  hparticletracksorter.cc:1265  hparticletracksorter.cc:1266  hparticletracksorter.cc:1267  hparticletracksorter.cc:1268  hparticletracksorter.cc:1269  hparticletracksorter.cc:1270  hparticletracksorter.cc:1271  hparticletracksorter.cc:1272  hparticletracksorter.cc:1273  hparticletracksorter.cc:1274  hparticletracksorter.cc:1275  hparticletracksorter.cc:1276  hparticletracksorter.cc:1277  hparticletracksorter.cc:1278  hparticletracksorter.cc:1279  hparticletracksorter.cc:1280  hparticletracksorter.cc:1281  hparticletracksorter.cc:1282  hparticletracksorter.cc:1283  hparticletracksorter.cc:1284  hparticletracksorter.cc:1285  hparticletracksorter.cc:1286  hparticletracksorter.cc:1287  hparticletracksorter.cc:1288  hparticletracksorter.cc:1289  hparticletracksorter.cc:1290  hparticletracksorter.cc:1291  hparticletracksorter.cc:1292  hparticletracksorter.cc:1293  hparticletracksorter.cc:1294  hparticletracksorter.cc:1295  hparticletracksorter.cc:1296  hparticletracksorter.cc:1297  hparticletracksorter.cc:1298  hparticletracksorter.cc:1299  hparticletracksorter.cc:1300  hparticletracksorter.cc:1301  hparticletracksorter.cc:1302  hparticletracksorter.cc:1303  hparticletracksorter.cc:1304  hparticletracksorter.cc:1305  hparticletracksorter.cc:1306  hparticletracksorter.cc:1307  hparticletracksorter.cc:1308  hparticletracksorter.cc:1309  hparticletracksorter.cc:1310  hparticletracksorter.cc:1311  hparticletracksorter.cc:1312  hparticletracksorter.cc:1313  hparticletracksorter.cc:1314  hparticletracksorter.cc:1315  hparticletracksorter.cc:1316  hparticletracksorter.cc:1317  hparticletracksorter.cc:1318  hparticletracksorter.cc:1319  hparticletracksorter.cc:1320  hparticletracksorter.cc:1321  hparticletracksorter.cc:1322  hparticletracksorter.cc:1323  hparticletracksorter.cc:1324  hparticletracksorter.cc:1325  hparticletracksorter.cc:1326  hparticletracksorter.cc:1327  hparticletracksorter.cc:1328  hparticletracksorter.cc:1329  hparticletracksorter.cc:1330  hparticletracksorter.cc:1331  hparticletracksorter.cc:1332  hparticletracksorter.cc:1333  hparticletracksorter.cc:1334  hparticletracksorter.cc:1335  hparticletracksorter.cc:1336  hparticletracksorter.cc:1337  hparticletracksorter.cc:1338  hparticletracksorter.cc:1339  hparticletracksorter.cc:1340  hparticletracksorter.cc:1341  hparticletracksorter.cc:1342  hparticletracksorter.cc:1343  hparticletracksorter.cc:1344  hparticletracksorter.cc:1345  hparticletracksorter.cc:1346  hparticletracksorter.cc:1347  hparticletracksorter.cc:1348  hparticletracksorter.cc:1349  hparticletracksorter.cc:1350  hparticletracksorter.cc:1351  hparticletracksorter.cc:1352  hparticletracksorter.cc:1353  hparticletracksorter.cc:1354  hparticletracksorter.cc:1355  hparticletracksorter.cc:1356  hparticletracksorter.cc:1357  hparticletracksorter.cc:1358  hparticletracksorter.cc:1359  hparticletracksorter.cc:1360  hparticletracksorter.cc:1361  hparticletracksorter.cc:1362  hparticletracksorter.cc:1363  hparticletracksorter.cc:1364  hparticletracksorter.cc:1365  hparticletracksorter.cc:1366  hparticletracksorter.cc:1367  hparticletracksorter.cc:1368  hparticletracksorter.cc:1369  hparticletracksorter.cc:1370  hparticletracksorter.cc:1371  hparticletracksorter.cc:1372  hparticletracksorter.cc:1373  hparticletracksorter.cc:1374  hparticletracksorter.cc:1375  hparticletracksorter.cc:1376  hparticletracksorter.cc:1377  hparticletracksorter.cc:1378  hparticletracksorter.cc:1379  hparticletracksorter.cc:1380  hparticletracksorter.cc:1381  hparticletracksorter.cc:1382  hparticletracksorter.cc:1383  hparticletracksorter.cc:1384  hparticletracksorter.cc:1385  hparticletracksorter.cc:1386  hparticletracksorter.cc:1387  hparticletracksorter.cc:1388  hparticletracksorter.cc:1389  hparticletracksorter.cc:1390  hparticletracksorter.cc:1391  hparticletracksorter.cc:1392  hparticletracksorter.cc:1393  hparticletracksorter.cc:1394  hparticletracksorter.cc:1395  hparticletracksorter.cc:1396  hparticletracksorter.cc:1397  hparticletracksorter.cc:1398  hparticletracksorter.cc:1399  hparticletracksorter.cc:1400  hparticletracksorter.cc:1401  hparticletracksorter.cc:1402  hparticletracksorter.cc:1403  hparticletracksorter.cc:1404  hparticletracksorter.cc:1405  hparticletracksorter.cc:1406  hparticletracksorter.cc:1407  hparticletracksorter.cc:1408  hparticletracksorter.cc:1409  hparticletracksorter.cc:1410  hparticletracksorter.cc:1411  hparticletracksorter.cc:1412  hparticletracksorter.cc:1413  hparticletracksorter.cc:1414  hparticletracksorter.cc:1415  hparticletracksorter.cc:1416  hparticletracksorter.cc:1417  hparticletracksorter.cc:1418  hparticletracksorter.cc:1419  hparticletracksorter.cc:1420  hparticletracksorter.cc:1421  hparticletracksorter.cc:1422  hparticletracksorter.cc:1423  hparticletracksorter.cc:1424  hparticletracksorter.cc:1425  hparticletracksorter.cc:1426  hparticletracksorter.cc:1427  hparticletracksorter.cc:1428  hparticletracksorter.cc:1429  hparticletracksorter.cc:1430  hparticletracksorter.cc:1431  hparticletracksorter.cc:1432  hparticletracksorter.cc:1433  hparticletracksorter.cc:1434  hparticletracksorter.cc:1435  hparticletracksorter.cc:1436  hparticletracksorter.cc:1437  hparticletracksorter.cc:1438  hparticletracksorter.cc:1439  hparticletracksorter.cc:1440  hparticletracksorter.cc:1441  hparticletracksorter.cc:1442  hparticletracksorter.cc:1443  hparticletracksorter.cc:1444  hparticletracksorter.cc:1445  hparticletracksorter.cc:1446  hparticletracksorter.cc:1447  hparticletracksorter.cc:1448  hparticletracksorter.cc:1449  hparticletracksorter.cc:1450  hparticletracksorter.cc:1451  hparticletracksorter.cc:1452  hparticletracksorter.cc:1453  hparticletracksorter.cc:1454  hparticletracksorter.cc:1455  hparticletracksorter.cc:1456  hparticletracksorter.cc:1457  hparticletracksorter.cc:1458  hparticletracksorter.cc:1459  hparticletracksorter.cc:1460  hparticletracksorter.cc:1461  hparticletracksorter.cc:1462  hparticletracksorter.cc:1463  hparticletracksorter.cc:1464  hparticletracksorter.cc:1465  hparticletracksorter.cc:1466  hparticletracksorter.cc:1467  hparticletracksorter.cc:1468  hparticletracksorter.cc:1469  hparticletracksorter.cc:1470  hparticletracksorter.cc:1471  hparticletracksorter.cc:1472  hparticletracksorter.cc:1473  hparticletracksorter.cc:1474  hparticletracksorter.cc:1475  hparticletracksorter.cc:1476  hparticletracksorter.cc:1477  hparticletracksorter.cc:1478  hparticletracksorter.cc:1479  hparticletracksorter.cc:1480  hparticletracksorter.cc:1481  hparticletracksorter.cc:1482  hparticletracksorter.cc:1483  hparticletracksorter.cc:1484  hparticletracksorter.cc:1485  hparticletracksorter.cc:1486  hparticletracksorter.cc:1487  hparticletracksorter.cc:1488  hparticletracksorter.cc:1489  hparticletracksorter.cc:1490  hparticletracksorter.cc:1491  hparticletracksorter.cc:1492  hparticletracksorter.cc:1493  hparticletracksorter.cc:1494  hparticletracksorter.cc:1495  hparticletracksorter.cc:1496  hparticletracksorter.cc:1497  hparticletracksorter.cc:1498  hparticletracksorter.cc:1499  hparticletracksorter.cc:1500  hparticletracksorter.cc:1501  hparticletracksorter.cc:1502  hparticletracksorter.cc:1503  hparticletracksorter.cc:1504  hparticletracksorter.cc:1505  hparticletracksorter.cc:1506  hparticletracksorter.cc:1507  hparticletracksorter.cc:1508  hparticletracksorter.cc:1509  hparticletracksorter.cc:1510  hparticletracksorter.cc:1511  hparticletracksorter.cc:1512  hparticletracksorter.cc:1513  hparticletracksorter.cc:1514  hparticletracksorter.cc:1515  hparticletracksorter.cc:1516  hparticletracksorter.cc:1517  hparticletracksorter.cc:1518  hparticletracksorter.cc:1519  hparticletracksorter.cc:1520  hparticletracksorter.cc:1521  hparticletracksorter.cc:1522  hparticletracksorter.cc:1523  hparticletracksorter.cc:1524  hparticletracksorter.cc:1525  hparticletracksorter.cc:1526  hparticletracksorter.cc:1527  hparticletracksorter.cc:1528  hparticletracksorter.cc:1529  hparticletracksorter.cc:1530  hparticletracksorter.cc:1531  hparticletracksorter.cc:1532  hparticletracksorter.cc:1533  hparticletracksorter.cc:1534  hparticletracksorter.cc:1535  hparticletracksorter.cc:1536  hparticletracksorter.cc:1537  hparticletracksorter.cc:1538  hparticletracksorter.cc:1539  hparticletracksorter.cc:1540  hparticletracksorter.cc:1541  hparticletracksorter.cc:1542  hparticletracksorter.cc:1543  hparticletracksorter.cc:1544  hparticletracksorter.cc:1545  hparticletracksorter.cc:1546  hparticletracksorter.cc:1547  hparticletracksorter.cc:1548  hparticletracksorter.cc:1549  hparticletracksorter.cc:1550  hparticletracksorter.cc:1551  hparticletracksorter.cc:1552  hparticletracksorter.cc:1553  hparticletracksorter.cc:1554  hparticletracksorter.cc:1555  hparticletracksorter.cc:1556  hparticletracksorter.cc:1557  hparticletracksorter.cc:1558  hparticletracksorter.cc:1559  hparticletracksorter.cc:1560  hparticletracksorter.cc:1561  hparticletracksorter.cc:1562  hparticletracksorter.cc:1563  hparticletracksorter.cc:1564  hparticletracksorter.cc:1565  hparticletracksorter.cc:1566  hparticletracksorter.cc:1567  hparticletracksorter.cc:1568  hparticletracksorter.cc:1569  hparticletracksorter.cc:1570  hparticletracksorter.cc:1571  hparticletracksorter.cc:1572  hparticletracksorter.cc:1573  hparticletracksorter.cc:1574  hparticletracksorter.cc:1575  hparticletracksorter.cc:1576  hparticletracksorter.cc:1577  hparticletracksorter.cc:1578  hparticletracksorter.cc:1579  hparticletracksorter.cc:1580  hparticletracksorter.cc:1581  hparticletracksorter.cc:1582  hparticletracksorter.cc:1583  hparticletracksorter.cc:1584  hparticletracksorter.cc:1585  hparticletracksorter.cc:1586  hparticletracksorter.cc:1587  hparticletracksorter.cc:1588  hparticletracksorter.cc:1589  hparticletracksorter.cc:1590  hparticletracksorter.cc:1591  hparticletracksorter.cc:1592  hparticletracksorter.cc:1593  hparticletracksorter.cc:1594  hparticletracksorter.cc:1595  hparticletracksorter.cc:1596  hparticletracksorter.cc:1597  hparticletracksorter.cc:1598  hparticletracksorter.cc:1599  hparticletracksorter.cc:1600  hparticletracksorter.cc:1601  hparticletracksorter.cc:1602  hparticletracksorter.cc:1603  hparticletracksorter.cc:1604  hparticletracksorter.cc:1605  hparticletracksorter.cc:1606  hparticletracksorter.cc:1607  hparticletracksorter.cc:1608  hparticletracksorter.cc:1609  hparticletracksorter.cc:1610  hparticletracksorter.cc:1611  hparticletracksorter.cc:1612  hparticletracksorter.cc:1613  hparticletracksorter.cc:1614  hparticletracksorter.cc:1615  hparticletracksorter.cc:1616  hparticletracksorter.cc:1617  hparticletracksorter.cc:1618  hparticletracksorter.cc:1619  hparticletracksorter.cc:1620  hparticletracksorter.cc:1621  hparticletracksorter.cc:1622  hparticletracksorter.cc:1623  hparticletracksorter.cc:1624  hparticletracksorter.cc:1625  hparticletracksorter.cc:1626  hparticletracksorter.cc:1627  hparticletracksorter.cc:1628  hparticletracksorter.cc:1629  hparticletracksorter.cc:1630  hparticletracksorter.cc:1631  hparticletracksorter.cc:1632  hparticletracksorter.cc:1633  hparticletracksorter.cc:1634  hparticletracksorter.cc:1635  hparticletracksorter.cc:1636  hparticletracksorter.cc:1637  hparticletracksorter.cc:1638  hparticletracksorter.cc:1639  hparticletracksorter.cc:1640  hparticletracksorter.cc:1641  hparticletracksorter.cc:1642  hparticletracksorter.cc:1643  hparticletracksorter.cc:1644  hparticletracksorter.cc:1645  hparticletracksorter.cc:1646  hparticletracksorter.cc:1647  hparticletracksorter.cc:1648  hparticletracksorter.cc:1649  hparticletracksorter.cc:1650  hparticletracksorter.cc:1651  hparticletracksorter.cc:1652  hparticletracksorter.cc:1653  hparticletracksorter.cc:1654  hparticletracksorter.cc:1655  hparticletracksorter.cc:1656  hparticletracksorter.cc:1657  hparticletracksorter.cc:1658  hparticletracksorter.cc:1659  hparticletracksorter.cc:1660  hparticletracksorter.cc:1661  hparticletracksorter.cc:1662  hparticletracksorter.cc:1663  hparticletracksorter.cc:1664  hparticletracksorter.cc:1665  hparticletracksorter.cc:1666  hparticletracksorter.cc:1667  hparticletracksorter.cc:1668  hparticletracksorter.cc:1669  hparticletracksorter.cc:1670  hparticletracksorter.cc:1671  hparticletracksorter.cc:1672  hparticletracksorter.cc:1673  hparticletracksorter.cc:1674  hparticletracksorter.cc:1675  hparticletracksorter.cc:1676  hparticletracksorter.cc:1677  hparticletracksorter.cc:1678  hparticletracksorter.cc:1679  hparticletracksorter.cc:1680  hparticletracksorter.cc:1681  hparticletracksorter.cc:1682  hparticletracksorter.cc:1683  hparticletracksorter.cc:1684  hparticletracksorter.cc:1685  hparticletracksorter.cc:1686  hparticletracksorter.cc:1687  hparticletracksorter.cc:1688  hparticletracksorter.cc:1689  hparticletracksorter.cc:1690  hparticletracksorter.cc:1691  hparticletracksorter.cc:1692  hparticletracksorter.cc:1693  hparticletracksorter.cc:1694  hparticletracksorter.cc:1695  hparticletracksorter.cc:1696  hparticletracksorter.cc:1697  hparticletracksorter.cc:1698  hparticletracksorter.cc:1699  hparticletracksorter.cc:1700  hparticletracksorter.cc:1701  hparticletracksorter.cc:1702  hparticletracksorter.cc:1703  hparticletracksorter.cc:1704