CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch13/src/CondFormats/DTObjects/src/DTLVStatus.cc

Go to the documentation of this file.
00001 /*
00002  *  See header file for a description of this class.
00003  *
00004  *  $Date: 2010/01/20 18:20:08 $
00005  *  $Revision: 1.2 $
00006  *  \author Paolo Ronchese INFN Padova
00007  *
00008  */
00009 
00010 //----------------------
00011 // This Class' Header --
00012 //----------------------
00013 #include "CondFormats/DTObjects/interface/DTLVStatus.h"
00014 
00015 //-------------------------------
00016 // Collaborating Class Headers --
00017 //-------------------------------
00018 //#include "CondFormats/DTObjects/interface/DTDataBuffer.h"
00019 #include "DataFormats/MuonDetId/interface/DTChamberId.h"
00020 
00021 //---------------
00022 // C++ Headers --
00023 //---------------
00024 #include <iostream>
00025 #include <sstream>
00026 
00027 //-------------------
00028 // Initializations --
00029 //-------------------
00030 
00031 
00032 //----------------
00033 // Constructors --
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 // Destructor --
00066 //--------------
00067 DTLVStatus::~DTLVStatus() {
00068 //  DTDataBuffer<int,int>::dropBuffer( mapName() );
00069   delete dBuf;
00070 }
00071 
00072 
00073 DTLVStatusId::~DTLVStatusId() {
00074 }
00075 
00076 
00077 DTLVStatusData::~DTLVStatusData() {
00078 }
00079 
00080 
00081 //--------------
00082 // Operations --
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 //  std::string mName = mapName();
00097 //  DTBufferTree<int,int>* dBuf =
00098 //  DTDataBuffer<int,int>::findBuffer( mName );
00099 //  if ( dBuf == 0 ) {
00100 //    cacheMap();
00101 //    dBuf =
00102 //    DTDataBuffer<int,int>::findBuffer( mName );
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 //  DTDataBuffer<int,int>::dropBuffer( mapName() );
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 //  std::string mName = mapName();
00170 //  DTBufferTree<int,int>* dBuf =
00171 //  DTDataBuffer<int,int>::findBuffer( mName );
00172 //  if ( dBuf == 0 ) {
00173 //    cacheMap();
00174 //    dBuf =
00175 //    DTDataBuffer<int,int>::findBuffer( mName );
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 //  std::string mName = mapName();
00387 //  DTBufferTree<int,int>* dBuf =
00388 //  DTDataBuffer<int,int>::openBuffer( mName );
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