#ifndef HDEANACUTS_H #define HDEANACUTS_H #include "hgeantkine.h" #include "hcategory.h" #include "hparticlecandsim.h" #include "hparticletool.h" #include using namespace std; class HDEAnaCuts { public: HDEAnaCuts() { setDefaultCuts(); } Bool_t isLeptonOk(HParticleCandSim* cand) { if (cand == NULL) return false; return (isBetaCutOk(cand) && cand->isFlagBit(kIsLepton)); } Bool_t isMomCutOk(HParticleCandSim* cand) { if (cand == NULL) return false; Double_t mom = cand->getMomentum(); return (mom >= fMomCutMin && mom <= fMomCutMax); } Bool_t isOACutOk(Int_t candIndex) { if (candIndex < 0 || candIndex >= fOACutCandidates.size()) return false; return (fOACutCandidates[candIndex] == false); } void init(HCategory* catParticleCand) { fOACutCandidates.clear(); if (catParticleCand == NULL) return; Int_t nofCands = catParticleCand->getEntries(); fOACutCandidates.resize(nofCands); for(Int_t i = 0; i < nofCands; i++){ fOACutCandidates[i] = false; } // loop plus candidates for(Int_t iP = 0; iP < nofCands; iP++){ HParticleCandSim* candP = static_cast(catParticleCand->getObject(iP)); if (candP->getCharge() < 0) continue; if (!this->isLeptonOk(candP)) continue; candP->calc4vectorProperties(); // loop minus candidates for(Int_t iM = 0; iM < nofCands; iM++){ HParticleCandSim* candM = static_cast(catParticleCand->getObject(iM)); if (candM->getCharge() > 0) continue; if (!this->isLeptonOk(candM)) continue; candM->calc4vectorProperties(); Float_t openingAngle = HParticleTool::getOpeningAngle(candP, candM); Bool_t isOACut = (openingAngle <= fOACutMax); if(isOACut){ fOACutCandidates[iP] = true; fOACutCandidates[iM] = true; } } } } private: Double_t fMomCutMin; // Momentum cut minimum Double_t fMomCutMax; // Momentum cut maximum Double_t fBetaCutMin; // beta cut Double_t fOACutMax; // opening angle cut vector fOACutCandidates; // if true then particle candidate is rejected void setDefaultCuts() { fMomCutMin = 100.; fMomCutMax = 1400.; fBetaCutMin = 0.94; fOACutMax = 9.; } Bool_t isBetaCutOk(HParticleCandSim* cand) { if (cand == NULL) return false; return (cand->getBeta() >= fBetaCutMin); } }; #endif