32 if (i!=
m_items.end()) tid=i->tower;
58 throw cms::Exception(
"CaloTowers") <<
"Cell with id " << std::hex << cell.
rawId() <<
std::dec <<
" is already mapped to a CaloTower " <<
m_items.find(cell)->tower << std::endl;
72 std::vector<DetId>
items;
76 std::unique_ptr<std::multimap<CaloTowerDetId,DetId>> ptr{
new std::multimap<CaloTowerDetId,DetId>};
78 ptr->insert(std::pair<CaloTowerDetId,DetId>(m_item.tower,m_item.cell));
79 std::multimap<CaloTowerDetId,DetId>* expected =
nullptr;
80 if(
m_reverseItems.compare_exchange_strong(expected, ptr.get(), std::memory_order_acq_rel)) {
86 std::multimap<CaloTowerDetId,DetId>::const_iterator j;
87 auto range=(*
m_reverseItems.load(std::memory_order_acquire)).equal_range(
id);
88 for (j=range.first; j!=range.second; j++)
89 items.emplace_back(j->second);
99 for (
int i=0;
i<nd;
i++) {
102 if (
std::find(items.begin(),items.end(),hid) == items.end()) {
103 items.emplace_back(hid);
105 std::cout <<
id <<
" Depth " <<
i <<
":" <<
i+sd <<
" " << hid <<
"\n";
110 items.emplace_back(hid);
112 std::cout <<
id <<
" Depth " <<
i <<
":" <<
i+sd <<
" " << hid <<
"\n";
121 for (
int i=0;
i<nd;
i++) {
123 items.emplace_back(hid);
125 std::cout <<
id <<
" Depth " <<
i <<
":" <<
i+sd <<
" " << hid <<
"\n";
133 for (
int i=0;
i<nd;
i++) {
136 if (
std::find(items.begin(),items.end(),hid) == items.end()) {
137 items.emplace_back(hid);
139 std::cout <<
id <<
" Depth " <<
i <<
":" <<
i+sd <<
" " << hid <<
"\n";
144 items.emplace_back(hid);
146 std::cout <<
id <<
" Depth " <<
i <<
":" <<
i+sd <<
" " << hid <<
"\n";
155 for (
int i=0;
i<nd;
i++) {
157 items.emplace_back(hid);
159 std::cout <<
id <<
" Depth " <<
i <<
":" <<
i+sd <<
" " << hid <<
"\n";
164 int hcal_ieta2 = hcal_ieta-1;
166 for (
int i=0;
i<nd;
i++) {
168 items.emplace_back(hid);
170 std::cout <<
id <<
" Depth " <<
i <<
":" <<
i+sd <<
" " << hid <<
"\n";
179 if (hid.
zside() == -1) {
186 for (
int ie=etaMin; ie<=
etaMax; ie++)
188 items.emplace_back(
EBDetId(ie,ip));
void useStandardHE(bool use=true)
add standard (hardcoded) HE items?
HcalSubdetector subdet() const
get the subdetector
int convertHcaltoCT(int hcal_ieta, HcalSubdetector subdet) const
int tower_ieta() const
get the HCAL/trigger ieta of this crystal
int zside() const
get the z-side of the cell (1/-1)
int tower_iphi() const
get the HCAL/trigger iphi of this crystal
int crystal_iphi_low() const
get the smallest crystal_iphi of the crystal in front of this tower (HB and HE tower 17 only) ...
std::vector< T >::const_iterator const_iterator
void useStandardEB(bool use=true)
add standard (hardcoded) EB items?
const CaloTowerTopology * m_cttopo
void sort()
done adding to the association
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
void useStandardHB(bool use=true)
add standard (hardcoded) HB items?
std::vector< DetId > constituentsOf(const CaloTowerDetId &id) const
Get the constituent detids for this tower id ( not yet implemented )
HcalDetId mergedDepthDetId(const HcalDetId &id) const
uint32_t rawId() const
get the raw id
void depthBinInformation(HcalSubdetector subdet, int etaRing, int iphi, int zside, int &nDepthBins, int &startingBin) const
finds the number of depth bins and which is the number to start with
CaloTowerDetId towerOf(const DetId &id) const
Get the tower id for this det id (or null if not known)
int crystal_ieta_low() const
get the smallest crystal_ieta of the crystal in front of this tower (HB and HE tower 17 only) ...
const HcalTopology * m_hcaltopo
~CaloTowerConstituentsMap()
CaloTowerConstituentsMap()=delete
void assign(const DetId &cell, const CaloTowerDetId &tower)
set the association between a DetId and a tower
int ietaAbs() const
get the absolute value of the cell ieta
int iphi() const
get the cell iphi
void useStandardHO(bool use=true)
add standard (hardcoded) HO items?
int crystal_ieta_high() const
get the largest crystal_ieta of the crystal in front of this tower (HB and HE tower 17 only) ...
bool null() const
is this a null id ?
static const int MAX_IETA
std::atomic< std::multimap< CaloTowerDetId, DetId > * > m_reverseItems
int convertCTtoHcal(int ct_ieta) const
bool withSpecialRBXHBHE() const
int crystal_iphi_high() const
get the largest crystal_iphi of the crystal in front of this tower (HB and HE tower 17 only) ...
void useStandardHF(bool use=true)
add standard (hardcoded) HF items?
edm::SortedCollection< MapItem > m_items