Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:29:42

0001 #include "SimDataFormats/HcalTestBeam/interface/HcalTestBeamNumbering.h"
0002 #include <iostream>
0003 
0004 //#define EDM_ML_DEBUG
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 }