00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "CondFormats/DTObjects/interface/DTLVStatus.h"
00014
00015
00016
00017
00018
00019 #include "DataFormats/MuonDetId/interface/DTChamberId.h"
00020
00021
00022
00023
00024 #include <iostream>
00025 #include <sstream>
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 DTLVStatus::DTLVStatus():
00036 dataVersion( " " ) {
00037 dataList.reserve( 10 );
00038 dBuf = 0;
00039 }
00040
00041
00042 DTLVStatus::DTLVStatus( const std::string& version ):
00043 dataVersion( version ) {
00044 dataList.reserve( 10 );
00045 dBuf = 0;
00046 }
00047
00048
00049 DTLVStatusId::DTLVStatusId() :
00050 wheelId( 0 ),
00051 stationId( 0 ),
00052 sectorId( 0 ) {
00053 }
00054
00055
00056 DTLVStatusData::DTLVStatusData() :
00057 flagCFE( 0 ),
00058 flagDFE( 0 ),
00059 flagCMC( 0 ),
00060 flagDMC( 0 ) {
00061 }
00062
00063
00064
00065
00066
00067 DTLVStatus::~DTLVStatus() {
00068
00069 delete dBuf;
00070 }
00071
00072
00073 DTLVStatusId::~DTLVStatusId() {
00074 }
00075
00076
00077 DTLVStatusData::~DTLVStatusData() {
00078 }
00079
00080
00081
00082
00083
00084 int DTLVStatus::get( int wheelId,
00085 int stationId,
00086 int sectorId,
00087 int& flagCFE,
00088 int& flagDFE,
00089 int& flagCMC,
00090 int& flagDMC ) const {
00091 flagCFE = 0;
00092 flagDFE = 0;
00093 flagCMC = 0;
00094 flagDMC = 0;
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104 if ( dBuf == 0 ) cacheMap();
00105
00106 std::vector<int> chanKey;
00107 chanKey.reserve(3);
00108 chanKey.push_back( wheelId );
00109 chanKey.push_back( stationId );
00110 chanKey.push_back( sectorId );
00111 int ientry;
00112 int searchStatus = dBuf->find( chanKey.begin(), chanKey.end(), ientry );
00113 if ( !searchStatus ) {
00114 const DTLVStatusData& data( dataList[ientry].second );
00115 flagCFE = data.flagCFE;
00116 flagDFE = data.flagDFE;
00117 flagCMC = data.flagCMC;
00118 flagDMC = data.flagDMC;
00119 }
00120
00121 return searchStatus;
00122
00123 }
00124
00125
00126 int DTLVStatus::get( const DTChamberId& id,
00127 int& flagCFE,
00128 int& flagDFE,
00129 int& flagCMC,
00130 int& flagDMC ) const {
00131 return get( id.wheel(),
00132 id.station(),
00133 id.sector(),
00134 flagCFE,
00135 flagDFE,
00136 flagCMC,
00137 flagDMC );
00138 }
00139
00140
00141 const
00142 std::string& DTLVStatus::version() const {
00143 return dataVersion;
00144 }
00145
00146
00147 std::string& DTLVStatus::version() {
00148 return dataVersion;
00149 }
00150
00151
00152 void DTLVStatus::clear() {
00153
00154 delete dBuf;
00155 dBuf = 0;
00156 dataList.clear();
00157 return;
00158 }
00159
00160
00161 int DTLVStatus::set( int wheelId,
00162 int stationId,
00163 int sectorId,
00164 int flagCFE,
00165 int flagDFE,
00166 int flagCMC,
00167 int flagDMC ) {
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177 if ( dBuf == 0 ) cacheMap();
00178 std::vector<int> chanKey;
00179 chanKey.reserve(3);
00180 chanKey.push_back( wheelId );
00181 chanKey.push_back( stationId );
00182 chanKey.push_back( sectorId );
00183 int ientry;
00184 int searchStatus = dBuf->find( chanKey.begin(), chanKey.end(), ientry );
00185
00186 if ( !searchStatus ) {
00187 DTLVStatusData& data( dataList[ientry].second );
00188 data.flagCFE = flagCFE;
00189 data.flagDFE = flagDFE;
00190 data.flagCMC = flagCMC;
00191 data.flagDMC = flagDMC;
00192 return -1;
00193 }
00194 else {
00195 DTLVStatusId key;
00196 key. wheelId = wheelId;
00197 key.stationId = stationId;
00198 key. sectorId = sectorId;
00199 DTLVStatusData data;
00200 data.flagCFE = flagCFE;
00201 data.flagDFE = flagDFE;
00202 data.flagCMC = flagCMC;
00203 data.flagDMC = flagDMC;
00204 ientry = dataList.size();
00205 dataList.push_back( std::pair<DTLVStatusId,
00206 DTLVStatusData>( key, data ) );
00207 dBuf->insert( chanKey.begin(), chanKey.end(), ientry );
00208 return 0;
00209 }
00210
00211 return 99;
00212
00213 }
00214
00215
00216 int DTLVStatus::set( const DTChamberId& id,
00217 int flagCFE,
00218 int flagDFE,
00219 int flagCMC,
00220 int flagDMC ) {
00221 return set( id.wheel(),
00222 id.station(),
00223 id.sector(),
00224 flagCFE,
00225 flagDFE,
00226 flagCMC,
00227 flagDMC );
00228 }
00229
00230
00231 int DTLVStatus::setFlagCFE( int wheelId,
00232 int stationId,
00233 int sectorId,
00234 int flag ) {
00235 int flagCFE;
00236 int flagDFE;
00237 int flagCMC;
00238 int flagDMC;
00239 get( wheelId,
00240 stationId,
00241 sectorId,
00242 flagCFE,
00243 flagDFE,
00244 flagCMC,
00245 flagDMC );
00246 return set( wheelId,
00247 stationId,
00248 sectorId,
00249 flag,
00250 flagDFE,
00251 flagCMC,
00252 flagDMC );
00253 }
00254
00255
00256 int DTLVStatus::setFlagCFE( const DTChamberId& id,
00257 int flag ) {
00258 return setFlagCFE( id.wheel(),
00259 id.station(),
00260 id.sector(),
00261 flag );
00262 }
00263
00264
00265 int DTLVStatus::setFlagDFE( int wheelId,
00266 int stationId,
00267 int sectorId,
00268 int flag ) {
00269 int flagCFE;
00270 int flagDFE;
00271 int flagCMC;
00272 int flagDMC;
00273 get( wheelId,
00274 stationId,
00275 sectorId,
00276 flagCFE,
00277 flagDFE,
00278 flagCMC,
00279 flagDMC );
00280 return set( wheelId,
00281 stationId,
00282 sectorId,
00283 flagCFE,
00284 flag,
00285 flagCMC,
00286 flagDMC );
00287 }
00288
00289
00290 int DTLVStatus::setFlagDFE( const DTChamberId& id,
00291 int flag ) {
00292 return setFlagDFE( id.wheel(),
00293 id.station(),
00294 id.sector(),
00295 flag );
00296 }
00297
00298
00299 int DTLVStatus::setFlagCMC( int wheelId,
00300 int stationId,
00301 int sectorId,
00302 int flag ) {
00303 int flagCFE;
00304 int flagDFE;
00305 int flagCMC;
00306 int flagDMC;
00307 get( wheelId,
00308 stationId,
00309 sectorId,
00310 flagCFE,
00311 flagDFE,
00312 flagCMC,
00313 flagDMC );
00314 return set( wheelId,
00315 stationId,
00316 sectorId,
00317 flagCFE,
00318 flagDFE,
00319 flag,
00320 flagDMC );
00321 }
00322
00323
00324 int DTLVStatus::setFlagCMC( const DTChamberId& id,
00325 int flag ) {
00326 return setFlagCMC( id.wheel(),
00327 id.station(),
00328 id.sector(),
00329 flag );
00330 }
00331
00332
00333 int DTLVStatus::setFlagDMC( int wheelId,
00334 int stationId,
00335 int sectorId,
00336 int flag ) {
00337 int flagCFE;
00338 int flagDFE;
00339 int flagCMC;
00340 int flagDMC;
00341 get( wheelId,
00342 stationId,
00343 sectorId,
00344 flagCFE,
00345 flagDFE,
00346 flagCMC,
00347 flagDMC );
00348 return set( wheelId,
00349 stationId,
00350 sectorId,
00351 flagCFE,
00352 flagDFE,
00353 flagCMC,
00354 flag );
00355 }
00356
00357
00358 int DTLVStatus::setFlagDMC( const DTChamberId& id,
00359 int flag ) {
00360 return setFlagDMC( id.wheel(),
00361 id.station(),
00362 id.sector(),
00363 flag );
00364 }
00365
00366
00367 DTLVStatus::const_iterator DTLVStatus::begin() const {
00368 return dataList.begin();
00369 }
00370
00371
00372 DTLVStatus::const_iterator DTLVStatus::end() const {
00373 return dataList.end();
00374 }
00375
00376
00377 std::string DTLVStatus::mapName() const {
00378 std::stringstream name;
00379 name << dataVersion << "_map_Mtime" << this;
00380 return name.str();
00381 }
00382
00383
00384 void DTLVStatus::cacheMap() const {
00385
00386
00387
00388
00389 DTBufferTree<int,int>** pBuf;
00390 pBuf = const_cast<DTBufferTree<int,int>**>( &dBuf );
00391 *pBuf = new DTBufferTree<int,int>;
00392
00393 int entryNum = 0;
00394 int entryMax = dataList.size();
00395 std::vector<int> chanKey;
00396 chanKey.reserve(3);
00397 while ( entryNum < entryMax ) {
00398
00399 const DTLVStatusId& chan = dataList[entryNum].first;
00400
00401 chanKey.clear();
00402 chanKey.push_back( chan. wheelId );
00403 chanKey.push_back( chan.stationId );
00404 chanKey.push_back( chan. sectorId );
00405 dBuf->insert( chanKey.begin(), chanKey.end(), entryNum++ );
00406
00407 }
00408
00409 return;
00410
00411 }
00412