/
githubmirror
/
cmssw
Обзор
Документация
Войти
/
githubmirror
/
cmssw
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
RecoJets/JetAlgorithms/src/CMSInsideOutAlgorithm.cc
56 строк
2 KB
Cms Build
Clang-Format
31 май 2019, 13:16
31 май 2019, 13:16
38393ac
Код
Авторство
О чём код?
#include "RecoJets/JetAlgorithms/interface/CMSInsideOutAlgorithm.h" #include "RecoJets/JetAlgorithms/interface/CompoundPseudoJet.h" using namespace std; void CMSInsideOutAlgorithm::run(const std::vector<fastjet::PseudoJet>& fInput, std::vector<fastjet::PseudoJet>& fOutput) { //make a list of input objects list<fastjet::PseudoJet> input; for (std::vector<fastjet::PseudoJet>::const_iterator candIter = fInput.begin(); candIter != fInput.end(); ++candIter) { input.push_back(*candIter); } while (!input.empty() && input.front().perp() > seedThresholdPt_) { //get seed eta/phi double seedEta = input.front().eta(); double seedPhi = input.front().phi(); //find iterators to those objects that are in the max cone size list<inputListIter> maxCone; // add seed, then test elements after seed inputListIter iCand = input.begin(); maxCone.push_back(iCand++); for (; iCand != input.end(); ++iCand) { const fastjet::PseudoJet& candidate = *iCand; if (reco::deltaR2(seedEta, candidate.eta(), seedPhi, candidate.phi()) < maxSizeSquared_) maxCone.push_back(iCand); } //sort objects by increasing DR about the seed directions maxCone.sort(ListIteratorLesserByDeltaR(seedEta, seedPhi)); list<inputListIter>::const_iterator position = maxCone.begin(); bool limitReached = false; double totalET = (**position).perp(); ++position; while (position != maxCone.end() && !limitReached) { const fastjet::PseudoJet& theCandidate = **position; double candidateET = theCandidate.perp() + totalET; double candDR2 = reco::deltaR2(seedEta, theCandidate.eta(), seedPhi, theCandidate.phi()); if (candDR2 < minSizeSquared_ || candDR2 * candidateET * candidateET < growthParameterSquared_) totalET = candidateET; else limitReached = true; ++position; } //turn this into a final jet fastjet::PseudoJet final; for (list<inputListIter>::const_iterator iNewJet = maxCone.begin(); iNewJet != position; ++iNewJet) { final += **iNewJet; input.erase(*iNewJet); } fOutput.push_back(final); } // end loop over seeds sort(fOutput.begin(), fOutput.end(), greaterByEtPseudoJet); }