00001
00002
00003
00004
00005
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00025
00026 #include "CondTools/L1Trigger/plugins/L1TriggerKeyOnlineProd.h"
00027
00028 #include "CondTools/L1Trigger/interface/Exception.h"
00029
00030 #include "CondFormats/L1TObjects/interface/L1TriggerKeyList.h"
00031 #include "CondFormats/DataRecord/interface/L1TriggerKeyListRcd.h"
00032
00033 #include "FWCore/Framework/interface/HCTypeTagTemplate.h"
00034 #include "FWCore/Framework/interface/EventSetup.h"
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 L1TriggerKeyOnlineProd::L1TriggerKeyOnlineProd(const edm::ParameterSet& iConfig)
00052 : m_tscKey( iConfig.getParameter< std::string >( "tscKey" ) ),
00053 m_omdsReader(
00054 iConfig.getParameter< std::string >( "onlineDB" ),
00055 iConfig.getParameter< std::string >( "onlineAuthentication" ) )
00056 {
00057
00058
00059 setWhatProduced(this);
00060
00061
00062 std::vector< std::string > tmp =
00063 iConfig.getParameter< std::vector< std::string > >( "recordsToInclude" ) ;
00064 std::vector< std::string >::const_iterator itr = tmp.begin() ;
00065 std::vector< std::string >::const_iterator end = tmp.end() ;
00066 for( ; itr != end ; ++itr )
00067 {
00068 m_recordsToInclude.insert( make_pair( *itr, false ) ) ;
00069 }
00070 }
00071
00072
00073 L1TriggerKeyOnlineProd::~L1TriggerKeyOnlineProd()
00074 {
00075
00076
00077
00078
00079 }
00080
00081
00082
00083
00084
00085
00086
00087 L1TriggerKeyOnlineProd::ReturnType
00088 L1TriggerKeyOnlineProd::produce(const L1TriggerKeyRcd& iRecord)
00089 {
00090 using namespace edm::es;
00091 boost::shared_ptr<L1TriggerKey> pL1TriggerKey ;
00092 pL1TriggerKey = boost::shared_ptr< L1TriggerKey >( new L1TriggerKey() ) ;
00093 pL1TriggerKey->setTSCKey( m_tscKey ) ;
00094
00095
00096 const L1TriggerKeyListRcd& keyListRcd =
00097 iRecord.getRecord< L1TriggerKeyListRcd >() ;
00098 edm::ESHandle< L1TriggerKeyList > keyList ;
00099 keyListRcd.get( keyList ) ;
00100
00101
00102 if( keyList->token( m_tscKey ) == std::string() )
00103 {
00104
00105 pL1TriggerKey = boost::shared_ptr< L1TriggerKey >(
00106 new L1TriggerKey() ) ;
00107 pL1TriggerKey->setTSCKey( m_tscKey ) ;
00108
00109 edm::LogVerbatim( "L1-O2O" ) << "TSC KEY " << m_tscKey ;
00110
00111
00112
00113
00114 std::vector< std::string > queryStrings ;
00115 queryStrings.push_back( "CSCTF_KEY" ) ;
00116 queryStrings.push_back( "DTTF_KEY" ) ;
00117 queryStrings.push_back( "RPC_KEY" ) ;
00118 queryStrings.push_back( "GMT_KEY" ) ;
00119 queryStrings.push_back( "RCT_KEY" ) ;
00120 queryStrings.push_back( "GCT_KEY" ) ;
00121 queryStrings.push_back( "GT_KEY" ) ;
00122
00123
00124 l1t::OMDSReader::QueryResults subkeyResults =
00125 m_omdsReader.basicQuery( queryStrings,
00126 "CMS_TRG_L1_CONF",
00127 "TRIGGERSUP_CONF",
00128 "TRIGGERSUP_CONF.TS_KEY",
00129 m_omdsReader.singleAttribute(m_tscKey) ) ;
00130 if( subkeyResults.second.size() != 1 )
00131 {
00132 edm::LogError( "L1-O2O" ) << "Problem with subsystem keys." ;
00133 return pL1TriggerKey ;
00134 }
00135
00136 const coral::AttributeList& row = subkeyResults.second.front() ;
00137
00138
00139
00140 std::string csctfKey = row[ "CSCTF_KEY" ].data< std::string >() ;
00141
00142 if( listContains( "L1MuCSCPtLutRcd" ) )
00143 pL1TriggerKey->add( "L1MuCSCPtLutRcd",
00144 "L1MuCSCPtLut",
00145 csctfKey ) ;
00146 if( listContains( "L1MuCSCTFAlignmentRcd" ) )
00147 pL1TriggerKey->add( "L1MuCSCTFAlignmentRcd",
00148 "L1MuCSCTFAlignment",
00149 csctfKey ) ;
00150 if( listContains( "L1MuCSCTFConfigurationRcd" ) )
00151 pL1TriggerKey->add( "L1MuCSCTFConfigurationRcd",
00152 "L1MuCSCTFConfiguration",
00153 csctfKey ) ;
00154 edm::LogVerbatim( "L1-O2O" ) << "CSCTF_KEY " << csctfKey ;
00155
00156
00157
00158 std::string dttfKey = row[ "DTTF_KEY" ].data< std::string >() ;
00159
00160 if( listContains( "L1MuDTEtaPatternLutRcd" ) )
00161 pL1TriggerKey->add( "L1MuDTEtaPatternLutRcd",
00162 "L1MuDTEtaPatternLut",
00163 dttfKey ) ;
00164 if( listContains( "L1MuDTExtLutRcd" ) )
00165 pL1TriggerKey->add( "L1MuDTExtLutRcd",
00166 "L1MuDTExtLut",
00167 dttfKey ) ;
00168 if( listContains( "L1MuDTPhiLutRcd" ) )
00169 pL1TriggerKey->add( "L1MuDTPhiLutRcd",
00170 "L1MuDTPhiLut",
00171 dttfKey ) ;
00172 if( listContains( "L1MuDTPtaLutRcd" ) )
00173 pL1TriggerKey->add( "L1MuDTPtaLutRcd",
00174 "L1MuDTPtaLut",
00175 dttfKey ) ;
00176 if( listContains( "L1MuDTQualPatternLutRcd" ) )
00177 pL1TriggerKey->add( "L1MuDTQualPatternLutRcd",
00178 "L1MuDTQualPatternLut",
00179 dttfKey ) ;
00180 edm::LogVerbatim( "L1-O2O" ) << "DTTF_KEY " << dttfKey ;
00181
00182
00183
00184 std::string rpcKey = row[ "RPC_KEY" ].data< std::string >() ;
00185 if( listContains( "L1RPCConfigRcd" ) )
00186 pL1TriggerKey->add( "L1RPCConfigRcd",
00187 "L1RPCConfig",
00188 rpcKey ) ;
00189 edm::LogVerbatim( "L1-O2O" ) << "RPC_KEY " << rpcKey ;
00190
00191
00192
00193
00194
00195
00196
00197 l1t::OMDSReader::QueryResults gmtSWKeyResults =
00198 m_omdsReader.basicQuery(
00199 "GMT_SOFTWARE_CONFIG",
00200 "CMS_GMT",
00201 "GMT_LUTS",
00202 "GMT_LUTS.KEY",
00203 m_omdsReader.basicQuery( "LUT_KEY",
00204 "CMS_GMT",
00205 "GMT_CONFIG",
00206 "GMT_CONFIG.KEY",
00207 subkeyResults, "GMT_KEY" ) ) ;
00208
00209 if( gmtSWKeyResults.second.size() == 1 )
00210 {
00211 const coral::AttributeList& gmtRow = gmtSWKeyResults.second.front() ;
00212 std::string gmtSwKey =
00213 gmtRow[ "GMT_SOFTWARE_CONFIG" ].data< std::string >() ;
00214
00215 if( listContains( "L1MuGMTParametersRcd" ) )
00216 pL1TriggerKey->add( "L1MuGMTParametersRcd",
00217 "L1MuGMTParameters",
00218 gmtSwKey ) ;
00219 edm::LogVerbatim( "L1-O2O" )
00220 << "GMT_KEY " << row[ "GMT_KEY" ].data< std::string >() ;
00221 edm::LogVerbatim( "L1-O2O" )
00222 << "GMT_SOFTWARE_CONFIG KEY " << gmtSwKey ;
00223 }
00224 else
00225 {
00226 edm::LogError( "L1-O2O" )
00227 << "Problem with object key for L1MuGMTParametersRcd." ;
00228 }
00229
00230
00231
00232 std::string rctKey = row[ "RCT_KEY" ].data< std::string >() ;
00233 if( listContains( "L1RCTParametersRcd" ) )
00234 pL1TriggerKey->add( "L1RCTParametersRcd",
00235 "L1RCTParameters",
00236 rctKey ) ;
00237 if( listContains( "L1CaloEcalScaleRcd" ) )
00238 pL1TriggerKey->add( "L1CaloEcalScaleRcd",
00239 "L1CaloEcalScale",
00240 rctKey ) ;
00241 if( listContains( "L1CaloHcalScaleRcd" ) )
00242 pL1TriggerKey->add( "L1CaloHcalScaleRcd",
00243 "L1CaloHcalScale",
00244 rctKey ) ;
00245 edm::LogVerbatim( "L1-O2O" ) << "RCT_KEY " << rctKey ;
00246
00247
00248
00249 std::string gctKey = row[ "GCT_KEY" ].data< std::string >() ;
00250 if( listContains( "L1JetEtScaleRcd" ) )
00251 pL1TriggerKey->add( "L1JetEtScaleRcd",
00252 "L1CaloEtScale",
00253 gctKey ) ;
00254 if( listContains( "L1EmEtScaleRcd" ) )
00255 pL1TriggerKey->add( "L1EmEtScaleRcd",
00256 "L1CaloEtScale",
00257 gctKey ) ;
00258 if( listContains( "L1GctJetFinderParamsRcd" ) )
00259 pL1TriggerKey->add( "L1GctJetFinderParamsRcd",
00260 "L1GctJetFinderParams",
00261 gctKey ) ;
00262 if( listContains( "L1GctJetCalibFunRcd" ) )
00263 pL1TriggerKey->add( "L1GctJetCalibFunRcd",
00264 "L1GctJetEtCalibrationFunction",
00265 gctKey ) ;
00266 if( listContains( "L1GctJetCounterNegativeEtaRcd" ) )
00267 pL1TriggerKey->add( "L1GctJetCounterNegativeEtaRcd",
00268 "L1GctJetCounterSetup",
00269 gctKey ) ;
00270 if( listContains( "L1GctJetCounterPositiveEtaRcd" ) )
00271 pL1TriggerKey->add( "L1GctJetCounterPositiveEtaRcd",
00272 "L1GctJetCounterSetup",
00273 gctKey ) ;
00274 if( listContains( "L1CaloGeometryRecord" ) )
00275 pL1TriggerKey->add( "L1CaloGeometryRecord",
00276 "L1CaloGeometry",
00277 gctKey ) ;
00278 edm::LogVerbatim( "L1-O2O" ) << "GCT_KEY " << gctKey ;
00279
00280
00281
00282
00283
00284
00285
00286
00287 std::string gtKey = row[ "GT_KEY" ].data< std::string >() ;
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301 if( listContains( "L1GtPrescaleFactorsAlgoTrigRcd" ) )
00302 pL1TriggerKey->add( "L1GtPrescaleFactorsAlgoTrigRcd",
00303 "L1GtPrescaleFactors",
00304 gtKey ) ;
00305 if( listContains( "L1GtPrescaleFactorsTechTrigRcd" ) )
00306 pL1TriggerKey->add( "L1GtPrescaleFactorsTechTrigRcd",
00307 "L1GtPrescaleFactors",
00308 gtKey ) ;
00309 if( listContains( "L1GtTriggerMaskAlgoTrigRcd" ) )
00310 pL1TriggerKey->add( "L1GtTriggerMaskAlgoTrigRcd",
00311 "L1GtTriggerMask",
00312 gtKey ) ;
00313
00314 if( listContains( "L1GtTriggerMaskTechTrigRcd" ) )
00315 pL1TriggerKey->add( "L1GtTriggerMaskTechTrigRcd",
00316 "L1GtTriggerMask",
00317 gtKey ) ;
00318
00319 if( listContains( "L1GtTriggerMaskVetoAlgoTrigRcd" ) )
00320 pL1TriggerKey->add( "L1GtTriggerMaskVetoAlgoTrigRcd",
00321 "L1GtTriggerMask",
00322 gtKey ) ;
00323
00324 if( listContains( "L1GtTriggerMaskVetoTechTrigRcd" ) )
00325 pL1TriggerKey->add( "L1GtTriggerMaskVetoTechTrigRcd",
00326 "L1GtTriggerMask",
00327 gtKey ) ;
00328
00329 if( listContains( "L1GtParametersRcd" ) )
00330 pL1TriggerKey->add( "L1GtParametersRcd",
00331 "L1GtParameters",
00332 gtKey ) ;
00333 if( listContains( "L1GtStableParametersRcd" ) )
00334 pL1TriggerKey->add( "L1GtStableParametersRcd",
00335 "L1GtStableParameters",
00336 gtKey ) ;
00337 if( listContains( "L1GtBoardMapsRcd" ) )
00338 pL1TriggerKey->add( "L1GtBoardMapsRcd",
00339 "L1GtBoardMaps",
00340 gtKey ) ;
00341 if( listContains( "L1GtTriggerMenuRcd" ) )
00342 pL1TriggerKey->add( "L1GtTriggerMenuRcd",
00343 "L1GtTriggerMenu",
00344 gtKey ) ;
00345
00346 edm::LogVerbatim( "L1-O2O" ) << "GT_KEY " << gtKey ;
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357 std::vector< std::string > gtQueryStrings ;
00358 gtQueryStrings.push_back( "SC_MUON_ETA_FK" ) ;
00359 gtQueryStrings.push_back( "SC_MUON_PHI_FK" ) ;
00360 gtQueryStrings.push_back( "SC_MUON_PT_FK" ) ;
00361
00362 l1t::OMDSReader::QueryResults muonScaleKeyResults =
00363 m_omdsReader.basicQuery(
00364 gtQueryStrings,
00365 "CMS_GT",
00366 "L1T_SCALES",
00367 "L1T_SCALES.ID",
00368 m_omdsReader.basicQuery( "SCALES_KEY",
00369 "CMS_GMT",
00370 "GMT_CONFIG",
00371 "GMT_CONFIG.KEY",
00372 subkeyResults, "GMT_KEY" ) ) ;
00373
00374 if( muonScaleKeyResults.second.size() == 1 )
00375 {
00376 const coral::AttributeList& gtRow =
00377 muonScaleKeyResults.second.front() ;
00378 std::string gtMuEtaScaleId =
00379 gtRow[ "SC_MUON_ETA_FK" ].data< std::string >() ;
00380 std::string gtMuPhiScaleId =
00381 gtRow[ "SC_MUON_PHI_FK" ].data< std::string >() ;
00382 std::string gtMuPtScaleId =
00383 gtRow[ "SC_MUON_PT_FK" ].data< std::string >() ;
00384
00385 if( listContains( "L1MuTriggerPtScaleRcd" ) )
00386 pL1TriggerKey->add( "L1MuTriggerPtScaleRcd",
00387 "L1MuTriggerPtScale",
00388 gtMuPtScaleId ) ;
00389
00390
00391
00392 std::string muGeomKey = gtMuEtaScaleId + "," + gtMuPhiScaleId ;
00393 if( listContains( "L1MuTriggerScalesRcd" ) )
00394 pL1TriggerKey->add( "L1MuTriggerScalesRcd",
00395 "L1MuTriggerScales",
00396 muGeomKey ) ;
00397 if( listContains( "L1MuGMTScalesRcd" ) )
00398 pL1TriggerKey->add( "L1MuGMTScalesRcd",
00399 "L1MuGMTScales",
00400 muGeomKey ) ;
00401 edm::LogVerbatim("L1-O2O") << "Mu pt scale key " << gtMuPtScaleId ;
00402 edm::LogVerbatim("L1-O2O") << "Mu eta scale key " << gtMuEtaScaleId ;
00403 edm::LogVerbatim("L1-O2O") << "Mu phi scale key " << gtMuPhiScaleId ;
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414 }
00415 else
00416 {
00417 edm::LogError( "L1-O2O")
00418 << "Problem with object keys for L1MuTriggerPtScaleRcd, "
00419 << "L1MuTriggerScalesRcd, L1MuGMTScalesRcd." ;
00420 }
00421
00422
00423 std::map< std::string, bool >::const_iterator itr =
00424 m_recordsToInclude.begin() ;
00425 std::map< std::string, bool >::const_iterator end =
00426 m_recordsToInclude.end() ;
00427 for( ; itr != end ; ++itr )
00428 {
00429 if( !itr->second )
00430 {
00431 edm::LogVerbatim( "L1-O2O" ) << "Unknown record ignored: "
00432 << itr->first ;
00433 }
00434 }
00435 }
00436 else
00437 {
00438 throw l1t::DataAlreadyPresentException(
00439 "L1TriggerKey for TSC key " + m_tscKey + " already in CondDB." ) ;
00440 }
00441
00442 return pL1TriggerKey ;
00443 }
00444
00445 bool
00446 L1TriggerKeyOnlineProd::listContains( const std::string& toMatch )
00447 {
00448 std::map< std::string, bool >::iterator itr =
00449 m_recordsToInclude.find( toMatch ) ;
00450
00451
00452
00453 if( itr != m_recordsToInclude.end() )
00454 {
00455 itr->second = true ;
00456 return true ;
00457 }
00458
00459 return false ;
00460 }
00461
00462
00463