14 mapTPPtrsTTStubRefs_.insert({tpPtr, ttSTubRefs});
15 for (
const TTStubRef& ttSTubRef : ttSTubRefs)
16 mapTTStubRefsTPPtrs_[ttSTubRef].push_back(tpPtr);
20 vector<TPPtr> StubAssociation::findTrackingParticlePtrs(
const TTStubRef& ttStubRef)
const {
21 const auto it = mapTTStubRefsTPPtrs_.find(ttStubRef);
22 const vector<TPPtr>
res = it != mapTTStubRefsTPPtrs_.end() ? it->second : emptyTPPtrs_;
27 vector<TTStubRef> StubAssociation::findTTStubRefs(
const TPPtr& tpPtr)
const {
28 const auto it = mapTPPtrsTTStubRefs_.find(tpPtr);
29 return it != mapTPPtrsTTStubRefs_.end() ? it->second : emptyTTStubRefs_;
33 vector<TPPtr> StubAssociation::associate(
const vector<TTStubRef>& ttStubRefs)
const {
35 map<TPPtr, set<int>>
m;
36 map<TPPtr, set<int>> mPS;
37 for (
const TTStubRef& ttStubRef : ttStubRefs) {
38 for (
const TPPtr& tpPtr : findTrackingParticlePtrs(ttStubRef)) {
39 const int layerId = setup_->layerId(ttStubRef);
40 m[tpPtr].insert(layerId);
41 if (setup_->psModule(ttStubRef))
42 mPS[tpPtr].
insert(layerId);
46 auto sum = [
this](
int& sum,
const pair<TPPtr, set<int>>&
p) {
47 return sum += ((
int)
p.second.size() < setup_->tpMinLayers() ? 0 : 1);
49 const int nTPs = accumulate(
m.begin(),
m.end(), 0, sum);
53 for (
const auto&
p :
m)
54 if ((
int)
p.second.size() >= setup_->tpMinLayers() && (
int)mPS[
p.first].size() >= setup_->tpMinLayersPS())
55 tpPtrs.push_back(
p.first);
60 std::vector<TPPtr> StubAssociation::associateFinal(
const std::vector<TTStubRef>& ttStubRefs)
const {
62 vector<TPPtr> tpPtrs = associate(ttStubRefs);
64 auto check = [
this, &ttStubRefs](
const TPPtr& tpPtr) {
67 for (
const TTStubRef& ttStubRef : ttStubRefs) {
68 const vector<TPPtr>& tpPtrs = findTrackingParticlePtrs(ttStubRef);
69 if (
find(tpPtrs.begin(), tpPtrs.end(), tpPtr) == tpPtrs.end())
70 setup_->psModule(ttStubRef) ? badPS++ : bad2S++;
72 if (badPS > setup_->tpMaxBadStubsPS() || bad2S > setup_->tpMaxBadStubs2S())
76 tpPtrs.erase(remove_if(tpPtrs.begin(), tpPtrs.end(),
check), tpPtrs.end());
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
bool insert(Storage &iStorage, ItemType *iItem, const IdTag &iIdTag)