Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-03-17 11:02:07

0001 #ifndef FWCore_Framework_TransitionInfoTypes_h
0002 #define FWCore_Framework_TransitionInfoTypes_h
0003 //
0004 // Package:     FWCore/Framework
0005 //
0006 /**
0007 
0008  Description: The types here are used to pass information
0009  down to the Worker class from the EventProcessor.
0010 
0011 */
0012 //
0013 // Original Author:  W. David Dagenhart
0014 //         Created:  26 June 2020
0015 
0016 #include <memory>
0017 #include <vector>
0018 
0019 namespace edm {
0020   class EventPrincipal;
0021   class EventSetupImpl;
0022   class LuminosityBlockPrincipal;
0023   class ProcessBlockPrincipal;
0024   class RunPrincipal;
0025 
0026   class EventTransitionInfo {
0027   public:
0028     EventTransitionInfo() {}
0029 
0030     EventTransitionInfo(EventPrincipal& iPrincipal, EventSetupImpl const& iEventSetupImpl)
0031         : eventPrincipal_(&iPrincipal), eventSetupImpl_(&iEventSetupImpl) {}
0032 
0033     EventPrincipal& principal() { return *eventPrincipal_; }
0034     EventPrincipal const& principal() const { return *eventPrincipal_; }
0035     EventSetupImpl const& eventSetupImpl() const { return *eventSetupImpl_; }
0036 
0037   private:
0038     EventPrincipal* eventPrincipal_ = nullptr;
0039     EventSetupImpl const* eventSetupImpl_ = nullptr;
0040   };
0041 
0042   class LumiTransitionInfo {
0043   public:
0044     LumiTransitionInfo() {}
0045 
0046     LumiTransitionInfo(LuminosityBlockPrincipal& iPrincipal,
0047                        EventSetupImpl const& iEventSetupImpl,
0048                        std::vector<std::shared_ptr<const EventSetupImpl>> const* iEventSetupImpls = nullptr)
0049         : luminosityBlockPrincipal_(&iPrincipal),
0050           eventSetupImpl_(&iEventSetupImpl),
0051           eventSetupImpls_(iEventSetupImpls) {}
0052 
0053     LuminosityBlockPrincipal& principal() { return *luminosityBlockPrincipal_; }
0054     LuminosityBlockPrincipal const& principal() const { return *luminosityBlockPrincipal_; }
0055     EventSetupImpl const& eventSetupImpl() const { return *eventSetupImpl_; }
0056     std::vector<std::shared_ptr<const EventSetupImpl>> const* eventSetupImpls() const { return eventSetupImpls_; }
0057 
0058   private:
0059     LuminosityBlockPrincipal* luminosityBlockPrincipal_ = nullptr;
0060     EventSetupImpl const* eventSetupImpl_ = nullptr;
0061     // The first element of this vector refers to the top level process.
0062     // If there are SubProcesses, then each additional element refers to
0063     // one SubProcess. The previous data member refers to the same EventSetupImpl
0064     // object as one element of this vector (the one currently being handled).
0065     std::vector<std::shared_ptr<const EventSetupImpl>> const* eventSetupImpls_ = nullptr;
0066   };
0067 
0068   class RunTransitionInfo {
0069   public:
0070     RunTransitionInfo() {}
0071 
0072     RunTransitionInfo(RunPrincipal& iPrincipal,
0073                       EventSetupImpl const& iEventSetupImpl,
0074                       std::vector<std::shared_ptr<const EventSetupImpl>> const* iEventSetupImpls = nullptr)
0075         : runPrincipal_(&iPrincipal), eventSetupImpl_(&iEventSetupImpl), eventSetupImpls_(iEventSetupImpls) {}
0076 
0077     RunPrincipal& principal() { return *runPrincipal_; }
0078     RunPrincipal const& principal() const { return *runPrincipal_; }
0079     EventSetupImpl const& eventSetupImpl() const { return *eventSetupImpl_; }
0080     std::vector<std::shared_ptr<const EventSetupImpl>> const* eventSetupImpls() const { return eventSetupImpls_; }
0081 
0082   private:
0083     RunPrincipal* runPrincipal_ = nullptr;
0084     EventSetupImpl const* eventSetupImpl_ = nullptr;
0085     // The first element of this vector refers to the top level process.
0086     // If there are SubProcesses, then each additional element refers to
0087     // one SubProcess. The previous data member refers to the same EventSetupImpl
0088     // object as one element of this vector (the one currently being handled).
0089     std::vector<std::shared_ptr<const EventSetupImpl>> const* eventSetupImpls_ = nullptr;
0090   };
0091 
0092   class ProcessBlockTransitionInfo {
0093   public:
0094     ProcessBlockTransitionInfo() {}
0095 
0096     ProcessBlockTransitionInfo(ProcessBlockPrincipal& iPrincipal) : processBlockPrincipal_(&iPrincipal) {}
0097 
0098     ProcessBlockPrincipal& principal() { return *processBlockPrincipal_; }
0099     ProcessBlockPrincipal const& principal() const { return *processBlockPrincipal_; }
0100 
0101   private:
0102     ProcessBlockPrincipal* processBlockPrincipal_ = nullptr;
0103   };
0104 
0105 };  // namespace edm
0106 
0107 #endif