CMS 3D CMS Logo

HGCalDDDConstants.h
Go to the documentation of this file.
1 #ifndef HGCalCommonData_HGCalDDDConstants_h
2 #define HGCalCommonData_HGCalDDDConstants_h
3 
27 #include <CLHEP/Geometry/Point3D.h>
28 
29 #include <array>
30 #include <memory>
31 #include <string>
32 #include <vector>
33 #include <unordered_map>
34 
36 public:
38  ~HGCalDDDConstants() = default;
39 
40  std::pair<int, int> assignCell(float x, float y, int lay, int subSec, bool reco) const;
41  std::array<int, 5> assignCellHex(float x, float y, int zside, int lay, bool reco, bool extend, bool debug) const;
42  std::array<int, 3> assignCellTrap(float x, float y, float z, int lay, bool reco) const;
43  std::vector<int> calibCells(bool hd, bool full) const {
44  if (hd) {
46  } else {
48  }
49  }
50  double calibCellRad(bool hd) const { return (hd ? hgpar_->calibCellRHD_ : hgpar_->calibCellRLD_); }
51  bool cassetteMode() const {
54  }
55  bool cassetteShiftScintillator(int zside, int layer, int iphi) const;
56  bool cassetteShiftSilicon(int zside, int layer, int waferU, int waferV) const;
57  int cassetteTile(int iphi) const {
59  }
60  std::pair<double, double> cellEtaPhiTrap(int type, int irad) const;
61  bool cellInLayer(int waferU, int waferV, int cellU, int cellV, int lay, int zside, bool reco) const;
62  double cellSizeHex(int type) const;
63  inline std::pair<double, double> cellSizeTrap(int type, int irad) const {
64  return std::make_pair(hgpar_->radiusLayer_[type][irad - 1], hgpar_->radiusLayer_[type][irad]);
65  }
66  double cellThickness(int layer, int waferU, int waferV) const;
67  int32_t cellType(int type, int waferU, int waferV, int iz, int fwdBack, int orient) const;
68  double distFromEdgeHex(double x, double y, double z) const;
69  double distFromEdgeTrap(double x, double y, double z) const;
70  void etaPhiFromPosition(const double x,
71  const double y,
72  const double z,
73  const int layer,
74  int& ieta,
75  int& iphi,
76  int& type,
77  double& wt) const;
78  inline int firstLayer() const { return hgpar_->firstLayer_; }
79  inline HGCalGeometryMode::GeometryMode geomMode() const { return mode_; }
80  int getLayer(double z, bool reco) const;
81  int getLayerOffset() const { return hgpar_->layerOffset_; }
82  HGCalParameters::hgtrap getModule(unsigned int k, bool hexType, bool reco) const;
83  std::vector<HGCalParameters::hgtrap> getModules() const;
84  inline const HGCalParameters* getParameter() const { return hgpar_; }
85  int getPhiBins(int lay) const;
86  std::pair<double, double> getRangeR(int, bool reco) const;
87  std::pair<int, int> getREtaRange(int lay) const;
88  inline const std::vector<double>& getRadiusLayer(int layer) const {
90  }
91  inline HGCalParameters::hgtrform getTrForm(unsigned int k) const { return hgpar_->getTrForm(k); }
92  inline unsigned int getTrFormN() const { return hgpar_->trformIndex_.size(); }
93  std::vector<HGCalParameters::hgtrform> getTrForms() const;
94  int getTypeTrap(int layer) const;
95  int getTypeHex(int layer, int waferU, int waferV) const;
96  std::pair<double, double> getXY(int layer, double x, double y, bool forwd) const;
97  inline int getUVMax(int type) const { return ((type == 0) ? hgpar_->nCellsFine_ : hgpar_->nCellsCoarse_); }
98  double guardRingOffset(bool reco) const;
99  bool isHalfCell(int waferType, int cell) const;
100  bool isValidHex(int lay, int mod, int cell, bool reco) const;
101  bool isValidHex8(int lay, int waferU, int waferV, bool fullAndPart) const;
102  bool isValidHex8(int lay, int modU, int modV, int cellU, int cellV, bool fullAndPart) const;
103  bool isValidTrap(int zside, int lay, int ieta, int iphi) const;
104  int lastLayer(bool reco) const;
105  int layerIndex(int lay, bool reco) const;
106  unsigned int layers(bool reco) const;
107  unsigned int layersInit(bool reco) const;
108  inline int layerType(int lay) const {
110  }
111  std::pair<float, float> localToGlobal8(
112  int zside, int lay, int waferU, int waferV, double localX, double localY, bool reco, bool debug) const;
113  std::pair<float, float> locateCell(int cell, int lay, int type, bool reco) const;
114  std::pair<float, float> locateCell(
115  int zside, int lay, int waferU, int waferV, int cellU, int cellV, bool reco, bool all, bool norot, bool debug)
116  const;
117  std::pair<float, float> locateCell(const HGCSiliconDetId&, bool debug) const;
118  std::pair<float, float> locateCell(const HGCScintillatorDetId&, bool debug) const;
119  std::pair<float, float> locateCellHex(int cell, int wafer, bool reco) const;
120  std::pair<float, float> locateCellTrap(int zside, int lay, int ieta, int iphi, bool reco, bool debug) const;
121  inline int levelTop(int ind = 0) const { return hgpar_->levelT_[ind]; }
122  bool maskCell(const DetId& id, int corners) const;
123  inline int maxCellUV() const { return (tileTrapezoid() ? hgpar_->nCellsFine_ : 2 * hgpar_->nCellsFine_); }
124  int maxCells(bool reco) const;
125  int maxCells(int lay, bool reco) const;
126  inline int maxModules() const { return modHalf_; }
127  inline int maxModulesPerLayer() const { return maxWafersPerLayer_; }
128  int maxRows(int lay, bool reco) const;
129  inline double minSlope() const { return hgpar_->slopeMin_[0]; }
130  int modifyUV(int uv, int type1, int type2) const;
131  int modules(int lay, bool reco) const;
132  int modulesInit(int lay, bool reco) const;
133  double mouseBite(bool reco) const;
134  int numberCells(bool reco) const;
135  std::vector<int> numberCells(int lay, bool reco) const;
136  int numberCellsHexagon(int wafer) const;
137  int numberCellsHexagon(int lay, int waferU, int waferV, bool flag) const;
138  std::pair<double, double> rangeR(double z, bool reco) const;
139  std::pair<double, double> rangeRLayer(int lay, bool reco) const;
140  std::pair<double, double> rangeZ(bool reco) const;
141  std::pair<int, int> rowColumnWafer(const int wafer) const;
142  inline int sectors() const { return hgpar_->nSectors_; }
143  double sensorSizeOffset(bool reco) const;
144  std::pair<int, int> simToReco(int cell, int layer, int mod, bool half) const;
145  int tileCount(int layer, int ring) const;
146  bool tileExist(int zside, int layer, int ring, int phi) const;
147  HGCalParameters::tileInfo tileInfo(int zside, int layer, int ring) const;
148  bool tilePhiEdge(double phi, int layer, int iphi) const;
149  bool tileRingEdge(double rho, int layer, int ring) const;
150  std::pair<int, int> tileRings(int layer) const;
151  inline int tileSiPM(int sipm) const { return ((sipm > 0) ? HGCalTypes::SiPMSmall : HGCalTypes::SiPMLarge); }
152  bool tileTrapezoid() const {
155  }
156  std::pair<int, int> tileType(int layer, int ring, int phi) const;
157  inline bool trapezoidFile() const {
160  }
161  inline bool v17OrLess() const { return (mode_ < HGCalGeometryMode::Hexagon8CalibCell); }
162  inline unsigned int volumes() const { return hgpar_->moduleLayR_.size(); }
163  int waferFromCopy(int copy) const;
164  void waferFromPosition(const double x, const double y, int& wafer, int& icell, int& celltyp) const;
165  void waferFromPosition(const double x,
166  const double y,
167  const int zside,
168  const int layer,
169  int& waferU,
170  int& waferV,
171  int& cellU,
172  int& cellV,
173  int& celltype,
174  double& wt,
175  bool extend,
176  bool debug) const;
177  inline bool waferHexagon6() const {
179  }
180  inline bool waferHexagon8() const {
184  }
185  inline bool waferHexagon8File() const {
188  }
189  inline bool waferHexagon8Module() const {
192  }
193  bool waferInLayer(int wafer, int lay, bool reco) const;
194  bool waferFullInLayer(int wafer, int lay, bool reco) const;
195  inline int waferCount(const int type) const { return ((type == 0) ? waferMax_[2] : waferMax_[3]); }
196  HGCalParameters::waferInfo waferInfo(int lay, int waferU, int waferV) const;
197  inline int waferMax() const { return waferMax_[1]; }
198  inline int waferMin() const { return waferMax_[0]; }
199  std::pair<double, double> waferParameters(bool reco) const;
200  std::pair<double, double> waferPosition(int wafer, bool reco) const;
201  std::pair<double, double> waferPosition(int lay, int waferU, int waferV, bool reco, bool debug) const;
202  inline unsigned int waferFileSize() const { return hgpar_->waferInfoMap_.size(); }
203  int waferFileIndex(unsigned int kk) const;
204  std::tuple<int, int, int, int> waferFileInfo(unsigned int kk) const;
205  std::tuple<int, int, int, int> waferFileInfoFromIndex(int kk) const;
206  inline bool waferFileInfoExist(int kk) const {
207  return (hgpar_->waferInfoMap_.find(kk) != hgpar_->waferInfoMap_.end());
208  }
210  HepGeom::Point3D<float>& loc, const DetId& id, bool useWafer, bool reco, bool debug) const;
211  inline double waferSepar(bool reco) const {
213  }
214  inline double waferSize(bool reco) const {
216  }
217  int wafers() const;
218  int wafers(int layer, int type) const;
219  inline int waferToCopy(int wafer) const {
220  return ((wafer >= 0) && (wafer < static_cast<int>(hgpar_->waferCopy_.size())))
221  ? hgpar_->waferCopy_[wafer]
222  : static_cast<int>(hgpar_->waferCopy_.size());
223  }
224  // wafer transverse thickness classification (2 = coarse, 1 = fine)
225  inline int waferTypeT(int wafer) const {
226  return ((wafer >= 0) && (wafer < static_cast<int>(hgpar_->waferTypeT_.size()))) ? hgpar_->waferTypeT_[wafer] : 0;
227  }
228  // wafer longitudinal thickness classification (1 = 100um, 2 = 200um, 3=300um)
229  inline int waferTypeL(int wafer) const {
230  return ((wafer >= 0) && (wafer < static_cast<int>(hgpar_->waferTypeL_.size()))) ? hgpar_->waferTypeL_[wafer] : 0;
231  }
232  int waferType(DetId const& id, bool fromFile) const;
233  int waferType(int layer, int waferU, int waferV, bool fromFile) const;
234  std::tuple<int, int, int> waferType(HGCSiliconDetId const& id, bool fromFile) const;
235  std::pair<int, int> waferTypeRotation(int layer, int waferU, int waferV, bool fromFile, bool debug) const;
236  inline int waferUVMax() const { return hgpar_->waferUVMax_; }
237  bool waferVirtual(int layer, int waferU, int waferV) const;
238  double waferZ(int layer, bool reco) const;
239 
240 private:
241  int cellHex(double xx,
242  double yy,
243  const double& cellR,
244  const std::vector<double>& posX,
245  const std::vector<double>& posY) const;
246  void cellHex(
247  double xloc, double yloc, int cellType, int place, int part, int& cellU, int& cellV, bool extend, bool debug)
248  const;
249  std::pair<int, float> getIndex(int lay, bool reco) const;
250  int layerFromIndex(int index, bool reco) const;
251  bool isValidCell(int layindex, int wafer, int cell) const;
252  bool isValidCell8(int lay, int waferU, int waferV, int cellU, int cellV, int type) const;
253  int32_t waferIndex(int wafer, int index) const;
254  bool waferInLayerTest(int wafer, int lay, bool full) const;
255  std::pair<double, double> waferPositionNoRot(int lay, int waferU, int waferV, bool reco, bool debug) const;
256  std::pair<double, double> waferPosition(int waferU, int waferV, bool reco) const;
257 
259  std::unique_ptr<HGCalCell> hgcell_;
260  std::unique_ptr<HGCalCellUV> hgcellUV_;
262  constexpr static double k_horizontalShift = 1.0;
263  constexpr static float dPhiMin = 0.02;
264  typedef std::array<std::vector<int32_t>, 2> Simrecovecs;
265  typedef std::array<int, 3> HGCWaferParam;
267  constexpr static double tan30deg_ = 0.5773502693;
268  constexpr static double tol_ = 0.001;
269  const double sqrt3_;
271  const bool fullAndPart_;
272  double rmax_, hexside_;
273  double rmaxT_, hexsideT_;
275  std::array<uint32_t, 2> tot_layers_;
278  std::map<int, HGCWaferParam> waferLayer_;
279  std::array<int, 4> waferMax_;
280  std::unordered_map<int32_t, bool> waferIn_;
281 };
282 
283 #endif
bool maskCell(const DetId &id, int corners) const
std::pair< double, double > rangeRLayer(int lay, bool reco) const
double waferZ(int layer, bool reco) const
static constexpr double tol_
void waferFromPosition(const double x, const double y, int &wafer, int &icell, int &celltyp) const
std::pair< double, double > rangeZ(bool reco) const
std::pair< int, int > tileRings(int layer) const
unsigned int layersInit(bool reco) const
static constexpr int32_t WaferCenter
Definition: HGCalTypes.h:21
int waferToCopy(int wafer) const
bool isValidCell(int layindex, int wafer, int cell) const
std::pair< double, double > cellSizeTrap(int type, int irad) const
int getPhiBins(int lay) const
HGCalCassette hgcassette_
bool cassetteShiftScintillator(int zside, int layer, int iphi) const
std::pair< double, double > cellEtaPhiTrap(int type, int irad) const
unsigned int volumes() const
int scintType(const int layer) const
const HGCalParameters * getParameter() const
def all(container)
workaround iterator generators for ROOT classes
Definition: cmstools.py:25
bool waferInLayerTest(int wafer, int lay, bool full) const
std::pair< double, double > waferParameters(bool reco) const
std::vector< int > moduleLayR_
bool waferFullInLayer(int wafer, int lay, bool reco) const
double distFromEdgeTrap(double x, double y, double z) const
std::unique_ptr< HGCalCellUV > hgcellUV_
Simrecovecs max_modules_layer_
HGCalParameters::hgtrap getModule(unsigned int k, bool hexType, bool reco) const
std::array< std::vector< int32_t >, 2 > Simrecovecs
int32_t waferU(const int32_t index)
HGCalParameters::waferInfo waferInfo(int lay, int waferU, int waferV) const
bool trapezoidFile() const
bool isValidHex(int lay, int mod, int cell, bool reco) const
bool tileRingEdge(double rho, int layer, int ring) const
int getLayerOffset() const
std::pair< int, int > getREtaRange(int lay) const
int lastLayer(bool reco) const
int waferTypeT(int wafer) const
std::pair< double, double > getXY(int layer, double x, double y, bool forwd) const
bool waferHexagon8() const
std::pair< int, int > waferTypeRotation(int layer, int waferU, int waferV, bool fromFile, bool debug) const
int modulesInit(int lay, bool reco) const
std::unordered_map< int32_t, bool > waferIn_
int zside(DetId const &)
int layerFromIndex(int index, bool reco) const
int firstLayer() const
std::vector< uint32_t > trformIndex_
HGCalGeometryMode::GeometryMode geomMode() const
int32_t cellType(int type, int waferU, int waferV, int iz, int fwdBack, int orient) const
bool waferHexagon6() const
bool isValidHex8(int lay, int waferU, int waferV, bool fullAndPart) const
const std::vector< double > & getRadiusLayer(int layer) const
~HGCalDDDConstants()=default
hgtrform getTrForm(unsigned int k) const
bool v17OrLess() const
std::pair< double, double > getRangeR(int, bool reco) const
HGCalGeomTools geomTools_
bool waferInLayer(int wafer, int lay, bool reco) const
HGCalParameters::tileInfo tileInfo(int zside, int layer, int ring) const
std::map< int, HGCWaferParam > waferLayer_
unsigned int waferFileSize() const
std::unique_ptr< HGCalCell > hgcell_
int getTypeHex(int layer, int waferU, int waferV) const
bool isHalfCell(int waferType, int cell) const
int maxCells(bool reco) const
bool waferFileInfoExist(int kk) const
std::tuple< int, int, int, int > waferFileInfoFromIndex(int kk) const
std::tuple< int, int, int, int > waferFileInfo(unsigned int kk) const
std::array< int, 5 > assignCellHex(float x, float y, int zside, int lay, bool reco, bool extend, bool debug) const
int waferFileIndex(unsigned int kk) const
int maxModulesPerLayer() const
HGCalDDDConstants(const HGCalParameters *hp, const std::string &name)
int layerIndex(int lay, bool reco) const
Definition: GenABIO.cc:168
bool cellInLayer(int waferU, int waferV, int cellU, int cellV, int lay, int zside, bool reco) const
int getUVMax(int type) const
bool isValidCell8(int lay, int waferU, int waferV, int cellU, int cellV, int type) const
std::pair< int, int > simToReco(int cell, int layer, int mod, bool half) const
std::pair< int, float > getIndex(int lay, bool reco) const
int tileSiPM(int sipm) const
bool isValidTrap(int zside, int lay, int ieta, int iphi) const
bool waferVirtual(int layer, int waferU, int waferV) const
int tileCount(int layer, int ring) const
std::pair< int, int > assignCell(float x, float y, int lay, int subSec, bool reco) const
std::vector< int > calibCellPartHD_
std::vector< HGCalParameters::hgtrap > getModules() const
double mouseBite(bool reco) const
unsigned int layers(bool reco) const
bool tileTrapezoid() const
std::pair< int, int > tileType(int layer, int ring, int phi) const
bool tilePhiEdge(double phi, int layer, int iphi) const
std::pair< float, float > locateCellTrap(int zside, int lay, int ieta, int iphi, bool reco, bool debug) const
int getTypeTrap(int layer) const
int32_t tileCassette(int32_t, int32_t, int32_t, int32_t)
bool waferHexagon8Module() const
double cellSizeHex(int type) const
std::vector< int > calibCellFullHD_
std::vector< int > layerType_
std::pair< double, double > rangeR(double z, bool reco) const
std::pair< double, double > waferPosition(int wafer, bool reco) const
void etaPhiFromPosition(const double x, const double y, const double z, const int layer, int &ieta, int &iphi, int &type, double &wt) const
std::vector< double > slopeMin_
Definition: DetId.h:17
std::array< int, 4 > waferMax_
static constexpr double k_ScaleToDDD
int numberCellsHexagon(int wafer) const
std::array< int, 3 > assignCellTrap(float x, float y, float z, int lay, bool reco) const
#define debug
Definition: HDRShower.cc:19
bool tileExist(int zside, int layer, int ring, int phi) const
double minSlope() const
GlobalPoint waferLocal2Global(HepGeom::Point3D< float > &loc, const DetId &id, bool useWafer, bool reco, bool debug) const
int numberCells(bool reco) const
part
Definition: HCALResponse.h:20
std::pair< float, float > locateCellHex(int cell, int wafer, bool reco) const
double cellThickness(int layer, int waferU, int waferV) const
int waferType(DetId const &id, bool fromFile) const
std::pair< int, int > rowColumnWafer(const int wafer) const
unsigned int getTrFormN() const
HGCalParameters::hgtrform getTrForm(unsigned int k) const
std::pair< float, float > locateCell(int cell, int lay, int type, bool reco) const
bool waferHexagon8File() const
int maxRows(int lay, bool reco) const
const HGCalGeometryMode::GeometryMode mode_
int32_t waferIndex(int wafer, int index) const
std::vector< HGCalParameters::hgtrform > getTrForms() const
double waferSepar(bool reco) const
fixed size matrix
int getLayer(double z, bool reco) const
bool cassetteShiftSilicon(int zside, int layer, int waferU, int waferV) const
static constexpr float dPhiMin
std::vector< int > calibCells(bool hd, bool full) const
std::array< int, 3 > HGCWaferParam
bool cassetteMode() const
int32_t waferV(const int32_t index)
int waferTypeL(int wafer) const
std::vector< int > waferCopy_
static constexpr double tan30deg_
double guardRingOffset(bool reco) const
std::vector< int > calibCellPartLD_
int cassetteTile(int iphi) const
double sensorSizeOffset(bool reco) const
std::vector< double > radiusLayer_[2]
std::array< uint32_t, 2 > tot_layers_
std::vector< int > waferTypeT_
int modules(int lay, bool reco) const
double calibCellRad(bool hd) const
std::vector< int > levelT_
int modifyUV(int uv, int type1, int type2) const
waferInfo_map waferInfoMap_
std::pair< float, float > localToGlobal8(int zside, int lay, int waferU, int waferV, double localX, double localY, bool reco, bool debug) const
const HGCalParameters * hgpar_
int levelTop(int ind=0) const
T mod(const T &a, const T &b)
Definition: ecalDccMap.h:4
int cellHex(double xx, double yy, const double &cellR, const std::vector< double > &posX, const std::vector< double > &posY) const
std::vector< int > waferTypeL_
std::pair< double, double > waferPositionNoRot(int lay, int waferU, int waferV, bool reco, bool debug) const
static constexpr double k_horizontalShift
double waferSize(bool reco) const
double distFromEdgeHex(double x, double y, double z) const
int layerType(int lay) const
int waferFromCopy(int copy) const
std::vector< int > calibCellFullLD_
int waferCount(const int type) const