File indexing completed on 2024-11-01 06:11:54
0001 #include <iostream>
0002 #include <iomanip>
0003 #include <cstdlib>
0004 #include <cstdint>
0005
0006 #include "UCTLayer1.hh"
0007
0008 #include "UCTCrate.hh"
0009 #include "UCTCard.hh"
0010 #include "UCTRegion.hh"
0011 #include "UCTTower.hh"
0012
0013 #include "UCTGeometry.hh"
0014 #include "UCTLogging.hh"
0015
0016 using namespace l1tcalo;
0017
0018 UCTLayer1::UCTLayer1(int fwv) : uctSummary(0), fwVersion(fwv) {
0019 UCTGeometry g;
0020 crates.reserve(g.getNCrates());
0021 for (uint32_t crate = 0; crate < g.getNCrates(); crate++) {
0022 crates.push_back(new UCTCrate(crate, fwVersion));
0023 }
0024 }
0025
0026 UCTLayer1::~UCTLayer1() {
0027 for (uint32_t i = 0; i < crates.size(); i++) {
0028 if (crates[i] != nullptr)
0029 delete crates[i];
0030 }
0031 }
0032
0033 bool UCTLayer1::clearEvent() {
0034 for (uint32_t i = 0; i < crates.size(); i++) {
0035 if (crates[i] != nullptr)
0036 crates[i]->clearEvent();
0037 }
0038 return true;
0039 }
0040
0041 const UCTRegion* UCTLayer1::getRegion(int regionEtaIndex, uint32_t regionPhiIndex) const {
0042 if (regionEtaIndex == 0 || (uint32_t)std::abs(regionEtaIndex) > (NRegionsInCard + NHFRegionsInCard) ||
0043 regionPhiIndex >= MaxUCTRegionsPhi) {
0044 return nullptr;
0045 }
0046
0047 UCTGeometry g;
0048 UCTRegionIndex r = UCTRegionIndex(regionEtaIndex, regionPhiIndex);
0049 UCTTowerIndex t = g.getUCTTowerIndex(r);
0050 uint32_t absCaloEta = std::abs(t.first);
0051 uint32_t absCaloPhi = std::abs(t.second);
0052 uint32_t crt = g.getCrate(absCaloEta, absCaloPhi);
0053 if (crt >= crates.size()) {
0054 LOG_ERROR << "UCTLayer1::getRegion - Crate number is wrong - " << std::hex << crt << std::dec << " (rEta,rPhi)=("
0055 << regionEtaIndex << "," << regionPhiIndex << ")"
0056 << " (eta,phi)=(" << absCaloEta << "," << absCaloPhi << ")" << std::endl;
0057 exit(1);
0058 }
0059 const UCTCrate* crate = crates[crt];
0060 const UCTCard* card = crate->getCard(t);
0061 const UCTRegion* region = card->getRegion(r);
0062 return region;
0063 }
0064
0065 const std::shared_ptr<UCTTower> UCTLayer1::getTower(int caloEta, int caloPhi) const {
0066 if (caloPhi < 0) {
0067 LOG_ERROR << "UCT::getTower - Negative caloPhi is unacceptable -- bailing" << std::endl;
0068 exit(1);
0069 }
0070 UCTGeometry g;
0071 UCTTowerIndex twr = UCTTowerIndex(caloEta, caloPhi);
0072 const UCTRegionIndex rgn = g.getUCTRegionIndex(twr);
0073 const UCTRegion* region = getRegion(rgn);
0074 const std::shared_ptr<UCTTower> tower = region->getTower(twr);
0075 return tower;
0076 }
0077
0078 bool UCTLayer1::setECALData(UCTTowerIndex t, bool ecalFG, uint32_t ecalET) {
0079 uint32_t absCaloEta = std::abs(t.first);
0080 uint32_t absCaloPhi = std::abs(t.second);
0081 UCTGeometry g;
0082 uint32_t crt = g.getCrate(absCaloEta, absCaloPhi);
0083 if (crt >= crates.size()) {
0084 LOG_ERROR << "UCTLayer1::setECALData - Crate number is wrong - " << std::hex << crt << std::dec << " (eta,phi)=("
0085 << absCaloEta << "," << absCaloPhi << ")" << std::endl;
0086 exit(1);
0087 }
0088 UCTCrate* crate = crates[crt];
0089 return crate->setECALData(t, ecalFG, ecalET);
0090 }
0091
0092 bool UCTLayer1::setHCALData(UCTTowerIndex t, uint32_t hcalFB, uint32_t hcalET) {
0093 uint32_t absCaloEta = std::abs(t.first);
0094 uint32_t absCaloPhi = std::abs(t.second);
0095 UCTGeometry g;
0096 uint32_t crt = g.getCrate(absCaloEta, absCaloPhi);
0097 if (crt >= crates.size()) {
0098 LOG_ERROR << "UCTLayer1::setHCALData - Crate number is wrong - " << std::hex << crt << std::dec << " (eta,phi)=("
0099 << absCaloEta << "," << absCaloPhi << ")" << std::endl;
0100 exit(1);
0101 }
0102 UCTCrate* crate = crates[crt];
0103 return crate->setHCALData(t, hcalFB, hcalET);
0104 }
0105
0106 bool UCTLayer1::process() {
0107 uctSummary = 0;
0108 for (uint32_t i = 0; i < crates.size(); i++) {
0109 if (crates[i] != nullptr) {
0110 crates[i]->process();
0111 uctSummary += crates[i]->et();
0112 }
0113 }
0114
0115 return true;
0116 }
0117
0118 std::ostream& operator<<(std::ostream& os, const UCTLayer1& l) {
0119 os << "UCTLayer1: Summary " << l.uctSummary << std::endl;
0120 return os;
0121 }