GlobalContext

Transition

Macros

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
#ifndef FWCore_ServiceRegistry_GlobalContext_h
#define FWCore_ServiceRegistry_GlobalContext_h

/**\class edm::GlobalContext

 Description: This is intended primarily to be passed to
Services as an argument to their callback functions. It contains
information about the current state of global processing.

 Usage:


*/
//
// Original Author: W. David Dagenhart
//         Created: 7/10/2013

#include "DataFormats/Provenance/interface/LuminosityBlockID.h"
#include "DataFormats/Provenance/interface/Timestamp.h"
#include "FWCore/Utilities/interface/LuminosityBlockIndex.h"
#include "FWCore/Utilities/interface/RunIndex.h"

#include <iosfwd>
#include <string_view>

namespace cms {
  class Exception;
}

namespace edm {

  class ProcessContext;

  class GlobalContext {
  public:
    enum class Transition {
      kBeginJob,
      kBeginProcessBlock,
      kAccessInputProcessBlock,
      kBeginRun,
      kBeginLuminosityBlock,
      kEndLuminosityBlock,
      kEndRun,
      kEndProcessBlock,
      kEndJob,
      kWriteProcessBlock,
      kWriteRun,
      kWriteLuminosityBlock
    };

    GlobalContext(Transition transition,
                  LuminosityBlockID const& luminosityBlockID,
                  RunIndex const& runIndex,
                  LuminosityBlockIndex const& luminosityBlockIndex,
                  Timestamp const& timestamp,
                  ProcessContext const* processContext);
    GlobalContext(Transition transition, ProcessContext const* processContext);

    Transition transition() const { return transition_; }
    bool isAtEndTransition() const {
      return transition() == Transition::kEndLuminosityBlock or transition() == Transition::kEndRun or
             transition() == Transition::kEndProcessBlock or transition() == Transition::kWriteRun or
             transition() == Transition::kWriteLuminosityBlock or transition() == Transition::kWriteProcessBlock;
    }

    LuminosityBlockID const& luminosityBlockID() const { return luminosityBlockID_; }
    RunIndex const& runIndex() const { return runIndex_; }
    LuminosityBlockIndex const& luminosityBlockIndex() const { return luminosityBlockIndex_; }
    Timestamp const& timestamp() const { return timestamp_; }
    ProcessContext const* processContext() const { return processContext_; }

  private:
    Transition transition_;
    LuminosityBlockID luminosityBlockID_;
    RunIndex runIndex_;
    LuminosityBlockIndex luminosityBlockIndex_;
    Timestamp timestamp_;
    ProcessContext const* processContext_;
  };

  void exceptionContext(std::ostream&, GlobalContext const&);
  std::ostream& operator<<(std::ostream&, GlobalContext const&);
  void exceptionContext(cms::Exception&, GlobalContext const&, char const* context);

  std::string_view transitionName(GlobalContext::Transition);
}  // namespace edm
#endif