CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
HGCalGeometryLoader.cc
Go to the documentation of this file.
13 
14 //#define EDM_ML_DEBUG
15 
17 typedef std::vector<float> ParmVec;
18 
19 HGCalGeometryLoader::HGCalGeometryLoader() : twoBysqrt3_(2.0 / std::sqrt(3.0)) {}
20 
22 
24  // allocate geometry
25  HGCalGeometry* geom = new HGCalGeometry(topology);
26  unsigned int numberOfCells = topology.totalGeomModules(); // both sides
27  unsigned int numberExpected = topology.allGeomModules();
30  uint32_t numberOfShapes =
32 #ifdef EDM_ML_DEBUG
33  edm::LogVerbatim("HGCalGeom") << "Number of Cells " << numberOfCells << ":" << numberExpected << " for sub-detector "
34  << topology.subDetector() << " Shapes " << numberOfShapes << ":" << parametersPerShape_
35  << " mode " << topology.geomMode();
36 #endif
37  geom->allocateCorners(numberOfCells);
38  geom->allocatePar(numberOfShapes, parametersPerShape_);
39 
40  // loop over modules
42  unsigned int counter(0);
43 #ifdef EDM_ML_DEBUG
44  edm::LogVerbatim("HGCalGeom") << "HGCalGeometryLoader with # of "
45  << "transformation matrices " << topology.dddConstants().getTrFormN() << " and "
46  << topology.dddConstants().volumes() << ":" << topology.dddConstants().sectors()
47  << " volumes";
48 #endif
49  for (unsigned itr = 0; itr < topology.dddConstants().getTrFormN(); ++itr) {
50  HGCalParameters::hgtrform mytr = topology.dddConstants().getTrForm(itr);
51  int zside = mytr.zp;
52  int layer = mytr.lay;
53 #ifdef EDM_ML_DEBUG
54  unsigned int kount(0);
55  edm::LogVerbatim("HGCalGeom") << "HGCalGeometryLoader:: Z:Layer " << zside << ":" << layer << " z " << mytr.h3v.z();
56 #endif
57  if (topology.waferHexagon6()) {
58  ForwardSubdetector subdet = topology.subDetector();
59  for (int wafer = 0; wafer < topology.dddConstants().sectors(); ++wafer) {
60  std::string code[2] = {"False", "True"};
61  if (topology.dddConstants().waferInLayer(wafer, layer, true)) {
62  int type = topology.dddConstants().waferTypeT(wafer);
63  if (type != 1)
64  type = 0;
65  DetId detId = static_cast<DetId>(HGCalDetId(subdet, zside, layer, type, wafer, 0));
66  const auto& w = topology.dddConstants().waferPosition(wafer, true);
67  double xx = (zside > 0) ? w.first : -w.first;
68  CLHEP::Hep3Vector h3v(xx, w.second, mytr.h3v.z());
69  const HepGeom::Transform3D ht3d(mytr.hr, h3v);
70 #ifdef EDM_ML_DEBUG
71  edm::LogVerbatim("HGCalGeom") << "HGCalGeometryLoader:: Wafer:Type " << wafer << ":" << type << " DetId "
72  << HGCalDetId(detId) << std::hex << " " << detId.rawId() << std::dec
73  << " transf " << ht3d.getTranslation() << " and " << ht3d.getRotation();
74 #endif
75  HGCalParameters::hgtrap vol = topology.dddConstants().getModule(wafer, true, true);
79 
80  buildGeom(params, ht3d, detId, geom, 0);
81  counter++;
82 #ifdef EDM_ML_DEBUG
83  ++kount;
84 #endif
85  }
86  }
87  } else if (topology.tileTrapezoid()) {
88  int indx = topology.dddConstants().layerIndex(layer, true);
89  int ring = topology.dddConstants().getParameter()->iradMinBH_[indx];
90  int nphi = topology.dddConstants().getParameter()->scintCells(layer);
91  int type = topology.dddConstants().getParameter()->scintType(layer);
92  for (int md = topology.dddConstants().getParameter()->firstModule_[indx];
93  md <= topology.dddConstants().getParameter()->lastModule_[indx];
94  ++md) {
95  for (int iphi = 1; iphi <= nphi; ++iphi) {
97  std::pair<int, int> typm = topology.dddConstants().tileType(layer, ring, 0);
98  if (typm.first >= 0) {
99  id.setType(typm.first);
100  id.setSiPM(typm.second);
101  }
102  DetId detId = static_cast<DetId>(id);
103  const auto& w = topology.dddConstants().locateCellTrap(layer, ring, iphi, true);
104  double xx = (zside > 0) ? w.first : -w.first;
105  CLHEP::Hep3Vector h3v(xx, w.second, mytr.h3v.z());
106  const HepGeom::Transform3D ht3d(mytr.hr, h3v);
107 #ifdef EDM_ML_DEBUG
108  edm::LogVerbatim("HGCalGeom") << "HGCalGeometryLoader::rad:phi:type " << ring * zside << ":" << iphi << ":"
109  << type << " DetId " << HGCScintillatorDetId(detId) << " " << std::hex
110  << detId.rawId() << std::dec << " transf " << ht3d.getTranslation() << " R "
111  << ht3d.getTranslation().perp() << " and " << ht3d.getRotation();
112 #endif
113  HGCalParameters::hgtrap vol = topology.dddConstants().getModule(md, false, true);
114  params[FlatTrd::k_dZ] = vol.dz;
121 
122  buildGeom(params, ht3d, detId, geom, 1);
123  counter++;
124 #ifdef EDM_ML_DEBUG
125  ++kount;
126 #endif
127  }
128  ++ring;
129  }
130  } else {
131  DetId::Detector det = topology.detector();
132  for (int wafer = 0; wafer < topology.dddConstants().sectors(); ++wafer) {
133  if (topology.dddConstants().waferInLayer(wafer, layer, true)) {
134  int copy = topology.dddConstants().getParameter()->waferCopy_[wafer];
135  int u = HGCalWaferIndex::waferU(copy);
137  int type = topology.dddConstants().getTypeHex(layer, u, v);
138  DetId detId = (topology.isHFNose() ? (DetId)(HFNoseDetId(zside, type, layer, u, v, 0, 0))
139  : (DetId)(HGCSiliconDetId(det, zside, type, layer, u, v, 0, 0)));
140  const auto& w = topology.dddConstants().waferPosition(layer, u, v, true);
141  double xx = (zside > 0) ? w.first : -w.first;
142  CLHEP::Hep3Vector h3v(xx, w.second, mytr.h3v.z());
143  const HepGeom::Transform3D ht3d(mytr.hr, h3v);
144 #ifdef EDM_ML_DEBUG
145  if (topology.isHFNose())
146  edm::LogVerbatim("HGCalGeom") << "HGCalGeometryLoader::Wafer:Type " << wafer << ":" << type << " DetId "
147  << HFNoseDetId(detId) << std::hex << " " << detId.rawId() << std::dec
148  << " trans " << ht3d.getTranslation() << " and " << ht3d.getRotation();
149  else
150  edm::LogVerbatim("HGCalGeom") << "HGCalGeometryLoader::Wafer:Type " << wafer << ":" << type << " DetId "
151  << HGCSiliconDetId(detId) << std::hex << " " << detId.rawId() << std::dec
152  << " trans " << ht3d.getTranslation() << " and " << ht3d.getRotation();
153 #endif
154  HGCalParameters::hgtrap vol = topology.dddConstants().getModule(type, false, true);
155  params[FlatHexagon::k_dZ] = vol.dz;
158 
159  buildGeom(params, ht3d, detId, geom, 0);
160  counter++;
161 #ifdef EDM_ML_DEBUG
162  ++kount;
163 #endif
164  }
165  }
166  }
167 #ifdef EDM_ML_DEBUG
168  edm::LogVerbatim("HGCalGeom") << kount << " modules found in Layer " << layer << " Z " << zside;
169 #endif
170  }
171 
172  geom->sortDetIds();
173 
174  if (counter != numberExpected) {
175  edm::LogError("HGCalGeom") << "Inconsistent # of cells: expected " << numberExpected << ":" << numberOfCells
176  << " , inited " << counter;
177  assert(counter == numberExpected);
178  }
179 
180  return geom;
181 }
182 
184  const ParmVec& params, const HepGeom::Transform3D& ht3d, const DetId& detId, HGCalGeometry* geom, int mode) {
185 #ifdef EDM_ML_DEBUG
186  for (int i = 0; i < parametersPerShape_; ++i)
187  edm::LogVerbatim("HGCalGeom") << "Parameter[" << i << "] : " << params[i];
188 #endif
189  if (mode == 1) {
190  std::vector<GlobalPoint> corners(FlatTrd::ncorner_);
191 
192  FlatTrd::createCorners(params, ht3d, corners);
193 
194  const CCGFloat* parmPtr(CaloCellGeometry::getParmPtr(params, geom->parMgr(), geom->parVecVec()));
195 
196  GlobalPoint front(0.25 * (corners[0].x() + corners[1].x() + corners[2].x() + corners[3].x()),
197  0.25 * (corners[0].y() + corners[1].y() + corners[2].y() + corners[3].y()),
198  0.25 * (corners[0].z() + corners[1].z() + corners[2].z() + corners[3].z()));
199 
200  GlobalPoint back(0.25 * (corners[4].x() + corners[5].x() + corners[6].x() + corners[7].x()),
201  0.25 * (corners[4].y() + corners[5].y() + corners[6].y() + corners[7].y()),
202  0.25 * (corners[4].z() + corners[5].z() + corners[6].z() + corners[7].z()));
203 
204  if (front.mag2() > back.mag2()) { // front should always point to the center, so swap front and back
205  std::swap(front, back);
206  std::swap_ranges(corners.begin(), corners.begin() + FlatTrd::ncornerBy2_, corners.begin() + FlatTrd::ncornerBy2_);
207  }
208  geom->newCell(front, back, corners[0], parmPtr, detId);
209  } else {
210  std::vector<GlobalPoint> corners(FlatHexagon::ncorner_);
211 
212  FlatHexagon::createCorners(params, ht3d, corners);
213 
214  const CCGFloat* parmPtr(CaloCellGeometry::getParmPtr(params, geom->parMgr(), geom->parVecVec()));
215 
216  GlobalPoint front(
218  (corners[0].x() + corners[1].x() + corners[2].x() + corners[3].x() + corners[4].x() + corners[5].x()),
220  (corners[0].y() + corners[1].y() + corners[2].y() + corners[3].y() + corners[4].y() + corners[5].y()),
222  (corners[0].z() + corners[1].z() + corners[2].z() + corners[3].z() + corners[4].z() + corners[5].z()));
223 
224  GlobalPoint back(
226  (corners[6].x() + corners[7].x() + corners[8].x() + corners[9].x() + corners[10].x() + corners[11].x()),
228  (corners[6].y() + corners[7].y() + corners[8].y() + corners[9].y() + corners[10].y() + corners[11].y()),
230  (corners[6].z() + corners[7].z() + corners[8].z() + corners[9].z() + corners[10].z() + corners[11].z()));
231 
232  if (front.mag2() > back.mag2()) { // front should always point to the center, so swap front and back
233  std::swap(front, back);
234  std::swap_ranges(
235  corners.begin(), corners.begin() + FlatHexagon::ncornerBy2_, corners.begin() + FlatHexagon::ncornerBy2_);
236  }
237  geom->newCell(front, back, corners[0], parmPtr, detId);
238  }
239 }
FlatTrd::createCorners
static void createCorners(const std::vector< CCGFloat > &pv, const Tr3D &tr, std::vector< GlobalPoint > &co)
Definition: FlatTrd.cc:133
HGCalGeometryLoader::~HGCalGeometryLoader
~HGCalGeometryLoader()
Definition: HGCalGeometryLoader.cc:21
HGCalParameters::hgtrap::bl
float bl
Definition: HGCalParameters.h:49
counter
Definition: counter.py:1
DDAxes::y
mps_fire.i
i
Definition: mps_fire.py:428
HGCalTopology::dddConstants
const HGCalDDDConstants & dddConstants() const
Definition: HGCalTopology.h:98
CaloCellGeometry::CCGFloat
float CCGFloat
Definition: CaloCellGeometry.h:52
MessageLogger.h
HGCalDDDConstants::waferTypeT
int waferTypeT(int wafer) const
Definition: HGCalDDDConstants.h:192
HGCScintillatorDetId.h
filterCSVwithJSON.copy
copy
Definition: filterCSVwithJSON.py:36
CalibrationSummaryClient_cfi.params
params
Definition: CalibrationSummaryClient_cfi.py:14
HGCalDDDConstants::locateCellTrap
std::pair< float, float > locateCellTrap(int lay, int ieta, int iphi, bool reco) const
Definition: HGCalDDDConstants.cc:717
HGCalTopology::allGeomModules
unsigned int allGeomModules() const
Definition: HGCalTopology.cc:53
ecaldqm::zside
int zside(DetId const &)
Definition: EcalDQMCommonUtils.cc:189
ForwardSubdetector
ForwardSubdetector
Definition: ForwardSubdetector.h:4
FlatTrd::k_Cell
static constexpr uint32_t k_Cell
Definition: FlatTrd.h:45
HGCalTopology::detector
DetId::Detector detector() const
Definition: HGCalTopology.h:117
HGCSiliconDetId.h
ALCARECOPromptCalibProdSiPixelAli0T_cff.mode
mode
Definition: ALCARECOPromptCalibProdSiPixelAli0T_cff.py:96
FlatTrd::k_Phi
static constexpr uint32_t k_Phi
Definition: FlatTrd.h:29
HGCalWaferIndex::waferU
int32_t waferU(const int32_t index)
Definition: HGCalWaferIndex.cc:27
cms::cuda::assert
assert(be >=bs)
HGCalGeometry::k_NumberOfShapes
static constexpr unsigned int k_NumberOfShapes
Definition: HGCalGeometry.h:46
HGCalGeometryLoader::build
HGCalGeometry * build(const HGCalTopology &)
Definition: HGCalGeometryLoader.cc:23
HGCalParameters::hgtrap::dz
float dz
Definition: HGCalParameters.h:49
DDAxes::x
HFNoseDetId.h
HGCalTopology::totalGeomModules
unsigned int totalGeomModules() const
Definition: HGCalTopology.h:93
findQualityFiles.v
v
Definition: findQualityFiles.py:179
HGCalGeometry::k_NumberOfParametersPerTrd
static constexpr unsigned int k_NumberOfParametersPerTrd
Definition: HGCalGeometry.h:43
HGCalTopology::tileTrapezoid
bool tileTrapezoid() const
Definition: HGCalTopology.h:124
HGCalDDDConstants::getTypeHex
int getTypeHex(int layer, int waferU, int waferV) const
Definition: HGCalDDDConstants.cc:428
HGCalParameters::hgtrform::zp
int zp
Definition: HGCalParameters.h:53
PV3DBase::mag2
T mag2() const
Definition: PV3DBase.h:63
HFNoseDetId
Definition: HFNoseDetId.h:22
FlatTrd::k_Theta
static constexpr uint32_t k_Theta
Definition: FlatTrd.h:27
HGCSiliconDetId
Definition: HGCSiliconDetId.h:22
FlatHexagon::k_r
static constexpr uint32_t k_r
Definition: FlatHexagon.h:28
HGCalGeometryLoader::ParmVec
std::vector< float > ParmVec
Definition: HGCalGeometryLoader.h:13
HGCalGeometryLoader::CCGFloat
CaloCellGeometry::CCGFloat CCGFloat
Definition: HGCalGeometryLoader.h:12
ForwardSubdetector.h
LEDCalibrationChannels.iphi
iphi
Definition: LEDCalibrationChannels.py:64
DetId
Definition: DetId.h:17
nphi
const int nphi
Definition: CMTRawAnalyzer.h:424
FlatTrd::k_dX1
static constexpr uint32_t k_dX1
Definition: FlatTrd.h:32
HGCalTopology::subDetector
ForwardSubdetector subDetector() const
Definition: HGCalTopology.h:118
HGCalParameters::hgtrform::h3v
CLHEP::Hep3Vector h3v
Definition: HGCalParameters.h:54
HGCalParameters::hgtrap::tl
float tl
Definition: HGCalParameters.h:49
HGCalWaferIndex.h
std::swap
void swap(edm::DataFrameContainer &lhs, edm::DataFrameContainer &rhs)
Definition: DataFrameContainer.h:209
FlatTrd::k_Alp1
static constexpr uint32_t k_Alp1
Definition: FlatTrd.h:36
FlatHexagon::ncorner_
static constexpr unsigned int ncorner_
Definition: FlatHexagon.h:81
FlatTrd::k_dY2
static constexpr uint32_t k_dY2
Definition: FlatTrd.h:38
w
const double w
Definition: UKUtility.cc:23
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
HGCalDDDConstants::tileType
std::pair< int, int > tileType(int layer, int ring, int phi) const
Definition: HGCalDDDConstants.h:116
HGCalDDDConstants::waferInLayer
bool waferInLayer(int wafer, int lay, bool reco) const
Definition: HGCalDDDConstants.cc:1186
DDAxes::z
FlatTrd::k_dX4
static constexpr uint32_t k_dX4
Definition: FlatTrd.h:41
CCGFloat
CaloCellGeometry::CCGFloat CCGFloat
Definition: HGCalGeometryLoader.cc:16
HGCalDDDConstants::layerIndex
int layerIndex(int lay, bool reco) const
Definition: HGCalDDDConstants.cc:563
HGCalGeometryLoader::twoBysqrt3_
const double twoBysqrt3_
Definition: HGCalGeometryLoader.h:23
HGCalGeometry::k_NumberOfParametersPerHex
static constexpr unsigned int k_NumberOfParametersPerHex
Definition: HGCalGeometry.h:44
HGCalWaferIndex::waferV
int32_t waferV(const int32_t index)
Definition: HGCalWaferIndex.cc:32
HGCalTopology::waferHexagon6
bool waferHexagon6() const
Definition: HGCalTopology.h:128
relativeConstraints.geom
geom
Definition: relativeConstraints.py:72
HGCalParameters::waferCopy_
std::vector< int > waferCopy_
Definition: HGCalParameters.h:115
Point3DBase< float, GlobalTag >
FlatHexagon::k_R
static constexpr uint32_t k_R
Definition: FlatHexagon.h:29
ParmVec
std::vector< float > ParmVec
Definition: HGCalGeometryLoader.cc:17
HGCalGeometry
Definition: HGCalGeometry.h:29
FlatHexagon::ncornerBy2_
static constexpr unsigned int ncornerBy2_
Definition: FlatHexagon.h:82
HGCalGeometryLoader.h
HGCalParameters::iradMinBH_
std::vector< int > iradMinBH_
Definition: HGCalParameters.h:163
HGCalGeometryLoader::HGCalGeometryLoader
HGCalGeometryLoader()
Definition: HGCalGeometryLoader.cc:19
phase1PixelTopology::layer
constexpr std::array< uint8_t, layerIndexSize > layer
Definition: phase1PixelTopology.h:99
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
HGCalGeometry::k_NumberOfShapesTrd
static constexpr unsigned int k_NumberOfShapesTrd
Definition: HGCalGeometry.h:47
HGCalParameters::firstModule_
std::vector< int > firstModule_
Definition: HGCalParameters.h:166
HGCalGeometry.h
HGCalTopology::geomMode
HGCalGeometryMode::GeometryMode geomMode() const
Geometry mode.
Definition: HGCalTopology.h:79
FlatTrd::k_dX3
static constexpr uint32_t k_dX3
Definition: FlatTrd.h:39
FlatTrd::ncornerBy2_
static constexpr unsigned int ncornerBy2_
Definition: FlatTrd.h:98
type
type
Definition: SiPixelVCal_PayloadInspector.cc:37
HGCalParameters::scintType
int scintType(const int layer) const
Definition: HGCalParameters.h:68
createfilelist.int
int
Definition: createfilelist.py:10
HGCalParameters::scintCells
int scintCells(const int layer) const
Definition: HGCalParameters.h:66
HGCalParameters::hgtrap::h
float h
Definition: HGCalParameters.h:49
FlatTrd::k_dX2
static constexpr uint32_t k_dX2
Definition: FlatTrd.h:34
HGCalDDDConstants::cellSizeHex
double cellSizeHex(int type) const
Definition: HGCalDDDConstants.cc:232
DetId::Detector
Detector
Definition: DetId.h:24
counter
static std::atomic< unsigned int > counter
Definition: SharedResourceNames.cc:18
HGCalDDDConstants::sectors
int sectors() const
Definition: HGCalDDDConstants.h:109
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
HGCalGeometryLoader::buildGeom
void buildGeom(const ParmVec &, const HepGeom::Transform3D &, const DetId &, HGCalGeometry *, int mode)
Definition: HGCalGeometryLoader.cc:183
HGCalParameters::hgtrform::lay
int lay
Definition: HGCalParameters.h:53
HGCalDDDConstants::getTrForm
HGCalParameters::hgtrform getTrForm(unsigned int k) const
Definition: HGCalDDDConstants.h:66
HGCalTopology
Definition: HGCalTopology.h:12
HGCalDetId
Definition: HGCalDetId.h:8
CaloCellGeometry.h
FlatHexagon::k_dZ
static constexpr uint32_t k_dZ
Definition: FlatHexagon.h:27
HGCalDetId.h
std
Definition: JetResolutionObject.h:76
DetId::rawId
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
HGCScintillatorDetId
Definition: HGCScintillatorDetId.h:23
edm::LogVerbatim
Log< level::Info, true > LogVerbatim
Definition: MessageLogger.h:128
triggerObjects_cff.id
id
Definition: triggerObjects_cff.py:29
HGCalDDDConstants::waferPosition
std::pair< double, double > waferPosition(int wafer, bool reco) const
Definition: HGCalDDDConstants.cc:1207
relativeConstraints.ring
ring
Definition: relativeConstraints.py:68
HGCalParameters::lastModule_
std::vector< int > lastModule_
Definition: HGCalParameters.h:167
CaloCellGeometry::getParmPtr
static const CCGFloat * getParmPtr(const std::vector< CCGFloat > &vd, ParMgr *mgr, ParVecVec &pvv)
Definition: CaloCellGeometry.cc:117
FlatHexagon::oneBySix_
static constexpr double oneBySix_
Definition: FlatHexagon.h:80
FlatTrd.h
FlatHexagon::createCorners
static void createCorners(const std::vector< CCGFloat > &pv, const Tr3D &tr, std::vector< GlobalPoint > &co)
Definition: FlatHexagon.cc:134
HGCalParameters::hgtrform
Definition: HGCalParameters.h:52
FlatTrd::k_Alp2
static constexpr uint32_t k_Alp2
Definition: FlatTrd.h:43
HGCalDDDConstants.h
HGCalDDDConstants::getTrFormN
unsigned int getTrFormN() const
Definition: HGCalDDDConstants.h:67
FlatTrd::ncorner_
static constexpr unsigned int ncorner_
Definition: FlatTrd.h:97
HGCalTopology::isHFNose
bool isHFNose() const
Definition: HGCalTopology.h:120
HGCalParameters::hgtrap
Definition: HGCalParameters.h:47
edm::Log
Definition: MessageLogger.h:70
HGCalParameters::hgtrform::hr
CLHEP::HepRotation hr
Definition: HGCalParameters.h:55
TauDecayModes.dec
dec
Definition: TauDecayModes.py:143
HGCalDDDConstants::getParameter
const HGCalParameters * getParameter() const
Definition: HGCalDDDConstants.h:59
FlatTrd::k_dY1
static constexpr uint32_t k_dY1
Definition: FlatTrd.h:31
HGCalDDDConstants::volumes
unsigned int volumes() const
Definition: HGCalDDDConstants.h:126
HGCalGeometryLoader::parametersPerShape_
int parametersPerShape_
Definition: HGCalGeometryLoader.h:24
geometryCSVtoXML.xx
xx
Definition: geometryCSVtoXML.py:19
FlatTrd::k_dZ
static constexpr uint32_t k_dZ
Definition: FlatTrd.h:26
HGCalDDDConstants::getModule
HGCalParameters::hgtrap getModule(unsigned int k, bool hexType, bool reco) const
Definition: HGCalDDDConstants.cc:375