diff --git a/Geometry/HGCalCommonData/interface/HGCalCassette.h b/Geometry/HGCalCommonData/interface/HGCalCassette.h new file mode 100644 index 0000000000000..6342df5fec747 --- /dev/null +++ b/Geometry/HGCalCommonData/interface/HGCalCassette.h @@ -0,0 +1,25 @@ +#ifndef Geometry_HGCalCommonData_HGCalCassette_h +#define Geometry_HGCalCommonData_HGCalCassette_h + +#include +#include +#include + +class HGCalCassette { +public: + HGCalCassette(int cassette, const std::vector& shifts) { setParameter(cassette, shifts); } + HGCalCassette() {} + + void setParameter(int cassette, const std::vector& shifts); + std::pair getShift(int layer, int zside, int cassette); + +private: + const std::vector positEE_ = {2, 1, 0, 5, 4, 3}; + const std::vector positHE_ = {5, 4, 3, 2, 1, 0, 11, 10, 9, 8, 7, 6}; + int cassette_; + bool typeHE_; + std::vector shifts_; + std::vector cos_, sin_; +}; + +#endif diff --git a/Geometry/HGCalCommonData/interface/HGCalGeometryMode.h b/Geometry/HGCalCommonData/interface/HGCalGeometryMode.h index 01469070fe4c6..a6644f8435ce5 100644 --- a/Geometry/HGCalCommonData/interface/HGCalGeometryMode.h +++ b/Geometry/HGCalCommonData/interface/HGCalGeometryMode.h @@ -33,7 +33,8 @@ namespace HGCalGeometryMode { TrapezoidFile = 7, Hexagon8Module = 8, TrapezoidModule = 9, - Hexagon8ModuleOrient = 10, + Hexagon8Cassette = 10, + TrapezoidCassette = 11, }; enum WaferMode { Polyhedra = 0, ExtrudedPolygon = 1 }; } // namespace HGCalGeometryMode diff --git a/Geometry/HGCalCommonData/src/HGCalCassette.cc b/Geometry/HGCalCommonData/src/HGCalCassette.cc new file mode 100644 index 0000000000000..9275e70f4f045 --- /dev/null +++ b/Geometry/HGCalCommonData/src/HGCalCassette.cc @@ -0,0 +1,43 @@ +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "Geometry/HGCalCommonData/interface/HGCalCassette.h" +#include "DataFormats/Math/interface/angle_units.h" +#include + +#define EDM_ML_DEBUG + +void HGCalCassette::setParameter(int cassette, const std::vector& shifts) { + cassette_ = cassette; + typeHE_ = (cassette_ >= 12); + shifts_.insert(shifts_.end(), shifts.begin(), shifts.end()); + double dphi = angle_units::piRadians / cassette_; + for (int k = 0; k < cassette_; ++k) { + double angle = (2 * k - 1) * dphi; + cos_.emplace_back(std::cos(angle)); + sin_.emplace_back(std::sin(angle)); + } +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "# of cassettes = " << cassette_ << " Type " << typeHE_ << " dPhi " << dphi; + std::ostringstream st1; + st1 << " Shifts:"; + for (const auto& s : shifts_) + st1 << ":" << s; + edm::LogVerbatim("HGCalGeom") << st1.str(); + std::ostringstream st2; + st2 << " Cos|Sin:"; + for (int k = 0; k < cassette_; ++k) + st2 << " " << cos_[k] << ":" << sin_[k]; + edm::LogVerbatim("HGCalGeom") << st2.str(); +#endif +} + +std::pair HGCalCassette::getShift(int layer, int zside, int cassette) { + int locc = (zside < 0) ? (cassette - 1) : (typeHE_ ? positHE_[cassette - 1] : positEE_[cassette - 1]); + int loc = cassette_ * (layer - 1) + locc; + std::pair xy = std::make_pair(shifts_[loc] * cos_[locc], shifts_[loc] * sin_[locc]); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("HGCalGeom") << "HGCalCassette::getShift: Layer " << layer << " zside " << zside << " cassette " + << cassette << " Loc " << locc << ":" << loc << " shift " << xy.first << ":" + << xy.second; +#endif + return xy; +} diff --git a/Geometry/HGCalCommonData/src/HGCalGeometryMode.cc b/Geometry/HGCalCommonData/src/HGCalGeometryMode.cc index f9ef5a04642e3..ee04d2a1eb229 100644 --- a/Geometry/HGCalCommonData/src/HGCalGeometryMode.cc +++ b/Geometry/HGCalCommonData/src/HGCalGeometryMode.cc @@ -12,7 +12,8 @@ HGCalStringToEnumParser::HGCalStringToEnumParse enumMap["HGCalGeometryMode::TrapezoidFile"] = HGCalGeometryMode::TrapezoidFile; enumMap["HGCalGeometryMode::Hexagon8Module"] = HGCalGeometryMode::Hexagon8Module; enumMap["HGCalGeometryMode::TrapezoidModule"] = HGCalGeometryMode::TrapezoidModule; - enumMap["HGCalGeometryMode::Hexagon8ModuleOrient"] = HGCalGeometryMode::Hexagon8ModuleOrient; + enumMap["HGCalGeometryMode::Hexagon8Cassette"] = HGCalGeometryMode::Hexagon8Cassette; + enumMap["HGCalGeometryMode::TrapezoidCassette"] = HGCalGeometryMode::TrapezoidCassette; } template <>