CMS 3D CMS Logo

HGCalNumberingScheme.cc
Go to the documentation of this file.
1 // File: HGCalNumberingScheme.cc
3 // Description: Numbering scheme for High Granularity Calorimeter
11 #include <iostream>
12 
13 //#define EDM_ML_DEBUG
14 
16  const DetId::Detector& det,
17  const std::string& name)
18  : hgcons_(hgc), mode_(hgc.geomMode()), det_(det), name_(name) {
19 #ifdef EDM_ML_DEBUG
20  edm::LogVerbatim("HGCSim") << "Creating HGCalNumberingScheme for " << name_ << " Det " << det_;
21 #endif
22 }
23 
25 #ifdef EDM_ML_DEBUG
26  edm::LogVerbatim("HGCSim") << "Deleting HGCalNumberingScheme";
27 #endif
28 }
29 
30 uint32_t HGCalNumberingScheme::getUnitID(int layer, int module, int cell, int iz, const G4ThreeVector& pos, double& wt) {
31  // module is the copy number of the wafer as placed in the layer
32  uint32_t index(0);
33  wt = 1.0;
34 #ifdef EDM_ML_DEBUG
35  edm::LogVerbatim("HGCSim") << "HGCalNumberingScheme:: input Layer " << layer << " Module " << module << " Cell "
36  << cell << " iz " << iz << " Position " << pos << " Mode " << mode_ << ":"
40 #endif
41  if (hgcons_.waferHexagon8()) {
42  int cellU(0), cellV(0), waferType(-1), waferU(0), waferV(0);
43  if (cell >= 0) {
44  waferType = HGCalTypes::getUnpackedType(module);
45  waferU = HGCalTypes::getUnpackedU(module);
46  waferV = HGCalTypes::getUnpackedV(module);
47  cellU = HGCalTypes::getUnpackedCellU(cell);
48  cellV = HGCalTypes::getUnpackedCellV(cell);
49  } else if (mode_ != HGCalGeometryMode::Hexagon8) {
50  double xx = (pos.z() > 0) ? pos.x() : -pos.x();
51  hgcons_.waferFromPosition(xx, pos.y(), layer, waferU, waferV, cellU, cellV, waferType, wt);
52  }
53  if (waferType >= 0) {
55  int type = hgcons_.waferType(layer, waferU, waferV, true);
56  if (type != waferType) {
57 #ifdef EDM_ML_DEBUG
58  edm::LogVerbatim("HGCSim") << "HGCalNumberingScheme:: " << name_ << " Layer|u|v|Index|module|cell " << layer
59  << ":" << waferU << ":" << waferV << ":"
60  << HGCalWaferIndex::waferIndex(layer, waferU, waferV, false) << ":" << module
61  << ":" << cell << " has a type mismatch " << waferType << ":" << type;
62 #endif
64  waferType = type;
65  }
66  }
67  index = HGCSiliconDetId(det_, iz, waferType, layer, waferU, waferV, cellU, cellV).rawId();
68 #ifdef EDM_ML_DEBUG
69  edm::LogVerbatim("HGCSim") << "OK WaferType " << waferType << " Wafer " << waferU << ":" << waferV << " Cell "
70  << cellU << ":" << cellV;
71  } else {
72  edm::LogVerbatim("HGCSim") << "Bad WaferType " << waferType << " for Layer:u:v " << layer << ":" << waferU << ":"
73  << waferV;
74 #endif
75  }
76  } else if (hgcons_.tileTrapezoid()) {
77  std::array<int, 3> id = hgcons_.assignCellTrap(pos.x(), pos.y(), pos.z(), layer, false);
78  if (id[2] >= 0) {
79  index = HGCScintillatorDetId(id[2], layer, iz * id[0], id[1]).rawId();
80 #ifdef EDM_ML_DEBUG
81  edm::LogVerbatim("HGCSim") << "Radius/Phi " << id[0] << ":" << id[1] << " Type " << id[2] << " Layer|iz " << layer
82  << ":" << iz << " " << HGCScintillatorDetId(index);
83  } else {
84  edm::LogVerbatim("HGCSim") << "Radius/Phi " << id[0] << ":" << id[1] << " Type " << id[2] << " Layer|iz " << layer
85  << ":" << iz << " ERROR";
86 #endif
87  }
88  }
89 #ifdef EDM_ML_DEBUG
90  edm::LogVerbatim("HGCSim") << "HGCalNumberingScheme::i/p " << det_ << ":" << layer << ":" << module << ":" << cell
91  << ":" << iz << ":" << pos.x() << ":" << pos.y() << ":" << pos.z() << " ID " << std::hex
92  << index << std::dec << " wt " << wt;
94 #endif
95  return index;
96 }
97 
98 void HGCalNumberingScheme::checkPosition(uint32_t index, const G4ThreeVector& pos) const {
99  std::pair<float, float> xy;
100  bool ok(false);
101  double z1(0), tolR(12.0), tolZ(1.0);
102  int lay(-1);
103  if (index == 0) {
104  } else if (DetId(index).det() == DetId::HGCalHSi) {
106  lay = id.layer();
107  xy = hgcons_.locateCell(lay, id.waferU(), id.waferV(), id.cellU(), id.cellV(), false, true);
108  z1 = hgcons_.waferZ(lay, false);
109  ok = true;
110  tolR = 12.0;
111  tolZ = 1.0;
112  } else if (DetId(index).det() == DetId::HGCalHSc) {
114  lay = id.layer();
115  xy = hgcons_.locateCellTrap(lay, id.ietaAbs(), id.iphi(), false);
116  z1 = hgcons_.waferZ(lay, false);
117  ok = true;
118  tolR = 50.0;
119  tolZ = 5.0;
120  }
121  if (ok) {
122  double r1 = std::sqrt(xy.first * xy.first + xy.second * xy.second);
123  double r2 = pos.perp();
124  double z2 = std::abs(pos.z());
125  std::pair<double, double> zrange = hgcons_.rangeZ(false);
126  std::pair<double, double> rrange = hgcons_.rangeR(z2, false);
127  bool match = (std::abs(r1 - r2) < tolR) && (std::abs(z1 - z2) < tolZ);
128  bool inok = ((r2 >= rrange.first) && (r2 <= rrange.second) && (z2 >= zrange.first) && (z2 <= zrange.second));
129  bool outok = ((r1 >= rrange.first) && (r1 <= rrange.second) && (z1 >= zrange.first) && (z1 <= zrange.second));
130  std::string ck = (((r1 < rrange.first - tolR) || (r1 > rrange.second + tolR) || (z1 < zrange.first - tolZ) ||
131  (z1 > zrange.second + tolZ))
132  ? "***** ERROR *****"
133  : "");
134  if (!(match && inok && outok)) {
135  edm::LogVerbatim("HGCSim") << "HGCalNumberingScheme::Detector " << det_ << " Layer " << lay << " R " << r2 << ":"
136  << r1 << ":" << rrange.first << ":" << rrange.second << " Z " << z2 << ":" << z1 << ":"
137  << zrange.first << ":" << zrange.second << " Match " << match << ":" << inok << ":"
138  << outok << " " << ck;
139  edm::LogVerbatim("HGCSim") << "Original " << pos.x() << ":" << pos.y() << " return " << xy.first << ":"
140  << xy.second;
141  if (DetId(index).det() == DetId::HGCalHSi) {
142  double wt = 0, xx = ((pos.z() > 0) ? pos.x() : -pos.x());
143  int waferU, waferV, cellU, cellV, waferType;
144  hgcons_.waferFromPosition(xx, pos.y(), lay, waferU, waferV, cellU, cellV, waferType, wt, true);
145  xy = hgcons_.locateCell(lay, waferU, waferV, cellU, cellV, false, true, true);
146  edm::LogVerbatim("HGCSim") << "HGCalNumberingScheme " << HGCSiliconDetId(index) << " position " << xy.first
147  << ":" << xy.second;
148  }
149  }
150  }
151 }
HGCalGeometryMode::TrapezoidFile
Definition: HGCalGeometryMode.h:33
MessageLogger.h
TkClusParameters_cff.zrange
zrange
Definition: TkClusParameters_cff.py:7
HGCalDDDConstants::waferFromPosition
void waferFromPosition(const double x, const double y, int &wafer, int &icell, int &celltyp) const
Definition: HGCalDDDConstants.cc:1070
HGCalDDDConstants::rangeZ
std::pair< double, double > rangeZ(bool reco) const
Definition: HGCalDDDConstants.cc:992
HGCalDDDConstants::locateCellTrap
std::pair< float, float > locateCellTrap(int lay, int ieta, int iphi, bool reco) const
Definition: HGCalDDDConstants.cc:716
pos
Definition: PixelAliasList.h:18
HGCalDDDConstants::waferZ
double waferZ(int layer, bool reco) const
Definition: HGCalDDDConstants.cc:1388
HGCSiliconDetId.h
HGCalDDDConstants::waferHexagon8
bool waferHexagon8() const
Definition: HGCalDDDConstants.h:129
convertSQLiteXML.ok
bool ok
Definition: convertSQLiteXML.py:98
HGCSiliconDetId
Definition: HGCSiliconDetId.h:22
HGCSiliconDetId::HGCalCoarseThick
Definition: HGCSiliconDetId.h:24
HGCalDDDConstants
Definition: HGCalDDDConstants.h:26
ForwardSubdetector.h
hgc_digi
Definition: HGCDigitizerTypes.h:10
testProducerWithPsetDescEmpty_cfi.z2
z2
Definition: testProducerWithPsetDescEmpty_cfi.py:41
LEDCalibrationChannels.iphi
iphi
Definition: LEDCalibrationChannels.py:64
HGCalTypes::getUnpackedCellV
static int32_t getUnpackedCellV(int id)
Definition: HGCalTypes.cc:34
HGCalNumberingScheme::name_
std::string name_
Definition: HGCalNumberingScheme.h:33
DetId
Definition: DetId.h:17
DetId::HGCalHSi
Definition: DetId.h:33
HGCalNumberingScheme.h
HGCalDDDConstants::waferType
int waferType(DetId const &id, bool fromFile=false) const
Definition: HGCalDDDConstants.cc:1243
HGCalGeometryMode::Trapezoid
Definition: HGCalGeometryMode.h:31
HGCalWaferIndex.h
HGCalNumberingScheme::HGCalNumberingScheme
HGCalNumberingScheme()=delete
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
HGCalDDDConstants::rangeR
std::pair< double, double > rangeR(double z, bool reco) const
Definition: HGCalDDDConstants.cc:947
geometryCSVtoXML.xy
xy
Definition: geometryCSVtoXML.py:19
HGCalTypes::getUnpackedU
static int32_t getUnpackedU(int id)
Definition: HGCalTypes.cc:16
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
HGCalDDDConstants::tileTrapezoid
bool tileTrapezoid() const
Definition: HGCalDDDConstants.h:110
HGCalNumberingScheme::~HGCalNumberingScheme
~HGCalNumberingScheme()
Definition: HGCalNumberingScheme.cc:24
type
type
Definition: SiPixelVCal_PayloadInspector.cc:37
HGCalGeometryMode::Hexagon8Full
Definition: HGCalGeometryMode.h:30
HGCalNumberingScheme::checkPosition
void checkPosition(uint32_t index, const G4ThreeVector &pos) const
Definition: HGCalNumberingScheme.cc:98
gainCalibHelper::gainCalibPI::type
type
Definition: SiPixelGainCalibHelper.h:39
HGCalTypes::getUnpackedV
static int32_t getUnpackedV(int id)
Definition: HGCalTypes.cc:22
match
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10
diffTwoXMLs.r2
r2
Definition: diffTwoXMLs.py:73
HGCalNumberingScheme::hgcons_
const HGCalDDDConstants & hgcons_
Definition: HGCalNumberingScheme.h:30
DetId::Detector
Detector
Definition: DetId.h:24
HGCalDDDConstants::assignCellTrap
std::array< int, 3 > assignCellTrap(float x, float y, float z, int lay, bool reco) const
Definition: HGCalDDDConstants.cc:170
DetId::rawId
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
HGCalTypes::getUnpackedCellU
static int32_t getUnpackedCellU(int id)
Definition: HGCalTypes.cc:32
diffTwoXMLs.r1
r1
Definition: diffTwoXMLs.py:53
HGCScintillatorDetId
Definition: HGCScintillatorDetId.h:23
edm::LogVerbatim
Log< level::Info, true > LogVerbatim
Definition: MessageLogger.h:128
DetId::HGCalHSc
Definition: DetId.h:34
HGCalGeometryMode::Hexagon8File
Definition: HGCalGeometryMode.h:32
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
HGCalWaferIndex::waferIndex
static int32_t waferIndex(int32_t layer, int32_t waferU, int32_t waferV, bool old=false)
Definition: HGCalWaferIndex.cc:17
HGCalGeometryMode::Hexagon8
Definition: HGCalGeometryMode.h:29
AlignmentPI::index
index
Definition: AlignmentPayloadInspectorHelper.h:46
HGCalNumberingScheme::getUnitID
uint32_t getUnitID(int layer, int module, int cell, int iz, const G4ThreeVector &pos, double &wt)
assigns the det id to a hit
Definition: HGCalNumberingScheme.cc:30
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
HGCalDDDConstants::locateCell
std::pair< float, float > locateCell(int cell, int lay, int type, bool reco) const
Definition: HGCalDDDConstants.cc:580
HGCalNumberingScheme::det_
DetId::Detector det_
Definition: HGCalNumberingScheme.h:32
HGCalTypes.h
HGCalNumberingScheme::mode_
const HGCalGeometryMode::GeometryMode mode_
Definition: HGCalNumberingScheme.h:31
TauDecayModes.dec
dec
Definition: TauDecayModes.py:143
geometryCSVtoXML.xx
xx
Definition: geometryCSVtoXML.py:19
HGCalTypes::getUnpackedType
static int32_t getUnpackedType(int id)
Definition: HGCalTypes.cc:14