File indexing completed on 2024-04-06 12:02:07
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #include "CondFormats/DTObjects/interface/DTSequentialCellNumber.h"
0014
0015
0016
0017
0018
0019
0020
0021
0022 namespace {
0023 constexpr int cellsInTheta = 58;
0024 constexpr int cellsPerLayer[] = {0, 50, 60, 72, 96};
0025 constexpr int cellsInMB1 = (cellsPerLayer[1] * 8) + (cellsInTheta * 4);
0026 constexpr int cellsInMB2 = (cellsPerLayer[2] * 8) + (cellsInTheta * 4);
0027 constexpr int cellsInMB3 = (cellsPerLayer[3] * 8) + (cellsInTheta * 4);
0028 constexpr int cellsInMB4 = cellsPerLayer[4] * 8;
0029
0030 constexpr int offsetChamber[] = {0, 0, cellsInMB1, cellsInMB1 + cellsInMB2, cellsInMB1 + cellsInMB2 + cellsInMB3};
0031 constexpr int cellsPerSector = cellsInMB1 + cellsInMB2 + cellsInMB3 + cellsInMB4;
0032 constexpr int cellsIn13Sectors = (cellsPerSector * 12) + cellsInMB4;
0033 constexpr int cellsPerWheel = cellsIn13Sectors + cellsInMB4;
0034 }
0035
0036
0037
0038
0039 int DTSequentialCellNumber::id(int wheel, int station, int sector, int superlayer, int layer, int cell) {
0040 wheel += 3;
0041 if (wheel <= 0)
0042 return -1;
0043 if (station <= 0)
0044 return -2;
0045 if (sector <= 0)
0046 return -3;
0047 if (superlayer <= 0)
0048 return -4;
0049 if (layer <= 0)
0050 return -5;
0051 if (cell <= 0)
0052 return -6;
0053
0054 int seqWireNum = 0;
0055
0056 if (wheel > 5)
0057 return -1;
0058 seqWireNum += (wheel - 1) * cellsPerWheel;
0059
0060 if (sector > 14)
0061 return -2;
0062 if (sector > 12 && station < 4)
0063 return -2;
0064 if (sector > 13)
0065 seqWireNum += cellsIn13Sectors;
0066 else
0067 seqWireNum += (sector - 1) * cellsPerSector;
0068
0069 if (station > 4)
0070 return -3;
0071 if (sector < 13)
0072 seqWireNum += offsetChamber[station];
0073
0074 if (superlayer > 3)
0075 return -4;
0076 if (layer > 4)
0077 return -5;
0078 if (superlayer != 2) {
0079 if (cell > cellsPerLayer[station])
0080 return -6;
0081 if (superlayer == 3)
0082 layer += 4;
0083 seqWireNum += (layer - 1) * cellsPerLayer[station];
0084 } else {
0085 if (station == 4)
0086 return -4;
0087 if (cell > cellsInTheta)
0088 return -6;
0089 seqWireNum += (8 * cellsPerLayer[station]) + ((layer - 1) * cellsInTheta);
0090 }
0091
0092 return seqWireNum + cell;
0093 }
0094
0095 int DTSequentialCellNumber::max() { return 5 * cellsPerWheel; }