#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