10 #include "CLHEP/Units/GlobalSystemOfUnits.h"
33 int* copyno =
new int[
level];
44 for (
int ich = 0; ich <
level; ich++) {
45 if (name[ich] ==
"ZDC") {
50 }
else if (name[ich] ==
"ZDC_EMLayer") {
55 }
else if (name[ich] ==
"ZDC_EMFiber") {
67 }
else if (name[ich] ==
"ZDC_LumLayer") {
71 }
else if (name[ich] ==
"ZDC_HadLayer") {
84 else if (name[ich] ==
"ZDC_LumGas") {
86 }
else if (name[ich] ==
"ZDC_HadFiber") {
93 unsigned intindex = 0;
94 intindex =
packZdcIndex(section, layer, fiber, channel, zside);
97 bool true_for_positive_eta =
true;
99 true_for_positive_eta =
false;
101 HcalZDCDetId zdcId(section, true_for_positive_eta, channel);
102 index = zdcId.
rawId();
108 <<
" getUnitID - # of levels = " <<
level;
109 for (
int ich = 0; ich <
level; ich++)
110 edm::LogVerbatim(
"ForwardSim") <<
" " << ich <<
": copyno " << copyno[ich] <<
" name=" << name[ich]
111 <<
" section " << section <<
" zside " << zside <<
" layer " << layer <<
" fiber "
112 << fiber <<
" channel " << channel <<
"packedIndex =" << intindex
113 <<
" detId raw: " << std::hex << index <<
std::dec;
125 unsigned int idx = ((z - 1) & 1) << 20;
126 idx += (channel & 7) << 17;
127 idx += (fiber & 255) << 9;
128 idx += (layer & 127) << 2;
129 idx += (section & 3);
132 edm::LogVerbatim(
"ForwardSim") <<
"ZDC packing: section " << section <<
" layer " << layer <<
" fiber " << fiber
133 <<
" channel " << channel <<
" zside " << z <<
"idx: " << std::hex << idx <<
std::dec;
134 int newsubdet, newlayer, newfiber, newchannel, newz;
135 unpackZdcIndex(idx, newsubdet, newlayer, newfiber, newchannel, newz);
142 const unsigned int& idx,
int&
section,
int&
layer,
int& fiber,
int& channel,
int&
z) {
143 z = 1 + ((idx >> 20) & 1);
144 channel = (idx >> 17) & 7;
145 fiber = (idx >> 9) & 255;
146 layer = (idx >> 2) & 127;
150 edm::LogVerbatim(
"ForwardSim") <<
"ZDC unpacking: idx:" << idx <<
" -> section " << section <<
" layer " << layer
151 <<
" fiber " << fiber <<
" channel " << channel <<
" zside " <<
z;
157 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
160 level = ((touch->GetHistoryDepth()) + 1);
167 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
169 int i = level -
ii - 1;
170 name[
ii] = touch->GetVolume(i)->GetName();
171 copyno[
ii] = touch->GetReplicaNumber(i);
static unsigned int packZdcIndex(int subDet, int layer, int fiber, int channel, int z)
Log< level::Info, true > LogVerbatim
virtual unsigned int getUnitID(const G4Step *aStep) const
constexpr uint32_t rawId() const
get the raw id
constexpr std::array< uint8_t, layerIndexSize > layer
virtual ~ZdcNumberingScheme()
void setVerbosity(const int)
static void unpackZdcIndex(const unsigned int &idx, int &subDet, int &layer, int &fiber, int &channel, int &z)
int detectorLevel(const G4Step *) const