#ifndef  __HPARTICLETRACKSORTER_H__
#define  __HPARTICLETRACKSORTER_H__
#include "hcategory.h"
#include "hiterator.h"
#include "hrecevent.h"
#include "hparticledef.h"
#include <vector>
#include "TString.h"
#include "TFile.h"
#include "TNtuple.h"
using  std::vector;
using  std::iostream;
# define SORTER_NUMBER_OF_INDEX 7
# define SORTER_NUMBER_OF_QUALITY_CRITERIA 7
class HParticleCand;
typedef struct {
    HParticleCand* cand;
    Short_t  ind_Cand;
    Short_t  ind_RICH   ;
    Short_t  ind_innerMDC;
    Short_t  ind_outerMDC;
    Short_t  ind_TOF;
    Short_t  ind_SHOWER;
    Short_t  ind_RPC;
    Short_t  selectedMeta;
    Int_t    nPadsRich;
    Short_t  sec;
    Short_t  MetaModule;
    Short_t  MetaCell;
    Float_t  mom;
    Float_t  beta;
    Float_t  MDC_dEdx;
    Float_t  innerMDCChi2;
    Float_t  outerMDCChi2;
    Short_t  nMdcLayerInnerSeg;
    Short_t  nMdcLayerOuterSeg;
    Float_t  RK_META_match_Quality;
    Float_t  RK_META_match_Radius;
    Float_t  RK_META_dx;
    Float_t  RK_META_dy;
    Float_t  RK_META_match_Shr_Quality;
    Float_t  RK_RICH_match_Quality;
    Float_t  RK_Chi2;
    Bool_t   RICH_RK_Corr;
    Int_t    userSort1;
    Int_t    userSort2;
    Int_t    userSort3;
    Float_t  innerMDCTheta;
    Float_t  innerMDCPhi;
    Float_t  outerMDCTheta;
    Float_t  outerMDCPhi;
} candidateSort;
class sorter_setup : public TObject {
public:
    Int_t kSwitchRICHMatching ;
    Float_t fRICHMDCWindow    ;
    Bool_t kIsFieldOn         ;
    Bool_t kIgnoreRICH        ;
    Bool_t kIgnoreInnerMDC    ;
    Bool_t kIgnoreOuterMDC    ;
    Bool_t kIgnoreMETA        ;
    Bool_t kIgnorePreviousIndex;
    Bool_t (*pUserSort)(candidateSort*, candidateSort*);
    Bool_t kUseYMatching      ;
    Bool_t kUseYMatchingScaling;
    Float_t fMetaBoundary      ;
    Bool_t kUseBeta            ;
    Float_t fBetaLepCut        ;
    Bool_t kUseFakeRejection   ;
    Bool_t kUseMETAQA          ;
    Float_t fMETAQACut         ;
    Float_t fTOFMAXCut         ;
    Float_t fDeltaSegCut       ;
    void setDefault(){
	kSwitchRICHMatching  = Particle::kUseRKRICHWindowSorter;
	fRICHMDCWindow       = 4.;
	kIsFieldOn           = kTRUE;
	kIgnoreRICH          = kFALSE;
	kIgnoreInnerMDC      = kFALSE;
	kIgnoreOuterMDC      = kFALSE;
	kIgnoreMETA          = kFALSE;
	kIgnorePreviousIndex = kFALSE;
	pUserSort            = NULL;
	kUseYMatching        = kTRUE;
	kUseYMatchingScaling = kTRUE;
	fMetaBoundary        = 4.0;
	kUseBeta             = kTRUE;
	fBetaLepCut          = 0.9;
	kUseFakeRejection    = kTRUE;
	kUseMETAQA           = kTRUE;
	fMETAQACut           = 3.0;
	fTOFMAXCut           = 60.0;
	fDeltaSegCut         = 2.0;
    } ;
    void copyFromStatic();
    void copyToStatic();
    void copyFrom(sorter_setup& s){
	kSwitchRICHMatching  = s.kSwitchRICHMatching;
	fRICHMDCWindow       = s.fRICHMDCWindow;
	kIsFieldOn           = s.kIsFieldOn;
	kIgnoreRICH          = s.kIgnoreRICH;
	kIgnoreInnerMDC      = s.kIgnoreInnerMDC;
	kIgnoreOuterMDC      = s.kIgnoreOuterMDC;
	kIgnoreMETA          = s.kIgnoreMETA;
	kIgnorePreviousIndex = s.kIgnorePreviousIndex;
	pUserSort            = s.pUserSort;
	kUseYMatching        = s.kUseYMatching;
	kUseYMatchingScaling = s.kUseYMatchingScaling;
	fMetaBoundary        = s.fMetaBoundary;
	kUseBeta             = s.kUseBeta;
	fBetaLepCut          = s.fBetaLepCut;
	kUseFakeRejection    = s.kUseFakeRejection;
	kUseMETAQA           = s.kUseMETAQA;
	fMETAQACut           = s.fMETAQACut;
	fTOFMAXCut           = s.fTOFMAXCut;
	fDeltaSegCut         = s.fDeltaSegCut;
    };
    void copyTo(sorter_setup& d){
	 d.kSwitchRICHMatching  =  kSwitchRICHMatching;
	 d.fRICHMDCWindow       =  fRICHMDCWindow;
	 d.kIsFieldOn           =  kIsFieldOn;
	 d.kIgnoreRICH          =  kIgnoreRICH;
	 d.kIgnoreInnerMDC      =  kIgnoreInnerMDC;
	 d.kIgnoreOuterMDC      =  kIgnoreOuterMDC;
	 d.kIgnoreMETA          =  kIgnoreMETA;
	 d.kIgnorePreviousIndex =  kIgnorePreviousIndex;
	 d.pUserSort            =  pUserSort;
	 d.kUseYMatching        =  kUseYMatching;
	 d.kUseYMatchingScaling =  kUseYMatchingScaling;
	 d.fMetaBoundary        =  fMetaBoundary;
	 d.kUseBeta             =  kUseBeta;
	 d.fBetaLepCut          =  fBetaLepCut;
	 d.kUseFakeRejection    =  kUseFakeRejection;
	 d.kUseMETAQA           =  kUseMETAQA;
	 d.fMETAQACut           =  fMETAQACut;
	 d.fTOFMAXCut           =  fTOFMAXCut;
	 d.fDeltaSegCut         =  fDeltaSegCut;
    };
    void print(){
	cout<<"--------------------------------------------------------------------"<<endl;
	cout<<"sorter_setup:"<<endl;
	cout<<"kSwitchRICHMatching  "<<kSwitchRICHMatching <<endl;
	cout<<"fRICHMDCWindow       "<<fRICHMDCWindow      <<endl;
	cout<<"kIsFieldOn           "<<kIsFieldOn          <<endl;
	cout<<"kIgnoreRICH          "<<kIgnoreRICH         <<endl;
	cout<<"kIgnoreInnerMDC      "<<kIgnoreInnerMDC     <<endl;
	cout<<"kIgnoreOuterMDCB     "<<kIgnoreOuterMDC     <<endl;
	cout<<"kIgnoreMETA          "<<kIgnoreMETA         <<endl;
	cout<<"kIgnorePreviousIndex "<<kIgnorePreviousIndex<<endl;
	cout<<"pUserSort            "<<pUserSort           <<endl;
	cout<<"kUseYMatching        "<<kUseYMatching       <<endl;
	cout<<"kUseYMatchingScaling "<<kUseYMatchingScaling<<endl;
	cout<<"fMetaBoundary        "<<fMetaBoundary       <<endl;
	cout<<"kUseBeta             "<<kUseBeta            <<endl;
	cout<<"fBetaLepCut          "<<fBetaLepCut         <<endl;
	cout<<"kUseFakeRejection    "<<kUseFakeRejection   <<endl;
	cout<<"kUseMETAQA           "<<kUseMETAQA          <<endl;
	cout<<"fMetaBoundary        "<<fMetaBoundary       <<endl;
	cout<<"fMETAQACut           "<<fMETAQACut          <<endl;
	cout<<"fTOFMAXCut           "<<fTOFMAXCut          <<endl;
	cout<<"fDeltaSegCut         "<<fDeltaSegCut        <<endl;
	cout<<"--------------------------------------------------------------------"<<endl;
    }
    ClassDef(sorter_setup,0)
};
class HParticleTrackSorter : public TNamed {
friend class sorter_setup;
public:
protected:
    sorter_setup  setup;                   
    sorter_setup  setup_backup;            
    static Bool_t  kDebug;                 
    static Int_t   printLevel;             
    static Int_t   kSwitchIndex;           
    static Int_t   kSwitchQuality;         
    static Int_t   kSwitchParticle;        
    static Int_t   kSwitchRICHMatching;    
    static Float_t fRICHMDCWindow  ;       
    static Bool_t kIsFieldOn;              
    static Bool_t kIgnoreRICH;             
    static Bool_t kIgnoreInnerMDC;         
    static Bool_t kIgnoreOuterMDC;         
    static Bool_t kIgnoreMETA;             
    static Bool_t kIgnorePreviousIndex;    
    static Bool_t kUseYMatching;           
    static Bool_t kUseYMatchingScaling;    
    static Bool_t kUseBeta;                
    static Bool_t kUseFakeRejection;       
    static Bool_t kUseMETAQA;              
    static Float_t fMetaBoundary;          
    static Float_t fBetaLepCut;            
    static Float_t fMETAQACut;             
    static Float_t fTOFMAXCut;             
    static Float_t fDeltaSegCut;           
    Int_t  fill_Iteration;                 
    Int_t  selectBest_Iteration;           
    UInt_t  currentEvent;                   
    vector < candidateSort *> all_candidates;  
    vector < Int_t > index_RICH;           
    vector < Int_t > index_InnerMDC;       
    vector < Int_t > index_OuterMDC;       
    vector < Int_t > index_SHOWER;         
    vector < Int_t > index_TOFHit;         
    vector < Int_t > index_TOFClst;        
    vector < Int_t > index_RPC;            
    vector < Int_t > old_flags;            
    vector < Int_t > old_flags_emc;        
    TString*   nameIndex  ;                
    TString*   nameQuality;                
    Bool_t     isSimulation;               
    TFile*     fout;                       
    TNtuple*   nt;                         
    HCategory* pParticleCandCat;           
    HCategory* pEmcClusterCat;             
    HIterator* iterParticleCandCat;        
    HRecEvent* fEvent;                     
    static Bool_t (*pUserSort)(candidateSort*, candidateSort*); 
    void   printCand        (candidateSort*, Int_t, TString spacer = "    ");
    static Bool_t cmpIndex  (candidateSort*, candidateSort*);
    static Bool_t cmpQuality(candidateSort*, candidateSort*);
    Bool_t rejectIndex      (candidateSort*, Particle::ESwitch, Int_t&);
    Bool_t rejectQuality    (candidateSort*, Particle::ESwitch);
    Int_t  flagAccepted     (vector<candidateSort*>&, Particle::ESwitch);
    Int_t  flagDouble       (vector<candidateSort*>&, Particle::ESwitch);
    Int_t  setFlagsDouble   (vector<candidateSort*>&, Particle::ESwitch);
    Int_t  clearVector      (vector<candidateSort*>&);
    Int_t  fillInput        (vector<candidateSort*>&);
    void   selection(Bool_t (*function)(HParticleCand* ));
    Int_t  fillAndSetFlags  ();
    Bool_t flagEmcClusters();
    static Bool_t isDeltaSegOk(HParticleCand*);
    void   clear(void);
public:
    HParticleTrackSorter(void);
    HParticleTrackSorter(TString name,TString title);
    ~HParticleTrackSorter(void);
    Bool_t init     (HRecEvent* evt=0);
    Bool_t finalize (void);
    
    static void   setDebug              (Bool_t debug = kTRUE)  { kDebug               = debug;}
    static void   setPrintLevel         (Int_t level)           { printLevel           = level;}
    void   setIsFieldOn          (Bool_t field = kTRUE)  { kIsFieldOn           = field; setup.kIsFieldOn  = field;}
    void   setIgnoreRICH         (Bool_t ignore = kTRUE) { kIgnoreRICH          = ignore;setup.kIgnoreRICH = ignore;}
    void   setIgnoreInnerMDC     (Bool_t ignore = kTRUE) { kIgnoreInnerMDC      = ignore;setup.kIgnoreInnerMDC  = ignore;}
    void   setIgnoreOuterMDC     (Bool_t ignore = kTRUE) { kIgnoreOuterMDC      = ignore;setup.kIgnoreOuterMDC  = ignore;}
    void   setIgnoreMETA         (Bool_t ignore = kTRUE) { kIgnoreMETA          = ignore;setup.kIgnoreMETA      = ignore;}
    void   setIgnorePreviousIndex(Bool_t ignore = kTRUE) { kIgnorePreviousIndex = ignore;setup.kIgnorePreviousIndex = ignore;}
    void   setUseYMatching       (Bool_t use    = kTRUE) { kUseYMatching        = use   ;setup.kUseYMatching        = use   ;}
    void   setUseYMatchingScaling(Bool_t use    = kTRUE) { kUseYMatchingScaling = use   ;setup.kUseYMatchingScaling = use   ;}
    void   setUseBeta            (Bool_t use    = kTRUE) { kUseBeta             = use   ;setup.kUseBeta             = use   ;}
    void   setUseFakeRejection   (Bool_t use    = kTRUE) { kUseFakeRejection    = use   ;setup.kUseFakeRejection    = use   ;}
    void   setUseMETAQA          (Bool_t use    = kTRUE) { kUseMETAQA           = use   ;setup.kUseMETAQA           = use   ;}
    void   setUserSort(Bool_t    (*function)(candidateSort*, candidateSort*)){ pUserSort = function;setup.pUserSort = function;}
    void   setRICHMatching       (Particle::ERichMatch match, Float_t window = 4.);
    void   setMetaBoundary       (Float_t savety = 3.5) { fMetaBoundary = savety;setup.fMetaBoundary = savety;}
    void   setBetaLeptonCut      (Float_t cut = .9)     { fBetaLepCut   = cut;   setup.fBetaLepCut   = cut;}
    void   setMETAQACut          (Float_t cut = 3.)     { fMETAQACut    = cut;   setup.fMETAQACut    = cut;}
    void   setTOFMAXCut          (Float_t cut = 60.)    { fTOFMAXCut    = cut;   setup.fTOFMAXCut    = cut;}
    void   setDeltaSegCut        (Float_t cut = 2.)     { fDeltaSegCut  = cut;   setup.fDeltaSegCut  = cut;}
    Float_t getMetaBoundary()    {return fMetaBoundary;}
    Float_t getBetaLeptonCut()   {return fBetaLepCut;}
    
    void          resetFlags(Bool_t flag = kTRUE,Bool_t reject = kTRUE,Bool_t used = kTRUE,Bool_t lepton = kTRUE);
    void          cleanUp(Bool_t final = kTRUE);
    Int_t         fill(Bool_t (*function)(HParticleCand* ));
    void          backupFlags(Bool_t onlyFlags=kTRUE);
    Bool_t        restoreFlags(Bool_t onlyFlags=kTRUE);
    void          backupSetup();
    Bool_t        restoreSetup();
    sorter_setup& getSetup(){ return setup; }
    Int_t         selectBest(Particle::ESwitch byQuality, Int_t byParticle);
    static Bool_t selectLeptons          (HParticleCand* pcand = 0);
    static Bool_t selectHadrons          (HParticleCand* pcand = 0);
    static Bool_t selectLeptonsNoOuterFit(HParticleCand* pcand = 0);
    static Bool_t selectHadronsNoOuterFit(HParticleCand* pcand = 0);
    vector < candidateSort *>& getCandidates() { return  all_candidates;}
    void  printEvent(TString comment);
    void  printSetup();
    ClassDef(HParticleTrackSorter,0);
};
#endif /* !__HPARTICLETRACKSORTER_H__ */
 hparticletracksorter.h:10  hparticletracksorter.h:11  hparticletracksorter.h:12  hparticletracksorter.h:13  hparticletracksorter.h:14  hparticletracksorter.h:15  hparticletracksorter.h:16  hparticletracksorter.h:17  hparticletracksorter.h:18  hparticletracksorter.h:19  hparticletracksorter.h:20  hparticletracksorter.h:21  hparticletracksorter.h:22  hparticletracksorter.h:23  hparticletracksorter.h:24  hparticletracksorter.h:25  hparticletracksorter.h:26  hparticletracksorter.h:27  hparticletracksorter.h:28  hparticletracksorter.h:29  hparticletracksorter.h:30  hparticletracksorter.h:31  hparticletracksorter.h:32  hparticletracksorter.h:33  hparticletracksorter.h:34  hparticletracksorter.h:35  hparticletracksorter.h:36  hparticletracksorter.h:37  hparticletracksorter.h:38  hparticletracksorter.h:39  hparticletracksorter.h:40  hparticletracksorter.h:41  hparticletracksorter.h:42  hparticletracksorter.h:43  hparticletracksorter.h:44  hparticletracksorter.h:45  hparticletracksorter.h:46  hparticletracksorter.h:47  hparticletracksorter.h:48  hparticletracksorter.h:49  hparticletracksorter.h:50  hparticletracksorter.h:51  hparticletracksorter.h:52  hparticletracksorter.h:53  hparticletracksorter.h:54  hparticletracksorter.h:55  hparticletracksorter.h:56  hparticletracksorter.h:57  hparticletracksorter.h:58  hparticletracksorter.h:59  hparticletracksorter.h:60  hparticletracksorter.h:61  hparticletracksorter.h:62  hparticletracksorter.h:63  hparticletracksorter.h:64  hparticletracksorter.h:65  hparticletracksorter.h:66  hparticletracksorter.h:67  hparticletracksorter.h:68  hparticletracksorter.h:69  hparticletracksorter.h:70  hparticletracksorter.h:71  hparticletracksorter.h:72  hparticletracksorter.h:73  hparticletracksorter.h:74  hparticletracksorter.h:75  hparticletracksorter.h:76  hparticletracksorter.h:77  hparticletracksorter.h:78  hparticletracksorter.h:79  hparticletracksorter.h:80  hparticletracksorter.h:81  hparticletracksorter.h:82  hparticletracksorter.h:83  hparticletracksorter.h:84  hparticletracksorter.h:85  hparticletracksorter.h:86  hparticletracksorter.h:87  hparticletracksorter.h:88  hparticletracksorter.h:89  hparticletracksorter.h:90  hparticletracksorter.h:91  hparticletracksorter.h:92  hparticletracksorter.h:93  hparticletracksorter.h:94  hparticletracksorter.h:95  hparticletracksorter.h:96  hparticletracksorter.h:97  hparticletracksorter.h:98  hparticletracksorter.h:99  hparticletracksorter.h:100  hparticletracksorter.h:101  hparticletracksorter.h:102  hparticletracksorter.h:103  hparticletracksorter.h:104  hparticletracksorter.h:105  hparticletracksorter.h:106  hparticletracksorter.h:107  hparticletracksorter.h:108  hparticletracksorter.h:109  hparticletracksorter.h:110  hparticletracksorter.h:111  hparticletracksorter.h:112  hparticletracksorter.h:113  hparticletracksorter.h:114  hparticletracksorter.h:115  hparticletracksorter.h:116  hparticletracksorter.h:117  hparticletracksorter.h:118  hparticletracksorter.h:119  hparticletracksorter.h:120  hparticletracksorter.h:121  hparticletracksorter.h:122  hparticletracksorter.h:123  hparticletracksorter.h:124  hparticletracksorter.h:125  hparticletracksorter.h:126  hparticletracksorter.h:127  hparticletracksorter.h:128  hparticletracksorter.h:129  hparticletracksorter.h:130  hparticletracksorter.h:131  hparticletracksorter.h:132  hparticletracksorter.h:133  hparticletracksorter.h:134  hparticletracksorter.h:135  hparticletracksorter.h:136  hparticletracksorter.h:137  hparticletracksorter.h:138  hparticletracksorter.h:139  hparticletracksorter.h:140  hparticletracksorter.h:141  hparticletracksorter.h:142  hparticletracksorter.h:143  hparticletracksorter.h:144  hparticletracksorter.h:145  hparticletracksorter.h:146  hparticletracksorter.h:147  hparticletracksorter.h:148  hparticletracksorter.h:149  hparticletracksorter.h:150  hparticletracksorter.h:151  hparticletracksorter.h:152  hparticletracksorter.h:153  hparticletracksorter.h:154  hparticletracksorter.h:155  hparticletracksorter.h:156  hparticletracksorter.h:157  hparticletracksorter.h:158  hparticletracksorter.h:159  hparticletracksorter.h:160  hparticletracksorter.h:161  hparticletracksorter.h:162  hparticletracksorter.h:163  hparticletracksorter.h:164  hparticletracksorter.h:165  hparticletracksorter.h:166  hparticletracksorter.h:167  hparticletracksorter.h:168  hparticletracksorter.h:169  hparticletracksorter.h:170  hparticletracksorter.h:171  hparticletracksorter.h:172  hparticletracksorter.h:173  hparticletracksorter.h:174  hparticletracksorter.h:175  hparticletracksorter.h:176  hparticletracksorter.h:177  hparticletracksorter.h:178  hparticletracksorter.h:179  hparticletracksorter.h:180  hparticletracksorter.h:181  hparticletracksorter.h:182  hparticletracksorter.h:183  hparticletracksorter.h:184  hparticletracksorter.h:185  hparticletracksorter.h:186  hparticletracksorter.h:187  hparticletracksorter.h:188  hparticletracksorter.h:189  hparticletracksorter.h:190  hparticletracksorter.h:191  hparticletracksorter.h:192  hparticletracksorter.h:193  hparticletracksorter.h:194  hparticletracksorter.h:195  hparticletracksorter.h:196  hparticletracksorter.h:197  hparticletracksorter.h:198  hparticletracksorter.h:199  hparticletracksorter.h:200  hparticletracksorter.h:201  hparticletracksorter.h:202  hparticletracksorter.h:203  hparticletracksorter.h:204  hparticletracksorter.h:205  hparticletracksorter.h:206  hparticletracksorter.h:207  hparticletracksorter.h:208  hparticletracksorter.h:209  hparticletracksorter.h:210  hparticletracksorter.h:211  hparticletracksorter.h:212  hparticletracksorter.h:213  hparticletracksorter.h:214  hparticletracksorter.h:215  hparticletracksorter.h:216  hparticletracksorter.h:217  hparticletracksorter.h:218  hparticletracksorter.h:219  hparticletracksorter.h:220  hparticletracksorter.h:221  hparticletracksorter.h:222  hparticletracksorter.h:223  hparticletracksorter.h:224  hparticletracksorter.h:225  hparticletracksorter.h:226  hparticletracksorter.h:227  hparticletracksorter.h:228  hparticletracksorter.h:229  hparticletracksorter.h:230  hparticletracksorter.h:231  hparticletracksorter.h:232  hparticletracksorter.h:233  hparticletracksorter.h:234  hparticletracksorter.h:235  hparticletracksorter.h:236  hparticletracksorter.h:237  hparticletracksorter.h:238  hparticletracksorter.h:239  hparticletracksorter.h:240  hparticletracksorter.h:241  hparticletracksorter.h:242  hparticletracksorter.h:243  hparticletracksorter.h:244  hparticletracksorter.h:245  hparticletracksorter.h:246  hparticletracksorter.h:247  hparticletracksorter.h:248  hparticletracksorter.h:249  hparticletracksorter.h:250  hparticletracksorter.h:251  hparticletracksorter.h:252  hparticletracksorter.h:253  hparticletracksorter.h:254  hparticletracksorter.h:255  hparticletracksorter.h:256  hparticletracksorter.h:257  hparticletracksorter.h:258  hparticletracksorter.h:259  hparticletracksorter.h:260  hparticletracksorter.h:261  hparticletracksorter.h:262  hparticletracksorter.h:263  hparticletracksorter.h:264  hparticletracksorter.h:265  hparticletracksorter.h:266  hparticletracksorter.h:267  hparticletracksorter.h:268  hparticletracksorter.h:269  hparticletracksorter.h:270  hparticletracksorter.h:271  hparticletracksorter.h:272  hparticletracksorter.h:273  hparticletracksorter.h:274  hparticletracksorter.h:275  hparticletracksorter.h:276  hparticletracksorter.h:277  hparticletracksorter.h:278  hparticletracksorter.h:279  hparticletracksorter.h:280  hparticletracksorter.h:281  hparticletracksorter.h:282  hparticletracksorter.h:283  hparticletracksorter.h:284  hparticletracksorter.h:285  hparticletracksorter.h:286  hparticletracksorter.h:287  hparticletracksorter.h:288  hparticletracksorter.h:289  hparticletracksorter.h:290  hparticletracksorter.h:291  hparticletracksorter.h:292  hparticletracksorter.h:293  hparticletracksorter.h:294  hparticletracksorter.h:295  hparticletracksorter.h:296  hparticletracksorter.h:297  hparticletracksorter.h:298  hparticletracksorter.h:299  hparticletracksorter.h:300  hparticletracksorter.h:301  hparticletracksorter.h:302  hparticletracksorter.h:303  hparticletracksorter.h:304  hparticletracksorter.h:305  hparticletracksorter.h:306  hparticletracksorter.h:307  hparticletracksorter.h:308  hparticletracksorter.h:309  hparticletracksorter.h:310  hparticletracksorter.h:311  hparticletracksorter.h:312  hparticletracksorter.h:313  hparticletracksorter.h:314  hparticletracksorter.h:315  hparticletracksorter.h:316  hparticletracksorter.h:317  hparticletracksorter.h:318  hparticletracksorter.h:319  hparticletracksorter.h:320  hparticletracksorter.h:321  hparticletracksorter.h:322  hparticletracksorter.h:323  hparticletracksorter.h:324  hparticletracksorter.h:325  hparticletracksorter.h:326  hparticletracksorter.h:327  hparticletracksorter.h:328  hparticletracksorter.h:329  hparticletracksorter.h:330  hparticletracksorter.h:331  hparticletracksorter.h:332  hparticletracksorter.h:333  hparticletracksorter.h:334  hparticletracksorter.h:335  hparticletracksorter.h:336  hparticletracksorter.h:337  hparticletracksorter.h:338  hparticletracksorter.h:339