00001 #include "Identifier/EmcID.h"
00002 #include <assert.h>
00003
00004 EmcID::EmcID(void) {
00005 }
00006
00007 EmcID::~EmcID(void) {
00008 }
00009
00010
00011 bool EmcID::values_ok (const unsigned int barrel_ec,
00012 const unsigned int theta_module,
00013 const unsigned int phi_module
00014 ) {
00015
00016
00017
00018 if (barrel_ec > BARREL_EC_MAX ) return false;
00019
00020 if ( barrel_ec == BARREL ) {
00021 if ( phi_module > PHI_BARREL_MAX ) return false;
00022 if ( theta_module > THETA_BARREL_MAX ) return false;
00023 }
00024 else {
00025 if ( theta_module > THETA_ENDCAP_MAX ) return false;
00026 if ( phi_module > getPHI_ENDCAP_MAX(theta_module) ) return false;
00027 }
00028 return true;
00029 }
00030
00031
00032 bool EmcID::is_barrel (const Identifier& id) {
00033 unsigned int pos = (id.get_value() & EmcID::BARREL_EC_MASK) >> EmcID::BARREL_EC_INDEX;
00034 return (pos == BARREL) ? true : false ;
00035 }
00036
00037
00038 unsigned int EmcID::barrel_ec (const Identifier& id) {
00039 return ((id.get_value() & EmcID::BARREL_EC_MASK) >> EmcID::BARREL_EC_INDEX);
00040 }
00041
00042
00043 unsigned int EmcID::theta_module (const Identifier& id) {
00044 return (id.get_value() & EmcID::THETA_MASK) >> EmcID::THETA_INDEX;
00045 }
00046
00047
00048 unsigned int EmcID::phi_module (const Identifier& id) {
00049 return (id.get_value() & EmcID::PHI_MASK) >> EmcID::PHI_INDEX;
00050 }
00051
00052
00053 unsigned int EmcID::theta_module_max (const Identifier& id) {
00054 if (is_barrel(id)) {
00055 return THETA_BARREL_MAX;
00056 } else {
00057 return THETA_ENDCAP_MAX;
00058 }
00059 }
00060
00061
00062 unsigned int EmcID::phi_module_max (const Identifier& id) {
00063 if (is_barrel(id)) {
00064 return PHI_BARREL_MAX;
00065 } else {
00066 return getPHI_ENDCAP_MAX(theta_module(id));
00067 }
00068 }
00069
00070
00071 Identifier EmcID::crystal_id (const unsigned int barrel_ec,
00072 const unsigned int theta_module,
00073 const unsigned int phi_module
00074 ) {
00075 assert ( values_ok(barrel_ec, theta_module, phi_module) );
00076 unsigned int value = (EMC_ID << EMC_INDEX) | (barrel_ec << BARREL_EC_INDEX)|
00077 (theta_module << THETA_INDEX) | (phi_module << PHI_INDEX);
00078 return Identifier(value);
00079 }
00080
00081 unsigned int EmcID::getIntID (const unsigned int barrel_ec,
00082 const unsigned int theta_module,
00083 const unsigned int phi_module
00084 ) {
00085 assert ( values_ok(barrel_ec, theta_module, phi_module) );
00086 unsigned int value = (EMC_ID << EMC_INDEX) | (barrel_ec << BARREL_EC_INDEX)|
00087 (theta_module << THETA_INDEX) | (phi_module << PHI_INDEX);
00088 return value;
00089 }
00090
00091 unsigned int EmcID::getTHETA_BARREL_MAX()
00092 {
00093 return THETA_BARREL_MAX;
00094 }
00095 unsigned int EmcID::getTHETA_BARREL_MIN()
00096 {
00097 return THETA_BARREL_MIN;
00098 }
00099 unsigned int EmcID::getTHETA_ENDCAP_MAX()
00100 {
00101 return THETA_ENDCAP_MAX;
00102 }
00103 unsigned int EmcID::getTHETA_ENDCAP_MIN()
00104 {
00105 return THETA_ENDCAP_MIN;
00106 }
00107 unsigned int EmcID::getPHI_BARREL_MAX()
00108 {
00109 return PHI_BARREL_MAX;
00110 }
00111 unsigned int EmcID::getPHI_BARREL_MIN()
00112 {
00113 return PHI_BARREL_MIN;
00114 }
00115 unsigned int EmcID::getPHI_ENDCAP_MAX(const unsigned int theta)
00116 {
00117 if(theta==0 || theta==1) {
00118 return PHI_ENDCAP_MAX1;
00119 }
00120 if(theta==2 || theta==3) {
00121 return PHI_ENDCAP_MAX2;
00122 }
00123 if(theta==4 || theta==5) {
00124 return PHI_ENDCAP_MAX3;
00125 }
00126 return 0;
00127 }
00128 unsigned int EmcID::getPHI_ENDCAP_MIN()
00129 {
00130 return PHI_ENDCAP_MIN;
00131 }
00132 unsigned int EmcID::getBARREL_EC_MAX()
00133 {
00134 return BARREL_EC_MAX;
00135 }
00136 unsigned int EmcID::getBARREL_EC_MIN()
00137 {
00138 return BARREL_EC_MIN;
00139 }
00140
00141 unsigned int EmcID::getENDCAP_EAST()
00142 {
00143 return ENDCAP_EAST;
00144 }
00145
00146 unsigned int EmcID::getBARREL()
00147 {
00148 return BARREL;
00149 }
00150
00151 unsigned int EmcID::getENDCAP_WEST()
00152 {
00153 return ENDCAP_WEST;
00154 }