Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "Geometry/HGCalCommonData/interface/HGCalCassette.h"
#include <algorithm>
#include <sstream>

//#define EDM_ML_DEBUG

void HGCalCassette::setParameter(int cassette, const std::vector<double>& shifts, bool both) {
  cassette_ = cassette;
  typeHE_ = (cassette_ >= 12);
#ifdef EDM_ML_DEBUG
  edm::LogVerbatim("HGCalGeom") << "HGCalCassette::setParameter Cassette " << cassette << " Both " << both << " Size "
                                << shifts.size();
#endif
  shifts_.insert(shifts_.end(), shifts.begin(), shifts.end());
  if (both)
    shiftsScnt_.insert(shiftsScnt_.end(), shifts.begin(), shifts.end());
#ifdef EDM_ML_DEBUG
  edm::LogVerbatim("HGCalGeom") << "# of cassettes = " << cassette_ << " Type " << typeHE_;
  for (uint32_t j1 = 0; j1 < shifts.size(); j1 += 12) {
    std::ostringstream st1;
    if (j1 == 0) {
      if (both)
        st1 << " Shifts|ShiftsScnt:";
      else
        st1 << " Shifts:";
    } else {
      if (both)
        st1 << "                   ";
      else
        st1 << "        ";
    }
    uint32_t j2 = std::min((j1 + 12), static_cast<uint32_t>(shifts.size()));
    for (uint32_t j = j1; j < j2; ++j)
      st1 << ":" << shifts[j];
    edm::LogVerbatim("HGCalGeom") << st1.str();
  }
#endif
}

void HGCalCassette::setParameterScint(const std::vector<double>& shifts) {
  shiftsScnt_.insert(shiftsScnt_.end(), shifts.begin(), shifts.end());
#ifdef EDM_ML_DEBUG
  edm::LogVerbatim("HGCalGeom") << "HGCalCassette::setParameterScint with Size " << shifts.size();
  for (uint32_t j1 = 0; j1 < shifts.size(); j1 += 12) {
    std::ostringstream st1;
    if (j1 == 0) {
      st1 << " ShiftsScnt:";
    } else {
      st1 << "            ";
    }
    uint32_t j2 = std::min((j1 + 12), static_cast<uint32_t>(shifts.size()));
    for (uint32_t j = j1; j < j2; ++j)
      st1 << ":" << shifts[j];
    edm::LogVerbatim("HGCalGeom") << st1.str();
  }
#endif
}

void HGCalCassette::setParameterRetract(const std::vector<double>& shifts) {
  retractScnt_.insert(retractScnt_.end(), shifts.begin(), shifts.end());
#ifdef EDM_ML_DEBUG
  edm::LogVerbatim("HGCalGeom") << "HGCalCassette::setParameterRetract with Size " << shifts.size();
  for (uint32_t j1 = 0; j1 < shifts.size(); j1 += 12) {
    std::ostringstream st1;
    if (j1 == 0) {
      st1 << " RetractScnt:";
    } else {
      st1 << "             ";
    }
    uint32_t j2 = std::min((j1 + 12), static_cast<uint32_t>(shifts.size()));
    for (uint32_t j = j1; j < j2; ++j)
      st1 << ":" << shifts[j];
    edm::LogVerbatim("HGCalGeom") << st1.str();
  }
#endif
}

std::pair<double, double> HGCalCassette::getShift(int layer, int zside, int cassette, bool scnt) const {
  int locc = (zside < 0) ? (cassette - 1) : (typeHE_ ? positHE_[cassette - 1] : positEE_[cassette - 1]);
  int loc = 2 * (cassette_ * (layer - 1) + locc);
#ifdef EDM_ML_DEBUG
  edm::LogVerbatim("HGCalGeom") << "HGCalCassette::getShift: layer|zside|cassett|scnt " << layer << ":" << zside << ":"
                                << cassette << ":" << scnt << " loc " << locc << ":" << loc << " size "
                                << shiftsScnt_.size() << ":" << shifts_.size();
#endif
  std::pair<double, double> xy = (typeHE_ && scnt) ? (std::make_pair(shiftsScnt_[loc], shiftsScnt_[loc + 1]))
                                                   : (std::make_pair(shifts_[loc], shifts_[loc + 1]));
#ifdef EDM_ML_DEBUG
  edm::LogVerbatim("HGCalGeom") << "HGCalCassette::getShift: Layer " << layer << " zside " << zside << " type "
                                << typeHE_ << " cassette " << cassette << " Loc " << locc << ":" << loc << " shift "
                                << xy.first << ":" << xy.second;
#endif
  return xy;
}

std::pair<double, double> HGCalCassette::getShiftScnt(int layer, int zside, double phi) const {
  int loc = (layer - 1);
  double fac = (zside < 0) ? 1.0 : -1.0;
#ifdef EDM_ML_DEBUG
  edm::LogVerbatim("HGCalGeom") << "HGCalCassette::getShiftScnt: layer|zside|phi " << layer << ":" << zside << ":"
                                << phi << " loc " << loc << " size " << retractScnt_.size();
#endif
  std::pair<double, double> xy = std::make_pair(fac * retractScnt_[loc] * cos(phi), retractScnt_[loc] * sin(phi));
#ifdef EDM_ML_DEBUG
  edm::LogVerbatim("HGCalGeom") << "HGCalCassette::getShiftScnt: Layer " << layer << " zside " << zside << " Loc "
                                << loc << " fac " << fac << " shift " << xy.first << ":" << xy.second;
#endif
  return xy;
}

int HGCalCassette::cassetteIndex(int det, int layer, int side, int cassette) {
  int zs = (side > 0) ? factor_ : 0;
  return (((zs + det) * factor_ + layer) * factor_ + cassette);
}

int HGCalCassette::cassetteType(int det, int zside, int cassette) {
  int type = (zside < 0) ? cassette : ((det == 0) ? (1 + positEE_[cassette - 1]) : (1 + positHE_[cassette - 1]));
  return type;
}