00001 #include "Identifier/MdcID.h"
00002 #include <assert.h>
00003 #include <iostream>
00004
00005 MdcID::MdcID(void) {
00006 }
00007
00008 MdcID::~MdcID(void) {
00009 }
00010
00011
00012 bool MdcID::values_ok ( const unsigned int wireType,
00013 const unsigned int layer,
00014 const unsigned int wire
00015 ) {
00016
00017 if ( wireType != AXIAL_WIRE && wireType != STEREO_WIRE ) return false;
00018
00019 if ( wireType == STEREO_WIRE ) {
00020 if ( layer < INNER_STEREO_LAYER_MAX
00021 || layer < ( INNER_STEREO_LAYER_MAX
00022 + INNER_AXIAL_LAYER_MAX
00023 + OUTER_STEREO_LAYER_MAX )
00024 && layer >= (INNER_STEREO_LAYER_MAX + INNER_AXIAL_LAYER_MAX ))
00025 return true;
00026 }
00027
00028 if ( wireType == AXIAL_WIRE ) {
00029 if ( layer >= INNER_STEREO_LAYER_MAX
00030 && layer < ( INNER_STEREO_LAYER_MAX + INNER_AXIAL_LAYER_MAX )
00031 || layer >= ( INNER_STEREO_LAYER_MAX + INNER_AXIAL_LAYER_MAX
00032 + OUTER_STEREO_LAYER_MAX ) && layer < LAYER_MAX )
00033
00034 return true;
00035 }
00036
00037 std::cout << " ++ MdcID::values_ok++ wiretype = " << wireType << " layer = " << layer << " wire = " << wire << std::endl;
00038
00039 return false;
00040 }
00041
00042
00043 bool MdcID::is_axial (const Identifier& id) {
00044 unsigned int type = (id.get_value() & MdcID::WIRETYPE_MASK) >> MdcID::WIRETYPE_INDEX;
00045 return (type == AXIAL_WIRE) ? true : false;
00046 }
00047
00048
00049 int MdcID::layer (const Identifier& id) {
00050 return (id.get_value() & MdcID::LAYER_MASK) >> MdcID::LAYER_INDEX;
00051 }
00052
00053
00054 int MdcID::wire (const Identifier& id) {
00055 return (id.get_value() & MdcID::WIRE_MASK) >> MdcID::WIRE_INDEX;
00056 }
00057
00058
00059 int MdcID::layer_max (const Identifier& id) {
00060 if (is_axial(id)) {
00061 return AXIAL_LAYER_MAX;
00062 } else {
00063 return STEREO_LAYER_MAX;
00064 }
00065 }
00066
00067
00068 int MdcID::wire_max (const Identifier& id) {
00069 if (is_axial(id)) {
00070 return AXIAL_WIRE_MAX;
00071 } else {
00072 return STEREO_WIRE_MAX;
00073 }
00074 }
00075
00076
00077 Identifier MdcID::wire_id ( int wireType,
00078 int layer,
00079 int wire
00080 ) {
00081 assert ( values_ok(wireType, layer, wire) );
00082 int value = (BesDetectorID::MDC_ID << MDC_INDEX) |
00083 (wireType << WIRETYPE_INDEX) |
00084 (layer << LAYER_INDEX) |
00085 (wire << WIRE_INDEX);
00086 return Identifier(value);
00087 }
00088
00089
00090 Identifier MdcID::wire_id ( int layer,
00091 int wire
00092 ) {
00093 if ( layer < INNER_STEREO_LAYER_MAX
00094 || layer < (INNER_STEREO_LAYER_MAX + INNER_AXIAL_LAYER_MAX + OUTER_STEREO_LAYER_MAX)
00095 && layer >= (INNER_STEREO_LAYER_MAX + INNER_AXIAL_LAYER_MAX )
00096 )
00097 return MdcID::wire_id ( STEREO_WIRE, layer, wire );
00098 else return MdcID::wire_id (AXIAL_WIRE, layer, wire );
00099
00100 }
00101
00102 unsigned int MdcID::getIntID(unsigned int layer,
00103 unsigned int wire)
00104 {
00105 unsigned int value;
00106 unsigned int wireType;
00107
00108 if ( layer < INNER_STEREO_LAYER_MAX
00109 || layer < (INNER_STEREO_LAYER_MAX + INNER_AXIAL_LAYER_MAX + OUTER_STEREO_LAYER_MAX)
00110 && layer >= (INNER_STEREO_LAYER_MAX + INNER_AXIAL_LAYER_MAX )
00111 )
00112 wireType = STEREO_WIRE;
00113 else wireType = AXIAL_WIRE;
00114
00115 value = ((BesDetectorID::MDC_ID << MDC_INDEX)&MDC_MASK) |
00116 ((wireType << WIRETYPE_INDEX)&WIRETYPE_MASK) |
00117 ((layer << LAYER_INDEX)&LAYER_MASK) |
00118 ((wire << WIRE_INDEX)&WIRE_MASK);
00119
00120 return value;
00121
00122 }
00123
00124 unsigned int MdcID::getIntID(unsigned int wireType,
00125 unsigned int layer,
00126 unsigned int wire)
00127 {
00128 unsigned int value = ((BesDetectorID::MDC_ID << MDC_INDEX)&MDC_MASK) |
00129 ((wireType << WIRETYPE_INDEX)&WIRETYPE_MASK) |
00130 ((layer << LAYER_INDEX)&LAYER_MASK) |
00131 ((wire << WIRE_INDEX)&WIRE_MASK);
00132 return value;
00133
00134 }
00135
00136
00137
00138 unsigned int MdcID::getAXIAL_LAYER_MAX()
00139 {
00140 return AXIAL_LAYER_MAX;
00141 }
00142 unsigned int MdcID::getSTEREO_LAYER_MAX()
00143 {
00144 return STEREO_LAYER_MAX;
00145 }
00146 unsigned int MdcID::getAXIAL_WIRE_MAX()
00147 {
00148 return AXIAL_WIRE_MAX;
00149 }
00150 unsigned int MdcID::getSTEREO_WIRE_MAX()
00151 {
00152 return STEREO_WIRE_MAX;
00153 }
00154
00155 unsigned int MdcID::getAXIAL_WIRE()
00156 {
00157 return AXIAL_WIRE;
00158 }
00159
00160 unsigned int MdcID::getSTEREO_WIRE()
00161 {
00162 return STEREO_WIRE;
00163 }
00164