#include <SimG4CMS/Forward/interface/ZdcNumberingScheme.h>
Public Member Functions | |
void | detectorLevel (const G4Step *, int &, int *, G4String *) const |
int | detectorLevel (const G4Step *) const |
virtual unsigned int | getUnitID (const G4Step *aStep) const |
void | setVerbosity (const int) |
ZdcNumberingScheme (int) | |
virtual | ~ZdcNumberingScheme () |
Static Public Member Functions | |
static unsigned int | packZdcIndex (int subDet, int layer, int fiber, int channel, int z) |
pack the Unit ID for Zdc z = 1,2 = -z,+z; subDet = 1,2,3 = EM,Lum,HAD; fiber = 1-96 (EM,HAD), 1 (Lum); channel = 1-5 (EM), layer# (Lum), 1-3 (HAD) | |
static void | unpackZdcIndex (const unsigned int &idx, int &subDet, int &layer, int &fiber, int &channel, int &z) |
Private Attributes | |
int | verbosity |
Definition at line 13 of file ZdcNumberingScheme.h.
ZdcNumberingScheme::ZdcNumberingScheme | ( | int | iv | ) |
Definition at line 13 of file ZdcNumberingScheme.cc.
References GenMuonPlsPt100GeV_cfg::cout, lat::endl(), and verbosity.
00013 { 00014 if (verbosity>0) 00015 std::cout << "Creating ZDCNumberingScheme" << std::endl; 00016 }
ZdcNumberingScheme::~ZdcNumberingScheme | ( | ) | [virtual] |
Definition at line 18 of file ZdcNumberingScheme.cc.
References GenMuonPlsPt100GeV_cfg::cout, and lat::endl().
void ZdcNumberingScheme::detectorLevel | ( | const G4Step * | aStep, | |
int & | level, | |||
int * | copyno, | |||
G4String * | name | |||
) | const |
Definition at line 169 of file ZdcNumberingScheme.cc.
References i.
00170 { 00171 00172 //Get name and copy numbers 00173 if (level > 0) { 00174 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable(); 00175 for (int ii = 0; ii < level; ii++) { 00176 int i = level - ii - 1; 00177 name[ii] = touch->GetVolume(i)->GetName(); 00178 copyno[ii] = touch->GetReplicaNumber(i); 00179 } 00180 } 00181 }
int ZdcNumberingScheme::detectorLevel | ( | const G4Step * | aStep | ) | const |
Definition at line 160 of file ZdcNumberingScheme.cc.
References level.
Referenced by getUnitID().
00160 { 00161 00162 //Find number of levels 00163 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable(); 00164 int level = 0; 00165 if (touch) level = ((touch->GetHistoryDepth())+1); 00166 return level; 00167 }
unsigned int ZdcNumberingScheme::getUnitID | ( | const G4Step * | aStep | ) | const [virtual] |
Definition at line 25 of file ZdcNumberingScheme.cc.
References GenMuonPlsPt100GeV_cfg::cout, detectorLevel(), HcalZDCDetId::EM, lat::endl(), HcalZDCDetId::HAD, index, level, HcalZDCDetId::LUM, name, packZdcIndex(), and DetId::rawId().
Referenced by ZdcSD::setDetUnitId().
00025 { 00026 00027 unsigned intindex=0; 00028 uint32_t index = 0; 00029 int level = detectorLevel(aStep); 00030 00031 if (level > 0) { 00032 int* copyno = new int[level]; 00033 G4String* name = new G4String[level]; 00034 00035 detectorLevel(aStep, level, copyno, name); 00036 00037 int zside = 0; 00038 int channel = 0; 00039 int fiber = 0; 00040 int layer = 0; 00041 HcalZDCDetId::Section section; 00042 00043 for (int ich=0; ich < level; ich++) { 00044 if (name[ich] == "ZDC") { 00045 if(copyno[ich] == 1)zside = 1; 00046 if(copyno[ich] == 2)zside = -1; 00047 } 00048 else if (name[ich] == "ZDC_EMLayer") { 00049 section = HcalZDCDetId::EM; 00050 layer = copyno[ich]; 00051 } 00052 else if (name[ich] == "ZDC_EMFiber") { 00053 fiber = copyno[ich]; 00054 if (fiber < 20) 00055 channel = 1; 00056 else if (fiber < 39) 00057 channel = 2; 00058 else if (fiber < 58) 00059 channel = 3; 00060 else if (fiber < 77) 00061 channel = 4; 00062 else 00063 channel = 5; 00064 } 00065 else if (name[ich] == "ZDC_LumLayer") { 00066 section = HcalZDCDetId::LUM; 00067 layer = copyno[ich]; 00068 channel = layer; 00069 } 00070 else if (name[ich] == "ZDC_LumGas") { 00071 fiber = 1; 00072 } 00073 else if (name[ich] == "ZDC_HadLayer") { 00074 section = HcalZDCDetId::HAD; 00075 layer = copyno[ich]; 00076 if (layer < 6) 00077 channel = 1; 00078 else if (layer < 12) 00079 channel = 2; 00080 else if (layer < 18) 00081 channel = 3; 00082 else 00083 channel = 4; 00084 } 00085 else if (name[ich] == "ZDC_HadFiber") { 00086 fiber = copyno[ich]; 00087 } 00088 } 00089 00090 // intindex = myPacker.packZdcIndex (section, layer, fiber, channel, zside); 00091 intindex = packZdcIndex (section, layer, fiber, channel, zside); 00092 bool true_for_positive_eta; 00093 if(zside = 1)true_for_positive_eta = true; 00094 if(zside = 1)true_for_positive_eta = false; 00095 00096 HcalZDCDetId zdcId = HcalZDCDetId(section, true_for_positive_eta, channel); 00097 index = zdcId.rawId(); 00098 00099 #ifdef debug 00100 std::cout<<"DetectorId: "; 00101 std::cout<<zdcId<<std::endl; 00102 00103 00104 std::cout<< "ZdcNumberingScheme:" 00105 << " getUnitID - # of levels = " 00106 << level << std::endl; 00107 for (int ich = 0; ich < level; ich++) 00108 std::cout<< " " << ich << ": copyno " << copyno[ich] 00109 << " name=" << name[ich] 00110 << " section " << section << " zside " << zside 00111 << " layer " << layer << " fiber " << fiber 00112 << " channel " << channel << "packedIndex =" 00113 << intindex << " detId raw: "<<index<<std::endl; 00114 00115 #endif 00116 00117 delete[] copyno; 00118 delete[] name; 00119 } 00120 00121 return index; 00122 00123 }
unsigned ZdcNumberingScheme::packZdcIndex | ( | int | subDet, | |
int | layer, | |||
int | fiber, | |||
int | channel, | |||
int | z | |||
) | [static] |
pack the Unit ID for Zdc
z = 1,2 = -z,+z; subDet = 1,2,3 = EM,Lum,HAD; fiber = 1-96 (EM,HAD), 1 (Lum); channel = 1-5 (EM), layer# (Lum), 1-3 (HAD)
Definition at line 125 of file ZdcNumberingScheme.cc.
References GenMuonPlsPt100GeV_cfg::cout, lat::endl(), and unpackZdcIndex().
Referenced by getUnitID().
00126 { 00127 unsigned int idx = ((z-1)&1)<<20; //bit 20 00128 idx += (channel&7)<<17; //bits 17-19 00129 idx += (fiber&255)<<9; //bits 9-16 00130 idx += (layer&127)<<2; //bits 2-8 00131 idx += (section&3); //bits 0-1 00132 00133 #ifdef debug 00134 std::cout<< "ZDC packing: section " << section << " layer " << layer << " fiber " 00135 << fiber << " channel " << channel << " zside " << z << "idx: " <<idx << std::endl; 00136 int newsubdet, newlayer, newfiber, newchannel, newz; 00137 unpackZdcIndex(idx, newsubdet, newlayer, newfiber, newchannel, newz); 00138 #endif 00139 00140 return idx; 00141 }
void ZdcNumberingScheme::setVerbosity | ( | const | int | ) |
Definition at line 23 of file ZdcNumberingScheme.cc.
References verbosity.
00023 { verbosity = iv; }
void ZdcNumberingScheme::unpackZdcIndex | ( | const unsigned int & | idx, | |
int & | subDet, | |||
int & | layer, | |||
int & | fiber, | |||
int & | channel, | |||
int & | z | |||
) | [static] |
Definition at line 144 of file ZdcNumberingScheme.cc.
References GenMuonPlsPt100GeV_cfg::cout, and lat::endl().
Referenced by packZdcIndex(), and ZdcTestAnalysis::update().
00146 { 00147 z = 1 + (idx>>20)&1; 00148 channel = (idx>>17)&7; 00149 fiber = (idx>>9)&255; 00150 layer = (idx>>2)&127; 00151 section = idx&3; 00152 00153 #ifdef debug 00154 std::cout<< "ZDC unpacking: idx:"<< idx << " -> section " << section 00155 << " layer " << layer << " fiber " << fiber << " channel " 00156 << channel << " zside " << z << std::endl; 00157 #endif 00158 }
int ZdcNumberingScheme::verbosity [private] |
Definition at line 38 of file ZdcNumberingScheme.h.
Referenced by setVerbosity(), and ZdcNumberingScheme().