5 #define LOGVERB(x) edm::LogVerbatim(x) 6 #define LOGWARN(x) edm::LogWarning(x) 7 #define LOGERR(x) edm::LogError(x) 8 #define LOGDRESSED(x) edm::LogInfo(x) 10 #define LOGVERB(x) LogTrace(x) 11 #define LOGWARN(x) edm::LogWarning(x) 12 #define LOGERR(x) edm::LogError(x) 13 #define LOGDRESSED(x) LogDebug(x) 18 const std::vector<bool>& rechitMask,
19 const std::vector<bool>& seedable,
22 std::vector<bool> used(
hits.size(),
false);
23 std::vector<unsigned int> seeds;
26 seeds.reserve(
hits.size());
27 for(
unsigned int i = 0;
i <
hits.size(); ++
i ) {
28 if( !rechitMask[
i] || !seedable[
i] || used[
i] )
continue;
29 seeds.emplace_back(i);
32 std::sort(seeds.begin(),seeds.end(),
33 [&](
unsigned int i,
unsigned int j) {
return hits[
i].energy()>
hits[j].energy();});
36 for(
auto seed : seeds ) {
37 if( !rechitMask[
seed] || !seedable[
seed] || used[
seed] )
continue;
40 if( !temp.recHitFractions().empty() ) output.push_back(temp);
46 const std::vector<bool>& rechitMask,
48 std::vector<bool>& used,
50 auto const & cell = (*input)[kcell];
51 int cell_layer = (
int)cell.layer();
53 std::abs(cell.positionREP().eta()) > 0.34 ) {
59 double thresholdPT2=0.;
61 for (
unsigned int j=0; j<(std::get<1>(
thresholds)).size(); ++j) {
71 if( cell.energy() < thresholdE ||
72 cell.pt2() < thresholdPT2 ) {
73 LOGDRESSED(
"GenericTopoCluster::buildTopoCluster()")
74 <<
"RecHit " << cell.detId() <<
" with enegy " 75 << cell.energy() <<
" GeV was rejected!." << std::endl;
85 auto const & neighbours =
88 for(
auto nb : neighbours ) {
89 if( used[nb] || !rechitMask[nb] ) {
90 LOGDRESSED(
"GenericTopoCluster::buildTopoCluster()")
91 <<
" RecHit " << cell.detId() <<
"\'s" 92 <<
" neighbor RecHit " << input->at(nb).detId()
94 << input->at(nb).energy() <<
" GeV was rejected!" 95 <<
" Reasons : " << used[nb] <<
" (used) " 96 << !rechitMask[nb] <<
" (masked)." << std::endl;
Particle flow cluster, see clustering algorithm in PFClusterAlgo.
void buildClusters(const edm::Handle< reco::PFRecHitCollection > &, const std::vector< bool > &, const std::vector< bool > &, reco::PFClusterCollection &) override
void buildTopoCluster(const edm::Handle< reco::PFRecHitCollection > &, const std::vector< bool > &, unsigned int, std::vector< bool > &, reco::PFCluster &)
std::unordered_map< int, I3tuple > _thresholds
Fraction of a PFRecHit (rechits can be shared between several PFCluster's)
static std::string const input
reco::PFRecHitRef makeRefhit(const edm::Handle< reco::PFRecHitCollection > &h, const unsigned i) const
const bool _useCornerCells
Abs< T >::type abs(const T &t)
void addRecHitFraction(const reco::PFRecHitFraction &frac)
add a given fraction of the rechit
std::vector< PFCluster > PFClusterCollection
collection of PFCluster objects