File indexing completed on 2024-07-28 22:48:29
0001 #include "FWCore/ServiceRegistry/interface/GlobalContext.h"
0002 #include "FWCore/ServiceRegistry/interface/ProcessContext.h"
0003 #include "FWCore/Utilities/interface/Exception.h"
0004
0005 #include <ostream>
0006 #include <sstream>
0007
0008 namespace edm {
0009
0010 GlobalContext::GlobalContext(Transition transition,
0011 LuminosityBlockID const& luminosityBlockID,
0012 RunIndex const& runIndex,
0013 LuminosityBlockIndex const& luminosityBlockIndex,
0014 Timestamp const& timestamp,
0015 ProcessContext const* processContext)
0016 : transition_(transition),
0017 luminosityBlockID_(luminosityBlockID),
0018 runIndex_(runIndex),
0019 luminosityBlockIndex_(luminosityBlockIndex),
0020 timestamp_(timestamp),
0021 processContext_(processContext) {}
0022
0023 GlobalContext::GlobalContext(Transition transition, ProcessContext const* processContext)
0024 : transition_(transition),
0025 luminosityBlockID_(),
0026 runIndex_(RunIndex::invalidRunIndex()),
0027 luminosityBlockIndex_(LuminosityBlockIndex::invalidLuminosityBlockIndex()),
0028 timestamp_(),
0029 processContext_(processContext) {}
0030
0031 std::ostream& operator<<(std::ostream& os, GlobalContext const& gc) {
0032 os << "GlobalContext: transition = ";
0033 switch (gc.transition()) {
0034 case GlobalContext::Transition::kBeginJob:
0035 os << "BeginJob";
0036 break;
0037 case GlobalContext::Transition::kBeginProcessBlock:
0038 os << "BeginProcessBlock";
0039 break;
0040 case GlobalContext::Transition::kAccessInputProcessBlock:
0041 os << "AccessInputProcessBlock";
0042 break;
0043 case GlobalContext::Transition::kBeginRun:
0044 os << "BeginRun";
0045 break;
0046 case GlobalContext::Transition::kBeginLuminosityBlock:
0047 os << "BeginLuminosityBlock";
0048 break;
0049 case GlobalContext::Transition::kEndLuminosityBlock:
0050 os << "EndLuminosityBlock";
0051 break;
0052 case GlobalContext::Transition::kEndRun:
0053 os << "EndRun";
0054 break;
0055 case GlobalContext::Transition::kEndProcessBlock:
0056 os << "EndProcessBlock";
0057 break;
0058 case GlobalContext::Transition::kEndJob:
0059 os << "EndJob";
0060 break;
0061 case GlobalContext::Transition::kWriteProcessBlock:
0062 os << "WriteProcessBlock";
0063 break;
0064 case GlobalContext::Transition::kWriteRun:
0065 os << "WriteRun";
0066 break;
0067 case GlobalContext::Transition::kWriteLuminosityBlock:
0068 os << "WriteLuminosityBlock";
0069 break;
0070 }
0071 os << "\n " << gc.luminosityBlockID() << "\n runIndex = " << gc.runIndex().value()
0072 << " luminosityBlockIndex = " << gc.luminosityBlockIndex().value()
0073 << " unixTime = " << gc.timestamp().unixTime() << " microsecondOffset = " << gc.timestamp().microsecondOffset()
0074 << "\n";
0075 if (gc.processContext()) {
0076 os << " " << *gc.processContext();
0077 }
0078 return os;
0079 }
0080
0081 void exceptionContext(std::ostream& os, GlobalContext const& gc) {
0082 os << "Processing ";
0083 switch (gc.transition()) {
0084 case GlobalContext::Transition::kBeginJob:
0085 os << "begin Job";
0086 break;
0087 case GlobalContext::Transition::kBeginProcessBlock:
0088 os << "begin ProcessBlock";
0089 break;
0090 case GlobalContext::Transition::kAccessInputProcessBlock:
0091 os << "access input ProcessBlock";
0092 break;
0093 case GlobalContext::Transition::kBeginRun:
0094 os << "global begin Run " << RunID(gc.luminosityBlockID().run());
0095 break;
0096 case GlobalContext::Transition::kBeginLuminosityBlock:
0097 os << "global begin LuminosityBlock " << gc.luminosityBlockID();
0098 break;
0099 case GlobalContext::Transition::kEndLuminosityBlock:
0100 os << "global end LuminosityBlock " << gc.luminosityBlockID();
0101 break;
0102 case GlobalContext::Transition::kEndRun:
0103 os << "global end Run " << RunID(gc.luminosityBlockID().run());
0104 break;
0105 case GlobalContext::Transition::kEndProcessBlock:
0106 os << "end ProcessBlock";
0107 break;
0108 case GlobalContext::Transition::kEndJob:
0109 os << "endJob";
0110 break;
0111 case GlobalContext::Transition::kWriteProcessBlock:
0112 os << "write ProcessBlock";
0113 break;
0114 case GlobalContext::Transition::kWriteRun:
0115 os << "write Run " << RunID(gc.luminosityBlockID().run());
0116 break;
0117 case GlobalContext::Transition::kWriteLuminosityBlock:
0118 os << "write LuminosityBlock " << gc.luminosityBlockID();
0119 break;
0120 }
0121 }
0122
0123 void exceptionContext(cms::Exception& ex, GlobalContext const& globalContext, char const* context) {
0124 std::ostringstream ost;
0125 if (context && *context != '\0') {
0126 ex.addContext(context);
0127 }
0128 exceptionContext(ost, globalContext);
0129 ex.addContext(ost.str());
0130 }
0131
0132 std::string_view transitionName(GlobalContext::Transition iTrans) {
0133 switch (iTrans) {
0134 case GlobalContext::Transition::kBeginJob:
0135 return "begin Job";
0136 case GlobalContext::Transition::kBeginProcessBlock:
0137 return "begin ProcessBlock";
0138 case GlobalContext::Transition::kAccessInputProcessBlock:
0139 return "access input ProcessBlock";
0140 case GlobalContext::Transition::kBeginRun:
0141 return "global begin Run";
0142 case GlobalContext::Transition::kBeginLuminosityBlock:
0143 return "global begin LuminosityBlock";
0144 case GlobalContext::Transition::kEndLuminosityBlock:
0145 return "global end LuminosityBlock";
0146 case GlobalContext::Transition::kEndRun:
0147 return "global end Run";
0148 case GlobalContext::Transition::kEndProcessBlock:
0149 return "end ProcessBlock";
0150 case GlobalContext::Transition::kEndJob:
0151 return "endJob";
0152 case GlobalContext::Transition::kWriteProcessBlock:
0153 return "write ProcessBlock";
0154 case GlobalContext::Transition::kWriteRun:
0155 return "write Run";
0156 case GlobalContext::Transition::kWriteLuminosityBlock:
0157 return "write LuminosityBlock";
0158 }
0159 return "Unknown";
0160 }
0161 }