File indexing completed on 2024-04-06 12:27:26
0001 #include "RecoParticleFlow/PFClusterTools/interface/ClusterClusterMapping.h"
0002
0003
0004 bool ClusterClusterMapping::overlap(const reco::CaloCluster &sc1,
0005 const reco::CaloCluster &sc2,
0006 float minfrac,
0007 bool debug) {
0008 const std::vector<std::pair<DetId, float> > &hits1 = sc1.hitsAndFractions();
0009 const std::vector<std::pair<DetId, float> > &hits2 = sc2.hitsAndFractions();
0010 unsigned nhits1 = hits1.size();
0011 unsigned nhits2 = hits2.size();
0012
0013 for (unsigned i1 = 0; i1 < nhits1; ++i1) {
0014
0015 if (hits1[i1].second < minfrac) {
0016 if (debug)
0017 std::cout << " Discarding " << hits1[i1].first.rawId() << " with " << hits1[i1].second << std::endl;
0018 continue;
0019 }
0020 for (unsigned i2 = 0; i2 < nhits2; ++i2) {
0021
0022 if (hits2[i2].second < minfrac) {
0023 if (debug)
0024 std::cout << " Discarding " << hits2[i2].first.rawId() << " with " << hits2[i2].second << std::endl;
0025 continue;
0026 }
0027 if (hits1[i1].first == hits2[i2].first) {
0028 if (debug) {
0029 std::cout << " Matching hits " << hits1[i1].first.rawId() << " with " << hits1[i1].second << " and "
0030 << hits2[i2].first.rawId();
0031 std::cout << " with " << hits2[i2].second << std::endl;
0032 }
0033 return true;
0034 }
0035 }
0036 }
0037 return false;
0038 }
0039
0040 bool ClusterClusterMapping::overlap(const reco::PFClusterRef &pfclustest,
0041 const reco::SuperCluster &sc,
0042 const edm::ValueMap<reco::CaloClusterPtr> &pfclusassoc) {
0043 for (reco::CaloCluster_iterator caloclus = sc.clustersBegin(); caloclus != sc.clustersEnd(); ++caloclus) {
0044 if (pfclusassoc.contains(caloclus->id())) {
0045 const reco::CaloClusterPtr &pfclus = pfclusassoc[*caloclus];
0046
0047 if (pfclus.id() == pfclustest.id() && pfclus.key() == pfclustest.key())
0048 return true;
0049 }
0050 }
0051 return false;
0052 }
0053
0054 int ClusterClusterMapping::checkOverlap(const reco::PFCluster &pfc,
0055 const std::vector<const reco::SuperCluster *> &sc,
0056 float minfrac,
0057 bool debug) {
0058 int result = -1;
0059 unsigned nsc = sc.size();
0060
0061 for (unsigned isc = 0; isc < nsc; ++isc) {
0062 if (overlap(pfc, *(sc[isc]), minfrac, debug))
0063 return isc;
0064 }
0065 return result;
0066 }
0067
0068 int ClusterClusterMapping::checkOverlap(const reco::PFCluster &pfc,
0069 const std::vector<reco::SuperClusterRef> &sc,
0070 float minfrac,
0071 bool debug) {
0072 int result = -1;
0073 unsigned nsc = sc.size();
0074
0075 for (unsigned isc = 0; isc < nsc; ++isc) {
0076 if (overlap(pfc, *sc[isc], minfrac, debug))
0077 return isc;
0078 }
0079 return result;
0080 }
0081
0082 int ClusterClusterMapping::checkOverlap(const reco::PFClusterRef &pfc,
0083 const std::vector<reco::SuperClusterRef> &sc,
0084 const edm::ValueMap<reco::CaloClusterPtr> &pfclusassoc) {
0085 int result = -1;
0086 unsigned nsc = sc.size();
0087
0088 for (unsigned isc = 0; isc < nsc; ++isc) {
0089 if (overlap(pfc, *sc[isc], pfclusassoc))
0090 return isc;
0091 }
0092 return result;
0093 }