Back to home page

Project CMSSW displayed by LXR

 
 

    


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 //#define EDM_ML_DEBUG
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 }