File indexing completed on 2025-04-09 02:00:25
0001 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0002 #include "Geometry/HGCalCommonData/interface/HGCalCassette.h"
0003 #include <algorithm>
0004 #include <sstream>
0005
0006
0007
0008 void HGCalCassette::setParameter(int cassette, const std::vector<double>& shifts, bool both) {
0009 cassette_ = cassette;
0010 typeHE_ = (cassette_ >= 12);
0011 #ifdef EDM_ML_DEBUG
0012 edm::LogVerbatim("HGCalGeom") << "HGCalCassette::setParameter Cassette " << cassette << " Both " << both << " Size "
0013 << shifts.size();
0014 #endif
0015 shifts_.insert(shifts_.end(), shifts.begin(), shifts.end());
0016 if (both)
0017 shiftsScnt_.insert(shiftsScnt_.end(), shifts.begin(), shifts.end());
0018 #ifdef EDM_ML_DEBUG
0019 edm::LogVerbatim("HGCalGeom") << "# of cassettes = " << cassette_ << " Type " << typeHE_;
0020 for (uint32_t j1 = 0; j1 < shifts.size(); j1 += 12) {
0021 std::ostringstream st1;
0022 if (j1 == 0) {
0023 if (both)
0024 st1 << " Shifts|ShiftsScnt:";
0025 else
0026 st1 << " Shifts:";
0027 } else {
0028 if (both)
0029 st1 << " ";
0030 else
0031 st1 << " ";
0032 }
0033 uint32_t j2 = std::min((j1 + 12), static_cast<uint32_t>(shifts.size()));
0034 for (uint32_t j = j1; j < j2; ++j)
0035 st1 << ":" << shifts[j];
0036 edm::LogVerbatim("HGCalGeom") << st1.str();
0037 }
0038 #endif
0039 }
0040
0041 void HGCalCassette::setParameterScint(const std::vector<double>& shifts) {
0042 shiftsScnt_.insert(shiftsScnt_.end(), shifts.begin(), shifts.end());
0043 #ifdef EDM_ML_DEBUG
0044 edm::LogVerbatim("HGCalGeom") << "HGCalCassette::setParameterScint with Size " << shifts.size();
0045 for (uint32_t j1 = 0; j1 < shifts.size(); j1 += 12) {
0046 std::ostringstream st1;
0047 if (j1 == 0) {
0048 st1 << " ShiftsScnt:";
0049 } else {
0050 st1 << " ";
0051 }
0052 uint32_t j2 = std::min((j1 + 12), static_cast<uint32_t>(shifts.size()));
0053 for (uint32_t j = j1; j < j2; ++j)
0054 st1 << ":" << shifts[j];
0055 edm::LogVerbatim("HGCalGeom") << st1.str();
0056 }
0057 #endif
0058 }
0059
0060 void HGCalCassette::setParameterRetract(const std::vector<double>& shifts) {
0061 retractScnt_.insert(retractScnt_.end(), shifts.begin(), shifts.end());
0062 #ifdef EDM_ML_DEBUG
0063 edm::LogVerbatim("HGCalGeom") << "HGCalCassette::setParameterRetract with Size " << shifts.size();
0064 for (uint32_t j1 = 0; j1 < shifts.size(); j1 += 12) {
0065 std::ostringstream st1;
0066 if (j1 == 0) {
0067 st1 << " RetractScnt:";
0068 } else {
0069 st1 << " ";
0070 }
0071 uint32_t j2 = std::min((j1 + 12), static_cast<uint32_t>(shifts.size()));
0072 for (uint32_t j = j1; j < j2; ++j)
0073 st1 << ":" << shifts[j];
0074 edm::LogVerbatim("HGCalGeom") << st1.str();
0075 }
0076 #endif
0077 }
0078
0079 std::pair<double, double> HGCalCassette::getShift(int layer, int zside, int cassette, bool scnt) const {
0080 int locc = (zside < 0) ? (cassette - 1) : (typeHE_ ? positHE_[cassette - 1] : positEE_[cassette - 1]);
0081 int loc = 2 * (cassette_ * (layer - 1) + locc);
0082 #ifdef EDM_ML_DEBUG
0083 edm::LogVerbatim("HGCalGeom") << "HGCalCassette::getShift: layer|zside|cassett|scnt " << layer << ":" << zside << ":"
0084 << cassette << ":" << scnt << " loc " << locc << ":" << loc << " size "
0085 << shiftsScnt_.size() << ":" << shifts_.size();
0086 #endif
0087 std::pair<double, double> xy = (typeHE_ && scnt) ? (std::make_pair(shiftsScnt_[loc], shiftsScnt_[loc + 1]))
0088 : (std::make_pair(shifts_[loc], shifts_[loc + 1]));
0089 #ifdef EDM_ML_DEBUG
0090 edm::LogVerbatim("HGCalGeom") << "HGCalCassette::getShift: Layer " << layer << " zside " << zside << " type "
0091 << typeHE_ << " cassette " << cassette << " Loc " << locc << ":" << loc << " shift "
0092 << xy.first << ":" << xy.second;
0093 #endif
0094 return xy;
0095 }
0096
0097 std::pair<double, double> HGCalCassette::getShiftScnt(int layer, int zside, double phi) const {
0098 int loc = (layer - 1);
0099 double fac = (zside < 0) ? 1.0 : -1.0;
0100 #ifdef EDM_ML_DEBUG
0101 edm::LogVerbatim("HGCalGeom") << "HGCalCassette::getShiftScnt: layer|zside|phi " << layer << ":" << zside << ":"
0102 << phi << " loc " << loc << " size " << retractScnt_.size();
0103 #endif
0104 std::pair<double, double> xy = std::make_pair(fac * retractScnt_[loc] * cos(phi), retractScnt_[loc] * sin(phi));
0105 #ifdef EDM_ML_DEBUG
0106 edm::LogVerbatim("HGCalGeom") << "HGCalCassette::getShiftScnt: Layer " << layer << " zside " << zside << " Loc "
0107 << loc << " fac " << fac << " shift " << xy.first << ":" << xy.second;
0108 #endif
0109 return xy;
0110 }
0111
0112 int HGCalCassette::cassetteIndex(int det, int layer, int side, int cassette) {
0113 int zs = (side > 0) ? factor_ : 0;
0114 return (((zs + det) * factor_ + layer) * factor_ + cassette);
0115 }
0116
0117 int HGCalCassette::cassetteType(int det, int zside, int cassette) {
0118 int type = (zside < 0) ? cassette : ((det == 0) ? (1 + positEE_[cassette - 1]) : (1 + positHE_[cassette - 1]));
0119 return type;
0120 }