00001 00006 #include "DataFormats/HcalDetId/interface/HcalGenericDetId.h" 00007 #include "DataFormats/HcalDetId/interface/HcalDetId.h" 00008 #include "DataFormats/HcalDetId/interface/HcalTrigTowerDetId.h" 00009 #include "DataFormats/HcalDetId/interface/HcalZDCDetId.h" 00010 #include "DataFormats/HcalDetId/interface/HcalCastorDetId.h" 00011 #include "DataFormats/HcalDetId/interface/HcalCalibDetId.h" 00012 #include <iostream> 00013 #include <cstdlib> 00014 00015 HcalOtherSubdetector HcalGenericDetId::otherSubdet () const { 00016 if (HcalSubdetector(subdetId()) != HcalOther) return HcalOtherEmpty; 00017 return HcalOtherSubdetector ((rawId()>>20)&0x1F); 00018 } 00019 00020 HcalGenericDetId::HcalGenericSubdetector HcalGenericDetId::genericSubdet () const { 00021 if (null()) return HcalGenEmpty; 00022 switch (det()) { 00023 case Calo : 00024 switch (subdetId()) { 00025 case HcalZDCDetId::SubdetectorId : return HcalGenZDC; 00026 case HcalCastorDetId::SubdetectorId : return HcalGenCastor; 00027 default: return HcalGenUnknown; 00028 } 00029 case Hcal : 00030 switch (HcalSubdetector(subdetId())) { 00031 case 0: return HcalGenEmpty; 00032 case HcalBarrel: return HcalGenBarrel; 00033 case HcalEndcap: return HcalGenEndcap; 00034 case HcalOuter: return HcalGenOuter; 00035 case HcalForward: return HcalGenForward; 00036 case HcalTriggerTower: return HcalGenTriggerTower; 00037 case HcalOther: 00038 switch (otherSubdet ()) { 00039 case HcalCalibration: return HcalGenCalibration; 00040 default: return HcalGenUnknown; 00041 } 00042 default: return HcalGenUnknown; 00043 } 00044 default: return HcalGenUnknown; 00045 } 00046 return HcalGenUnknown; 00047 } 00048 00049 bool HcalGenericDetId::isHcalDetId () const { 00050 HcalGenericSubdetector subdet = genericSubdet (); 00051 return subdet == HcalGenBarrel || subdet == HcalGenEndcap || subdet == HcalGenOuter || subdet == HcalGenForward; 00052 } 00053 00054 bool HcalGenericDetId::isHcalCalibDetId () const { 00055 HcalGenericSubdetector subdet = genericSubdet (); 00056 return subdet == HcalGenCalibration; 00057 } 00058 00059 bool HcalGenericDetId::isHcalTrigTowerDetId () const { 00060 HcalGenericSubdetector subdet = genericSubdet (); 00061 return subdet == HcalGenTriggerTower; 00062 } 00063 00064 bool HcalGenericDetId::isHcalZDCDetId () const { 00065 HcalGenericSubdetector subdet = genericSubdet (); 00066 return subdet == HcalGenZDC; 00067 } 00068 00069 bool HcalGenericDetId::isHcalCastorDetId () const { 00070 HcalGenericSubdetector subdet = genericSubdet (); 00071 return subdet == HcalGenCastor; 00072 } 00073 00074 std::ostream& operator<<(std::ostream& s,const HcalGenericDetId& id) { 00075 if (id.null()) s << "(Null Id)"; 00076 else 00077 switch (id.genericSubdet()) { 00078 case HcalGenericDetId::HcalGenBarrel: 00079 case HcalGenericDetId::HcalGenEndcap: 00080 case HcalGenericDetId::HcalGenOuter: 00081 case HcalGenericDetId::HcalGenForward: s << HcalDetId(id); break; 00082 case HcalGenericDetId::HcalGenTriggerTower: s << HcalTrigTowerDetId(id); break; 00083 case HcalGenericDetId::HcalGenZDC: s << HcalZDCDetId(id); break; 00084 case HcalGenericDetId::HcalGenCastor: s << HcalCastorDetId(id); break; 00085 case HcalGenericDetId::HcalGenCalibration: s << HcalCalibDetId(id); break; 00086 default: s << "(Hcal Unknown Id: 0x" << std::hex << id.rawId() << std::dec << ')'; 00087 } 00088 return s; 00089 } 00090