25 throw cms::Exception(
"InvalidDetId") <<
"EcalTriggerTowerDetId: Cannot create object. SUBDETDCCTTMODE not yet implemented.";
28 throw cms::Exception(
"InvalidDetId") <<
"EcalTriggerTowerDetId: Cannot create object. Unknown mode for (int, EcalSubdetector, int, int) constructor.";
30 if (tower_i >
MAX_I || tower_i < MIN_I || tower_j >
MAX_J || tower_j <
MIN_J)
31 throw cms::Exception(
"InvalidDetId") <<
"EcalTriggerTowerDetId: Cannot create object. Indexes out of bounds.";
33 id_|= ((zside>0)?(0x8000):(0x0)) | ((subDet ==
EcalBarrel)?(0x4000):(0x0)) | (tower_i<<7) | (tower_j & 0x7F);
58 int iphi_simple =
iphi() + 2 ;
59 if (iphi_simple > 72 ) iphi_simple = iphi_simple % 72;
61 if (
zside() < 0 )
id += 18;
65 throw cms::Exception(
"MethodNotImplemented") <<
"EcalTriggerTowerDetId: iDCC not yet implemented";
74 int iphi_simple =
iphi() + 2 ;
75 if (iphi_simple > 72 ) iphi_simple = iphi_simple % 72;
85 throw cms::Exception(
"MethodNotImplemented") <<
"EcalTriggerTowerDetId: iTT not yet implemented";
93 throw cms::Exception(
"MethodNotApplicable") <<
"EcalTriggerTowerDetId: iquadrant not applicable";
99 return ( 1 ==
abs( iz ) &&
112 1 == j%2 ) ) ) ) ) ) ;
119 const unsigned int iea (
ietaAbs() ) ;
120 const unsigned int iph (
iphi() ) ;
141 const unsigned int idc ( di/kEBTowersPerSM ) ;
145 if( j < 1 ) j += 72 ;
170 return s <<
"(EcalTT subDet " << ((
id.subDet()==
EcalBarrel)?(
"Barrel"):(
"Endcap"))
171 <<
" iz " << ((
id.zside()>0)?(
"+ "):(
"- ")) <<
" ieta " 172 <<
id.ietaAbs() <<
" iphi " <<
id.iphi() <<
')';
static EcalTrigTowerDetId detIdFromDenseIndex(uint32_t di)
constexpr bool null() const
is this a null id ?
static const int SUBDETIJMODE
constexpr uint32_t rawId() const
get the raw id
int hashedIndex() const
get a compact index for arrays [TODO: NEEDS WORK]
static const int kEBTowersInPhi
int iDCC() const
get the ECAL DCC id - in the barrrel ism == iDCC
int zside() const
get the z-side of the tower (1/-1)
static const int kEETowersInPhiPerQuadrant
int ietaAbs() const
get the absolute value of the tower ieta
EcalTrigTowerDetId & operator=(const DetId &id)
static const int kEBTowersInEta
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
Abs< T >::type abs(const T &t)
std::ostream & operator<<(std::ostream &s, const EcalTrigTowerDetId &id)
int iphi() const
get the tower iphi
static const int SUBDETDCCTTMODE
EcalSubdetector subDet() const
get the subDetector associated to the Trigger Tower
static bool validDetId(int iz, EcalSubdetector sd, int i, int j)
check if a valid index combination
int iTT() const
sequential index within one DCC
static const int kEBTowersPerSM
constexpr Detector det() const
get the detector field from this detid