Back to home page

Project CMSSW displayed by LXR

 
 

    


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 }  // namespace edm