Skip to content

Commit

Permalink
Merge pull request #13722 from wmtan/DoNotReadPerEventProvenanceIfNot…
Browse files Browse the repository at this point in the history
…Needed

Avoid unneeded retrievel of per event provenance
  • Loading branch information
davidlange6 committed Mar 16, 2016
2 parents 3252410 + ab05d71 commit 6f5a500
Show file tree
Hide file tree
Showing 42 changed files with 293 additions and 138 deletions.
13 changes: 6 additions & 7 deletions Calibration/HcalAlCaRecoProducers/src/ProducerAnalyzer.cc
Expand Up @@ -3,7 +3,7 @@
// user include files

#include "Calibration/HcalAlCaRecoProducers/src/ProducerAnalyzer.h"
#include "FWCore/Common/interface/Provenance.h"
#include "DataFormats/Provenance/interface/StableProvenance.h"
#include "DataFormats/MuonReco/interface/Muon.h"
#include "TrackingTools/TransientTrack/interface/TransientTrack.h"
#include "Geometry/Records/interface/CaloGeometryRecord.h"
Expand Down Expand Up @@ -90,13 +90,12 @@ ProducerAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetu
geo = pG.product();


std::vector<Provenance const*> theProvenance;
iEvent.getAllProvenance(theProvenance);
for( std::vector<Provenance const*>::const_iterator ip = theProvenance.begin();
ip != theProvenance.end(); ip++)
std::vector<StableProvenance const*> theProvenance;
iEvent.getAllStableProvenance(theProvenance);
for(auto const& provenance : theProvenance)
{
cout<<" Print all module/label names "<<moduleName(**ip)<<" "<<(**ip).moduleLabel()<<
" "<<(**ip).productInstanceName()<<endl;
cout<<" Print all module/label names "<<provenance->moduleName()<<" "<<provenance->moduleLabel()<<
" "<<provenance->productInstanceName()<<endl;
}


Expand Down
13 changes: 6 additions & 7 deletions Calibration/HcalCalibAlgos/plugins/Analyzer_minbias.cc
Expand Up @@ -6,7 +6,7 @@
// user include files
#include "Geometry/Records/interface/IdealGeometryRecord.h"
#include "Calibration/HcalCalibAlgos/plugins/Analyzer_minbias.h"
#include "DataFormats/Provenance/interface/Provenance.h"
#include "DataFormats/Provenance/interface/StableProvenance.h"
#include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h"
#include "Geometry/CaloGeometry/interface/CaloCellGeometry.h"
#include "Geometry/CaloGeometry/interface/CaloGeometry.h"
Expand Down Expand Up @@ -342,14 +342,13 @@ namespace cms{

float rnnum = (float)iEvent.run();

std::vector<Provenance const*> theProvenance;
iEvent.getAllProvenance(theProvenance);
std::vector<StableProvenance const*> theProvenance;
iEvent.getAllStableProvenance(theProvenance);

for( std::vector<Provenance const*>::const_iterator ip = theProvenance.begin();
ip != theProvenance.end(); ip++) {
for(auto const& provenance : theProvenance) {
edm::LogInfo("AnalyzerMB")<<" Print all process/modulelabel/product names "
<<(**ip).processName()<<" , "<<(**ip).moduleLabel()<<" , "
<<(**ip).productInstanceName();
<<provenance->processName()<<" , "<<provenance->moduleLabel()<<" , "
<<provenance->productInstanceName();
}
/*
edm::Handle<FEDRawDataCollection> rawdata;
Expand Down
56 changes: 26 additions & 30 deletions DataFormats/Provenance/interface/Provenance.h
Expand Up @@ -8,12 +8,9 @@ existence.
----------------------------------------------------------------------*/

#include "DataFormats/Provenance/interface/BranchDescription.h"
#include "DataFormats/Provenance/interface/ParameterSetID.h"
#include "DataFormats/Provenance/interface/ProcessHistory.h"
#include "DataFormats/Provenance/interface/Parentage.h"
#include "DataFormats/Provenance/interface/ProductID.h"
#include "DataFormats/Provenance/interface/ReleaseVersion.h"
#include "DataFormats/Provenance/interface/StableProvenance.h"

#include <memory>

Expand All @@ -38,48 +35,47 @@ namespace edm {

Provenance(std::shared_ptr<BranchDescription const> const& p, ProductID const& pid);

BranchDescription const& product() const {return *branchDescription_;}
Provenance(StableProvenance const&);

BranchDescription const& branchDescription() const {return *branchDescription_;}
BranchDescription const& constBranchDescription() const {return *branchDescription_;}
std::shared_ptr<BranchDescription const> const& constBranchDescriptionPtr() const {return branchDescription_;}
StableProvenance const& stable() const {return stableProvenance_;}
StableProvenance& stable() {return stableProvenance_;}

BranchDescription const& product() const {return branchDescription();}
BranchDescription const& branchDescription() const {return stable().branchDescription();}
BranchDescription const& constBranchDescription() const {return branchDescription();}
std::shared_ptr<BranchDescription const> const& constBranchDescriptionPtr() const {return stable().constBranchDescriptionPtr();}

ProductProvenance const* productProvenance() const;
BranchID const& branchID() const {return product().branchID();}
std::string const& branchName() const {return product().branchName();}
std::string const& className() const {return product().className();}
std::string const& moduleLabel() const {return product().moduleLabel();}
std::string const& processName() const {return product().processName();}
std::string const& productInstanceName() const {return product().productInstanceName();}
std::string const& friendlyClassName() const {return product().friendlyClassName();}
BranchID const& branchID() const {return stable().branchID();}
std::string const& branchName() const {return stable().branchName();}
std::string const& className() const {return stable().className();}
std::string const& moduleLabel() const {return stable().moduleLabel();}
std::string const& moduleName() const {return stable().moduleName();}
std::string const& processName() const {return stable().processName();}
std::string const& productInstanceName() const {return stable().productInstanceName();}
std::string const& friendlyClassName() const {return stable().friendlyClassName();}
ProductProvenanceRetriever const* store() const {return store_;}
ProcessHistory const& processHistory() const {return *processHistory_;}
bool getProcessConfiguration(ProcessConfiguration& pc) const;
ReleaseVersion releaseVersion() const;
std::set<std::string> const& branchAliases() const {return product().branchAliases();}
ProcessHistory const& processHistory() const {return stable().processHistory();}
bool getProcessConfiguration(ProcessConfiguration& pc) const {return stable().getProcessConfiguration(pc);}
ReleaseVersion releaseVersion() const {return stable().releaseVersion();}
std::set<std::string> const& branchAliases() const {return stable().branchAliases();}

void write(std::ostream& os) const;

void setStore(ProductProvenanceRetriever const* store) {store_ = store;}

void setProcessHistory(ProcessHistory const& ph) {processHistory_ = &ph;}
void setProcessHistory(ProcessHistory const& ph) {stable().setProcessHistory(ph);}

ProductID const& productID() const {return productID_;}
ProductID const& productID() const {return stable().productID();}

void setProductID(ProductID const& pid) {
productID_ = pid;
}
void setProductID(ProductID const& pid) {stable().setProductID(pid);}

void setBranchDescription(std::shared_ptr<BranchDescription const> const& p) {
branchDescription_ = p;
}
void setBranchDescription(std::shared_ptr<BranchDescription const> const& p) {stable().setBranchDescription(p);}

void swap(Provenance&);

private:
std::shared_ptr<BranchDescription const> branchDescription_;
ProductID productID_;
ProcessHistory const* processHistory_; // We don't own this
StableProvenance stableProvenance_;
ProductProvenanceRetriever const* store_;
};

Expand Down
1 change: 1 addition & 0 deletions DataFormats/Provenance/interface/ProvenanceFwd.h
Expand Up @@ -23,6 +23,7 @@ namespace edm {
class Provenance;
class RunAuxiliary;
class RunID;
class StableProvenance;
class Timestamp;
class ProductProvenanceRetriever;
}
Expand Down
84 changes: 84 additions & 0 deletions DataFormats/Provenance/interface/StableProvenance.h
@@ -0,0 +1,84 @@
#ifndef DataFormats_Provenance_StableProvenance_h
#define DataFormats_Provenance_StableProvenance_h

/*----------------------------------------------------------------------
StableProvenance: The full description of a product, excluding the parentage.
The parentage can change from event to event.
----------------------------------------------------------------------*/

#include "DataFormats/Provenance/interface/BranchDescription.h"
#include "DataFormats/Provenance/interface/ParameterSetID.h"
#include "DataFormats/Provenance/interface/ProcessHistory.h"
#include "DataFormats/Provenance/interface/ProductID.h"
#include "DataFormats/Provenance/interface/ReleaseVersion.h"

#include <memory>

#include <iosfwd>
/*
StableProvenance
definitions:
Product: The EDProduct to which a provenance object is associated
Creator: The EDProducer that made the product.
*/

namespace edm {
class StableProvenance {
public:
StableProvenance();

StableProvenance(std::shared_ptr<BranchDescription const> const& p, ProductID const& pid);

BranchDescription const& branchDescription() const {return *branchDescription_;}
std::shared_ptr<BranchDescription const> const& constBranchDescriptionPtr() const {return branchDescription_;}

BranchID const& branchID() const {return branchDescription().branchID();}
std::string const& branchName() const {return branchDescription().branchName();}
std::string const& className() const {return branchDescription().className();}
std::string const& moduleLabel() const {return branchDescription().moduleLabel();}
std::string const& moduleName() const {return branchDescription().moduleName();}
std::string const& processName() const {return branchDescription().processName();}
std::string const& productInstanceName() const {return branchDescription().productInstanceName();}
std::string const& friendlyClassName() const {return branchDescription().friendlyClassName();}
ProcessHistory const& processHistory() const {return *processHistory_;}
bool getProcessConfiguration(ProcessConfiguration& pc) const;
ReleaseVersion releaseVersion() const;
std::set<std::string> const& branchAliases() const {return branchDescription().branchAliases();}

void write(std::ostream& os) const;

void setProcessHistory(ProcessHistory const& ph) {processHistory_ = &ph;}

ProductID const& productID() const {return productID_;}

void setProductID(ProductID const& pid) {
productID_ = pid;
}

void setBranchDescription(std::shared_ptr<BranchDescription const> const& p) {
branchDescription_ = p;
}

void swap(StableProvenance&);

private:
std::shared_ptr<BranchDescription const> branchDescription_;
ProductID productID_;
ProcessHistory const* processHistory_; // We don't own this
};

inline
std::ostream&
operator<<(std::ostream& os, StableProvenance const& p) {
p.write(os);
return os;
}

bool operator==(StableProvenance const& a, StableProvenance const& b);

}
#endif
33 changes: 11 additions & 22 deletions DataFormats/Provenance/src/Provenance.cc
Expand Up @@ -14,13 +14,16 @@

namespace edm {

Provenance::Provenance() : Provenance{std::shared_ptr<BranchDescription const>(), ProductID()} {
Provenance::Provenance() : Provenance{StableProvenance()} {
}

Provenance::Provenance(std::shared_ptr<BranchDescription const> const& p, ProductID const& pid) :
branchDescription_(p),
productID_(pid),
processHistory_(),
stableProvenance_(p, pid),
store_() {
}

Provenance::Provenance(StableProvenance const& stable) :
stableProvenance_(stable),
store_() {
}

Expand All @@ -29,42 +32,28 @@ namespace edm {
if(!store_) {
return nullptr;
}
return store_->branchIDToProvenance(branchDescription_->branchID());
}

bool
Provenance::getProcessConfiguration(ProcessConfiguration& pc) const {
return processHistory_->getConfigurationForProcess(processName(), pc);
}

ReleaseVersion
Provenance::releaseVersion() const {
ProcessConfiguration pc;
assert(getProcessConfiguration(pc));
return pc.releaseVersion();
return store_->branchIDToProvenance(branchID());
}

void
Provenance::write(std::ostream& os) const {
// This is grossly inadequate, but it is not critical for the
// first pass.
product().write(os);
stable().write(os);
auto pp = productProvenance();
if (pp != nullptr) {
pp->write(os);
}
}

bool operator==(Provenance const& a, Provenance const& b) {
return a.product() == b.product();
return a.stable() == b.stable();
}


void
Provenance::swap(Provenance& iOther) {
branchDescription_.swap(iOther.branchDescription_);
productID_.swap(iOther.productID_);
std::swap(processHistory_, iOther.processHistory_);
stableProvenance_.swap(iOther.stableProvenance_);
std::swap(store_,iOther.store_);
}
}
52 changes: 52 additions & 0 deletions DataFormats/Provenance/src/StableProvenance.cc
@@ -0,0 +1,52 @@
#include "DataFormats/Provenance/interface/StableProvenance.h"
#include "DataFormats/Provenance/interface/ProcessConfiguration.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"

#include <algorithm>
#include <cassert>

/*----------------------------------------------------------------------
----------------------------------------------------------------------*/

namespace edm {

StableProvenance::StableProvenance() : StableProvenance{std::shared_ptr<BranchDescription const>(), ProductID()} {
}

StableProvenance::StableProvenance(std::shared_ptr<BranchDescription const> const& p, ProductID const& pid) :
branchDescription_(p),
productID_(pid),
processHistory_() {
}

bool
StableProvenance::getProcessConfiguration(ProcessConfiguration& pc) const {
return processHistory_->getConfigurationForProcess(processName(), pc);
}

ReleaseVersion
StableProvenance::releaseVersion() const {
ProcessConfiguration pc;
assert(getProcessConfiguration(pc));
return pc.releaseVersion();
}

void
StableProvenance::write(std::ostream& os) const {
// This is grossly inadequate, but it is not critical for the first pass.
branchDescription().write(os);
}

bool operator==(StableProvenance const& a, StableProvenance const& b) {
return a.branchDescription() == b.branchDescription();
}


void
StableProvenance::swap(StableProvenance& iOther) {
branchDescription_.swap(iOther.branchDescription_);
productID_.swap(iOther.productID_);
std::swap(processHistory_, iOther.processHistory_);
}
}
7 changes: 7 additions & 0 deletions FWCore/Framework/interface/Event.h
Expand Up @@ -204,9 +204,16 @@ namespace edm {
Provenance
getProvenance(ProductID const& theID) const;

// Get the provenance for all products that may be in the event
void
getAllProvenance(std::vector<Provenance const*>& provenances) const;

// Get the provenance for all products that may be in the event,
// excluding the per-event provenance (the parentage information).
// The excluded information may change from event to event.
void
getAllStableProvenance(std::vector<StableProvenance const*>& provenances) const;

// Return true if this Event has been subjected to a process with
// the given processName, and false otherwise.
// If true is returned, then ps is filled with the ParameterSet
Expand Down
2 changes: 1 addition & 1 deletion FWCore/Framework/interface/LuminosityBlock.h
Expand Up @@ -125,7 +125,7 @@ namespace edm {
getProvenance(BranchID const& theID) const;

void
getAllProvenance(std::vector<Provenance const*>& provenances) const;
getAllStableProvenance(std::vector<StableProvenance const*>& provenances) const;

ProcessHistoryID const& processHistoryID() const;

Expand Down
3 changes: 3 additions & 0 deletions FWCore/Framework/interface/OccurrenceForOutput.h
Expand Up @@ -70,6 +70,9 @@ namespace edm {
void
getAllProvenance(std::vector<Provenance const*>& provenances) const;

void
getAllStableProvenance(std::vector<StableProvenance const*>& provenances) const;

virtual ProcessHistory const&
processHistory() const;

Expand Down

0 comments on commit 6f5a500

Please sign in to comment.