00001
00002
00003
00004
00005
00006
00008
00009
00010
00011
00012
00013 #include "digiRootData/LogId.h"
00014
00015 ClassImp(LogId)
00016
00017 LogId::LogId(){
00018
00019
00020 setTag(static_cast<UInt_t>(0));
00021 }
00022
00023 LogId::LogId(UInt_t tag=0) {
00024
00025 setTag(tag);
00026 }
00027
00028 LogId::LogId(UShort_t tower, UShort_t layer, UShort_t column) {
00029
00030 setTag(static_cast<UInt_t>(0));
00031 setLayer(layer);
00032 setColumn(column);
00033 setTower(tower);
00034 }
00035
00036 LogId::~LogId() {
00037
00038 }
00039
00040
00041 Bool_t LogId::isValidColumn(UInt_t columnVal) {
00042
00043 return (
00044 ((columnVal <= BOUNDS_COLUMN) && !(columnVal & ~CAL_M_COLUMN)) ?
00045 kTRUE : kFALSE
00046 );
00047 }
00048
00049 Bool_t LogId::isValidLayer(UInt_t layerVal) {
00050
00051 return (
00052 ((layerVal <= BOUNDS_LAYER) && !(layerVal & ~CAL_M_LAYER)) ?
00053 kTRUE : kFALSE
00054 );
00055 }
00056
00057
00058 Bool_t LogId::isValidTagStruct(TAG_STRUCT ts) {
00059
00060
00061
00062 if (!isValidColumn(ts.column)) return kFALSE;
00063 if (!isValidLayer(ts.layer)) return kFALSE;
00064
00065
00066 return kTRUE;
00067 }
00068
00069 Bool_t LogId::isValidTagWord(UInt_t tagWord) {
00070
00071 TAG_STRUCT ts;
00072 fillTagStruct(tagWord, &ts);
00073
00074 return isValidTagStruct(ts);
00075 }
00076
00077
00078
00079
00080 void LogId::fillTagStruct(UInt_t tagVal, LogId::TAG_STRUCT *ts) {
00081 ts->column = getColumn(tagVal);
00082 ts->layer = getLayer(tagVal);
00083 ts->pipeline = 0;
00084 ts->sequence = 0;
00085 ts->tower = getTower(tagVal);
00086 ts->xy = getXY(tagVal);
00087 }
00088
00089
00090
00091
00092 UInt_t LogId::fillTagWord(LogId::TAG_STRUCT *ts) {
00093 UInt_t tagWord = 0;
00094 tagWord += (ts->xy & CAL_M_XY) << CAL_V_XY;
00095
00096
00097
00098 tagWord += ((ts->layer >> CAL_K_XY) & CAL_M_LAYER) << CAL_V_LAYER;
00099 tagWord += (ts->column & CAL_M_COLUMN) << CAL_V_COLUMN;
00100 tagWord += (ts->tower & CAL_M_TOWER) << CAL_V_TOWER;
00101
00102 return tagWord;
00103 }
00104
00105 Bool_t LogId::setTag(UInt_t tagVal) {
00106
00107
00108 if (isValidTagWord(tagVal)) {
00109 m_tag = tagVal;
00110 return kTRUE;
00111 }
00112 else return kFALSE;
00113 }
00114
00115 Bool_t LogId::setTag(TAG_STRUCT *ts) {
00116
00117
00118 if (isValidTagStruct(*ts)) {
00119 m_tag = fillTagWord(ts);
00120 return kTRUE;
00121 }
00122 else return kFALSE;
00123 }
00124
00125 Bool_t LogId::setTower(UInt_t towerVal) {
00126
00127 m_tag &= ~(CAL_M_TOWER << CAL_V_TOWER);
00128
00129 m_tag |= towerVal << CAL_V_TOWER;
00130 return kTRUE;
00131 }
00132
00133 Bool_t LogId::setColumn(UInt_t columnVal) {
00134
00135
00136 if (!isValidColumn(columnVal))
00137 return kFALSE;
00138
00139
00140 m_tag &= ~(CAL_M_COLUMN << CAL_V_COLUMN);
00141
00142 m_tag |= columnVal << CAL_V_COLUMN;
00143
00144 return kTRUE;
00145 }
00146
00147 Bool_t LogId::setXY(CALAxes xyVal) {
00148
00149
00150 m_tag &= ~(CAL_M_XY << CAL_V_XY);
00151
00152 m_tag |= xyVal << CAL_V_XY;
00153
00154 return kTRUE;
00155 }
00156
00157 Bool_t LogId::setLayer(UInt_t layerVal) {
00158
00159
00160
00161
00162
00163 UInt_t xyVal = (layerVal & CAL_M_XY);
00164
00165 UInt_t lVal = (layerVal >> CAL_K_XY);
00166
00167
00168 if (lVal & ~CAL_M_LAYER)
00169 return kFALSE;
00170
00171
00172
00173 m_tag &= ~(CAL_M_LAYER << CAL_V_LAYER);
00174
00175 m_tag |= lVal << CAL_V_LAYER;
00176
00177 m_tag &= ~(CAL_M_XY << CAL_V_XY);
00178
00179 m_tag |= xyVal << CAL_V_XY;
00180
00181 return kTRUE;
00182 }
00183
00184 Bool_t LogId::setId(UShort_t tower, UShort_t layer, UShort_t column) {
00185
00186 if (setLayer(layer) == kFALSE) return kFALSE;
00187 if (setColumn(column) == kFALSE) return kFALSE;
00188 if (setTower(tower) == kFALSE) return kFALSE;
00189
00190 return kTRUE;
00191 }
00192
00193
00194 UInt_t LogId::getTag() const {
00195
00196 return m_tag;
00197 }
00198
00199 UInt_t LogId::getId(UInt_t tagWord) {
00200
00201
00202
00203
00204 return static_cast<UInt_t>((tagWord >> CAL_V_NEWID) & CAL_M_NEWID);
00205 }
00206
00207 UInt_t LogId::getId() const {
00208
00209 return getId(m_tag);
00210 }
00211
00212
00213 UShort_t LogId::getTower(UInt_t tagWord) {
00214
00215
00216 return static_cast<UShort_t>((tagWord >> CAL_V_TOWER) & CAL_M_TOWER);
00217 }
00218
00219 UShort_t LogId::getTower() const {
00220 return getTower(m_tag);
00221 }
00222
00223 UShort_t LogId::getColumn(UInt_t tagWord) {
00224
00225
00226
00227
00228
00229
00230
00231 return static_cast<UShort_t>((tagWord >> CAL_V_COLUMN) & CAL_M_COLUMN);
00232 }
00233
00234 UShort_t LogId::getColumn() const {
00235
00236 return getColumn(m_tag);
00237 }
00238
00239 UShort_t LogId::getLayer(UInt_t tagWord) {
00240
00241
00242 UInt_t layerVal = (tagWord >> CAL_V_LAYER) & CAL_M_LAYER;
00243 layerVal <<= CAL_K_XY;
00244 layerVal |= getXY(tagWord);
00245
00246 return UShort_t(layerVal);
00247 }
00248
00249 UShort_t LogId::getLayer() const {
00250
00251 return getLayer(m_tag);
00252 }
00253
00254
00255 UShort_t LogId::getXY(UInt_t tagWord) {
00256
00257 return static_cast<UShort_t>((tagWord >> CAL_V_XY) & CAL_M_XY);
00258 }
00259
00260 LogId::CALAxes LogId::getXY() const {
00261
00262 return (CALAxes)getXY(m_tag);
00263 }
00264
00265