File indexing completed on 2024-04-06 12:29:42
0001 #include "SimDataFormats/HcalTestBeam/interface/HcalTestBeamNumbering.h"
0002 #include <iostream>
0003
0004
0005
0006 uint32_t HcalTestBeamNumbering::packIndex(int det, int lay, int x, int y) {
0007 int ix(0), ixx(x);
0008 if (x < 0) {
0009 ix = 1;
0010 ixx = -x;
0011 }
0012 int iy(0), iyy(y);
0013 if (y < 0) {
0014 iy = 1;
0015 iyy = -y;
0016 }
0017 uint32_t idx = (det & kHcalBeamTypeMask) << kHcalBeamTypeOffset;
0018 idx += (lay & kHcalBeamLayerMask) << kHcalBeamLayerOffset;
0019 idx += (iy & kHcalBeamYSignMask) << kHcalBeamYSignOffset;
0020 idx += (iyy & kHcalBeamYValueMask) << kHcalBeamYValueOffset;
0021 idx += (ix & kHcalBeamXSignMask) << kHcalBeamXSignOffset;
0022 idx += (ixx & kHcalBeamXValueMask) << kHcalBeamXValueOffset;
0023
0024 #ifdef EDM_ML_DEBUG
0025 std::cout << "HcalTestBeamNumbering: Detector " << det << " Layer " << lay << " x " << x << " " << ix << " " << ixx
0026 << " y " << y << " " << iy << " " << iyy << " ID " << std::hex << idx << std::dec << std::endl;
0027 #endif
0028 return idx;
0029 }
0030
0031 void HcalTestBeamNumbering::unpackIndex(const uint32_t& idx, int& det, int& lay, int& x, int& y) {
0032 det = (idx >> kHcalBeamTypeOffset) & kHcalBeamTypeMask;
0033 lay = (idx >> kHcalBeamLayerOffset) & kHcalBeamLayerMask;
0034 y = (idx >> kHcalBeamYValueOffset) & kHcalBeamYValueMask;
0035 x = (idx >> kHcalBeamXValueOffset) & kHcalBeamXValueMask;
0036 if (((idx >> kHcalBeamYSignOffset) & kHcalBeamYSignMask) == 1)
0037 y = -y;
0038 if (((idx >> kHcalBeamXSignOffset) & kHcalBeamXSignMask) == 1)
0039 x = -x;
0040
0041 #ifdef EDM_ML_DEBUG
0042 std::cout << "HcalTestBeamNumbering: ID " << std::hex << idx << std::dec << " Detector " << det << " Layer " << lay
0043 << " x " << x << " y " << y << std::endl;
0044 #endif
0045 }