Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-02-14 03:16:37

0001 // -*- C++ -*-
0002 //
0003 // Package:     FWCore/Integration
0004 // Class  :     RunLumiESSource
0005 //
0006 // Implementation:
0007 //     ESSource used for tests of Framework support for
0008 //     the EventSetup system in run and lumi transitions
0009 //
0010 // Original Author:  W. David Dagenhart
0011 //         Created:  18 April 2019
0012 
0013 #include "DataFormats/Provenance/interface/EventID.h"
0014 #include "FWCore/Framework/interface/EventSetupRecordIntervalFinder.h"
0015 #include "FWCore/Framework/interface/ESProducer.h"
0016 #include "FWCore/Framework/interface/IOVSyncValue.h"
0017 #include "FWCore/Framework/interface/SourceFactory.h"
0018 #include "FWCore/Framework/interface/ValidityInterval.h"
0019 #include "FWCore/Integration/interface/ESTestRecords.h"
0020 #include "FWCore/Integration/interface/IOVTestInfo.h"
0021 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0022 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0023 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0024 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0025 
0026 #include <memory>
0027 
0028 namespace edmtest {
0029 
0030   class RunLumiESSource : public edm::EventSetupRecordIntervalFinder, public edm::ESProducer {
0031   public:
0032     RunLumiESSource(edm::ParameterSet const&);
0033 
0034     std::unique_ptr<IOVTestInfo> produce(ESTestRecordC const&);
0035     std::unique_ptr<IOVTestInfo> produceNonEmptyLabel(ESTestRecordC const&);
0036 
0037     static void fillDescriptions(edm::ConfigurationDescriptions&);
0038 
0039   private:
0040     void setIntervalFor(edm::eventsetup::EventSetupRecordKey const&,
0041                         edm::IOVSyncValue const&,
0042                         edm::ValidityInterval&) override;
0043 
0044     bool isConcurrentFinder() const override { return true; }
0045   };
0046 
0047   RunLumiESSource::RunLumiESSource(edm::ParameterSet const&) {
0048     findingRecord<ESTestRecordC>();
0049     setWhatProduced(this);
0050     setWhatProduced(this, &edmtest::RunLumiESSource::produceNonEmptyLabel, edm::es::Label("nonEmptyLabel"));
0051   }
0052 
0053   std::unique_ptr<IOVTestInfo> RunLumiESSource::produce(ESTestRecordC const& record) {
0054     auto data = std::make_unique<IOVTestInfo>();
0055 
0056     edm::ValidityInterval iov = record.validityInterval();
0057     edm::LogAbsolute("RunLumiESSource") << "RunLumiESSource::produce startIOV = " << iov.first().eventID().run() << ":"
0058                                         << iov.first().luminosityBlockNumber()
0059                                         << " endIOV = " << iov.last().eventID().run() << ":"
0060                                         << iov.last().luminosityBlockNumber() << " IOV index = " << record.iovIndex()
0061                                         << " cache identifier = " << record.cacheIdentifier();
0062     data->iovStartRun_ = iov.first().eventID().run();
0063     data->iovStartLumi_ = iov.first().luminosityBlockNumber();
0064     data->iovEndRun_ = iov.last().eventID().run();
0065     data->iovEndLumi_ = iov.last().luminosityBlockNumber();
0066     data->iovIndex_ = record.iovIndex();
0067     data->cacheIdentifier_ = record.cacheIdentifier();
0068     return data;
0069   }
0070 
0071   std::unique_ptr<IOVTestInfo> RunLumiESSource::produceNonEmptyLabel(ESTestRecordC const& record) {
0072     auto data = std::make_unique<IOVTestInfo>();
0073 
0074     edm::ValidityInterval iov = record.validityInterval();
0075     edm::LogAbsolute("RunLumiESSource") << "RunLumiESSource::produceNonEmptyLabel startIOV = "
0076                                         << iov.first().eventID().run() << ":" << iov.first().luminosityBlockNumber()
0077                                         << " endIOV = " << iov.last().eventID().run() << ":"
0078                                         << iov.last().luminosityBlockNumber() << " IOV index = " << record.iovIndex()
0079                                         << " cache identifier = " << record.cacheIdentifier();
0080     data->iovStartRun_ = iov.first().eventID().run();
0081     data->iovStartLumi_ = iov.first().luminosityBlockNumber();
0082     data->iovEndRun_ = iov.last().eventID().run();
0083     data->iovEndLumi_ = iov.last().luminosityBlockNumber();
0084     data->iovIndex_ = record.iovIndex();
0085     data->cacheIdentifier_ = record.cacheIdentifier();
0086     return data;
0087   }
0088 
0089   void RunLumiESSource::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0090     edm::ParameterSetDescription desc;
0091     descriptions.addDefault(desc);
0092   }
0093 
0094   void RunLumiESSource::setIntervalFor(edm::eventsetup::EventSetupRecordKey const&,
0095                                        edm::IOVSyncValue const& syncValue,
0096                                        edm::ValidityInterval& interval) {
0097     interval = edm::ValidityInterval(syncValue, syncValue);
0098   }
0099 }  // namespace edmtest
0100 using namespace edmtest;
0101 DEFINE_FWK_EVENTSETUP_SOURCE(RunLumiESSource);