|
|
Go to the documentation of this file.
42 for (
int simreco = 0; simreco < 2; ++simreco) {
45 for (
unsigned int layer = 1; layer <=
tot_layers_[simreco]; ++layer) {
73 int wminT(9999999), wmaxT(-9999999), kount1(0), kount2(0);
76 int wmin(9999999),
wmax(-9999999), kount(0);
77 for (
int wafer = 0; wafer <
sectors(); ++wafer) {
104 int lay1 =
getIndex(lay0,
true).first;
105 edm::LogVerbatim(
"HGCalGeom") <<
"Index " <<
i <<
" Layer " << lay0 <<
":" << lay1 <<
" Wafer " <<
wmin <<
":"
106 <<
wmax <<
":" << kount;
111 waferMax_ = std::array<int, 4>{{wminT, wmaxT, kount1, kount2}};
113 edm::LogVerbatim(
"HGCalGeom") <<
"Overall wafer statistics: " << wminT <<
":" << wmaxT <<
":" << kount1 <<
":"
124 return std::make_pair(-1, -1);
134 <<
" ***** ERROR *****";
135 return std::make_pair(-1, -1);
141 return std::make_pair(wafer,
148 return std::make_pair(wafer,
156 return std::make_pair(-1, -1);
161 int waferU(0), waferV(0),
waferType(-1), cellU(0), cellV(0);
168 return std::array<int, 5>{{waferU, waferV,
waferType, cellU, cellV}};
175 return std::array<int, 3>{{irad,
iphi,
type}};
176 double xx = (
z > 0) ?
x : -
x;
178 double phi = (
r == 0. ? 0. : std::atan2(
y,
xx));
187 edm::LogVerbatim(
"HGCalGeom") <<
"assignCellTrap Input " <<
x <<
":" <<
y <<
":" <<
z <<
":" << layer <<
":" <<
reco
188 <<
" x|r " <<
xx <<
":" <<
r <<
" phi " <<
phi <<
" o/p " << irad <<
":" <<
iphi <<
":"
191 return std::array<int, 3>{{irad,
iphi,
type}};
201 return std::make_pair(
dr, df);
205 const auto& indx =
getIndex(lay,
true);
206 if (indx.first >= 0) {
210 ?
locateCell(lay, waferU, waferV, cellU, cellV,
reco,
true,
false)
212 double rpos =
sqrt(
xy.first *
xy.first +
xy.second *
xy.second);
213 return ((rpos >=
hgpar_->
rMinLayHex_[indx.first]) && (rpos <= hgpar_->rMaxLayHex_[indx.first]));
229 thick = 100.0 * (
type + 1);
238 : ((
type == 1) ? 1 : 0));
252 else if (cellV - cellU ==
N - 1)
256 }
else if (cellV == 0) {
257 if (cellU - cellV ==
N)
261 }
else if (cellU - cellV ==
N) {
262 if (cellU == 2 *
N - 1)
266 }
else if (cellU == 2 *
N - 1) {
267 if (cellV == 2 *
N - 1)
271 }
else if (cellV == 2 *
N - 1) {
272 if (cellV - cellU ==
N - 1)
276 }
else if (cellV - cellU ==
N - 1) {
278 }
else if ((cellU > 2 *
N - 1) || (cellV > 2 *
N - 1) || (cellV >= (cellU +
N)) || (cellU > (cellV +
N))) {
302 for (
int k = 0;
k < sizew; ++
k) {
324 edm::LogVerbatim(
"HGCalGeom") <<
"DistFromEdgeHex: Local " <<
xx <<
":" <<
yy <<
" wafer " << wafer <<
" flag "
335 double xx = (
z < 0) ? -
x :
x;
338 double phi = (
r == 0. ? 0. : std::atan2(
y,
xx));
352 edm::LogVerbatim(
"HGCalGeom") <<
"DistFromEdgeTrap: Global " <<
x <<
":" <<
y <<
":" <<
z <<
" Layer " << lay
353 <<
" Index " << indx <<
":" <<
type <<
" xx " <<
xx <<
" R " <<
r <<
":" << irad <<
":"
355 <<
" Phi " <<
phi <<
":" <<
iphi <<
":" << (
iphi - 0.5) * cell <<
" cell " << cell
356 <<
" Dphi " << dphi <<
" Dist " << dist <<
":" <<
r * dphi;
366 auto itr = std::find_if(zLayerHex.begin() + 1, zLayerHex.end(), [&
k, &
zz, &zLayerHex](
double zLayer) {
368 return zz < 0.5 * (zLayerHex[
k - 1] + zLayerHex[
k]);
370 int lay = (
itr == zLayerHex.end()) ? static_cast<int>(zLayerHex.size()) :
k;
387 <<
" ***** ERROR *****";
398 std::vector<HGCalParameters::hgtrap> mytrs;
409 int irmin(0), irmax(0);
417 return std::make_pair(irmin, irmax);
421 std::vector<HGCalParameters::hgtrform> mytrs;
454 bool result(
false), resultMod(
false);
460 const int32_t lay_idx =
reco ? (lay - 1) * 3 + 1 : lay;
462 auto moditr = the_modules.find(copyNumber);
463 result = resultMod = (moditr != the_modules.end());
466 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants: Layer " << lay <<
":" << lay_idx <<
" Copy " << copyNumber
470 if (moditr->second >= 0) {
472 edm::LogWarning(
"HGCalGeom") <<
"Module no. out of bound for " <<
mod <<
" to be compared with "
476 result = (cell >= 0 && cell <= cellmax);
487 << (lay > 0 && (lay <= (
int)(
layers(
reco)))) <<
" Module " <<
mod <<
":" << resultMod
488 <<
" Cell " << cell <<
":" << cellmax <<
":" << (cell >= 0 && cell <= cellmax) <<
":"
499 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants::isValidHex8:WaferType " << layer <<
":" << modU <<
":" << modV
506 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants::isValidHex8:WaferIn " << jtr->first <<
":" << jtr->second;
535 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants::isValidHex8:Cell " << cellU <<
":" << cellV <<
":" <<
N
536 <<
" Tests " << (cellU >= 0) <<
":" << (cellU < 2 *
N) <<
":" << (cellV >= 0) <<
":"
537 << (cellV < 2 *
N) <<
":" << ((cellV - cellU) <
N) <<
":" << ((cellU - cellV) <=
N);
539 if ((cellU < 0) || (cellU >= 2 *
N) || (cellV < 0) || (cellV >= 2 *
N))
541 if (((cellV - cellU) >=
N) || ((cellU - cellV) >
N))
549 const auto& indx =
getIndex(layer,
true);
552 return ((irad >=
hgpar_->
iradMinBH_[indx.first]) && (irad <= hgpar_->iradMaxBH_[indx.first]) && (
iphi > 0) &&
553 (iphi <= hgpar_->scintCells(layer)));
579 float x(999999.),
y(999999.);
583 return std::make_pair(
x,
y);
598 edm::LogVerbatim(
"HGCalGeom") <<
"LocateCell (Wafer) " << x0 <<
":" << y0 <<
" Final " <<
x <<
":" <<
y;
605 return std::make_pair(
x,
y);
609 int lay,
int waferU,
int waferV,
int cellU,
int cellV,
bool reco,
bool all,
bool debug)
const {
616 edm::LogVerbatim(
"HGCalGeom") <<
"LocateCell " << lay <<
":" << waferU <<
":" << waferV <<
":" << indx <<
":"
619 int kndx = cellV * 100 + cellU;
628 edm::LogVerbatim(
"HGCalGeom") <<
"Fine " << cellU <<
":" << cellV <<
":" << kndx <<
":" <<
x <<
":" <<
y <<
":"
639 edm::LogVerbatim(
"HGCalGeom") <<
"Coarse " << cellU <<
":" << cellV <<
":" << kndx <<
":" <<
x <<
":" <<
y <<
":"
656 return std::make_pair(
x,
y);
666 double xpos = xyoff.first + ((-2 *
id.waferU() +
id.waferV()) *
r);
667 double ypos = xyoff.second + (1.5 *
id.waferV() *
R);
670 edm::LogVerbatim(
"HGCalGeom") <<
"LocateCell " <<
id <<
" Lay " << lay <<
" r:R " <<
r <<
":" <<
R <<
" N "
671 << ncells <<
":" << n2 <<
" Off " << xyoff.first <<
":" << xyoff.second <<
" Pos "
672 << xpos <<
":" << ypos;
676 xpos += ((1.5 * (
id.cellV() - ncells) + 1.0) * R1);
677 ypos += ((
id.cellU() - 0.5 *
id.cellV() - n2) * 2 *
r1);
681 << ((1.5 * (
id.cellV() - ncells) + 1.0) * R1) <<
":"
682 << ((
id.cellU() - 0.5 *
id.cellV() - n2) * 2 *
r1) <<
" Pos " << xpos <<
":" << ypos;
684 return std::make_pair(xpos *
id.
zside(), ypos);
700 return std::make_pair(
x,
y);
706 if (indx.first >= 0) {
709 double phi = (
iphi - 0.5) * indx.second;
717 <<
z <<
" phi " <<
phi <<
" R " <<
r <<
":" <<
range.first <<
":" <<
range.second;
729 return std::make_pair(
x,
y);
736 int N(0), layer(0), waferU(0), waferV(0), u(0),
v(0);
741 waferU =
id.waferU();
742 waferV =
id.waferV();
749 waferU =
id.waferU();
750 waferV =
id.waferV();
757 edm::LogVerbatim(
"HGCalGeom") <<
"MaskCell: Layer " << layer <<
" Wafer " << waferU <<
":" << waferV <<
" Index "
787 unsigned int cells(0);
839 return (((type1 == type2) || (type1 * type2 != 0)) ? uv : ((type1 == 0) ? (2 * uv + 1) / 3 : (3 * uv) / 2));
872 for (
unsigned k = 0;
k < nlayer; ++
k) {
874 cells = std::accumulate(ncells.begin(), ncells.end(),
cells);
882 std::vector<int> ncell;
890 ncell.emplace_back((
int)(cell));
896 ncell.emplace_back(
nphi);
904 ncell.emplace_back(cell);
935 double rmin(0), rmax(0),
zz(0);
956 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants:rangeR: " <<
z <<
":" <<
zz <<
" R " << rmin <<
":" << rmax;
958 return std::make_pair(rmin, rmax);
962 double rmin(0), rmax(0);
973 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants:rangeR: " << lay <<
":" <<
index.first <<
" R " << rmin <<
":"
976 return std::make_pair(rmin, rmax);
997 if ((
copy / 10000) % 10 != 0)
999 row = (
copy / 100) % 100;
1000 if ((
copy / 100000) % 10 != 0)
1003 return std::make_pair(row,
col);
1008 return std::make_pair(cell, lay);
1013 edm::LogWarning(
"HGCalGeom") <<
"Wrong Layer # " << lay <<
" not in the list ***** ERROR *****";
1014 return std::make_pair(-1, -1);
1018 <<
" ***** ERROR *****";
1019 return std::make_pair(-1, -1);
1026 }
else if (
type == 2) {
1031 return std::make_pair(kx,
depth);
1039 for (
int k = 0;
k < ncopies; ++
k) {
1049 edm::LogVerbatim(
"HGCalGeom") <<
"Cannot find " <<
copy <<
" in a list of " << ncopies <<
" members";
1050 for (
int k = 0;
k < ncopies; ++
k)
1066 for (
int k = 0;
k < size_; ++
k) {
1079 if (wafer < size_) {
1092 edm::LogWarning(
"HGCalGeom") <<
"Cannot get wafer type corresponding to " <<
x <<
":" <<
y <<
" " <<
xx <<
":"
1097 edm::LogVerbatim(
"HGCalGeom") <<
"Position " <<
x <<
":" <<
y <<
" Wafer " << wafer <<
":" << size_ <<
" XX " <<
xx
1098 <<
":" <<
yy <<
" Cell " << icell <<
" Type " << celltyp;
1128 edm::LogVerbatim(
"HGCalGeom") <<
"WaferFromPosition:: Input " << layer <<
":" << ll <<
":"
1133 <<
" comparator " <<
rmax_ <<
":" <<
hexside_ <<
" wafer " << waferU <<
":"
1134 << waferV <<
":" << celltype;
1154 edm::LogVerbatim(
"HGCalGeom") <<
"waferFromPosition: Bad type for X " <<
x <<
":" <<
x1 <<
":" <<
xx <<
" Y " <<
y
1155 <<
":" <<
y1 <<
":" <<
yy <<
" Wafer " << waferU <<
":" << waferV <<
" Cell " << cellU
1191 double xx(0),
yy(0);
1200 return std::make_pair(
xx,
yy);
1204 int lay,
int waferU,
int waferV,
bool reco,
bool debug)
const {
1225 return std::make_pair(
x,
y);
1232 int layer(0), waferU(0), waferV(0);
1235 layer = hid.
layer();
1240 layer = hid.
layer();
1277 int type(-1),
part(-1), orient(-1);
1283 orient = (
itr->second).orient;
1311 return std::make_tuple(
type,
part, orient);
1315 int layer,
int waferU,
int waferV,
bool fromFile,
bool debug)
const {
1322 rotn = (
itr->second).orient;
1348 edm::LogVerbatim(
"HGCalGeom") <<
"waferTypeRotation: Layer " << layer <<
" Wafer " << waferU <<
":" << waferV
1349 <<
" Index " << std::hex <<
wl <<
std::dec <<
":"
1352 return std::make_pair(
type, rotn);
1369 if (
index.first < 0)
1378 for (
unsigned int i = 0;
i <
layers(
true); ++
i) {
1394 wafer = (
itr->second)[ity];
1404 double xx,
double yy,
const double& cellR,
const std::vector<double>&
posX,
const std::vector<double>&
posY)
const {
1406 const double tol(0.00001);
1408 for (
unsigned int k = 0;
k <
posX.size(); ++
k) {
1411 if (
dx <= (cellR + tol) &&
dy <= (cellY + tol)) {
1412 double xmax = (
dy <= 0.5 * cellY) ? cellR : (cellR - (
dy - 0.5 * cellY) /
tan30deg_);
1413 if (
dx <= (
xmax + tol)) {
1424 double Rc = 2 *
rmax_ / (3 *
N);
1425 double rc = 0.5 * Rc *
sqrt3_;
1426 double v0 = ((xloc / Rc - 1.0) / 1.5);
1427 int cv0 = (
v0 > 0) ? (
N + (
int)(
v0 + 0.5)) : (
N - (
int)(-
v0 + 0.5));
1428 double u0 = (0.5 * yloc / rc + 0.5 * cv0);
1429 int cu0 = (u0 > 0) ? (
N / 2 + (
int)(u0 + 0.5)) : (
N / 2 - (
int)(-u0 + 0.5));
1436 edm::LogVerbatim(
"HGCalGeom") <<
"cellHex: input " << xloc <<
":" << yloc <<
":" <<
cellType <<
" parameter " << rc
1437 <<
":" << Rc <<
" u0 " << u0 <<
":" << cu0 <<
" v0 " <<
v0 <<
":" << cv0;
1440 static const int shift[3] = {0, 1, -1};
1441 for (
int i1 = 0;
i1 < 3; ++
i1) {
1443 for (
int i2 = 0;
i2 < 3; ++
i2) {
1445 if (((cellV - cellU) <
N) && ((cellU - cellV) <=
N) && (cellU >= 0) && (cellV >= 0) && (cellU < 2 *
N) &&
1447 double xc = (1.5 * (cellV -
N) + 1.0) * Rc;
1448 double yc = (2 * cellU - cellV -
N) * rc;
1454 <<
"cellHex: local " << xc <<
":" << yc <<
" difference " <<
std::abs(xloc - xc) <<
":"
1456 << Rc <<
" (u,v) = (" << cellU <<
"," << cellV <<
")";
1475 return std::make_pair(-1, 0);
1486 return std::make_pair(indx, cell);
1506 edm::LogVerbatim(
"HGCalGeom") <<
"Input " << lay <<
":" << wafer <<
":" << cell <<
" Position " <<
x <<
":" <<
y
1515 int kndx = cellV * 100 + cellU;
1523 edm::LogVerbatim(
"HGCalGeom") <<
"Fine " << cellU <<
":" << cellV <<
":" << kndx <<
":" <<
x <<
":" <<
y <<
":"
1533 edm::LogVerbatim(
"HGCalGeom") <<
"Coarse " << cellU <<
":" << cellV <<
":" << kndx <<
":" <<
x <<
":" <<
y <<
":"
1541 edm::LogVerbatim(
"HGCalGeom") <<
"With wafer (" << waferU <<
"," << waferV <<
") " <<
x <<
":" <<
y;
1547 edm::LogVerbatim(
"HGCalGeom") <<
"Input " << lay <<
":" << ll <<
":" << waferU <<
":" << waferV <<
":" << cellU <<
":"
1548 << cellV <<
" Position " <<
x <<
":" <<
y <<
":" <<
rr <<
" Compare Limits "
1565 edm::LogVerbatim(
"HGCalGeom") <<
"WaferInLayerTest: Layer " << lay <<
" wafer " << wafer <<
" R-limits "
1573 double xx(0),
yy(0);
1584 return std::make_pair(
xx,
yy);
static int32_t waferV(const int32_t index)
std::vector< bool > cellCoarseHalf_
constexpr static double tan30deg_
std::vector< double > moduleCellS_
void waferFromPosition(const double x, const double y, int &wafer, int &icell, int &celltyp) const
int32_t maxWafersPerLayer_
static bool goodCell(int u, int v, int N, int type, int rotn)
int cellHex(double xx, double yy, const double &cellR, const std::vector< double > &posX, const std::vector< double > &posY) const
std::pair< double, double > rangeZ(bool reco) const
int modulesInit(int lay, bool reco) const
std::vector< double > zLayerHex_
std::unordered_map< int32_t, bool > waferIn_
bool isValidCell(int layindex, int wafer, int cell) const
std::vector< double > moduleCellR_
std::vector< double > zFrontMin_
std::pair< float, float > locateCellTrap(int lay, int ieta, int iphi, bool reco) const
hgtrap getModule(unsigned int k, bool reco) const
bool isValidHex(int lay, int mod, int cell, bool reco) const
std::vector< double > rMaxLayHex_
std::vector< double > cellFineY_
int layer() const
get the layer #
std::pair< double, double > cellEtaPhiTrap(int type, int irad) const
constexpr Detector det() const
get the detector field from this detid
T mod(const T &a, const T &b)
std::pair< double, double > rangeRLayer(int lay, bool reco) const
double waferZ(int layer, bool reco) const
std::pair< int, int > getREtaRange(int lay) const
static constexpr uint32_t k_CornerSize
std::vector< double > slopeTop_
bool waferFullInLayer(int wafer, int lay, bool reco) const
std::vector< int > layerIndex_
double distFromEdgeTrap(double x, double y, double z) const
std::vector< double > yLayerHex_
double scintCellSize(const int layer) const
U second(std::pair< T, U > const &p)
wafer_map wafersInLayers_
static constexpr int32_t WaferCornerMin
std::array< int, 5 > assignCellHex(float x, float y, int lay, bool reco) const
int getPhiBins(int lay) const
std::vector< int > moduleLayR_
int getTypeHex(int layer, int waferU, int waferV) const
bool isHalfCell(int waferType, int cell) const
std::vector< int > waferUVMaxLayer_
std::vector< int > iradMaxBH_
std::pair< double, double > waferParameters(bool reco) const
int lastLayer(bool reco) const
Simrecovecs max_modules_layer_
HGCalGeomTools geomTools_
std::vector< double > waferPosY_
Sin< T >::type sin(const T &t)
std::pair< int, int > waferTypeRotation(int layer, int waferU, int waferV, bool fromFile=false, bool debug=false) const
bool isValidHex8(int lay, int waferU, int waferV, bool fullAndPart=false) const
int waferType(DetId const &id, bool fromFile=false) const
std::vector< uint32_t > trformIndex_
std::pair< int, int > simToReco(int cell, int layer, int mod, bool half) const
bool isValidCell8(int lay, int waferU, int waferV, int cellU, int cellV, int type) const
Cos< T >::type cos(const T &t)
HGCalGeometryMode::GeometryMode mode_
std::vector< double > radiusLayer_[2]
std::vector< bool > cellFineHalf_
int maxCells(bool reco) const
std::vector< int > layerGroup_
std::vector< double > radiusMixBoundary_
std::vector< double > waferPosX_
bool waferInLayer(int wafer, int lay, bool reco) const
HGCalDDDConstants(const HGCalParameters *hp, const std::string &name)
int layerIndex(int lay, bool reco) const
std::vector< double > rMinLayHex_
unsigned int waferFileSize() const
hgtrform getTrForm(unsigned int k) const
std::vector< int > waferCopy_
std::pair< double, double > rangeR(double z, bool reco) const
__host__ constexpr __device__ RandomIt lower_bound(RandomIt first, RandomIt last, const T &value, Compare comp={})
std::vector< int > iradMinBH_
static int32_t waferU(const int32_t index)
std::pair< int, int > assignCell(float x, float y, int lay, int subSec, bool reco) const
double mouseBite(bool reco) const
std::vector< double > cellSize_
bool cellInLayer(int waferU, int waferV, int cellU, int cellV, int lay, bool reco) const
std::vector< int > firstModule_
int type() const
get the type
std::map< int, HGCWaferParam > waferLayer_
int numberCells(bool reco) const
std::vector< int > depth_
std::vector< double > rMaxFront_
std::pair< int, float > getIndex(int lay, bool reco) const
HGCalGeometryMode::GeometryMode mode_
std::vector< double > cellCoarseY_
unsigned int layers(bool reco) const
int scintType(const int layer) const
int scintCells(const int layer) const
std::vector< int > layerGroupO_
std::vector< HGCalParameters::hgtrform > getTrForms() const
int getTypeTrap(int layer) const
double cellSizeHex(int type) const
std::vector< int > layerGroupM_
double cellThickness(int layer, int waferU, int waferV) const
bool isValidTrap(int lay, int ieta, int iphi) const
int getUVMax(int type) const
std::vector< std::pair< float, float > >::iterator itr
#define TYPELOOKUP_DATA_REG(_dataclass_)
std::pair< int, int > rowColumnWafer(const int wafer) const
bool waferVirtual(int layer, int waferU, int waferV) const
HGCalParameters::hgtrform getTrForm(unsigned int k) const
std::vector< HGCalParameters::hgtrap > getModules() const
static constexpr double k_ScaleFromDDD
std::vector< int > waferTypeT_
std::array< int, 4 > waferMax_
std::array< uint32_t, 2 > tot_layers_
int numberCellsHexagon(int wafer) const
std::array< int, 3 > assignCellTrap(float x, float y, float z, int lay, bool reco) const
static const int k_OffsetRotation
static constexpr double k_ScaleToDDD
HGCalTypes::CellType cellType(int type, int waferU, int waferV) const
std::pair< float, float > locateCellHex(int cell, int wafer, bool reco) const
waferInfo_map waferInfoMap_
static unsigned const int shift
std::vector< double > slopeMin_
std::vector< int > depthIndex_
std::vector< double > xLayerHex_
std::pair< double, double > waferPosition(int wafer, bool reco) const
std::vector< int > layerCenter_
std::vector< double > rMinFront_
int maxRows(int lay, bool reco) const
std::vector< int > lastModule_
int modules(int lay, bool reco) const
int type() const
get the type
std::vector< double > cellFineX_
double distFromEdgeHex(double x, double y, double z) const
static int32_t waferIndex(int32_t layer, int32_t waferU, int32_t waferV, bool old=false)
std::vector< double > cellThickness_
int getLayer(double z, bool reco) const
int waferTypeL(int wafer) const
std::vector< int > waferTypeL_
std::vector< double > cellCoarseX_
Abs< T >::type abs(const T &t)
std::vector< int > layer_
unsigned int getTrFormN() const
unsigned int layersInit(bool reco) const
std::pair< float, float > locateCell(int cell, int lay, int type, bool reco) const
wafer_map cellCoarseIndex_
std::vector< int > depthLayerF_
std::vector< double > zFrontTop_
int modifyUV(int uv, int type1, int type2) const
int waferFromCopy(int copy) const
const HGCalParameters * hgpar_
bool maskCell(const DetId &id, int corners) const
static bool maskCell(int u, int v, int N, int ncor, int fcor, int corners)
std::array< int, 3 > HGCWaferParam
bool waferInLayerTest(int wafer, int lay, bool full) const
int layer() const
get the layer #
HGCalParameters::hgtrap getModule(unsigned int k, bool hexType, bool reco) const
layer_map copiesInLayers_