Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-02-27 07:19:50

0001 #ifndef DataFormats_Provenance_ProcessConfiguration_h
0002 #define DataFormats_Provenance_ProcessConfiguration_h
0003 
0004 #include "DataFormats/Provenance/interface/HardwareResourcesDescription.h"
0005 #include "DataFormats/Provenance/interface/ParameterSetID.h"
0006 #include "DataFormats/Provenance/interface/ProcessConfigurationID.h"
0007 #include "DataFormats/Provenance/interface/ReleaseVersion.h"
0008 
0009 #include <iosfwd>
0010 #include <string>
0011 #include <vector>
0012 
0013 namespace edm {
0014   class ProcessConfiguration {
0015   public:
0016     ProcessConfiguration();
0017     ProcessConfiguration(std::string const& procName,
0018                          ReleaseVersion const& relVersion,
0019                          HardwareResourcesDescription const& hwDescription);
0020 
0021     ProcessConfiguration(std::string const& procName,
0022                          ParameterSetID const& pSetID,
0023                          ReleaseVersion const& relVersion,
0024                          HardwareResourcesDescription const& hwDescription);
0025 
0026     std::string const& processName() const { return processName_; }
0027     ParameterSetID const& parameterSetID() const;
0028     bool isParameterSetValid() const { return parameterSetID_.isValid(); }
0029     ReleaseVersion const& releaseVersion() const { return releaseVersion_; }
0030     /// Note: this function parses the string on every call, so it should be called rarely
0031     HardwareResourcesDescription hardwareResourcesDescription() const { return HardwareResourcesDescription(passID_); }
0032     std::string const& hardwareResourcesDescriptionSerialized() const { return passID_; }
0033     ProcessConfigurationID id() const;
0034 
0035     void setParameterSetID(ParameterSetID const& pSetID);
0036 
0037     ProcessConfigurationID setProcessConfigurationID();
0038 
0039     void reduce();
0040 
0041     void initializeTransients() { transient_.reset(); }
0042 
0043     struct Transients {
0044       Transients() : pcid_(), isCurrentProcess_(false) {}
0045       explicit Transients(bool current) : pcid_(), isCurrentProcess_(current) {}
0046       void reset() {
0047         pcid_.reset();
0048         isCurrentProcess_ = false;
0049       }
0050       ProcessConfigurationID pcid_;
0051       bool isCurrentProcess_;
0052     };
0053 
0054   private:
0055     void setPCID(ProcessConfigurationID const& pcid) { transient_.pcid_ = pcid; }
0056     bool isCurrentProcess() const { return transient_.isCurrentProcess_; }
0057     void setCurrentProcess() { transient_.isCurrentProcess_ = true; }
0058 
0059     std::string processName_;
0060     ParameterSetID parameterSetID_;
0061     ReleaseVersion releaseVersion_;
0062     // The passID_ really holds the HardwareResourcesDescription in a
0063     // serialized form. Therefore the passID name is a complete
0064     // misnomer, but was kept to make forward-compabitility easier
0065     // (even if that not formally not supported, this construct is a
0066     // precaution in case a further Run3 use case would surface)
0067     std::string passID_;
0068     Transients transient_;
0069   };
0070 
0071   typedef std::vector<ProcessConfiguration> ProcessConfigurationVector;
0072 
0073   bool operator<(ProcessConfiguration const& a, ProcessConfiguration const& b);
0074 
0075   inline bool operator==(ProcessConfiguration const& a, ProcessConfiguration const& b) {
0076     return a.processName() == b.processName() && a.parameterSetID() == b.parameterSetID() &&
0077            a.releaseVersion() == b.releaseVersion() &&
0078            a.hardwareResourcesDescriptionSerialized() == b.hardwareResourcesDescriptionSerialized();
0079   }
0080 
0081   inline bool operator!=(ProcessConfiguration const& a, ProcessConfiguration const& b) { return !(a == b); }
0082 
0083   std::ostream& operator<<(std::ostream& os, ProcessConfiguration const& pc);
0084 }  // namespace edm
0085 
0086 #endif