CMS 3D CMS Logo

DTTtrig.cc

Go to the documentation of this file.
00001 /*
00002  *  See header file for a description of this class.
00003  *
00004  *  $Date: 2008/07/15 15:57:23 $
00005  *  $Revision: 1.15 $
00006  *  \author Paolo Ronchese INFN Padova
00007  *
00008  */
00009 
00010 //----------------------
00011 // This Class' Header --
00012 //----------------------
00013 #include "CondFormats/DTObjects/interface/DTTtrig.h"
00014 
00015 //-------------------------------
00016 // Collaborating Class Headers --
00017 //-------------------------------
00018 #include "CondFormats/DTObjects/interface/DTDataBuffer.h"
00019 
00020 //---------------
00021 // C++ Headers --
00022 //---------------
00023 #include <iostream>
00024 #include <sstream>
00025 
00026 //-------------------
00027 // Initializations --
00028 //-------------------
00029 
00030 
00031 //----------------
00032 // Constructors --
00033 //----------------
00034 DTTtrig::DTTtrig():
00035   dataVersion( " " ),
00036   nsPerCount( 25.0 / 32.0 ) {
00037   dataList.reserve( 1000 );
00038 }
00039 
00040 
00041 DTTtrig::DTTtrig( const std::string& version ):
00042   dataVersion( version ),
00043   nsPerCount( 25.0 / 32.0 ) {
00044   dataList.reserve( 1000 );
00045 }
00046 
00047 
00048 DTTtrigId::DTTtrigId() :
00049     wheelId( 0 ),
00050   stationId( 0 ),
00051    sectorId( 0 ),
00052        slId( 0 ),
00053     layerId( 0 ),
00054      cellId( 0 ) {
00055 }
00056 
00057 
00058 DTTtrigData::DTTtrigData() :
00059   tTrig( 0.0 ),
00060   tTrms( 0.0 ) {
00061 }
00062 
00063 
00064 //--------------
00065 // Destructor --
00066 //--------------
00067 DTTtrig::~DTTtrig() {
00068   DTDataBuffer<int,int>::dropBuffer( mapName() );
00069 }
00070 
00071 
00072 DTTtrigId::~DTTtrigId() {
00073 }
00074 
00075 
00076 DTTtrigData::~DTTtrigData() {
00077 }
00078 
00079 
00080 //--------------
00081 // Operations --
00082 //--------------
00083 int DTTtrig::get( int   wheelId,
00084                   int stationId,
00085                   int  sectorId,
00086                   int      slId,
00087                   float&  tTrig,
00088                   float&  tTrms,
00089                   DTTimeUnits::type unit ) const {
00090   return get( wheelId, stationId, sectorId,
00091                  slId,         0,        0,
00092                 tTrig, tTrms, unit );
00093 
00094 }
00095 
00096 
00097 int DTTtrig::get( int   wheelId,
00098                   int stationId,
00099                   int  sectorId,
00100                   int      slId,
00101                   int   layerId,
00102                   int    cellId,
00103                   float&  tTrig,
00104                   float&  tTrms,
00105                   DTTimeUnits::type unit ) const {
00106 
00107   tTrig =
00108   tTrms = 0.0;
00109 
00110   std::string mName = mapName();
00111   DTBufferTree<int,int>* dBuf =
00112   DTDataBuffer<int,int>::findBuffer( mName );
00113   if ( dBuf == 0 ) {
00114     cacheMap();
00115     dBuf =
00116     DTDataBuffer<int,int>::findBuffer( mName );
00117   }
00118 
00119   std::vector<int> chanKey;
00120   chanKey.reserve(6);
00121   chanKey.push_back(   wheelId );
00122   chanKey.push_back( stationId );
00123   chanKey.push_back(  sectorId );
00124   chanKey.push_back(      slId );
00125   chanKey.push_back(   layerId );
00126   chanKey.push_back(    cellId );
00127   int ientry;
00128   int searchStatus = dBuf->find( chanKey.begin(), chanKey.end(), ientry );
00129   if ( !searchStatus ) {
00130     const DTTtrigData& data( dataList[ientry].second );
00131     tTrig = data.tTrig;
00132     tTrms = data.tTrms;
00133     if ( unit == DTTimeUnits::ns ) {
00134       tTrig *= nsPerCount;
00135       tTrms *= nsPerCount;
00136     }
00137   }
00138 
00139   return searchStatus;
00140 
00141 }
00142 
00143 
00144 int DTTtrig::get( const DTSuperLayerId& id,
00145                   float&  tTrig,
00146                   float&  tTrms,
00147                   DTTimeUnits::type unit ) const {
00148   return get( id.wheel(),
00149               id.station(),
00150               id.sector(),
00151               id.superLayer(), 0, 0,
00152               tTrig, tTrms, unit );
00153 }
00154 
00155 
00156 int DTTtrig::get( const DetId& id,
00157                   float&  tTrig,
00158                   float&  tTrms,
00159                   DTTimeUnits::type unit ) const {
00160   DTWireId wireId( id.rawId() );
00161   return get( wireId.wheel(),
00162               wireId.station(),
00163               wireId.sector(),
00164               wireId.superLayer(),
00165               wireId.layer(),
00166               wireId.wire(),
00167               tTrig, tTrms, unit );
00168 }
00169 
00170 
00171 float DTTtrig::unit() const {
00172   return nsPerCount;
00173 }
00174 
00175 
00176 const
00177 std::string& DTTtrig::version() const {
00178   return dataVersion;
00179 }
00180 
00181 
00182 std::string& DTTtrig::version() {
00183   return dataVersion;
00184 }
00185 
00186 
00187 void DTTtrig::clear() {
00188   DTDataBuffer<int,int>::dropBuffer( mapName() );
00189   dataList.clear();
00190   return;
00191 }
00192 
00193 
00194 int DTTtrig::set( int   wheelId,
00195                   int stationId,
00196                   int  sectorId,
00197                   int      slId,
00198                   float   tTrig,
00199                   float   tTrms,
00200                   DTTimeUnits::type unit ) {
00201   return set( wheelId, stationId, sectorId,
00202                  slId,         0,        0,
00203                 tTrig, tTrms, unit );
00204 
00205 }
00206 
00207 
00208 int DTTtrig::set( int   wheelId,
00209                   int stationId,
00210                   int  sectorId,
00211                   int      slId,
00212                   int   layerId,
00213                   int    cellId,
00214                   float   tTrig,
00215                   float   tTrms,
00216                   DTTimeUnits::type unit ) {
00217 
00218   if ( unit == DTTimeUnits::ns ) {
00219     tTrig /= nsPerCount;
00220     tTrms /= nsPerCount;
00221   }
00222 
00223   std::string mName = mapName();
00224   DTBufferTree<int,int>* dBuf =
00225   DTDataBuffer<int,int>::findBuffer( mName );
00226   if ( dBuf == 0 ) {
00227     cacheMap();
00228     dBuf =
00229     DTDataBuffer<int,int>::findBuffer( mName );
00230   }
00231   std::vector<int> chanKey;
00232   chanKey.reserve(6);
00233   chanKey.push_back(   wheelId );
00234   chanKey.push_back( stationId );
00235   chanKey.push_back(  sectorId );
00236   chanKey.push_back(      slId );
00237   chanKey.push_back(   layerId );
00238   chanKey.push_back(    cellId );
00239   int ientry;
00240   int searchStatus = dBuf->find( chanKey.begin(), chanKey.end(), ientry );
00241 
00242   if ( !searchStatus ) {
00243     DTTtrigData& data( dataList[ientry].second );
00244     data.tTrig = tTrig;
00245     data.tTrms = tTrms;
00246     return -1;
00247   }
00248   else {
00249     DTTtrigId key;
00250     key.  wheelId =   wheelId;
00251     key.stationId = stationId;
00252     key. sectorId =  sectorId;
00253     key.     slId =      slId;
00254     key.  layerId =   layerId;
00255     key.   cellId =    cellId;
00256     DTTtrigData data;
00257     data.tTrig = tTrig;
00258     data.tTrms = tTrms;
00259     ientry = dataList.size();
00260     dataList.push_back( std::pair<DTTtrigId,DTTtrigData>( key, data ) );
00261     dBuf->insert( chanKey.begin(), chanKey.end(), ientry );
00262     return 0;
00263   }
00264 
00265   return 99;
00266 
00267 }
00268 
00269 
00270 int DTTtrig::set( const DTSuperLayerId& id,
00271                   float   tTrig,
00272                   float   tTrms,
00273                   DTTimeUnits::type unit ) {
00274   return set( id.wheel(),
00275               id.station(),
00276               id.sector(),
00277               id.superLayer(), 0, 0,
00278               tTrig, tTrms, unit );
00279 }
00280 
00281 
00282 int DTTtrig::set( const DetId& id,
00283                   float   tTrig,
00284                   float   tTrms,
00285                   DTTimeUnits::type unit ) {
00286   DTWireId wireId( id.rawId() );
00287   return set( wireId.wheel(),
00288               wireId.station(),
00289               wireId.sector(),
00290               wireId.superLayer(),
00291               wireId.layer(),
00292               wireId.wire(),
00293               tTrig, tTrms, unit );
00294 }
00295 
00296 
00297 void DTTtrig::setUnit( float unit ) {
00298   nsPerCount = unit;
00299 }
00300 
00301 
00302 DTTtrig::const_iterator DTTtrig::begin() const {
00303   return dataList.begin();
00304 }
00305 
00306 
00307 DTTtrig::const_iterator DTTtrig::end() const {
00308   return dataList.end();
00309 }
00310 
00311 
00312 std::string DTTtrig::mapName() const {
00313   std::stringstream name;
00314   name << dataVersion << "_map_Ttrig" << this;
00315   return name.str();
00316 }
00317 
00318 
00319 void DTTtrig::cacheMap() const {
00320 
00321   std::string mName = mapName();
00322   DTBufferTree<int,int>* dBuf =
00323   DTDataBuffer<int,int>::openBuffer( mName );
00324 
00325   int entryNum = 0;
00326   int entryMax = dataList.size();
00327   std::vector<int> chanKey;
00328   chanKey.reserve(6);
00329   while ( entryNum < entryMax ) {
00330 
00331     const DTTtrigId& chan = dataList[entryNum].first;
00332 
00333     chanKey.clear();
00334     chanKey.push_back( chan.  wheelId );
00335     chanKey.push_back( chan.stationId );
00336     chanKey.push_back( chan. sectorId );
00337     chanKey.push_back( chan.     slId );
00338     chanKey.push_back( chan.  layerId );
00339     chanKey.push_back( chan.   cellId );
00340     dBuf->insert( chanKey.begin(), chanKey.end(), entryNum++ );
00341 
00342   }
00343 
00344   return;
00345 
00346 }
00347 

Generated on Tue Jun 9 17:26:26 2009 for CMSSW by  doxygen 1.5.4