12#ifndef AliceO2_TPC_Mapper_H
13#define AliceO2_TPC_Mapper_H
46 static Mapper mapper(mappingDir);
58 return mMapPadOffsetPerRow[globalPadPosition.getRow()] + globalPadPosition.getPad();
80 const auto row = mMapGlobalPadToPadPos[globalPad].getRow();
81 const auto nCRUPerSector = mMapPadRegionInfo.size();
83 for (
size_t i = 1;
i < nCRUPerSector; ++
i) {
84 if (
row < mMapPadRegionInfo[
i].getGlobalRowOffset()) {
90 return int(sec * nCRUPerSector + region);
101 return mMapPadOffsetPerRow[rocPadPosition.
getRow() + rowOffset] + rocPadPosition.
getPad() - padOffset;
109 const auto& info = mMapPartitionInfo[partition % mMapPartitionInfo.size()];
110 const size_t rowOffset = info.getGlobalRowOffset();
111 const size_t padOffset = mMapPadOffsetPerRow[rowOffset];
113 return mMapPadOffsetPerRow[
row + rowOffset] + pad - padOffset;
121 const auto& info = mMapPadRegionInfo[cru.
region() % mMapPadRegionInfo.size()];
122 const size_t rowOffset = info.getGlobalRowOffset();
123 const size_t padOffset = mMapPadOffsetPerRow[rowOffset];
125 return mMapPadOffsetPerRow[
row + rowOffset] + pad - padOffset;
167 padcent.SetY(-1.f * padcent.Y());
198 const PadPos&
padPos(
const int fecInSector,
const int sampaOnFEC,
const int channelOnSAMPA)
const
210 const PadCentre&
padCentre(
const int fecInSector,
const int sampaOnFEC,
const int channelOnSAMPA)
const
217 const PadPos&
padPos(
const int partition,
const int fecInPartition,
const int sampaOnFEC,
218 const int channelOnSAMPA)
const
220 const int fecInSector = mMapPartitionInfo[partition].getSectorFECOffset() + fecInPartition;
226 const int channelOnSAMPA)
const
228 const PartitionInfo& partInfo = mMapPartitionInfo[partition];
237 const int channelOnSAMPA)
const
239 const CRU cru(cruNumber);
250 const int channelOnSAMPA)
const
258 pos.getPadPos().setRow(
pos.getRow() - mNumberOfPadRowsIROC);
264 const int channelOnSAMPA)
const
275 static constexpr void getSampaAndChannelOnFEC(
const int cruID,
const size_t rawFECChannel,
int& sampaOnFEC,
int& channelOnSAMPA)
277 constexpr int sampaMapping[10] = {0, 0, 1, 1, 2, 3, 3, 4, 4, 2};
278 constexpr int channelOffset[10] = {0, 16, 0, 16, 0, 0, 16, 0, 16, 16};
280 const int regionIter = cruID % 2;
281 const int istreamm = ((rawFECChannel % 10) / 2);
282 const int partitionStream = istreamm + regionIter * 5;
283 sampaOnFEC = sampaMapping[partitionStream];
284 const int channel = (rawFECChannel % 2) + 2 * (rawFECChannel / 10);
285 channelOnSAMPA = channel + channelOffset[partitionStream];
289 const int channelOnSAMPA)
const
291 const int fecInSector = mMapPartitionInfo[partition].getSectorFECOffset() + fecInPartition;
307 return (
roc.rocType() ==
RocType::IROC) ? mNumberOfPadRowsIROC : mNumberOfPadRowsOROC;
380 const char pad = padROC.
getPad();
381 return PadPos(globalRow, pad);
399 static bool isEdgePad(
int rowInSector,
int padInRow);
463 const double cs = std::cos(
alpha), sn = std::sin(
alpha);
465 float(
double(
pos.X()) * sn +
double(
pos.Y() * cs)),
pos.Z());
471 const double cs = std::cos(-
alpha), sn = std::sin(-
alpha);
473 float(
double(
pos.X()) * sn +
double(
pos.Y() * cs)),
pos.Z());
481 float(
double(
pos.X()) * sn +
double(
pos.Y() * cs)),
pos.Z());
490 float(
double(
pos.X()) * sn +
double(
pos.Y() * cs)),
pos.Z());
496 const double cs = std::cos(
alpha), sn = std::sin(
alpha);
498 float(
double(
pos.X()) * sn +
double(
pos.Y() * cs)));
504 const double cs = std::cos(-
alpha), sn = std::sin(-
alpha);
506 float(
double(
pos.X()) * sn +
double(
pos.Y() * cs)));
514 float(
double(
pos.X()) * sn +
double(
pos.Y() * cs)));
523 float(
double(
pos.X()) * sn +
double(
pos.Y() * cs)));
535 static constexpr float REGIONAREA[
NREGIONS]{374.4f, 378.f, 453.6f, 470.88f, 864.f, 864.f, 1167.36f, 1128.96f, 1449.6f, 1456.8f};
536 static constexpr float INVPADAREA[
NREGIONS]{1 / 0.312f, 1 / 0.315f, 1 / 0.315f, 1 / 0.327f, 1 / 0.6f, 1 / 0.6f, 1 / 0.7296f, 1 / 0.7056f, 1 / 0.906f, 1 / 0.9105f};
538 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
539 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
540 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
541 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
542 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9};
544 {0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5},
545 {0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4},
546 {0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4},
547 {0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4},
548 {0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4},
549 {0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4},
550 {0, 1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 4, 5, 5, 5, 6},
551 {0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4},
552 {0, 0, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5},
553 {0, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5}
556 {0, 66, 132, 198, 266, 334, 402, 472, 542, 612, 684, 756, 828, 902, 976, 1050, 1124},
557 {0, 76, 152, 228, 306, 384, 462, 542, 622, 702, 784, 866, 948, 1032, 1116},
558 {0, 86, 172, 258, 346, 434, 522, 612, 702, 792, 882, 974, 1066, 1158, 1252, 1346},
559 {0, 92, 184, 276, 370, 464, 558, 654, 750, 846, 944, 1042, 1140, 1240, 1340},
560 {0, 76, 152, 228, 304, 382, 460, 538, 618, 698, 778, 858, 940, 1022, 1104, 1188, 1272, 1356},
561 {0, 86, 172, 258, 346, 434, 522, 612, 702, 792, 882, 974, 1066, 1158, 1252, 1346},
562 {0, 94, 190, 286, 382, 480, 578, 676, 776, 876, 978, 1080, 1182, 1286, 1390, 1494},
563 {0, 110, 220, 332, 444, 556, 670, 784, 898, 1014, 1130, 1246, 1364, 1482},
564 {0, 118, 236, 356, 476, 598, 720, 844, 968, 1092, 1218, 1344, 1472},
565 {0, 128, 258, 388, 520, 652, 784, 918, 1052, 1188, 1324, 1462}
568 {66, 66, 66, 68, 68, 68, 70, 70, 70, 72, 72, 72, 74, 74, 74, 74, 76},
569 {76, 76, 76, 78, 78, 78, 80, 80, 80, 82, 82, 82, 84, 84, 84},
570 {86, 86, 86, 88, 88, 88, 90, 90, 90, 90, 92, 92, 92, 94, 94, 94},
571 {92, 92, 92, 94, 94, 94, 96, 96, 96, 98, 98, 98, 100, 100, 100},
572 {76, 76, 76, 76, 78, 78, 78, 80, 80, 80, 80, 82, 82, 82, 84, 84, 84, 84},
573 {86, 86, 86, 88, 88, 88, 90, 90, 90, 90, 92, 92, 92, 94, 94, 94},
574 {94, 96, 96, 96, 98, 98, 98, 100, 100, 102, 102, 102, 104, 104, 104, 106},
575 {110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 118, 118, 118},
576 {118, 118, 120, 120, 122, 122, 124, 124, 124, 126, 126, 128, 128},
577 {128, 130, 130, 132, 132, 132, 134, 134, 136, 136, 138, 138}
580 0, 66, 132, 198, 266, 334, 402, 472, 542, 612, 684, 756, 828, 902, 976, 1050, 1124,
581 0, 76, 152, 228, 306, 384, 462, 542, 622, 702, 784, 866, 948, 1032, 1116,
582 0, 86, 172, 258, 346, 434, 522, 612, 702, 792, 882, 974, 1066, 1158, 1252, 1346,
583 0, 92, 184, 276, 370, 464, 558, 654, 750, 846, 944, 1042, 1140, 1240, 1340,
584 0, 76, 152, 228, 304, 382, 460, 538, 618, 698, 778, 858, 940, 1022, 1104, 1188, 1272, 1356,
585 0, 86, 172, 258, 346, 434, 522, 612, 702, 792, 882, 974, 1066, 1158, 1252, 1346,
586 0, 94, 190, 286, 382, 480, 578, 676, 776, 876, 978, 1080, 1182, 1286, 1390, 1494,
587 0, 110, 220, 332, 444, 556, 670, 784, 898, 1014, 1130, 1246, 1364, 1482,
588 0, 118, 236, 356, 476, 598, 720, 844, 968, 1092, 1218, 1344, 1472,
589 0, 128, 258, 388, 520, 652, 784, 918, 1052, 1188, 1324, 1462
606 Mapper(
const std::string& mappingDir);
609 void operator=(
const Mapper&) {}
611 void load(
const std::string& mappingDir);
614 void loadTraceLengths(std::string_view mappingDir =
"");
615 void setTraceLengths(std::string_view inputFile, std::vector<float>&
length);
617 void initPadRegionsAndPartitions();
618 bool readMappingFile(std::string
file);
620 static constexpr unsigned short mPadsInIROC{5280};
621 static constexpr unsigned short mPadsInOROC1{2880};
622 static constexpr unsigned short mPadsInOROC2{3200};
623 static constexpr unsigned short mPadsInOROC3{3200};
624 static constexpr unsigned short mPadsInOROC{9280};
625 static constexpr unsigned short mPadsInSector{14560};
626 static constexpr unsigned short mNumberOfPadRowsIROC{63};
627 static constexpr unsigned short mNumberOfPadRowsOROC{89};
629 std::vector<float> mTraceLengthsIROC;
630 std::vector<float> mTraceLengthsOROC;
637 static constexpr std::array<double, SECTORSPERSIDE> SinsPerSector{
638 {0.1736481776669303311866343619840336032212, 0.4999999999999999444888487687421729788184,
639 0.7660444431189780134516809084743726998568, 0.9396926207859083168827396548294927924871, 1,
640 0.9396926207859084279050421173451468348503, 0.7660444431189780134516809084743726998568,
641 0.4999999999999999444888487687421729788184, 0.1736481776669302756754831307262065820396,
642 -0.1736481776669304699645124401286011561751, -0.5000000000000001110223024625156540423632,
643 -0.7660444431189779024293784459587186574936, -0.9396926207859084279050421173451468348503, -1,
644 -0.9396926207859083168827396548294927924871, -0.7660444431189781244739833709900267422199,
645 -0.5000000000000004440892098500626161694527, -0.1736481776669303866977855932418606244028}};
651 static constexpr std::array<double, SECTORSPERSIDE> CosinsPerSector{
652 {0.9848077530122080203156542665965389460325, 0.866025403784438707610604524234076961875,
653 0.6427876096865393629187224178167525678873, 0.34202014332566882393038554255326744169, 0.,
654 -0.3420201433256687129080830800376133993268, -0.6427876096865393629187224178167525678873,
655 -0.866025403784438707610604524234076961875, -0.9848077530122080203156542665965389460325,
656 -0.9848077530122080203156542665965389460325, -0.8660254037844385965883020617184229195118,
657 -0.6427876096865394739410248803324066102505, -0.3420201433256685463746293862641323357821, 0.,
658 0.3420201433256689904638392363267485052347, 0.6427876096865392518964199553010985255241,
659 0.8660254037844383745436971366871148347855, 0.9848077530122080203156542665965389460325}};
661 static constexpr std::array<double, SECTORSPERSIDE> SinsPerSectorNotShifted{
662 {0, 0.3420201433256687129080830800376133993268, 0.6427876096865392518964199553010985255241,
663 0.8660254037844385965883020617184229195118, 0.9848077530122080203156542665965389460325,
664 0.9848077530122080203156542665965389460325, 0.866025403784438707610604524234076961875,
665 0.6427876096865394739410248803324066102505, 0.3420201433256688794415367738110944628716, 0.,
666 -0.3420201433256686573969318487797863781452, -0.6427876096865392518964199553010985255241,
667 -0.8660254037844383745436971366871148347855, -0.9848077530122080203156542665965389460325,
668 -0.9848077530122081313379567291121929883957, -0.8660254037844385965883020617184229195118,
669 -0.6427876096865395849633273428480606526136, -0.3420201433256686018857806175219593569636}};
671 static constexpr std::array<double, SECTORSPERSIDE> CosinsPerSectorNotShifted{
672 {1, 0.9396926207859084279050421173451468348503, 0.7660444431189780134516809084743726998568,
673 0.5000000000000001110223024625156540423632, 0.1736481776669304144533612088707741349936,
674 -0.1736481776669303034310587463551200926304, -0.4999999999999997779553950749686919152737,
675 -0.7660444431189779024293784459587186574936, -0.9396926207859083168827396548294927924871, -1,
676 -0.9396926207859084279050421173451468348503, -0.7660444431189780134516809084743726998568,
677 -0.5000000000000004440892098500626161694527, -0.1736481776669303311866343619840336032212,
678 0.1736481776669299703641513588081579655409, 0.5000000000000001110223024625156540423632,
679 0.7660444431189777914070759834430646151304, 0.9396926207859084279050421173451468348503}};
682 std::vector<PadPos> mMapGlobalPadToPadPos;
683 std::vector<PadCentre> mMapGlobalPadCentre;
684 std::map<PadPos, GlobalPadNumber>
686 std::vector<int> mMapFECIDGlobalPad;
687 std::vector<FECInfo> mMapGlobalPadFECInfo;
690 std::array<PadRegionInfo, 10> mMapPadRegionInfo;
691 std::array<PartitionInfo, 5> mMapPartitionInfo;
694 std::array<int, mNumberOfPadRowsIROC + mNumberOfPadRowsOROC>
695 mMapNumberOfPadsPerRow;
696 std::array<int, mNumberOfPadRowsIROC + mNumberOfPadRowsOROC>
706 cru =
CRU(sec, padRegion.getRegion());
719 float phi = std::atan2(
pos.Y(),
pos.X());
723 const unsigned char secNum = std::floor(phi /
SECPHIWIDTH);
741 int secRight =
int(sector);
743 const float dSectorBoundaryRight = -SinsPerSectorNotShifted[secRight %
SECTORSPERSIDE] * posEle.X() + CosinsPerSectorNotShifted[secRight %
SECTORSPERSIDE] * posEle.Y();
744 const float dSectorBoundaryLeft = -SinsPerSectorNotShifted[secLeft %
SECTORSPERSIDE] * posEle.X() + CosinsPerSectorNotShifted[secLeft %
SECTORSPERSIDE] * posEle.Y();
746 if ((dSectorBoundaryLeft > 0 && dSectorBoundaryRight < 0) || (dSectorBoundaryLeft < 0 && dSectorBoundaryRight > 0)) {
749 if (std::abs(dSectorBoundaryLeft) > margin && std::abs(dSectorBoundaryRight) > margin) {
unsigned char region() const
const Sector sector() const
unsigned char partition() const
unsigned char getSampaChannel() const
unsigned char getIndex() const
unsigned char getSampaChip() const
static constexpr int globalSAMPAId(const int fecInSector, const int sampaOnFEC, const int channelOnSAMPA)
static LocalPosition2D GlobalToLocal(const GlobalPosition2D &pos, const double alpha)
static constexpr unsigned int ROWOFFSET[NREGIONS]
offset to calculate local row from global row
int getNumberOfRowsPartition(CRU cru) const
int getNumberOfRows() const
const FECInfo & getFECInfo(const PadROCPos &padROC) const
static constexpr unsigned short getPadsInOROC3()
static constexpr unsigned int LinksPerRegionPerEndpoint[NREGIONS][NENDPOINTS]
number of links per region per end point
const std::array< PadRegionInfo, 10 > & getMapPadRegionInfo() const
int getNumberOfPadsInRowSector(int row) const
static GlobalPadNumber getGlobalPadNumber(const unsigned int lrow, const unsigned int pad, const unsigned int region)
static bool isBelowSpacerCross(int rowInSector, int padInRow)
const PartitionInfo & getPartitionInfo(const unsigned char partition) const
int getGlobalRowOffsetRegion(int region) const
const PadCentre & padCentre(const int fecInSector, const int sampaOnFEC, const int channelOnSAMPA) const
const PadPos & padPos(GlobalPadNumber padNumber) const
const PadPos & padPos(const int partition, const int fecInPartition, const int sampaOnFEC, const int channelOnSAMPA) const
const std::vector< float > & getTraceLengthsIROC() const
unsigned short getNumberOfPads(const ROC roc) const
const PadPos padPosRegion(const int cruNumber, const int fecInPartition, const int sampaOnFEC, const int channelOnSAMPA) const
static const std::vector< unsigned int > ADDITIONALPADSPERROW[NREGIONS]
additional pads per row compared to first row
static constexpr unsigned short getNumberOfOROCs()
GlobalPadNumber globalPadNumber(const PadPos &globalPadPosition) const
const PadCentre & padCentre(const FECInfo &fec) const
const std::vector< PadPos > & getMapGlobalPadToPadPos() const
static constexpr auto getNumberOfRowsInIROC()
const DigitPos findDigitPosFromGlobalPosition(const GlobalPosition3D &pos) const
static LocalPosition3D GlobalToLocal(const GlobalPosition3D &pos, const Sector sec)
bool isOutOfSector(GlobalPosition3D posEle, const Sector §or, const float margin=0.f) const
static const std::vector< unsigned int > PADSPERROW[NREGIONS]
number of pads per row in region
static const std::vector< unsigned int > OFFSETCRULOCAL[NREGIONS]
row offset in cru for given local pad row
const FECInfo & fecInfo(GlobalPadNumber padNumber) const
int getNumberOfRowsROC(ROC roc) const
static constexpr unsigned int GLOBALPADOFFSET[NREGIONS]
offset of number of pads for region
const PadROCPos padROCPos(const CRU cru, const int fecInPartition, const int sampaOnFEC, const int channelOnSAMPA) const
int getPadOffsetInRowSector(int row) const
int getNumberOfPadsInRow(PadSubset padSubset, int position, int row) const
const PadPos getGlobalPadPos(const PadROCPos &padROC) const
Convert sector, row, pad to global pad row in sector and pad number.
int getNumberOfPadsInRowROC(int roc, int row) const
static LocalPosition2D GlobalToLocal(const GlobalPosition2D &pos, const Sector sec)
static bool isEdgePad(int rowInSector, int padInRow)
static constexpr unsigned short getPadsInOROC1()
static unsigned int getLocalRowFromGlobalRow(const unsigned int row)
static constexpr float INVPADAREA[NREGIONS]
inverse size of the pad area padwidth*padLength
static Mapper & instance(const std::string mappingDir="")
GlobalPadNumber getPadNumber(const PadSubset padSubset, const size_t padSubsetNumber, const int row, const int pad) const
static LocalPosition3D GlobalToLocal(const GlobalPosition3D &pos, const double alpha)
const PadPos & padPos(const FECInfo &fec) const
static constexpr unsigned int ROWSPERREGION[NREGIONS]
number of pad rows for region
GlobalPadNumber globalPadNumber(const int fecInSector, const int sampaOnFEC, const int channelOnSAMPA) const
static constexpr unsigned short getPadsInIROC()
static constexpr unsigned int NSECTORS
total number of sectors in the TPC
GlobalPadNumber getPadNumberInRegion(CRU cru, int row, int pad) const
const PadRegionInfo & getPadRegionInfo(const unsigned char region) const
int getNumberOfPadsInRowPartition(int partition, int row) const
static constexpr unsigned int NREGIONS
total number of regions in one sector
static constexpr unsigned short getPadsInSector()
GlobalPadNumber globalPadNumber(const FECInfo &fec) const
int getNumberOfPadRows(PadSubset padSubset, int position) const
const PadSecPos padSecPos(const CRU cru, const int fecInPartition, const int sampaOnFEC, const int channelOnSAMPA) const
static constexpr void getSampaAndChannelOnFEC(const int cruID, const size_t rawFECChannel, int &sampaOnFEC, int &channelOnSAMPA)
const std::array< PartitionInfo, 5 > & getMapPartitionInfo() const
static bool isHighCouplingPad(int rowInSector, int padInRow)
static constexpr unsigned short getPadsInOROC()
static constexpr auto getNumberOfRowsInOROC()
static constexpr float REGIONAREA[NREGIONS]
volume of each region in cm^2
static constexpr unsigned short getNumberOfPads(const GEMstack gemStack)
int getNumberOfRowsRegion(int region) const
const PadPos & padPos(const int fecInSector, const int sampaOnFEC, const int channelOnSAMPA) const
const PadCentre & padCentre(GlobalPadNumber padNumber) const
static constexpr unsigned int ROWOFFSETSTACK[4]
offset to calculate local row from global row
int getNumberOfPadsInRowRegion(int region, int row) const
const DigitPos findDigitPosFromLocalPosition(const LocalPosition3D &pos, const Sector &sec) const
static GlobalPosition2D LocalToGlobal(const LocalPosition2D &pos, const Sector sec)
static constexpr unsigned int PADROWS
total number of pad rows
static constexpr int getNumberOfPadsPerSide()
GlobalPadNumber getPadNumberInROC(const PadROCPos &rocPadPosition) const
GlobalPadNumber getPadNumberInPartition(int partition, int row, int pad) const
static constexpr unsigned short getPadsInOROC2()
static GlobalPosition3D LocalToGlobal(const LocalPosition3D &pos, const double alpha)
const std::vector< float > & getTraceLengthsOROC() const
static constexpr unsigned int PADSPERREGION[NREGIONS]
number of pads per CRU
static GlobalPosition3D LocalToGlobal(const LocalPosition3D &pos, const Sector sec)
const std::vector< int > & getMapFECIDGlobalPad() const
int getNumberOfPartitions() const
const PadCentre & padCentre(const int partition, const int fecInPartition, const int sampaOnFEC, const int channelOnSAMPA) const
static constexpr unsigned int OFFSETCRUGLOBAL[PADROWS]
row offset in cru for given global pad row
int getNumberOfPadRegions() const
const PadCentre & getPadCentre(const PadPos &pad) const
static GlobalPosition2D LocalToGlobal(const LocalPosition2D &pos, const double alpha)
GlobalPosition2D getPadCentre(const PadROCPos &padRoc) const
static unsigned int getLocalPadNumber(const unsigned int row, const unsigned int pad)
static bool isFirstOrLastRowInStack(int rowInSector)
GlobalPosition2D getPadCentre(const PadSecPos &padSec) const
static constexpr unsigned short getNumberOfIROCs()
int getCRU(const Sector &sec, GlobalPadNumber globalPad) const
static constexpr unsigned REGION[PADROWS]
region for global pad row
static constexpr unsigned int NENDPOINTS
number of end points
const PadPos padPosPartition(const int partition, const int fecInPartition, const int sampaOnFEC, const int channelOnSAMPA) const
Pad and row inside a ROC.
const Sector getSector() const
RocType getROCType() const
unsigned char getGlobalRowOffset() const
const PadPos & getPadPos() const
unsigned char getGlobalRowOffset() const
unsigned char getSectorFECOffset() const
unsigned char getSector() const
static Sector getLeft(const Sector s)
GLfloat GLfloat GLfloat alpha
GLuint GLsizei GLsizei * length
GEMstack
TPC GEM stack types.
math_utils::Point2D< float > LocalPosition2D
math_utils::Point3D< float > LocalPosition3D
constexpr double SECPHIWIDTH
constexpr unsigned char SECTORSPERSIDE
math_utils::Point3D< float > GlobalPosition3D
PadSubset
Definition of the different pad subsets.
@ Partition
Partitions (up to 36*5)
@ Region
Regions (up to 36*10)
unsigned short GlobalPadNumber
global pad number
math_utils::Point2D< float > GlobalPosition2D
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...