CMS 3D CMS Logo

L1TriggerKeyOnlineProd.cc

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 //
00003 // Package:    L1TriggerKeyOnlineProd
00004 // Class:      L1TriggerKeyOnlineProd
00005 // 
00013 //
00014 // Original Author:  Werner Man-Li Sun
00015 //         Created:  Sun Mar  2 03:03:32 CET 2008
00016 // $Id: L1TriggerKeyOnlineProd.cc,v 1.8 2008/09/12 04:50:59 wsun Exp $
00017 //
00018 //
00019 
00020 
00021 // system include files
00022 
00023 // user include files
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 // class declaration
00038 //
00039 
00040 //
00041 // constants, enums and typedefs
00042 //
00043 
00044 //
00045 // static data member definitions
00046 //
00047 
00048 //
00049 // constructors and destructor
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    //the following line is needed to tell the framework what
00058    // data is being produced
00059    setWhatProduced(this);
00060 
00061    //now do what ever other initialization is needed
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    // do anything here that needs to be done at desctruction time
00077    // (e.g. close files, deallocate resources etc.)
00078 
00079 }
00080 
00081 
00082 //
00083 // member functions
00084 //
00085 
00086 // ------------ method called to produce the data  ------------
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    // Get L1TriggerKeyList
00096    const L1TriggerKeyListRcd& keyListRcd =
00097       iRecord.getRecord< L1TriggerKeyListRcd >() ;
00098    edm::ESHandle< L1TriggerKeyList > keyList ;
00099    keyListRcd.get( keyList ) ;
00100 
00101    // If L1TriggerKeyList does not contain TSC key, token is empty
00102    if( keyList->token( m_tscKey ) == std::string() )
00103    {
00104       // Instantiate new L1TriggerKey
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       // Get subsystem keys from OMDS
00112 
00113       // SELECT CSCTF_KEY, DTTF_KEY, RPC_KEY, GMT_KEY, RCT_KEY, GCT_KEY, GT_KEY FROM TRIGGERSUP_CONF WHERE TRIGGERSUP_CONF.TS_KEY = m_tscKey
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       //          queryStrings.push_back( "TSP0_KEY" ) ;
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 ) // check query successful
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       // SELECT GMT_SOFTWARE_CONFIG FROM GMT_LUTS WHERE GMT_LUTS.KEY =
00194       // ( SELECT LUT_KEY FROM GMT_CONFIG WHERE GMT_CONFIG.KEY =
00195       // GMT_KEY [from subkeyResults] )
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 ) // check query successful
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       // SELECT PARTITION0_SETUP_FK FROM GT_SETUP WHERE GT_SETUP.ID =
00283       // GT_KEY [from subkeyResults]
00284 
00285       // In the future, do this only if TSP0_KEY is null.
00286 
00287       std::string gtKey = row[ "GT_KEY" ].data< std::string >() ;
00288 
00289 //       l1t::OMDSReader::QueryResults gtPartitionKeyResults =
00290 //      m_omdsReader.basicQuery( "PARTITION0_SETUP_FK",
00291 //                               "CMS_GT",
00292 //                               "GT_SETUP",
00293 //                               "GT_SETUP.ID",
00294 //                               subkeyResults, "GT_KEY" ) ;
00295 
00296 //       const coral::AttributeList& gtPartitionKeyRow =
00297 //      gtPartitionKeyResults.second.front() ;
00298 //       std::string gtPartitionKey ;
00299 //      gtPartitionKeyRow[ "PARTITION0_SETUP_FK" ].data< std::string >() ;
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       //                          gtPartitionKey ) ;
00314       if( listContains( "L1GtTriggerMaskTechTrigRcd" ) )
00315         pL1TriggerKey->add( "L1GtTriggerMaskTechTrigRcd",
00316                             "L1GtTriggerMask",
00317                             gtKey ) ;
00318       //                            gtPartitionKey ) ;
00319       if( listContains( "L1GtTriggerMaskVetoAlgoTrigRcd" ) )
00320         pL1TriggerKey->add( "L1GtTriggerMaskVetoAlgoTrigRcd",
00321                           "L1GtTriggerMask",
00322                           gtKey ) ;
00323       //                          gtPartitionKey ) ;
00324       if( listContains( "L1GtTriggerMaskVetoTechTrigRcd" ) )
00325         pL1TriggerKey->add( "L1GtTriggerMaskVetoTechTrigRcd",
00326                             "L1GtTriggerMask",
00327                             gtKey ) ;
00328       //                            gtPartitionKey ) ;
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       // edm::LogVerbatim( "L1-O2O" ) << "GT_PARTITION_KEY " << gtPartitionKey ;
00348 
00349       // Muon scales
00350 
00351       // SELECT SCALE_MUON_PT_REF, SCALE_MUON_ETA_REF,
00352       // SCALE_MUON_PHI_REF FROM L1T_SCALES WHERE L1T_SCALES.ID =
00353       // ( SELECT SCALES_FK FROM L1T_MENU WHERE L1T_MENU.ID =
00354       // ( SELECT L1T_MENU_FK FROM GT_SETUP WHERE GT_SETUP.ID =
00355       // GT_KEY [from subkeyResults] ) )
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 ) // check query successful
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           // Concatenate eta and phi keys, separated by comma;
00391           // need to parse in L1TriggerConfigOnlineProd
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 //        // Test string parsing
00406 //        int loc = muGeomKey.find( "," ) ;
00407 //        std::string etaKey = muGeomKey.substr( 0,      // start position
00408 //                                               loc ) ; // length
00409 //        int phiKeyLength = muGeomKey.size() - etaKey.size() - 1 ;
00410 //        std::string phiKey = muGeomKey.substr( loc+1,
00411 //                                               phiKeyLength ) ;
00412 //        std::cout << "Parsed mu eta scale key " << etaKey ;
00413 //        std::cout << "Parsed mu phi scale key " << phiKey ;
00414         }
00415       else
00416         {
00417           edm::LogError( "L1-O2O")
00418             << "Problem with object keys for L1MuTriggerPtScaleRcd, "
00419             << "L1MuTriggerScalesRcd, L1MuGMTScalesRcd." ;
00420         }
00421 
00422       // Print out unknown records.
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   //    find( m_recordsToInclude.begin(), m_recordsToInclude.end(), toMatch ) ;
00451   //  return itr != m_recordsToInclude.end() ;
00452 
00453   if( itr != m_recordsToInclude.end() )
00454     {
00455       itr->second = true ;
00456       return true ;
00457     }
00458 
00459   return false ;
00460 }
00461 
00462 //define this as a plug-in
00463 //DEFINE_FWK_EVENTSETUP_MODULE(L1TriggerKeyOnlineProd);

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