ROOT logo
//*-- Author : Jochen Markert  18.07.2007

#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;                   //!  store copy of setup params local
    sorter_setup  setup_backup;            //!  store a copy of the static setup parameters local to restore them later

    static Bool_t  kDebug;                 //!
    static Int_t   printLevel;             //! higher -> more prints (1,2,3)    (no setup)
    static Int_t   kSwitchIndex;           //! switch to select sort by index    (no setup)
    static Int_t   kSwitchQuality;         //! switch to select sort by quality algorithms  (no setup)
    static Int_t   kSwitchParticle;        //! switch to select leptons/hadrons             (no setup)


    static Int_t   kSwitchRICHMatching;    //! switch to select RICH/MDC matching in lepton selection
    static Float_t fRICHMDCWindow  ;       //! matching window RICH/MDC in phi/theta (symmetric, degree)
    static Bool_t kIsFieldOn;              //! switch selections accoording B-Field
    static Bool_t kIgnoreRICH;             //! switch to ignore RICH hits for Double_t hit counting
    static Bool_t kIgnoreInnerMDC;         //! switch to ignore InnerMDC hits for Double_t hit counting
    static Bool_t kIgnoreOuterMDC;         //! switch to ignore OuterMDC hits for Double_t hit counting
    static Bool_t kIgnoreMETA;             //! switch to ignore META hits for Double_t hit counting
    static Bool_t kIgnorePreviousIndex;    //! switch to ignore indices from previoius marked ued objects
    static Bool_t kUseYMatching;           //! switch to use Y matching to meta cell (default kTRUE)
    static Bool_t kUseYMatchingScaling;    //! switch to use 1/p scaling of Y matching to meta cell (default kTRUE)
    static Bool_t kUseBeta;                //! switch to use Beta (in lepton select use fBetaLepCut, in hadron beta>0) (default kTRUE)
    static Bool_t kUseFakeRejection;       //! switch to use fakerejection in build in select functions  (default kTRUE)
    static Bool_t kUseMETAQA;              //! switch to use metaqa (normed dx) in build in select functions  (default kTRUE)
    static Float_t fMetaBoundary;          //! matching window when using Y matching with metacell [mm] (default 3): fabs(dy) < (halfcell+metaBoundary)
    static Float_t fBetaLepCut;            //! lower beta cut for lepton selection (default 0.9)
    static Float_t fMETAQACut;             //! meta qa (normed dx) cut (default 3.)
    static Float_t fTOFMAXCut;             //! max tof [ns] allowed to match (when beta is used)
    static Float_t fDeltaSegCut;           //! max delta in phi,theta [deg] between inner/outer seg used in B-Field off


    Int_t  fill_Iteration;                 //! remember the number of fill() calls
    Int_t  selectBest_Iteration;           //! remember the number of selectBest() calls
    UInt_t  currentEvent;                   //! find new event

    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;            //! remember the old flags of HParticleCand for restoring
    vector < Int_t > old_flags_emc;        //! remember the old flags of HEmcCluster for restoring

    TString*   nameIndex  ;                //!
    TString*   nameQuality;                //!

    Bool_t     isSimulation;               //!
    TFile*     fout;                       //!
    TNtuple*   nt;                         //!
    HCategory* pParticleCandCat;           //! HParticleCand category
    HCategory* pEmcClusterCat;             //! HEmcCluster category
    HIterator* iterParticleCandCat;        //! iterator on HParticleCand
    HRecEvent* fEvent;                     //! pointer to local event under reconstruction


    static Bool_t (*pUserSort)(candidateSort*, candidateSort*); //! user provided function pointer to sort algo

    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);
    // setup selections
    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;}

    // control selections
    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:1
 hparticletracksorter.h:2
 hparticletracksorter.h:3
 hparticletracksorter.h:4
 hparticletracksorter.h:5
 hparticletracksorter.h:6
 hparticletracksorter.h:7
 hparticletracksorter.h:8
 hparticletracksorter.h:9
 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