00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "CondFormats/DTObjects/interface/DTDeadFlag.h"
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <iostream>
00024 #include <sstream>
00025
00026
00027
00028
00029 DTDeadFlag::DTDeadFlag():
00030 dataVersion( " " ) {
00031 dataList.reserve( 1000 );
00032 dBuf = 0;
00033 }
00034
00035
00036 DTDeadFlag::DTDeadFlag( const std::string& version ):
00037 dataVersion( version ) {
00038 dataList.reserve( 1000 );
00039 dBuf = 0;
00040 }
00041
00042
00043 DTDeadFlagId::DTDeadFlagId() :
00044 wheelId( 0 ),
00045 stationId( 0 ),
00046 sectorId( 0 ),
00047 slId( 0 ),
00048 layerId( 0 ),
00049 cellId( 0 ) {
00050 }
00051
00052
00053 DTDeadFlagData::DTDeadFlagData() :
00054 dead_HV( false ),
00055 dead_TP( false ),
00056 dead_RO( false ),
00057 discCat( false ) {
00058 }
00059
00060
00061
00062
00063
00064 DTDeadFlag::~DTDeadFlag() {
00065
00066 delete dBuf;
00067 }
00068
00069
00070 DTDeadFlagId::~DTDeadFlagId() {
00071 }
00072
00073
00074 DTDeadFlagData::~DTDeadFlagData() {
00075 }
00076
00077
00078
00079
00080
00081 int DTDeadFlag::get( int wheelId,
00082 int stationId,
00083 int sectorId,
00084 int slId,
00085 int layerId,
00086 int cellId,
00087 bool& dead_HV,
00088 bool& dead_TP,
00089 bool& dead_RO,
00090 bool& discCat ) const {
00091
00092 dead_HV =
00093 dead_TP =
00094 dead_RO =
00095 discCat = false;
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105 if ( dBuf == 0 ) cacheMap();
00106 std::vector<int> chanKey;
00107 chanKey.reserve(6);
00108 chanKey.push_back( wheelId );
00109 chanKey.push_back( stationId );
00110 chanKey.push_back( sectorId );
00111 chanKey.push_back( slId );
00112 chanKey.push_back( layerId );
00113 chanKey.push_back( cellId );
00114 int ientry;
00115 int searchStatus = dBuf->find( chanKey.begin(), chanKey.end(), ientry );
00116 if ( !searchStatus ) {
00117 const DTDeadFlagData& data( dataList[ientry].second );
00118 dead_HV = data.dead_HV;
00119 dead_TP = data.dead_TP;
00120 dead_RO = data.dead_RO;
00121 discCat = data.discCat;
00122 }
00123
00124 return searchStatus;
00125
00126 }
00127
00128
00129 int DTDeadFlag::get( const DTWireId& id,
00130 bool& dead_HV,
00131 bool& dead_TP,
00132 bool& dead_RO,
00133 bool& discCat ) const {
00134 return get( id.wheel(),
00135 id.station(),
00136 id.sector(),
00137 id.superLayer(),
00138 id.layer(),
00139 id.wire(),
00140 dead_HV, dead_TP, dead_RO, discCat );
00141 }
00142
00143
00144 bool DTDeadFlag::getCellDead_HV( int wheelId,
00145 int stationId,
00146 int sectorId,
00147 int slId,
00148 int layerId,
00149 int cellId ) const {
00150
00151 bool dead_HV;
00152 bool dead_TP;
00153 bool dead_RO;
00154 bool discCat;
00155 get( wheelId,
00156 stationId,
00157 sectorId,
00158 slId,
00159 layerId,
00160 cellId,
00161 dead_HV, dead_TP, dead_RO, discCat );
00162 return dead_HV;
00163
00164 }
00165
00166
00167 bool DTDeadFlag::getCellDead_HV( const DTWireId& id ) const {
00168 return getCellDead_HV( id.wheel(),
00169 id.station(),
00170 id.sector(),
00171 id.superLayer(),
00172 id.layer(),
00173 id.wire() );
00174 }
00175
00176
00177 bool DTDeadFlag::getCellDead_TP( int wheelId,
00178 int stationId,
00179 int sectorId,
00180 int slId,
00181 int layerId,
00182 int cellId ) const {
00183
00184 bool dead_HV;
00185 bool dead_TP;
00186 bool dead_RO;
00187 bool discCat;
00188 get( wheelId,
00189 stationId,
00190 sectorId,
00191 slId,
00192 layerId,
00193 cellId,
00194 dead_HV, dead_TP, dead_RO, discCat );
00195 return dead_TP;
00196
00197 }
00198
00199
00200 bool DTDeadFlag::getCellDead_TP( const DTWireId& id ) const {
00201 return getCellDead_TP( id.wheel(),
00202 id.station(),
00203 id.sector(),
00204 id.superLayer(),
00205 id.layer(),
00206 id.wire() );
00207 }
00208
00209
00210 bool DTDeadFlag::getCellDead_RO( int wheelId,
00211 int stationId,
00212 int sectorId,
00213 int slId,
00214 int layerId,
00215 int cellId ) const {
00216
00217 bool dead_HV;
00218 bool dead_TP;
00219 bool dead_RO;
00220 bool discCat;
00221 get( wheelId,
00222 stationId,
00223 sectorId,
00224 slId,
00225 layerId,
00226 cellId,
00227 dead_HV, dead_TP, dead_RO, discCat );
00228 return dead_RO;
00229
00230 }
00231
00232
00233 bool DTDeadFlag::getCellDead_RO( const DTWireId& id ) const {
00234 return getCellDead_RO( id.wheel(),
00235 id.station(),
00236 id.sector(),
00237 id.superLayer(),
00238 id.layer(),
00239 id.wire() );
00240 }
00241
00242
00243 bool DTDeadFlag::getCellDiscCat( int wheelId,
00244 int stationId,
00245 int sectorId,
00246 int slId,
00247 int layerId,
00248 int cellId ) const {
00249
00250 bool dead_HV;
00251 bool dead_TP;
00252 bool dead_RO;
00253 bool discCat;
00254 get( wheelId,
00255 stationId,
00256 sectorId,
00257 slId,
00258 layerId,
00259 cellId,
00260 dead_HV, dead_TP, dead_RO, discCat );
00261 return discCat;
00262
00263 }
00264
00265
00266 bool DTDeadFlag::getCellDiscCat( const DTWireId& id ) const {
00267 return getCellDiscCat( id.wheel(),
00268 id.station(),
00269 id.sector(),
00270 id.superLayer(),
00271 id.layer(),
00272 id.wire() );
00273 }
00274
00275
00276 const
00277 std::string& DTDeadFlag::version() const {
00278 return dataVersion;
00279 }
00280
00281
00282 std::string& DTDeadFlag::version() {
00283 return dataVersion;
00284 }
00285
00286
00287 void DTDeadFlag::clear() {
00288
00289 delete dBuf;
00290 dBuf = 0;
00291 dataList.clear();
00292 return;
00293 }
00294
00295
00296 int DTDeadFlag::set( int wheelId,
00297 int stationId,
00298 int sectorId,
00299 int slId,
00300 int layerId,
00301 int cellId,
00302 bool dead_HV,
00303 bool dead_TP,
00304 bool dead_RO,
00305 bool discCat ) {
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315 if ( dBuf == 0 ) cacheMap();
00316 std::vector<int> chanKey;
00317 chanKey.reserve(6);
00318 chanKey.push_back( wheelId );
00319 chanKey.push_back( stationId );
00320 chanKey.push_back( sectorId );
00321 chanKey.push_back( slId );
00322 chanKey.push_back( layerId );
00323 chanKey.push_back( cellId );
00324 int ientry;
00325 int searchStatus = dBuf->find( chanKey.begin(), chanKey.end(), ientry );
00326
00327 if ( !searchStatus ) {
00328 DTDeadFlagData& data( dataList[ientry].second );
00329 data.dead_HV = dead_HV;
00330 data.dead_TP = dead_TP;
00331 data.dead_RO = dead_RO;
00332 data.discCat = discCat;
00333 return -1;
00334 }
00335 else {
00336 DTDeadFlagId key;
00337 key. wheelId = wheelId;
00338 key.stationId = stationId;
00339 key. sectorId = sectorId;
00340 key. slId = slId;
00341 key. layerId = layerId;
00342 key. cellId = cellId;
00343 DTDeadFlagData data;
00344 data.dead_HV = dead_HV;
00345 data.dead_TP = dead_TP;
00346 data.dead_RO = dead_RO;
00347 data.discCat = discCat;
00348 ientry = dataList.size();
00349 dataList.push_back( std::pair<const DTDeadFlagId,
00350 DTDeadFlagData>( key, data ) );
00351 dBuf->insert( chanKey.begin(), chanKey.end(), ientry );
00352 return 0;
00353 }
00354
00355 return 99;
00356
00357 }
00358
00359
00360 int DTDeadFlag::set( const DTWireId& id,
00361 bool dead_HV,
00362 bool dead_TP,
00363 bool dead_RO,
00364 bool discCat ) {
00365 return set( id.wheel(),
00366 id.station(),
00367 id.sector(),
00368 id.superLayer(),
00369 id.layer(),
00370 id.wire(),
00371 dead_HV, dead_TP, dead_RO, discCat );
00372 }
00373
00374
00375 int DTDeadFlag::setCellDead_HV( int wheelId,
00376 int stationId,
00377 int sectorId,
00378 int slId,
00379 int layerId,
00380 int cellId,
00381 bool flag ) {
00382
00383 bool dead_HV;
00384 bool dead_TP;
00385 bool dead_RO;
00386 bool discCat;
00387 int status = cellStatus( wheelId,
00388 stationId,
00389 sectorId,
00390 slId,
00391 layerId,
00392 cellId,
00393 dead_HV, dead_TP, dead_RO, discCat );
00394 setCellStatus( wheelId,
00395 stationId,
00396 sectorId,
00397 slId,
00398 layerId,
00399 cellId,
00400 flag, dead_TP, dead_RO, discCat );
00401 return status;
00402
00403 }
00404
00405
00406 int DTDeadFlag::setCellDead_HV( const DTWireId& id,
00407 bool flag ) {
00408 return setCellDead_HV( id.wheel(),
00409 id.station(),
00410 id.sector(),
00411 id.superLayer(),
00412 id.layer(),
00413 id.wire(),
00414 flag );
00415 }
00416
00417
00418 int DTDeadFlag::setCellDead_TP( int wheelId,
00419 int stationId,
00420 int sectorId,
00421 int slId,
00422 int layerId,
00423 int cellId,
00424 bool flag ) {
00425
00426 bool dead_HV;
00427 bool dead_TP;
00428 bool dead_RO;
00429 bool discCat;
00430 int status = cellStatus( wheelId,
00431 stationId,
00432 sectorId,
00433 slId,
00434 layerId,
00435 cellId,
00436 dead_HV, dead_TP, dead_RO, discCat );
00437 setCellStatus( wheelId,
00438 stationId,
00439 sectorId,
00440 slId,
00441 layerId,
00442 cellId,
00443 dead_HV, flag, dead_RO, discCat );
00444 return status;
00445
00446 }
00447
00448
00449 int DTDeadFlag::setCellDead_TP( const DTWireId& id,
00450 bool flag ) {
00451 return setCellDead_TP( id.wheel(),
00452 id.station(),
00453 id.sector(),
00454 id.superLayer(),
00455 id.layer(),
00456 id.wire(),
00457 flag );
00458 }
00459
00460
00461 int DTDeadFlag::setCellDead_RO( int wheelId,
00462 int stationId,
00463 int sectorId,
00464 int slId,
00465 int layerId,
00466 int cellId,
00467 bool flag ) {
00468
00469 bool dead_HV;
00470 bool dead_TP;
00471 bool dead_RO;
00472 bool discCat;
00473 int status = cellStatus( wheelId,
00474 stationId,
00475 sectorId,
00476 slId,
00477 layerId,
00478 cellId,
00479 dead_HV, dead_TP, dead_RO, discCat );
00480 setCellStatus( wheelId,
00481 stationId,
00482 sectorId,
00483 slId,
00484 layerId,
00485 cellId,
00486 dead_HV, dead_TP, flag, discCat );
00487 return status;
00488
00489 }
00490
00491
00492 int DTDeadFlag::setCellDead_RO( const DTWireId& id,
00493 bool flag ) {
00494 return setCellDead_RO( id.wheel(),
00495 id.station(),
00496 id.sector(),
00497 id.superLayer(),
00498 id.layer(),
00499 id.wire(),
00500 flag );
00501 }
00502
00503
00504 int DTDeadFlag::setCellDiscCat( int wheelId,
00505 int stationId,
00506 int sectorId,
00507 int slId,
00508 int layerId,
00509 int cellId,
00510 bool flag ) {
00511
00512 bool dead_HV;
00513 bool dead_TP;
00514 bool dead_RO;
00515 bool discCat;
00516 int status = cellStatus( wheelId,
00517 stationId,
00518 sectorId,
00519 slId,
00520 layerId,
00521 cellId,
00522 dead_HV, dead_TP, dead_RO, discCat );
00523 setCellStatus( wheelId,
00524 stationId,
00525 sectorId,
00526 slId,
00527 layerId,
00528 cellId,
00529 dead_HV, dead_TP, dead_RO, flag );
00530 return status;
00531
00532 }
00533
00534
00535 int DTDeadFlag::setCellDiscCat( const DTWireId& id,
00536 bool flag ) {
00537 return setCellDiscCat( id.wheel(),
00538 id.station(),
00539 id.sector(),
00540 id.superLayer(),
00541 id.layer(),
00542 id.wire(),
00543 flag );
00544 }
00545
00546
00547 DTDeadFlag::const_iterator DTDeadFlag::begin() const {
00548 return dataList.begin();
00549 }
00550
00551
00552 DTDeadFlag::const_iterator DTDeadFlag::end() const {
00553 return dataList.end();
00554 }
00555
00556
00557 std::string DTDeadFlag::mapName() const {
00558 std::stringstream name;
00559 name << dataVersion << "_map_DeadFlag" << this;
00560 return name.str();
00561 }
00562
00563
00564 void DTDeadFlag::cacheMap() const {
00565
00566
00567
00568
00569 DTBufferTree<int,int>** pBuf;
00570 pBuf = const_cast<DTBufferTree<int,int>**>( &dBuf );
00571 *pBuf = new DTBufferTree<int,int>;
00572
00573 int entryNum = 0;
00574 int entryMax = dataList.size();
00575 std::vector<int> chanKey;
00576 chanKey.reserve(6);
00577 while ( entryNum < entryMax ) {
00578
00579 const DTDeadFlagId& chan = dataList[entryNum].first;
00580
00581 chanKey.clear();
00582 chanKey.push_back( chan. wheelId );
00583 chanKey.push_back( chan.stationId );
00584 chanKey.push_back( chan. sectorId );
00585 chanKey.push_back( chan. slId );
00586 chanKey.push_back( chan. layerId );
00587 chanKey.push_back( chan. cellId );
00588 dBuf->insert( chanKey.begin(), chanKey.end(), entryNum++ );
00589
00590 }
00591
00592 return;
00593
00594 }
00595