/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/DetectorDescription/Identifier/Identifier-00-02-17/src/MdcID.cxx

Go to the documentation of this file.
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   // Check values
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 

Generated on Tue Nov 29 22:58:00 2016 for BOSS_7.0.2 by  doxygen 1.4.7