1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
#include <algorithm>
#include <iostream>
#include <set>
#include "CondFormats/HcalObjects/interface/HcalFrontEndMap.h"
#include "CondFormats/HcalObjects/interface/HcalObjectAddons.h"
#include "DataFormats/HcalDetId/interface/HcalDetId.h"
#include "DataFormats/HcalDetId/interface/HcalFrontEndId.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
HcalFrontEndMap::HcalFrontEndMap(const HcalFrontEndMapAddons::Helper& helper)
: mPItems(helper.mPItems.begin(), helper.mPItems.end()) {
initialize();
}
HcalFrontEndMap::~HcalFrontEndMap() {}
// copy-ctor
HcalFrontEndMap::HcalFrontEndMap(const HcalFrontEndMap& src) : mPItems(src.mPItems), mPItemsById(src.mPItemsById) {}
// copy assignment operator
HcalFrontEndMap& HcalFrontEndMap::operator=(const HcalFrontEndMap& rhs) {
HcalFrontEndMap temp(rhs);
temp.swap(*this);
return *this;
}
// public swap function
void HcalFrontEndMap::swap(HcalFrontEndMap& other) {
std::swap(mPItems, other.mPItems);
std::swap(mPItemsById, other.mPItemsById);
}
// move constructor
HcalFrontEndMap::HcalFrontEndMap(HcalFrontEndMap&& other) : HcalFrontEndMap() { other.swap(*this); }
const HcalFrontEndMap::PrecisionItem* HcalFrontEndMap::findById(uint32_t fId) const {
PrecisionItem target(fId, 0, "");
return HcalObjectAddons::findByT<PrecisionItem, HcalFrontEndMapAddons::LessById>(&target, mPItemsById);
}
HcalFrontEndMapAddons::Helper::Helper() {}
bool HcalFrontEndMapAddons::Helper::loadObject(DetId fId, int rm, std::string rbx) {
HcalFrontEndMap::PrecisionItem target(fId.rawId(), rm, rbx);
auto iter = mPItems.find(target);
if (iter != mPItems.end()) {
edm::LogWarning("HCAL") << "HcalFrontEndMap::loadObject DetId " << HcalDetId(fId) << " already exists with RM "
<< iter->mRM << " RBX " << iter->mRBX << " new values " << rm << " and " << rbx
<< " are ignored";
return false;
} else {
mPItems.insert(target);
return true;
}
}
const int HcalFrontEndMap::lookupRM(DetId fId) const {
const PrecisionItem* item = findById(fId.rawId());
return (item ? item->mRM : 0);
}
const int HcalFrontEndMap::lookupRMIndex(DetId fId) const {
const PrecisionItem* item = findById(fId.rawId());
HcalFrontEndId id;
if (item)
id = HcalFrontEndId(item->mRBX, item->mRM, 0, 1, 0, 1, 0);
return id.rmIndex();
}
const std::string HcalFrontEndMap::lookupRBX(DetId fId) const {
const PrecisionItem* item = findById(fId.rawId());
return (item ? item->mRBX : "");
}
const int HcalFrontEndMap::lookupRBXIndex(DetId fId) const {
const PrecisionItem* item = findById(fId.rawId());
HcalFrontEndId id;
if (item)
id = HcalFrontEndId(item->mRBX, item->mRM, 0, 1, 0, 1, 0);
return id.rbxIndex();
}
std::vector<DetId> HcalFrontEndMap::allDetIds() const {
std::vector<DetId> result;
for (std::vector<PrecisionItem>::const_iterator item = mPItems.begin(); item != mPItems.end(); item++)
if (item->mId)
result.push_back(DetId(item->mId));
return result;
}
std::vector<int> HcalFrontEndMap::allRMs() const {
std::vector<int> result;
for (std::vector<PrecisionItem>::const_iterator item = mPItems.begin(); item != mPItems.end(); item++) {
if (std::find(result.begin(), result.end(), item->mRM) == result.end())
result.push_back(item->mRM);
}
return result;
}
std::vector<std::string> HcalFrontEndMap::allRBXs() const {
std::vector<std::string> result;
for (std::vector<PrecisionItem>::const_iterator item = mPItems.begin(); item != mPItems.end(); item++) {
if (std::find(result.begin(), result.end(), item->mRBX) == result.end())
result.push_back(item->mRBX);
}
return result;
}
void HcalFrontEndMap::sortById() {
HcalObjectAddons::sortByT<PrecisionItem, HcalFrontEndMapAddons::LessById>(mPItems, mPItemsById);
}
void HcalFrontEndMap::initialize() { HcalFrontEndMap::sortById(); }
|