CMS 3D CMS Logo

ZdcNumberingScheme Class Reference

#include <SimG4CMS/Forward/interface/ZdcNumberingScheme.h>

List of all members.

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


Detailed Description

Definition at line 13 of file ZdcNumberingScheme.h.


Constructor & Destructor Documentation

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().

00018                                         {
00019   std::cout<< " Deleting ZdcNumberingScheme" <<  std::endl;
00020 }


Member Function Documentation

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 }


Member Data Documentation

int ZdcNumberingScheme::verbosity [private]

Definition at line 38 of file ZdcNumberingScheme.h.

Referenced by setVerbosity(), and ZdcNumberingScheme().


The documentation for this class was generated from the following files:
Generated on Tue Jun 9 18:36:01 2009 for CMSSW by  doxygen 1.5.4