00001 #include "Identifier/TofID.h"
00002 #include <assert.h>
00003 #include <iostream>
00004
00005
00006 TofID::TofID(void) {
00007 }
00008
00009 TofID::~TofID(void) {
00010 }
00011
00012
00013 bool TofID::values_ok ( const unsigned int barrel_ec,
00014 const unsigned int layer,
00015 const unsigned int phi_module,
00016 const unsigned int end
00017 ) {
00018 if ( barrel_ec > BARREL_EC_MAX ) return false;
00019 if ( BARREL_EC_MIN == barrel_ec || BARREL_EC_MIN == barrel_ec) {
00020 if ( layer > LAYER_ENDCAP_MAX ) return false;
00021 }
00022 else {
00023 if ( layer > LAYER_BARREL_MAX ) return false;
00024 }
00025 if( end > 1 ) return false;
00026
00027 return true;
00028 }
00029
00030
00031
00032 bool TofID::values_ok ( const unsigned int barrel_ec,
00033 const unsigned int endcap,
00034 const unsigned int module,
00035 const unsigned int strip,
00036 const unsigned int end
00037 ) {
00038 if( barrel_ec != BARREL_EC_MRPC ) return false;
00039 if( endcap > ENDCAP_MRPC_MAX ) return false;
00040 if( module > MODULE_MRPC_MAX ) return false;
00041 if( strip > STRIP_MRPC_MAX ) return false;
00042 if( end > 1 ) return false;
00043
00044 return true;
00045 }
00046
00047
00048
00049 bool TofID::is_barrel (const Identifier& id) {
00050 unsigned int pos = (id.get_value() & TofID::BARREL_EC_MASK) >> TofID::BARREL_EC_INDEX;
00051 return (pos == BARREL_EC_MAX || pos == BARREL_EC_MIN || pos == BARREL_EC_MRPC) ? false : true;
00052 }
00053
00054
00055 bool TofID::is_barrel (const unsigned int barrel_ec) {
00056 return (barrel_ec == BARREL_EC_MAX || barrel_ec == BARREL_EC_MIN || barrel_ec == BARREL_EC_MRPC) ? false : true;
00057 }
00058
00059
00060
00061 int TofID::barrel_ec (const Identifier& id ) {
00062 return ((id.get_value() & TofID::BARREL_EC_MASK) >> TofID::BARREL_EC_INDEX);
00063 }
00064
00065
00066 int TofID::layer (const Identifier& id) {
00067 if( ( TofID::is_mrpc( id ) ) ) { return -999; }
00068 return ((id.get_value() & TofID::LAYER_MASK) >> TofID::LAYER_INDEX);
00069 }
00070
00071
00072
00073 int TofID::phi_module (const Identifier& id) {
00074 if( ( TofID::is_mrpc( id ) ) ) { return -999; }
00075 return ((id.get_value() & TofID::PHI_MASK) >> TofID::PHI_INDEX);
00076 }
00077
00078
00079 int TofID::end(const Identifier& id) {
00080 return ((id.get_value() & TofID::END_MASK) >> TofID::END_INDEX);
00081 }
00082
00083
00084 int TofID::layer_max (const Identifier& id) {
00085 if (is_barrel(id)) {
00086 return LAYER_BARREL_MAX;
00087 } else {
00088 return LAYER_ENDCAP_MAX;
00089 }
00090 }
00091
00092
00093 int TofID::phi_module_max (const Identifier& id) {
00094 if (is_barrel(id)) {
00095 return PHI_BARREL_MAX;
00096 } else {
00097 return PHI_ENDCAP_MAX;
00098 }
00099 }
00100
00101
00102 bool TofID::is_scin( const Identifier& id ) {
00103 unsigned int pos = (id.get_value() & TofID::BARREL_EC_MASK) >> TofID::BARREL_EC_INDEX;
00104 return (pos == BARREL_EC_MRPC) ? false : true;
00105 }
00106
00107
00108 bool TofID::is_scin(const unsigned int barrel_ec ) {
00109 return (barrel_ec < BARREL_EC_MRPC) ? true : false;
00110 }
00111
00112
00113 bool TofID::is_mrpc( const Identifier& id ) {
00114 unsigned int pos = (id.get_value() & TofID::BARREL_EC_MASK) >> TofID::BARREL_EC_INDEX;
00115 return (pos == BARREL_EC_MRPC) ? true : false;
00116 }
00117
00118
00119 bool TofID::is_mrpc(const unsigned int barrel_ec ) {
00120 return (barrel_ec == BARREL_EC_MRPC) ? true : false;
00121 }
00122
00123
00124 int TofID::endcap( const Identifier& id ) {
00125 if( ( TofID::is_scin( id ) ) ) { return -999; }
00126 return ((id.get_value() & TofID::ENDCAP_MASK) >> TofID::ENDCAP_INDEX);
00127 }
00128
00129
00130 int TofID::module( const Identifier& id ) {
00131 if( ( TofID::is_scin( id ) ) ) { return -999; }
00132 return ((id.get_value() & TofID::MODULE_MASK) >> TofID::MODULE_INDEX);
00133 }
00134
00135
00136 int TofID::strip( const Identifier& id ) {
00137 if( ( TofID::is_scin( id ) ) ) { return -999; }
00138 return ((id.get_value() & TofID::STRIP_MASK) >> TofID::STRIP_INDEX);
00139 }
00140
00141
00142
00143 Identifier TofID::cell_id ( int barrel_ec,
00144 int layer,
00145 int phi_module,
00146 int end
00147 ) {
00148 assert ( values_ok(barrel_ec, layer, phi_module, end) );
00149 unsigned int value = (BesDetectorID::TOF_ID << TOF_INDEX) |
00150 (barrel_ec << BARREL_EC_INDEX)|
00151 (layer << LAYER_INDEX) | (phi_module << PHI_INDEX) |
00152 (end << END_INDEX);
00153 return Identifier(value);
00154 }
00155
00156
00157 Identifier TofID::cell_id(int value) {
00158 return Identifier(value);
00159 }
00160
00161
00162
00163 Identifier TofID::cell_id ( int barrel_ec,
00164 int endcap,
00165 int module,
00166 int strip,
00167 int end
00168 ) {
00169 assert ( values_ok(barrel_ec, endcap, module, strip, end) );
00170 unsigned int value = (BesDetectorID::TOF_ID << TOF_INDEX) |
00171 (barrel_ec << BARREL_EC_INDEX)|
00172 (endcap << ENDCAP_INDEX) | (module << MODULE_INDEX) |
00173 (strip << STRIP_INDEX) | (end << END_INDEX);
00174 return Identifier(value);
00175 }
00176
00177
00178 unsigned int TofID::getIntID ( int barrel_ec,
00179 int layer,
00180 int phi_module,
00181 int end
00182 )
00183 {
00184 unsigned int value = (BesDetectorID::TOF_ID << TOF_INDEX) |
00185 (barrel_ec << BARREL_EC_INDEX)|
00186 (layer << LAYER_INDEX) | (phi_module << PHI_INDEX) |
00187 (end << END_INDEX);
00188 return value;
00189 }
00190
00191
00192
00193 unsigned int TofID::getIntID ( int barrel_ec,
00194 int endcap,
00195 int module,
00196 int strip,
00197 int end
00198 ) {
00199 unsigned int value = (BesDetectorID::TOF_ID << TOF_INDEX) |
00200 (barrel_ec << BARREL_EC_INDEX)|
00201 (endcap << ENDCAP_INDEX) | (module << MODULE_INDEX) |
00202 (strip << STRIP_INDEX) | (end << END_INDEX);
00203 return value;
00204 }
00205
00206
00207 unsigned int TofID::getLAYER_BARREL_MAX()
00208 {
00209 return LAYER_BARREL_MAX;
00210 }
00211
00212 unsigned int TofID::getLAYER_ENDCAP_MAX()
00213 {
00214 return LAYER_ENDCAP_MAX;
00215 }
00216
00217 unsigned int TofID::getPHI_BARREL_MAX()
00218 {
00219 return PHI_BARREL_MAX;
00220 }
00221
00222 unsigned int TofID::getPHI_ENDCAP_MAX()
00223 {
00224 return PHI_ENDCAP_MAX;
00225 }
00226 unsigned int TofID::getBARREL_EC_MAX()
00227 {
00228 return BARREL_EC_MAX;
00229 }
00230
00231 unsigned int TofID::getBARREL_EC_MIN()
00232 {
00233 return BARREL_EC_MIN;
00234 }
00235
00236 unsigned int TofID::getBARREL_EC_MRPC()
00237 {
00238 return BARREL_EC_MRPC;
00239 }
00240
00241 unsigned int TofID::getENDCAP_MRPC_MAX()
00242 {
00243 return ENDCAP_MRPC_MAX;
00244 }
00245
00246 unsigned int TofID::getMODULE_MRPC_MAX()
00247 {
00248 return MODULE_MRPC_MAX;
00249 }
00250
00251 unsigned int TofID::getSTRIP_MRPC_MAX()
00252 {
00253 return STRIP_MRPC_MAX;
00254 }