Skip to content

Commit

Permalink
Merge pull request #46381 from bsunanda/Run3-hcx377
Browse files Browse the repository at this point in the history
Run3-hcx377 Backport the changes made to the HcalTopolog class and additional hcalRecoNumbering constants from #46357, #46369, #46374
  • Loading branch information
cmsbuild authored Oct 15, 2024
2 parents d349d48 + 29b1a3e commit 9864fcb
Show file tree
Hide file tree
Showing 16 changed files with 578 additions and 129 deletions.
23 changes: 18 additions & 5 deletions Geometry/CaloTopology/interface/HcalTopology.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,6 @@
class HcalTopology : public CaloSubdetectorTopology {
public:
HcalTopology(const HcalDDDRecConstants* hcons, const bool mergePosition = false);
HcalTopology(HcalTopologyMode::Mode mode,
int maxDepthHB,
int maxDepthHE,
HcalTopologyMode::TriggerMode tmode = HcalTopologyMode::TriggerMode_2009);

HcalTopologyMode::Mode mode() const { return mode_; }
HcalTopologyMode::TriggerMode triggerMode() const { return triggerMode_; }
Expand All @@ -48,6 +44,7 @@ class HcalTopology : public CaloSubdetectorTopology {
DetId denseId2detId(unsigned int /*denseid*/) const override;
/// return a count of valid cells (for dense indexing use)
unsigned int ncells() const override;
unsigned int ncells(int subdet) const;
/// return a version which identifies the given topology
int topoVersion() const override;

Expand Down Expand Up @@ -171,14 +168,24 @@ class HcalTopology : public CaloSubdetectorTopology {
HcalDetId idBack(const HcalDetId& id) const { return hcons_->idBack(id); }

private:
bool phase1() const { return ((mode_ == HcalTopologyMode::LHC) || (mode_ == HcalTopologyMode::H2HE)); }
bool phase1A() const {
return ((mode_ == HcalTopologyMode::LHC) || (mode_ == HcalTopologyMode::Run2A) || (mode_ == HcalTopologyMode::H2) ||
(mode_ == HcalTopologyMode::H2HE));
}
bool phase1B() const {
return ((mode_ == HcalTopologyMode::Run2B) || (mode_ == HcalTopologyMode::Run2C) ||
(mode_ == HcalTopologyMode::Run3) || (mode_ == HcalTopologyMode::SLHC));
}
bool phase2() const { return ((mode_ == HcalTopologyMode::Run4)); }
/** Get the neighbors of the given cell with higher absolute ieta */
int incAIEta(const HcalDetId& id, HcalDetId neighbors[2]) const;
/** Get the neighbors of the given cell with lower absolute ieta */
int decAIEta(const HcalDetId& id, HcalDetId neighbors[2]) const;

/** Is this a valid cell id, ignoring the exclusion list */
bool validDetIdPreLS1(const HcalDetId& id) const;
bool validRaw(const HcalDetId& id) const;
bool validRaw(const HcalDetId& id, const bool debug = false) const;
unsigned int detId2denseIdPreLS1(const DetId& id) const;
bool isExcluded(const HcalDetId& id) const;

Expand Down Expand Up @@ -227,14 +234,20 @@ class HcalTopology : public CaloSubdetectorTopology {
static constexpr int kHBhalf = 1296, kHEhalf = 1296, kHOhalf = 1080, kHFhalf = 864, kHThalf = 2088, kZDChalf = 11,
kCASTORhalf = 224, kCALIBhalf = 693, kHThalfPhase1 = 2520,
kHcalhalf = kHBhalf + kHEhalf + kHOhalf + kHFhalf;
static constexpr int kHBhalfPostLS2 = 4536, kHEhalfPostLS2 = 3384, kHFhalfPostLS2 = 1728;
static constexpr int kHcalhalfPostLS2 = kHBhalfPostLS2 + kHEhalfPostLS2 + kHOhalf + kHFhalfPostLS2;
static constexpr int kSizeForDenseIndexingPreLS1 = 2 * kHcalhalf;
static constexpr int kSizeForDenseIndexingPostLS2 = 2 * kHcalhalfPostLS2;
static constexpr int kHBSizePreLS1 = 2 * kHBhalf;
static constexpr int kHESizePreLS1 = 2 * kHEhalf;
static constexpr int kHOSizePreLS1 = 2 * kHOhalf;
static constexpr int kHFSizePreLS1 = 2 * kHFhalf;
static constexpr int kHTSizePreLS1 = 2 * kHThalf;
static constexpr int kHTSizePhase1 = 2 * kHThalfPhase1;
static constexpr int kCALIBSizePreLS1 = 2 * kCALIBhalf;
static constexpr int kHBSizePostLS2 = 2 * kHBhalfPostLS2;
static constexpr int kHESizePostLS2 = 2 * kHEhalfPostLS2;
static constexpr int kHFSizePostLS2 = 2 * kHFhalfPostLS2;
static constexpr int minMaxDepth_ = 4;
static constexpr unsigned int minPhi_ = 1, maxPhi_ = 72;
static constexpr unsigned int kOffCalibHB_ = 0;
Expand Down
200 changes: 82 additions & 118 deletions Geometry/CaloTopology/src/HcalTopology.cc
Original file line number Diff line number Diff line change
Expand Up @@ -64,15 +64,15 @@ HcalTopology::HcalTopology(const HcalDDDRecConstants* hcons, const bool mergePos
} else {
nEtaHE_ = (lastHERing_ - firstHERing_ + 1);
}
if (mode_ == HcalTopologyMode::LHC) {
if (phase1()) {
topoVersion_ = 0; //DL
HBSize_ = kHBSizePreLS1; // qie-per-fiber * fiber/rm * rm/rbx * rbx/barrel * barrel/hcal
HESize_ = kHESizePreLS1; // qie-per-fiber * fiber/rm * rm/rbx * rbx/endcap * endcap/hcal
HOSize_ = kHOSizePreLS1; // ieta * iphi * 2
HFSize_ = kHFSizePreLS1; // ieta * iphi * depth * 2
CALIBSize_ = kCALIBSizePreLS1;
numberOfShapes_ = 87;
} else if (mode_ == HcalTopologyMode::SLHC) { // need to know more eventually
} else { // need to know more eventually
topoVersion_ = 10;
HBSize_ = nEtaHB_ * IPHI_MAX * maxDepthHB_ * 2;
HESize_ = nEtaHE_ * maxPhiHE_ * maxDepthHE_ * 2;
Expand Down Expand Up @@ -155,75 +155,12 @@ HcalTopology::HcalTopology(const HcalDDDRecConstants* hcons, const bool mergePos
<< " " << maxDepthHB_ << ":" << maxDepthHE_ << " " << nEtaHB_ << ":" << nEtaHE_ << " "
<< etaHE2HF_ << ":" << etaHF2HE_ << " " << maxPhiHE_;
#endif
}

HcalTopology::HcalTopology(HcalTopologyMode::Mode mode,
int maxDepthHB,
int maxDepthHE,
HcalTopologyMode::TriggerMode tmode)
: hcons_(nullptr),
mergePosition_(false),
excludeHB_(false),
excludeHE_(false),
excludeHO_(false),
excludeHF_(false),
mode_(mode),
triggerMode_(tmode),
firstHBRing_(1),
lastHBRing_(16),
firstHERing_(16),
lastHERing_(29),
firstHFRing_(29),
lastHFRing_(41),
firstHORing_(1),
lastHORing_(15),
firstHEDoublePhiRing_((mode == HcalTopologyMode::H2 || mode == HcalTopologyMode::H2HE) ? (22) : (21)),
firstHEQuadPhiRing_(999),
firstHFQuadPhiRing_(40),
firstHETripleDepthRing_((mode == HcalTopologyMode::H2 || mode == HcalTopologyMode::H2HE) ? (24) : (27)),
singlePhiBins_(IPHI_MAX),
doublePhiBins_(36),
maxDepthHB_(maxDepthHB),
maxDepthHE_(maxDepthHE),
maxDepthHF_(2),
etaHE2HF_(30),
etaHF2HE_(29),
maxPhiHE_(IPHI_MAX),
HBSize_(kHBSizePreLS1),
HESize_(kHESizePreLS1),
HOSize_(kHOSizePreLS1),
HFSize_(kHFSizePreLS1),
HTSize_(kHTSizePreLS1),
CALIBSize_(kCALIBSizePreLS1),
numberOfShapes_(
((mode == HcalTopologyMode::SLHC) || (mode_ == HcalTopologyMode::Run3) || (mode_ == HcalTopologyMode::Run4))
? 500
: 87) {
if (mode_ == HcalTopologyMode::LHC) {
topoVersion_ = 0; //DL
HBSize_ = kHBSizePreLS1; // qie-per-fiber * fiber/rm * rm/rbx * rbx/barrel * barrel/hcal
HESize_ = kHESizePreLS1; // qie-per-fiber * fiber/rm * rm/rbx * rbx/endcap * endcap/hcal
HOSize_ = kHOSizePreLS1; // ieta * iphi * 2
HFSize_ = kHFSizePreLS1; // phi * eta * depth * pm
} else if ((mode_ == HcalTopologyMode::SLHC) || (mode_ == HcalTopologyMode::Run3) ||
(mode_ == HcalTopologyMode::Run4)) { // need to know more eventually
HBSize_ = maxDepthHB * 16 * IPHI_MAX * 2;
HESize_ = maxDepthHE * (29 - 16 + 1) * maxPhiHE_ * 2;
HOSize_ = 15 * IPHI_MAX * 2; // ieta * iphi * 2
HFSize_ = IPHI_MAX * 13 * maxDepthHF_ * 2; // phi * eta * depth * pm
CALIBSize_ = kOffCalibHFX_;
topoVersion_ = 10;
}
nEtaHB_ = (lastHBRing_ - firstHBRing_ + 1);
nEtaHE_ = (lastHERing_ - firstHERing_ + 1);
if (triggerMode_ == HcalTopologyMode::TriggerMode_2009) {
HTSize_ = kHTSizePreLS1;
} else {
HTSize_ = kHTSizePhase1;
}

edm::LogWarning("HCalGeom") << "This is an incomplete constructor of HcalTopology - be warned that many "
<< "functionalities will not be there - revert from this - get from EventSetup";
// Now redfine some of the sizes
#ifdef EDM_ML_DEBUG
edm::LogVerbatim("HCalGeom") << "Redefined sizes could be for HB:" << ncells(HcalBarrel)
<< " HE:" << ncells(HcalEndcap) << " HF: " << ncells(HcalForward);
#endif
}

bool HcalTopology::valid(const DetId& id) const {
Expand All @@ -233,7 +170,7 @@ bool HcalTopology::valid(const DetId& id) const {

bool HcalTopology::validHcal(const HcalDetId& id) const {
// check the raw rules
return validRaw(id) && !isExcluded(id);
return validRaw(id, false) && !isExcluded(id);
}

bool HcalTopology::validDetId(HcalSubdetector subdet, int ieta, int iphi, int depth) const {
Expand Down Expand Up @@ -504,7 +441,7 @@ int HcalTopology::exclude(HcalSubdetector subdet, int ieta1, int ieta2, int iphi
for (int iphi = iphi_l; iphi <= iphi_h; iphi++)
for (int depth = depth_l; depth <= depth_h; depth++) {
HcalDetId id(subdet, ieta, iphi, depth);
if (validRaw(id)) { // use 'validRaw' to include check validity in "uncut" detector
if (validRaw(id, false)) { // use 'validRaw' to include check validity in "uncut" detector
exclude(id);
n++;
}
Expand Down Expand Up @@ -557,7 +494,12 @@ bool HcalTopology::validDetIdPreLS1(const HcalDetId& id) const {
}

/** Is this a valid cell id? */
bool HcalTopology::validRaw(const HcalDetId& id) const {
bool HcalTopology::validRaw(const HcalDetId& id,
#ifdef EDM_ML_DEBUG
const bool debug) const {
#else
const bool) const {
#endif
bool ok = true;
int ieta = id.ieta();
int aieta = id.ietaAbs();
Expand All @@ -571,18 +513,23 @@ bool HcalTopology::validRaw(const HcalDetId& id) const {

if (ok) {
if (subdet == HcalBarrel) {
if ((mode_ == HcalTopologyMode::SLHC) || (mode_ == HcalTopologyMode::H2HE) || (mode_ == HcalTopologyMode::Run3) ||
(mode_ == HcalTopologyMode::Run4)) {
if ((aieta > lastHBRing()) || (depth > hcons_->getMaxDepth(0, aieta, iphi, zside)) ||
(depth < hcons_->getMinDepth(0, aieta, iphi, zside)))
if (phase1()) {
if (aieta > lastHBRing() || depth > 2 || (aieta <= 14 && depth > 1))
ok = false;
} else {
if (aieta > lastHBRing() || depth > 2 || (aieta <= 14 && depth > 1))
if ((aieta > lastHBRing()) || (depth > hcons_->getMaxDepth(0, aieta, iphi, zside)) ||
(depth < hcons_->getMinDepth(0, aieta, iphi, zside)))
ok = false;
}
} else if (subdet == HcalEndcap) {
if ((mode_ == HcalTopologyMode::SLHC) || (mode_ == HcalTopologyMode::H2HE) || (mode_ == HcalTopologyMode::Run3) ||
(mode_ == HcalTopologyMode::Run4)) {
if (phase1A()) {
if (depth > hcons_->getMaxDepth(1, aieta, iphi, zside) || aieta < firstHERing() || aieta > lastHERing() ||
(aieta == firstHERing() && depth != hcons_->getDepthEta16(2, iphi, zside)) ||
(aieta == 17 && depth != 1 && mode_ != HcalTopologyMode::H2) || // special case at H2
(((aieta >= 17 && aieta < firstHETripleDepthRing()) || aieta == lastHERing()) && depth > 2) ||
(aieta >= firstHEDoublePhiRing() && (iphi % 2) == 0))
ok = false;
} else {
if ((depth > hcons_->getMaxDepth(1, aieta, iphi, zside)) ||
(depth < hcons_->getMinDepth(1, aieta, iphi, zside)) || (aieta < firstHERing()) || (aieta > lastHERing())) {
ok = false;
Expand All @@ -604,13 +551,6 @@ bool HcalTopology::validRaw(const HcalDetId& id) const {
}
}
}
} else {
if (depth > hcons_->getMaxDepth(1, aieta, iphi, zside) || aieta < firstHERing() || aieta > lastHERing() ||
(aieta == firstHERing() && depth != hcons_->getDepthEta16(2, iphi, zside)) ||
(aieta == 17 && depth != 1 && mode_ != HcalTopologyMode::H2) || // special case at H2
(((aieta >= 17 && aieta < firstHETripleDepthRing()) || aieta == lastHERing()) && depth > 2) ||
(aieta >= firstHEDoublePhiRing() && (iphi % 2) == 0))
ok = false;
}
} else if (subdet == HcalOuter) {
if (aieta > lastHORing() || iphi > IPHI_MAX || depth != 4)
Expand All @@ -627,6 +567,16 @@ bool HcalTopology::validRaw(const HcalDetId& id) const {
ok = false;
}
}
#ifdef EDM_ML_DEBUG
if (debug)
edm::LogVerbatim("HCalGeom") << "HcalValdRaw ID: " << subdet << ":" << aieta << ":" << depth << ":" << iphi << ":"
<< zside << " Mode " << mode_ << ":" << phase1() << ":" << phase1A() << ":"
<< phase1B() << ":" << phase2() << " Limits HB " << lastHBRing() << " HE "
<< firstHERing() << ":" << lastHERing() << ":" << firstHEDoublePhiRing() << ":"
<< firstHEQuadPhiRing() << " Depth " << hcons_->getMaxDepth(0, aieta, iphi, zside)
<< ":" << hcons_->getMinDepth(0, aieta, iphi, zside) << ":"
<< hcons_->getDepthEta16(2, iphi, zside) << " OK " << ok;
#endif
return ok;
}

Expand Down Expand Up @@ -823,33 +773,24 @@ int HcalTopology::decAIEta(const HcalDetId& id, HcalDetId neighbors[2]) const {
void HcalTopology::depthBinInformation(
HcalSubdetector subdet, int etaRing, int iphi, int zside, int& nDepthBins, int& startingBin) const {
if (subdet == HcalBarrel) {
if ((mode_ == HcalTopologyMode::SLHC) || (mode_ == HcalTopologyMode::H2HE) || (mode_ == HcalTopologyMode::Run3) ||
(mode_ == HcalTopologyMode::Run4)) {
startingBin = hcons_->getMinDepth(0, etaRing, iphi, zside);
if (etaRing == lastHBRing()) {
nDepthBins = hcons_->getDepthEta16(1, iphi, zside) - startingBin + 1;
} else {
nDepthBins = hcons_->getMaxDepth(0, etaRing, iphi, zside) - startingBin + 1;
}
} else {
if (phase1() || (mode_ == HcalTopologyMode::H2)) {
if (etaRing <= 14) {
nDepthBins = 1;
startingBin = 1;
} else {
nDepthBins = 2;
startingBin = 1;
}
}
} else if (subdet == HcalEndcap) {
if ((mode_ == HcalTopologyMode::SLHC) || (mode_ == HcalTopologyMode::H2HE) || (mode_ == HcalTopologyMode::Run3) ||
(mode_ == HcalTopologyMode::Run4)) {
if (etaRing == firstHERing()) {
startingBin = hcons_->getDepthEta16(2, iphi, zside);
} else {
startingBin = hcons_->getMinDepth(0, etaRing, iphi, zside);
if (etaRing == lastHBRing()) {
nDepthBins = hcons_->getDepthEta16(1, iphi, zside) - startingBin + 1;
} else {
startingBin = hcons_->getMinDepth(1, etaRing, iphi, zside);
nDepthBins = hcons_->getMaxDepth(0, etaRing, iphi, zside) - startingBin + 1;
}
nDepthBins = hcons_->getMaxDepth(1, etaRing, iphi, zside) - startingBin + 1;
} else {
}
} else if (subdet == HcalEndcap) {
if (phase1A()) {
if (etaRing == firstHERing()) {
nDepthBins = 1;
startingBin = 3;
Expand All @@ -863,6 +804,13 @@ void HcalTopology::depthBinInformation(
nDepthBins = (etaRing >= firstHETripleDepthRing()) ? 3 : 2;
startingBin = 1;
}
} else {
if (etaRing == firstHERing()) {
startingBin = hcons_->getDepthEta16(2, iphi, zside);
} else {
startingBin = hcons_->getMinDepth(1, etaRing, iphi, zside);
}
nDepthBins = hcons_->getMaxDepth(1, etaRing, iphi, zside) - startingBin + 1;
}
} else if (subdet == HcalForward) {
nDepthBins = maxDepthHF_;
Expand Down Expand Up @@ -895,18 +843,20 @@ bool HcalTopology::incrementDepth(HcalDetId& detId) const {
depth = 4;
} else if (subdet == HcalBarrel && etaRing == lastHBRing()) {
// overlap
subdet = HcalEndcap;
if ((mode_ == HcalTopologyMode::SLHC) || (mode_ == HcalTopologyMode::H2HE) || (mode_ == HcalTopologyMode::Run3) ||
(mode_ == HcalTopologyMode::Run4))
depth = hcons_->getDepthEta16(2, iphi, zside);
} else if ((subdet == HcalEndcap) && (etaRing == lastHERing() - 1) && (mode_ != HcalTopologyMode::SLHC) &&
(mode_ != HcalTopologyMode::Run3) && (mode_ != HcalTopologyMode::Run4)) {
if (phase2()) { // No more chance
detId = HcalDetId();
return false;
} else {
subdet = HcalEndcap;
if (phase1B())
depth = hcons_->getDepthEta16(2, iphi, zside);
}
} else if ((subdet == HcalEndcap) && (etaRing == lastHERing() - 1) && !phase1B()) {
// guard ring HF29 is behind HE 28
subdet = HcalForward;
(ieta > 0) ? ++ieta : --ieta;
depth = 1;
} else if ((subdet == HcalEndcap) && (etaRing == lastHERing()) && (mode_ != HcalTopologyMode::SLHC) &&
(mode_ != HcalTopologyMode::Run3) && (mode_ != HcalTopologyMode::Run4)) {
} else if ((subdet == HcalEndcap) && (etaRing == lastHERing()) && !phase1B()) {
// split cells go to bigger granularity. Ring 29 -> 28
(ieta > 0) ? --ieta : ++ieta;
} else {
Expand Down Expand Up @@ -940,8 +890,7 @@ bool HcalTopology::decrementDepth(HcalDetId& detId) const {
}
}
} else if ((subdet == HcalEndcap) && (etaRing == lastHERing()) && (depth == hcons_->getDepthEta29(iphi, zside, 0)) &&
(mode_ != HcalTopologyMode::SLHC) && (mode_ != HcalTopologyMode::Run3) &&
(mode_ != HcalTopologyMode::Run4)) {
!phase1B()) {
(ieta > 0) ? --ieta : ++ieta;
} else if (depth <= 0) {
if (subdet == HcalForward && etaRing == firstHFRing()) {
Expand Down Expand Up @@ -1134,17 +1083,18 @@ double HcalTopology::etaMax(HcalSubdetector subdet) const {
}
return eta;
}

std::pair<double, double> HcalTopology::etaRange(HcalSubdetector subdet, int keta) const {
int ieta = (keta > 0) ? keta : -keta;
if (subdet == HcalForward) {
if (ieta >= firstHFRing_) {
unsigned int ii = (unsigned int)(ieta - firstHFRing_);
unsigned int ii = static_cast<unsigned int>(ieta - firstHFRing_);
if (ii + 1 < etaTableHF.size())
return std::pair<double, double>(etaTableHF[ii], etaTableHF[ii + 1]);
}
} else {
int ietal = (mode_ == HcalTopologyMode::LHC && ieta == lastHERing_ - 1) ? (ieta + 1) : ieta;
if ((ietal < (int)(etaTable.size())) && (ieta > 0))
int ietal = (phase1() && ieta == lastHERing_ - 1) ? (ieta + 1) : ieta;
if ((ietal < static_cast<int>(etaTable.size())) && (ieta > 0))
return std::pair<double, double>(etaTable[ieta - 1], etaTable[ietal]);
}
return std::pair<double, double>(0, 0);
Expand Down Expand Up @@ -1702,4 +1652,18 @@ DetId HcalTopology::denseId2detId(unsigned int denseid) const {

unsigned int HcalTopology::ncells() const { return HBSize_ + HESize_ + HOSize_ + HFSize_; }

unsigned int HcalTopology::ncells(int subdet) const {
unsigned int ncell(0);
for (int eta = -maxEta_; eta <= maxEta_; eta++) {
for (unsigned int phi = 1; phi <= maxPhi_; phi++) {
for (int depth = 1; depth <= 7; depth++) {
HcalDetId cell((HcalSubdetector)subdet, eta, phi, depth);
if (validRaw(cell, true))
++ncell;
}
}
}
return ncell;
}

int HcalTopology::topoVersion() const { return topoVersion_; }
Loading

0 comments on commit 9864fcb

Please sign in to comment.