CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Private Member Functions | Private Attributes
edm::RootOutputFile Class Reference

#include <RootOutputFile.h>

Public Types

typedef PoolOutputModule::OutputItem OutputItem
 
typedef PoolOutputModule::OutputItemList OutputItemList
 
typedef std::array< edm::propagate_const< RootOutputTree * >, NumBranchTypesRootOutputTreePtrArray
 

Public Member Functions

void beginInputFile (FileBlock const &fb, int remainingEvents)
 
std::string const & fileName () const
 
void finishEndFile ()
 
void respondToCloseInputFile (FileBlock const &fb)
 
 RootOutputFile (PoolOutputModule *om, std::string const &fileName, std::string const &logicalFileName, std::vector< std::string > const &processesWithSelectedMergeableRunProducts)
 
bool shouldWeCloseFile () const
 
void writeBranchIDListRegistry ()
 
void writeFileFormatVersion ()
 
void writeFileIdentifier ()
 
void writeIndexIntoFile ()
 
void writeLuminosityBlock (LuminosityBlockForOutput const &lb)
 
void writeOne (EventForOutput const &e)
 
void writeParameterSetRegistry ()
 
void writeParentageRegistry ()
 
void writeProcessHistoryRegistry ()
 
void writeProductDependencies ()
 
void writeProductDescriptionRegistry ()
 
void writeRun (RunForOutput const &r)
 
void writeStoredMergeableRunProductMetadata ()
 
void writeThinnedAssociationsHelper ()
 
 ~RootOutputFile ()
 

Private Member Functions

std::shared_ptr< TFile > & filePtr ()
 
std::shared_ptr< TFile const > filePtr () const
 
void fillBranches (BranchType const &branchType, OccurrenceForOutput const &occurrence, StoredProductProvenanceVector *productProvenanceVecPtr=nullptr, ProductProvenanceRetriever const *provRetriever=nullptr)
 
void insertAncestors (ProductProvenance const &iGetParents, ProductProvenanceRetriever const *iMapper, bool produced, std::set< BranchID > const &producedBranches, std::set< StoredProductProvenance > &oToFill)
 
bool insertProductProvenance (const ProductProvenance &, std::set< StoredProductProvenance > &oToInsert)
 
StoredProductProvenanceVector *& pEventEntryInfoVector ()
 
StoredProductProvenanceVector const * pEventEntryInfoVector () const
 
void setBranchAliases (TTree *tree, SelectedProducts const &branches) const
 

Private Attributes

std::set< BranchIDbranchesWithStoredHistory_
 
bool canFastCloneAux_
 
bool dataTypeReported_
 
StoredProductProvenanceVector eventEntryInfoVector_
 
IndexIntoFile::EntryNumber_t eventEntryNumber_
 
RootOutputTree eventTree_
 
FileID fid_
 
std::string file_
 
edm::propagate_const< std::shared_ptr< TFile > > filePtr_
 
IndexIntoFile indexIntoFile_
 
std::string logicalFile_
 
LuminosityBlockAuxiliary lumiAux_
 
IndexIntoFile::EntryNumber_t lumiEntryNumber_
 
RootOutputTree lumiTree_
 
edm::propagate_const< TTree * > metaDataTree_
 
unsigned long nEventsInLumi_
 
edm::propagate_const< PoolOutputModule * > om_
 
edm::propagate_const< TTree * > parameterSetsTree_
 
std::map< ParentageID, unsigned int > parentageIDs_
 
edm::propagate_const< TTree * > parentageTree_
 
BranchListIndexes const * pBranchListIndexes_
 
EventAuxiliary const * pEventAux_
 
edm::propagate_const< StoredProductProvenanceVector * > pEventEntryInfoVector_
 
EventSelectionIDVector const * pEventSelectionIDs_
 
LuminosityBlockAuxiliary const * pLumiAux_
 
ProcessHistoryRegistry processHistoryRegistry_
 
RunAuxiliary const * pRunAux_
 
JobReport::Token reportToken_
 
RunAuxiliary runAux_
 
IndexIntoFile::EntryNumber_t runEntryNumber_
 
RootOutputTree runTree_
 
StoredMergeableRunProductMetadata storedMergeableRunProductMetadata_
 
RootOutputTreePtrArray treePointers_
 
int whyNotFastClonable_
 
edm::propagate_const< TClass * > wrapperBaseTClass_
 

Detailed Description

Definition at line 45 of file RootOutputFile.h.

Member Typedef Documentation

◆ OutputItem

Definition at line 47 of file RootOutputFile.h.

◆ OutputItemList

Definition at line 48 of file RootOutputFile.h.

◆ RootOutputTreePtrArray

Definition at line 49 of file RootOutputFile.h.

Constructor & Destructor Documentation

◆ RootOutputFile()

edm::RootOutputFile::RootOutputFile ( PoolOutputModule om,
std::string const &  fileName,
std::string const &  logicalFileName,
std::vector< std::string > const &  processesWithSelectedMergeableRunProducts 
)
explicit

Definition at line 81 of file RootOutputFile.cc.

85  : file_(fileName),
86  logicalFile_(logicalFileName),
87  reportToken_(0),
88  om_(om),
89  whyNotFastClonable_(om_->whyNotFastClonable()),
90  canFastCloneAux_(false),
91  filePtr_(openTFile(file_.c_str(), om_->compressionLevel())),
92  fid_(),
97  storedMergeableRunProductMetadata_(processesWithSelectedMergeableRunProducts),
98  nEventsInLumi_(0),
99  metaDataTree_(nullptr),
100  parameterSetsTree_(nullptr),
101  parentageTree_(nullptr),
102  lumiAux_(),
103  runAux_(),
104  pEventAux_(nullptr),
106  pRunAux_(&runAux_),
109  pBranchListIndexes_(nullptr),
110  pEventSelectionIDs_(nullptr),
111  eventTree_(filePtr(), InEvent, om_->splitLevel(), om_->treeMaxVirtualSize()),
112  lumiTree_(filePtr(), InLumi, om_->splitLevel(), om_->treeMaxVirtualSize()),
113  runTree_(filePtr(), InRun, om_->splitLevel(), om_->treeMaxVirtualSize()),
114  treePointers_(),
115  dataTypeReported_(false),
117  parentageIDs_(),
119  wrapperBaseTClass_(TClass::GetClass("edm::WrapperBase")) {
120  if (om_->compressionAlgorithm() == std::string("ZLIB")) {
121  filePtr_->SetCompressionAlgorithm(ROOT::kZLIB);
122  } else if (om_->compressionAlgorithm() == std::string("LZMA")) {
123  filePtr_->SetCompressionAlgorithm(ROOT::kLZMA);
124  } else {
126  << "PoolOutputModule configured with unknown compression algorithm '" << om_->compressionAlgorithm() << "'\n"
127  << "Allowed compression algorithms are ZLIB and LZMA\n";
128  }
129  if (-1 != om->eventAutoFlushSize()) {
130  eventTree_.setAutoFlush(-1 * om->eventAutoFlushSize());
131  }
132  eventTree_.addAuxiliary<EventAuxiliary>(
133  BranchTypeToAuxiliaryBranchName(InEvent), pEventAux_, om_->auxItems()[InEvent].basketSize_);
136  om_->auxItems()[InEvent].basketSize_);
138  poolNames::eventSelectionsBranchName(), pEventSelectionIDs_, om_->auxItems()[InEvent].basketSize_, false);
141 
142  lumiTree_.addAuxiliary<LuminosityBlockAuxiliary>(
143  BranchTypeToAuxiliaryBranchName(InLumi), pLumiAux_, om_->auxItems()[InLumi].basketSize_);
144 
145  runTree_.addAuxiliary<RunAuxiliary>(
146  BranchTypeToAuxiliaryBranchName(InRun), pRunAux_, om_->auxItems()[InRun].basketSize_);
147 
151 
152  for (int i = InEvent; i < NumBranchTypes; ++i) {
153  BranchType branchType = static_cast<BranchType>(i);
154  RootOutputTree* theTree = treePointers_[branchType];
155  for (auto& item : om_->selectedOutputItemList()[branchType]) {
156  item.setProduct(nullptr);
157  BranchDescription const& desc = *item.branchDescription();
158  theTree->addBranch(desc.branchName(),
159  desc.wrappedName(),
160  item.product(),
161  item.splitLevel(),
162  item.basketSize(),
163  item.branchDescription()->produced());
164  //make sure we always store product registry info for all branches we create
165  branchesWithStoredHistory_.insert(item.branchID());
166  }
167  }
168  // Don't split metadata tree or event description tree
172 
173  fid_ = FileID(createGlobalIdentifier());
174 
175  // For the Job Report, get a vector of branch names in the "Events" tree.
176  // Also create a hash of all the branch names in the "Events" tree
177  // in a deterministic order, except use the full class name instead of the friendly class name.
178  // To avoid extra string copies, we create a vector of pointers into the product registry,
179  // and use a custom comparison operator for sorting.
180  std::vector<std::string> branchNames;
181  std::vector<BranchDescription const*> branches;
182  branchNames.reserve(om_->selectedOutputItemList()[InEvent].size());
183  branches.reserve(om->selectedOutputItemList()[InEvent].size());
184  for (auto const& item : om_->selectedOutputItemList()[InEvent]) {
185  branchNames.push_back(item.branchDescription()->branchName());
186  branches.push_back(item.branchDescription());
187  }
188  // Now sort the branches for the hash.
189  sort_all(branches, sorterForJobReportHash);
190  // Now, make a concatenated string.
191  std::ostringstream oss;
192  char const underscore = '_';
193  for (auto const& branch : branches) {
194  BranchDescription const& bd = *branch;
195  oss << bd.fullClassName() << underscore << bd.moduleLabel() << underscore << bd.productInstanceName()
196  << underscore << bd.processName() << underscore;
197  }
198  std::string stringrep = oss.str();
199  cms::Digest md5alg(stringrep);
200 
201  // Register the output file with the JobReport service
202  // and get back the token for it.
203  std::string moduleName = "PoolOutputModule";
204  Service<JobReport> reportSvc;
205  reportToken_ = reportSvc->outputFileOpened(file_,
206  logicalFile_, // PFN and LFN
207  om_->catalog(), // catalog
208  moduleName, // module class name
209  om_->moduleLabel(), // module label
210  fid_.fid(), // file id (guid)
211  std::string(), // data type (not yet known, so string is empty).
212  md5alg.digest().toString(), // branch hash
213  branchNames); // branch names being written
214  }

References edm::RootOutputTree::addAuxiliary(), edm::RootOutputTree::addBranch(), MicroEventContent_cff::branch, branchesWithStoredHistory_, edm::poolNames::branchListIndexesBranchName(), edm::BranchDescription::branchName(), edm::BranchTypeToAuxiliaryBranchName(), edm::BranchTypeToProductProvenanceBranchName(), edm::errors::Configuration, edm::createGlobalIdentifier(), cms::Digest::digest(), edm::PoolOutputModule::eventAutoFlushSize(), edm::poolNames::eventSelectionsBranchName(), eventTree_, Exception, edm::FileID::fid(), fid_, file_, filePtr_, edm::BranchDescription::fullClassName(), edm::propagate_const< T >::get(), mps_fire::i, edm::InEvent, edm::InLumi, edm::InRun, B2GTnPMonitor_cfi::item, logicalFile_, lumiTree_, edm::RootOutputTree::makeTTree(), metaDataTree_, edm::poolNames::metaDataTreeName(), edm::BranchDescription::moduleLabel(), edm::moduleName(), edm::NumBranchTypes, om_, parameterSetsTree_, edm::poolNames::parameterSetsTreeName(), parentageTree_, edm::poolNames::parentageTreeName(), pBranchListIndexes_, pEventAux_, pEventEntryInfoVector(), pEventSelectionIDs_, pLumiAux_, edm::BranchDescription::processName(), edm::BranchDescription::productInstanceName(), pRunAux_, reportToken_, runTree_, edm::PoolOutputModule::selectedOutputItemList(), edm::RootOutputTree::setAutoFlush(), edm::sort_all(), AlCaHLTBitMon_QueryRunRegistry::string, cms::MD5Result::toString(), treePointers_, and edm::BranchDescription::wrappedName().

◆ ~RootOutputFile()

edm::RootOutputFile::~RootOutputFile ( )
inline

Definition at line 54 of file RootOutputFile.h.

54 {}

Member Function Documentation

◆ beginInputFile()

void edm::RootOutputFile::beginInputFile ( FileBlock const &  fb,
int  remainingEvents 
)

Definition at line 304 of file RootOutputFile.cc.

304  {
305  // Reset per input file information
306  whyNotFastClonable_ = om_->whyNotFastClonable();
307  canFastCloneAux_ = false;
308 
309  if (fb.tree() != nullptr) {
310  whyNotFastClonable_ |= fb.whyNotFastClonable();
311 
312  if (remainingEvents >= 0 && remainingEvents < fb.tree()->GetEntries()) {
314  }
315 
317  if (!match) {
318  if (om_->overrideInputFileSplitLevels()) {
319  // We may be fast copying. We must disable fast copying if the split levels
320  // or basket sizes do not match.
322  } else {
323  // We are using the input split levels and basket sizes from the first input file
324  // for copied output branches. In this case, we throw an exception if any branches
325  // have different split levels or basket sizes in a subsequent input file.
326  // If the mismatch is in the first file, there is a bug somewhere, so we assert.
327  assert(om_->inputFileCount() > 1);
328  throw Exception(errors::MismatchedInputFiles, "RootOutputFile::beginInputFile()")
329  << "Merge failure because input file " << file_ << " has different ROOT split levels or basket sizes\n"
330  << "than previous files. To allow merging in splite of this, use the configuration parameter\n"
331  << "overrideInputFileSplitLevels=cms.untracked.bool(True)\n"
332  << "in every PoolOutputModule.\n";
333  }
334  }
335 
336  // Since this check can be time consuming, we do it only if we would otherwise fast clone.
338  if (!eventTree_.checkIfFastClonable(fb.tree())) {
340  }
341  }
342  // We now check if we can fast copy the auxiliary branches.
343  // We can do so only if we can otherwise fast copy,
344  // the input file has the current format (these branches are in the Events Tree),
345  // there are no newly dropped or produced products,
346  // no metadata has been dropped,
347  // ID's have not been modified,
348  // and the branch list indexes do not need modification.
349 
350  // Note: Fast copy of the EventProductProvenance branch is unsafe
351  // unless we can enforce that the parentage information for a fully copied
352  // output file will be the same as for the input file, with nothing dropped.
353  // This has never been enforced, and, withthe EDAlias feature, it may no longer
354  // work by accident.
355  // So, for now, we do not enable fast cloning of the non-product branches.
356  /*
357  Service<ConstProductRegistry> reg;
358  canFastCloneAux_ = (whyNotFastClonable_ == FileBlock::CanFastClone) &&
359  fb.fileFormatVersion().noMetaDataTrees() &&
360  !om_->hasNewlyDroppedBranch()[InEvent] &&
361  !fb.hasNewlyDroppedBranch()[InEvent] &&
362  om_->dropMetaData() == PoolOutputModule::DropNone &&
363  !reg->anyProductProduced() &&
364  !fb.modifiedIDs() &&
365  fb.branchListIndexesUnchanged();
366 */
367 
368  // Report the fast copying status.
369  Service<JobReport> reportSvc;
370  reportSvc->reportFastCopyingStatus(reportToken_, fb.fileName(), whyNotFastClonable_ == FileBlock::CanFastClone);
371  } else {
373  }
374 
377 
378  // Possibly issue warning or informational message if we haven't fast cloned.
379  if (fb.tree() != nullptr && whyNotFastClonable_ != FileBlock::CanFastClone) {
380  maybeIssueWarning(whyNotFastClonable_, fb.fileName(), file_);
381  }
382  }

References cms::cuda::assert(), edm::FileBlock::BranchMismatch, edm::FileBlock::CanFastClone, canFastCloneAux_, edm::RootOutputTree::checkIfFastClonable(), edm::RootOutputTree::checkSplitLevelsAndBasketSizes(), eventTree_, Exception, benchmark_cfg::fb, file_, edm::match(), edm::RootOutputTree::maybeFastCloneTree(), edm::errors::MismatchedInputFiles, edm::FileBlock::NoRootInputSource, om_, edm::FileBlock::OutputMaxEventsTooSmall, reportToken_, edm::FileBlock::SplitLevelMismatch, and whyNotFastClonable_.

◆ fileName()

std::string const& edm::RootOutputFile::fileName ( ) const
inline

Definition at line 76 of file RootOutputFile.h.

76 { return file_; }

References file_.

◆ filePtr() [1/2]

std::shared_ptr<TFile>& edm::RootOutputFile::filePtr ( )
inlineprivate

Definition at line 102 of file RootOutputFile.h.

102 { return get_underlying_safe(filePtr_); }

References filePtr_, and edm::get_underlying_safe().

◆ filePtr() [2/2]

std::shared_ptr<TFile const> edm::RootOutputFile::filePtr ( ) const
inlineprivate

Definition at line 101 of file RootOutputFile.h.

101 { return get_underlying_safe(filePtr_); }

References filePtr_, and edm::get_underlying_safe().

◆ fillBranches()

void edm::RootOutputFile::fillBranches ( BranchType const &  branchType,
OccurrenceForOutput const &  occurrence,
StoredProductProvenanceVector productProvenanceVecPtr = nullptr,
ProductProvenanceRetriever const *  provRetriever = nullptr 
)
private

Definition at line 687 of file RootOutputFile.cc.

690  {
691  std::vector<std::unique_ptr<WrapperBase> > dummies;
692 
693  OutputItemList& items = om_->selectedOutputItemList()[branchType];
694 
695  bool const doProvenance =
696  (productProvenanceVecPtr != nullptr) && (om_->dropMetaData() != PoolOutputModule::DropAll);
697  bool const keepProvenanceForPrior = doProvenance && om_->dropMetaData() != PoolOutputModule::DropPrior;
698 
699  bool const fastCloning = (branchType == InEvent) && (whyNotFastClonable_ == FileBlock::CanFastClone);
700  std::set<StoredProductProvenance> provenanceToKeep;
701  //
702  //If we are dropping some of the meta data we need to know
703  // which BranchIDs were produced in this process because
704  // we may be storing meta data for only those products
705  // We do this only for event products.
706  std::set<BranchID> producedBranches;
707  if (doProvenance && branchType == InEvent && om_->dropMetaData() != PoolOutputModule::DropNone) {
709  for (auto bd : preg->allBranchDescriptions()) {
710  if (bd->produced() && bd->branchType() == InEvent) {
711  producedBranches.insert(bd->branchID());
712  }
713  }
714  }
715 
716  // Loop over EDProduct branches, possibly fill the provenance, and write the branch.
717  for (auto& item : items) {
718  BranchID const& id = item.branchDescription()->branchID();
719  branchesWithStoredHistory_.insert(id);
720 
721  bool produced = item.branchDescription()->produced();
722  bool getProd =
723  (produced || !fastCloning || treePointers_[branchType]->uncloned(item.branchDescription()->branchName()));
724  bool keepProvenance = doProvenance && (produced || keepProvenanceForPrior);
725 
726  WrapperBase const* product = nullptr;
727  ProductProvenance const* productProvenance = nullptr;
728  if (getProd) {
729  BasicHandle result = occurrence.getByToken(item.token(), item.branchDescription()->unwrappedTypeID());
730  product = result.wrapper();
731  if (result.isValid() && keepProvenance) {
732  productProvenance = result.provenance()->productProvenance();
733  }
734  if (product == nullptr) {
735  // No product with this ID is in the event.
736  // Add a null product.
737  TClass* cp = item.branchDescription()->wrappedType().getClass();
738  assert(cp != nullptr);
739  int offset = cp->GetBaseClassOffset(wrapperBaseTClass_);
740  void* p = cp->New();
741  std::unique_ptr<WrapperBase> dummy = getWrapperBasePtr(p, offset);
742  product = dummy.get();
743  dummies.emplace_back(std::move(dummy));
744  }
745  item.setProduct(product);
746  }
747  if (keepProvenance && productProvenance == nullptr) {
748  productProvenance = provRetriever->branchIDToProvenance(item.branchDescription()->originalBranchID());
749  }
750  if (productProvenance) {
751  insertProductProvenance(*productProvenance, provenanceToKeep);
752  insertAncestors(*productProvenance, provRetriever, produced, producedBranches, provenanceToKeep);
753  }
754  }
755 
756  if (doProvenance)
757  productProvenanceVecPtr->assign(provenanceToKeep.begin(), provenanceToKeep.end());
758  treePointers_[branchType]->fillTree();
759  if (doProvenance)
760  productProvenanceVecPtr->clear();
761  }

References cms::cuda::assert(), branchesWithStoredHistory_, edm::ProductProvenanceRetriever::branchIDToProvenance(), edm::FileBlock::CanFastClone, CommonMethods::cp(), edm::PoolOutputModule::DropAll, edm::PoolOutputModule::DropNone, edm::PoolOutputModule::DropPrior, test_L1EGCrystalClusterEmulator_cfg::fastCloning, edm::OccurrenceForOutput::getByToken(), edm::getWrapperBasePtr(), edm::InEvent, insertAncestors(), insertProductProvenance(), B2GTnPMonitor_cfi::item, mps_monitormerge::items, eostools::move(), hltrates_dqm_sourceclient-live_cfg::offset, om_, AlCaHLTBitMon_ParallelJobs::p, mps_fire::result, treePointers_, whyNotFastClonable_, and wrapperBaseTClass_.

Referenced by writeLuminosityBlock(), writeOne(), and writeRun().

◆ finishEndFile()

void edm::RootOutputFile::finishEndFile ( )

Definition at line 614 of file RootOutputFile.cc.

614  {
615  metaDataTree_->SetEntries(-1);
618 
620 
621  // Create branch aliases for all the branches in the
622  // events/lumis/runs trees. The loop is over all types of data
623  // products.
624  for (int i = InEvent; i < NumBranchTypes; ++i) {
625  BranchType branchType = static_cast<BranchType>(i);
626  setBranchAliases(treePointers_[branchType]->tree(), om_->keptProducts()[branchType]);
627  treePointers_[branchType]->writeTree();
628  }
629 
630  // close the file -- mfp
631  // Just to play it safe, zero all pointers to objects in the TFile to be closed.
632  metaDataTree_ = parentageTree_ = nullptr;
633  for (auto& treePointer : treePointers_) {
634  treePointer->close();
635  treePointer = nullptr;
636  }
637  filePtr_->Close();
638  filePtr_ = nullptr; // propagate_const<T> has no reset() function
639 
640  // report that file has been closed
641  Service<JobReport> reportSvc;
642  reportSvc->outputFileClosed(reportToken_);
643  }

References filePtr_, mps_fire::i, edm::InEvent, metaDataTree_, edm::NumBranchTypes, om_, parameterSetsTree_, parentageTree_, reportToken_, setBranchAliases(), MainPageGenerator::tree, treePointers_, and edm::RootOutputTree::writeTTree().

◆ insertAncestors()

void edm::RootOutputFile::insertAncestors ( ProductProvenance const &  iGetParents,
ProductProvenanceRetriever const *  iMapper,
bool  produced,
std::set< BranchID > const &  producedBranches,
std::set< StoredProductProvenance > &  oToFill 
)
private

Definition at line 662 of file RootOutputFile.cc.

666  {
667  assert(om_->dropMetaData() != PoolOutputModule::DropAll);
668  assert(produced || om_->dropMetaData() != PoolOutputModule::DropPrior);
669  if (om_->dropMetaData() == PoolOutputModule::DropDroppedPrior && !produced)
670  return;
671  std::vector<BranchID> const& parentIDs = iGetParents.parentage().parents();
672  for (auto const& parentID : parentIDs) {
673  branchesWithStoredHistory_.insert(parentID);
674  ProductProvenance const* info = iMapper->branchIDToProvenance(parentID);
675  if (info) {
676  if (om_->dropMetaData() == PoolOutputModule::DropNone ||
677  (iProducedIDs.end() != iProducedIDs.find(info->branchID()))) {
678  if (insertProductProvenance(*info, oToFill)) {
679  //haven't seen this one yet
680  insertAncestors(*info, iMapper, produced, iProducedIDs, oToFill);
681  }
682  }
683  }
684  }
685  }

References cms::cuda::assert(), branchesWithStoredHistory_, edm::ProductProvenanceRetriever::branchIDToProvenance(), edm::PoolOutputModule::DropAll, edm::PoolOutputModule::DropDroppedPrior, edm::PoolOutputModule::DropNone, edm::PoolOutputModule::DropPrior, info(), insertProductProvenance(), om_, edm::ProductProvenance::parentage(), and edm::Parentage::parents().

Referenced by fillBranches().

◆ insertProductProvenance()

bool edm::RootOutputFile::insertProductProvenance ( const ProductProvenance ,
std::set< StoredProductProvenance > &  oToInsert 
)
private

Definition at line 763 of file RootOutputFile.cc.

764  {
765  StoredProductProvenance toStore;
766  toStore.branchID_ = iProv.branchID().id();
767  std::set<edm::StoredProductProvenance>::iterator itFound = oToInsert.find(toStore);
768  if (itFound == oToInsert.end()) {
769  //get the index to the ParentageID or insert a new value if not already present
770  std::pair<std::map<edm::ParentageID, unsigned int>::iterator, bool> i =
771  parentageIDs_.insert(std::make_pair(iProv.parentageID(), static_cast<unsigned int>(parentageIDs_.size())));
772  toStore.parentageIDIndex_ = i.first->second;
773  if (toStore.parentageIDIndex_ >= parentageIDs_.size()) {
775  << "RootOutputFile::insertProductProvenance\n"
776  << "The parentage ID index value " << toStore.parentageIDIndex_
777  << " is out of bounds. The maximum value is currently " << parentageIDs_.size() - 1 << ".\n"
778  << "This should never happen.\n"
779  << "Please report this to the framework hypernews forum 'hn-cms-edmFramework@cern.ch'.\n";
780  }
781 
782  oToInsert.insert(toStore);
783  return true;
784  }
785  return false;
786  }

References edm::ProductProvenance::branchID(), edm::StoredProductProvenance::branchID_, Exception, mps_fire::i, edm::BranchID::id(), edm::errors::LogicError, edm::ProductProvenance::parentageID(), edm::StoredProductProvenance::parentageIDIndex_, and parentageIDs_.

Referenced by fillBranches(), and insertAncestors().

◆ pEventEntryInfoVector() [1/2]

StoredProductProvenanceVector*& edm::RootOutputFile::pEventEntryInfoVector ( )
inlineprivate

◆ pEventEntryInfoVector() [2/2]

StoredProductProvenanceVector const* edm::RootOutputFile::pEventEntryInfoVector ( ) const
inlineprivate

Definition at line 103 of file RootOutputFile.h.

103  {
105  }

References edm::get_underlying_safe(), and pEventEntryInfoVector_.

Referenced by RootOutputFile().

◆ respondToCloseInputFile()

void edm::RootOutputFile::respondToCloseInputFile ( FileBlock const &  fb)

Definition at line 384 of file RootOutputFile.cc.

384  {
388  }

References eventTree_, lumiTree_, runTree_, and edm::RootOutputTree::setEntries().

◆ setBranchAliases()

void edm::RootOutputFile::setBranchAliases ( TTree *  tree,
SelectedProducts const &  branches 
) const
private

Definition at line 645 of file RootOutputFile.cc.

645  {
646  if (tree && tree->GetNbranches() != 0) {
647  for (auto const& selection : branches) {
648  BranchDescription const& pd = *selection.first;
649  std::string const& full = pd.branchName() + "obj";
650  if (pd.branchAliases().empty()) {
651  std::string const& alias = (pd.productInstanceName().empty() ? pd.moduleLabel() : pd.productInstanceName());
652  tree->SetAlias(alias.c_str(), full.c_str());
653  } else {
654  for (auto const& alias : pd.branchAliases()) {
655  tree->SetAlias(alias.c_str(), full.c_str());
656  }
657  }
658  }
659  }
660  }

References SiStripOfflineCRack_cfg::alias, edm::BranchDescription::branchAliases(), edm::BranchDescription::branchName(), full, edm::BranchDescription::moduleLabel(), edm::BranchDescription::productInstanceName(), corrVsCorr::selection, and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by finishEndFile().

◆ shouldWeCloseFile()

bool edm::RootOutputFile::shouldWeCloseFile ( ) const

Definition at line 390 of file RootOutputFile.cc.

390  {
391  unsigned int const oneK = 1024;
392  Long64_t size = filePtr_->GetSize() / oneK;
393  return (size >= om_->maxFileSize());
394  }

References filePtr_, om_, and findQualityFiles::size.

◆ writeBranchIDListRegistry()

void edm::RootOutputFile::writeBranchIDListRegistry ( )

Definition at line 555 of file RootOutputFile.cc.

555  {
556  BranchIDLists const* p = om_->branchIDLists();
557  TBranch* b = metaDataTree_->Branch(poolNames::branchIDListBranchName().c_str(), &p, om_->basketSize(), 0);
558  assert(b);
559  b->Fill();
560  }

References cms::cuda::assert(), b, edm::poolNames::branchIDListBranchName(), metaDataTree_, om_, and AlCaHLTBitMon_ParallelJobs::p.

◆ writeFileFormatVersion()

void edm::RootOutputFile::writeFileFormatVersion ( )

Definition at line 509 of file RootOutputFile.cc.

509  {
510  FileFormatVersion fileFormatVersion(getFileFormatVersion());
511  FileFormatVersion* pFileFmtVsn = &fileFormatVersion;
512  TBranch* b =
513  metaDataTree_->Branch(poolNames::fileFormatVersionBranchName().c_str(), &pFileFmtVsn, om_->basketSize(), 0);
514  assert(b);
515  b->Fill();
516  }

References cms::cuda::assert(), b, edm::poolNames::fileFormatVersionBranchName(), edm::getFileFormatVersion(), metaDataTree_, and om_.

◆ writeFileIdentifier()

void edm::RootOutputFile::writeFileIdentifier ( )

Definition at line 518 of file RootOutputFile.cc.

518  {
519  FileID* fidPtr = &fid_;
520  TBranch* b = metaDataTree_->Branch(poolNames::fileIdentifierBranchName().c_str(), &fidPtr, om_->basketSize(), 0);
521  assert(b);
522  b->Fill();
523  }

References cms::cuda::assert(), b, fid_, edm::poolNames::fileIdentifierBranchName(), metaDataTree_, and om_.

◆ writeIndexIntoFile()

void edm::RootOutputFile::writeIndexIntoFile ( )

Definition at line 525 of file RootOutputFile.cc.

525  {
528  ex << "The number of entries in at least one output TBranch whose entries\n"
529  "were copied from the input does not match the number of events\n"
530  "recorded in IndexIntoFile. This might (or might not) indicate a\n"
531  "problem related to fast copy.";
532  ex.addContext("Calling RootOutputFile::writeIndexIntoFile");
533  throw ex;
534  }
536  IndexIntoFile* iifPtr = &indexIntoFile_;
537  TBranch* b = metaDataTree_->Branch(poolNames::indexIntoFileBranchName().c_str(), &iifPtr, om_->basketSize(), 0);
538  assert(b);
539  b->Fill();
540  }

References cms::Exception::addContext(), cms::cuda::assert(), b, edm::RootOutputTree::checkEntriesInReadBranches(), eventEntryNumber_, eventTree_, indexIntoFile_, edm::poolNames::indexIntoFileBranchName(), metaDataTree_, om_, edm::errors::OtherCMS, and edm::IndexIntoFile::sortVector_Run_Or_Lumi_Entries().

◆ writeLuminosityBlock()

void edm::RootOutputFile::writeLuminosityBlock ( LuminosityBlockForOutput const &  lb)

Definition at line 445 of file RootOutputFile.cc.

445  {
446  // Auxiliary branch
447  // NOTE: lumiAux_ must be filled before calling fillBranches since it gets written out in that routine.
448  lumiAux_ = lb.luminosityBlockAuxiliary();
449  // Use the updated process historyID
450  lumiAux_.setProcessHistoryID(lb.processHistoryID());
451  // Store the process history.
452  processHistoryRegistry_.registerProcessHistory(lb.processHistory());
453  // Store the reduced ID in the IndexIntoFile
454  ProcessHistoryID reducedPHID = processHistoryRegistry_.reducedProcessHistoryID(lb.processHistoryID());
455  // Add lumi to index.
458  fillBranches(InLumi, lb);
459  lumiTree_.optimizeBaskets(10ULL * 1024 * 1024);
460 
461  Service<JobReport> reportSvc;
462  reportSvc->reportLumiSection(reportToken_, lb.id().run(), lb.id().luminosityBlock(), nEventsInLumi_);
463  nEventsInLumi_ = 0;
464  }

References edm::IndexIntoFile::addEntry(), fillBranches(), edm::LuminosityBlockForOutput::id(), indexIntoFile_, edm::InLumi, lumiAux_, lumiEntryNumber_, edm::LuminosityBlockAuxiliary::luminosityBlock(), edm::LuminosityBlockID::luminosityBlock(), edm::LuminosityBlockForOutput::luminosityBlockAuxiliary(), lumiTree_, nEventsInLumi_, edm::RootOutputTree::optimizeBaskets(), edm::OccurrenceForOutput::processHistory(), edm::OccurrenceForOutput::processHistoryID(), processHistoryRegistry_, edm::ProcessHistoryRegistry::reducedProcessHistoryID(), edm::ProcessHistoryRegistry::registerProcessHistory(), reportToken_, edm::LuminosityBlockAuxiliary::run(), edm::LuminosityBlockID::run(), edm::LuminosityBlockAuxiliary::setProcessHistoryID(), and mitigatedMETSequence_cff::U.

◆ writeOne()

void edm::RootOutputFile::writeOne ( EventForOutput const &  e)

Definition at line 396 of file RootOutputFile.cc.

396  {
397  // Auxiliary branch
398  pEventAux_ = &e.eventAuxiliary();
399 
400  // Because getting the data may cause an exception to be thrown we want to do that
401  // first before writing anything to the file about this event
402  // NOTE: pEventAux_, pBranchListIndexes_, pEventSelectionIDs_, and pEventEntryInfoVector_
403  // must be set before calling fillBranches since they get written out in that routine.
404  assert(pEventAux_->processHistoryID() == e.processHistoryID());
405  pBranchListIndexes_ = &e.branchListIndexes();
406 
407  // Note: The EventSelectionIDVector should have a one to one correspondence with the processes in the process history.
408  // Therefore, a new entry should be added if and only if the current process has been added to the process history,
409  // which is done if and only if there is a produced product.
411  EventSelectionIDVector esids = e.eventSelectionIDs();
412  if (reg->anyProductProduced() || !om_->wantAllEvents()) {
413  esids.push_back(om_->selectorConfig());
414  }
415  pEventSelectionIDs_ = &esids;
416  ProductProvenanceRetriever const* provRetriever = e.productProvenanceRetrieverPtr();
417  assert(provRetriever);
418  fillBranches(InEvent, e, pEventEntryInfoVector_, provRetriever);
419 
420  // Add the dataType to the job report if it hasn't already been done
421  if (!dataTypeReported_) {
422  Service<JobReport> reportSvc;
423  std::string dataType("MC");
424  if (pEventAux_->isRealData())
425  dataType = "Data";
426  reportSvc->reportDataType(reportToken_, dataType);
427  dataTypeReported_ = true;
428  }
429 
430  // Store the process history.
432  // Store the reduced ID in the IndexIntoFile
433  ProcessHistoryID reducedPHID = processHistoryRegistry_.reducedProcessHistoryID(e.processHistoryID());
434  // Add event to index
438 
439  // Report event written
440  Service<JobReport> reportSvc;
441  reportSvc->eventWrittenToFile(reportToken_, e.id().run(), e.id().event());
442  ++nEventsInLumi_;
443  }

References edm::IndexIntoFile::addEntry(), cms::cuda::assert(), DTskim_cfg::dataType, dataTypeReported_, MillePedeFileConverter_cfg::e, edm::EventAuxiliary::event(), eventEntryNumber_, fillBranches(), indexIntoFile_, edm::InEvent, edm::EventAuxiliary::isRealData(), edm::EventAuxiliary::luminosityBlock(), nEventsInLumi_, om_, pBranchListIndexes_, pEventAux_, pEventEntryInfoVector_, pEventSelectionIDs_, edm::EventAuxiliary::processHistoryID(), processHistoryRegistry_, edm::ProcessHistoryRegistry::reducedProcessHistoryID(), edm::ProcessHistoryRegistry::registerProcessHistory(), reportToken_, edm::EventAuxiliary::run(), and AlCaHLTBitMon_QueryRunRegistry::string.

◆ writeParameterSetRegistry()

void edm::RootOutputFile::writeParameterSetRegistry ( )

Definition at line 570 of file RootOutputFile.cc.

570  {
572  }

References edm::fillParameterSetBranch(), edm::propagate_const< T >::get(), om_, and parameterSetsTree_.

◆ writeParentageRegistry()

void edm::RootOutputFile::writeParentageRegistry ( )

Definition at line 487 of file RootOutputFile.cc.

487  {
488  Parentage const* desc(nullptr);
489 
490  if (!parentageTree_->Branch(poolNames::parentageBranchName().c_str(), &desc, om_->basketSize(), 0))
491  throw Exception(errors::FatalRootError) << "Failed to create a branch for Parentages in the output file";
492 
493  ParentageRegistry& ptReg = *ParentageRegistry::instance();
494 
495  std::vector<ParentageID> orderedIDs(parentageIDs_.size());
496  for (auto const& parentageID : parentageIDs_) {
497  orderedIDs[parentageID.second] = parentageID.first;
498  }
499  //now put them into the TTree in the correct order
500  for (auto const& orderedID : orderedIDs) {
501  desc = ptReg.getMapped(orderedID);
502  //NOTE: some old format files have missing Parentage info
503  // so a null value of desc can't be fatal.
504  // Root will default construct an object in that case.
505  parentageTree_->Fill();
506  }
507  }

References Exception, edm::errors::FatalRootError, edm::ParentageRegistry::getMapped(), edm::ParentageRegistry::instance(), om_, edm::poolNames::parentageBranchName(), parentageIDs_, and parentageTree_.

◆ writeProcessHistoryRegistry()

void edm::RootOutputFile::writeProcessHistoryRegistry ( )

◆ writeProductDependencies()

void edm::RootOutputFile::writeProductDependencies ( )

Definition at line 605 of file RootOutputFile.cc.

605  {
606  BranchChildren& pDeps = const_cast<BranchChildren&>(om_->branchChildren());
607  BranchChildren* ppDeps = &pDeps;
608  TBranch* b =
609  metaDataTree_->Branch(poolNames::productDependenciesBranchName().c_str(), &ppDeps, om_->basketSize(), 0);
610  assert(b);
611  b->Fill();
612  }

References cms::cuda::assert(), b, metaDataTree_, om_, and edm::poolNames::productDependenciesBranchName().

◆ writeProductDescriptionRegistry()

void edm::RootOutputFile::writeProductDescriptionRegistry ( )

Definition at line 574 of file RootOutputFile.cc.

574  {
575  // Make a local copy of the ProductRegistry, removing any transient or pruned products.
576  typedef ProductRegistry::ProductList ProductList;
578  ProductRegistry pReg(reg->productList());
579  ProductList& pList = const_cast<ProductList&>(pReg.productList());
580  for (auto const& prod : pList) {
581  if (prod.second.branchID() != prod.second.originalBranchID()) {
582  if (branchesWithStoredHistory_.find(prod.second.branchID()) != branchesWithStoredHistory_.end()) {
583  branchesWithStoredHistory_.insert(prod.second.originalBranchID());
584  }
585  }
586  }
587  std::set<BranchID>::iterator end = branchesWithStoredHistory_.end();
588  for (ProductList::iterator it = pList.begin(); it != pList.end();) {
589  if (branchesWithStoredHistory_.find(it->second.branchID()) == end) {
590  // avoid invalidating iterator on deletion
591  ProductList::iterator itCopy = it;
592  ++it;
593  pList.erase(itCopy);
594 
595  } else {
596  ++it;
597  }
598  }
599 
600  ProductRegistry* ppReg = &pReg;
601  TBranch* b = metaDataTree_->Branch(poolNames::productDescriptionBranchName().c_str(), &ppReg, om_->basketSize(), 0);
602  assert(b);
603  b->Fill();
604  }

References cms::cuda::assert(), b, branchesWithStoredHistory_, end, metaDataTree_, om_, dumpMFGeometry_cfg::prod, and edm::poolNames::productDescriptionBranchName().

◆ writeRun()

void edm::RootOutputFile::writeRun ( RunForOutput const &  r)

Definition at line 466 of file RootOutputFile.cc.

466  {
467  // Auxiliary branch
468  // NOTE: runAux_ must be filled before calling fillBranches since it gets written out in that routine.
469  runAux_ = r.runAuxiliary();
470  // Use the updated process historyID
471  runAux_.setProcessHistoryID(r.processHistoryID());
472  // Store the process history.
474  // Store the reduced ID in the IndexIntoFile
475  ProcessHistoryID reducedPHID = processHistoryRegistry_.reducedProcessHistoryID(r.processHistoryID());
476  // Add run to index.
477  indexIntoFile_.addEntry(reducedPHID, runAux_.run(), 0U, 0U, runEntryNumber_);
478  r.mergeableRunProductMetadata()->addEntryToStoredMetadata(storedMergeableRunProductMetadata_);
479  ++runEntryNumber_;
480  fillBranches(InRun, r);
481  runTree_.optimizeBaskets(10ULL * 1024 * 1024);
482 
483  Service<JobReport> reportSvc;
484  reportSvc->reportRunNumber(reportToken_, r.run());
485  }

References edm::IndexIntoFile::addEntry(), fillBranches(), indexIntoFile_, edm::InRun, edm::RootOutputTree::optimizeBaskets(), processHistoryRegistry_, alignCSCRings::r, edm::ProcessHistoryRegistry::reducedProcessHistoryID(), edm::ProcessHistoryRegistry::registerProcessHistory(), reportToken_, edm::RunAuxiliary::run(), runAux_, runEntryNumber_, runTree_, edm::RunAuxiliary::setProcessHistoryID(), storedMergeableRunProductMetadata_, and mitigatedMETSequence_cff::U.

◆ writeStoredMergeableRunProductMetadata()

void edm::RootOutputFile::writeStoredMergeableRunProductMetadata ( )

◆ writeThinnedAssociationsHelper()

void edm::RootOutputFile::writeThinnedAssociationsHelper ( )

Definition at line 562 of file RootOutputFile.cc.

562  {
563  ThinnedAssociationsHelper const* p = om_->thinnedAssociationsHelper();
564  TBranch* b =
565  metaDataTree_->Branch(poolNames::thinnedAssociationsHelperBranchName().c_str(), &p, om_->basketSize(), 0);
566  assert(b);
567  b->Fill();
568  }

References cms::cuda::assert(), b, metaDataTree_, om_, AlCaHLTBitMon_ParallelJobs::p, and edm::poolNames::thinnedAssociationsHelperBranchName().

Member Data Documentation

◆ branchesWithStoredHistory_

std::set<BranchID> edm::RootOutputFile::branchesWithStoredHistory_
private

◆ canFastCloneAux_

bool edm::RootOutputFile::canFastCloneAux_
private

Definition at line 116 of file RootOutputFile.h.

Referenced by beginInputFile().

◆ dataTypeReported_

bool edm::RootOutputFile::dataTypeReported_
private

Definition at line 141 of file RootOutputFile.h.

Referenced by writeOne().

◆ eventEntryInfoVector_

StoredProductProvenanceVector edm::RootOutputFile::eventEntryInfoVector_
private

Definition at line 133 of file RootOutputFile.h.

◆ eventEntryNumber_

IndexIntoFile::EntryNumber_t edm::RootOutputFile::eventEntryNumber_
private

Definition at line 119 of file RootOutputFile.h.

Referenced by writeIndexIntoFile(), and writeOne().

◆ eventTree_

RootOutputTree edm::RootOutputFile::eventTree_
private

◆ fid_

FileID edm::RootOutputFile::fid_
private

Definition at line 118 of file RootOutputFile.h.

Referenced by RootOutputFile(), and writeFileIdentifier().

◆ file_

std::string edm::RootOutputFile::file_
private

Definition at line 111 of file RootOutputFile.h.

Referenced by beginInputFile(), fileName(), and RootOutputFile().

◆ filePtr_

edm::propagate_const<std::shared_ptr<TFile> > edm::RootOutputFile::filePtr_
private

Definition at line 117 of file RootOutputFile.h.

Referenced by filePtr(), finishEndFile(), RootOutputFile(), and shouldWeCloseFile().

◆ indexIntoFile_

IndexIntoFile edm::RootOutputFile::indexIntoFile_
private

Definition at line 122 of file RootOutputFile.h.

Referenced by writeIndexIntoFile(), writeLuminosityBlock(), writeOne(), and writeRun().

◆ logicalFile_

std::string edm::RootOutputFile::logicalFile_
private

Definition at line 112 of file RootOutputFile.h.

Referenced by RootOutputFile().

◆ lumiAux_

LuminosityBlockAuxiliary edm::RootOutputFile::lumiAux_
private

Definition at line 128 of file RootOutputFile.h.

Referenced by writeLuminosityBlock().

◆ lumiEntryNumber_

IndexIntoFile::EntryNumber_t edm::RootOutputFile::lumiEntryNumber_
private

Definition at line 120 of file RootOutputFile.h.

Referenced by writeLuminosityBlock().

◆ lumiTree_

RootOutputTree edm::RootOutputFile::lumiTree_
private

Definition at line 138 of file RootOutputFile.h.

Referenced by respondToCloseInputFile(), RootOutputFile(), and writeLuminosityBlock().

◆ metaDataTree_

edm::propagate_const<TTree*> edm::RootOutputFile::metaDataTree_
private

◆ nEventsInLumi_

unsigned long edm::RootOutputFile::nEventsInLumi_
private

Definition at line 124 of file RootOutputFile.h.

Referenced by writeLuminosityBlock(), and writeOne().

◆ om_

edm::propagate_const<PoolOutputModule*> edm::RootOutputFile::om_
private

◆ parameterSetsTree_

edm::propagate_const<TTree*> edm::RootOutputFile::parameterSetsTree_
private

Definition at line 126 of file RootOutputFile.h.

Referenced by finishEndFile(), RootOutputFile(), and writeParameterSetRegistry().

◆ parentageIDs_

std::map<ParentageID, unsigned int> edm::RootOutputFile::parentageIDs_
private

Definition at line 143 of file RootOutputFile.h.

Referenced by insertProductProvenance(), and writeParentageRegistry().

◆ parentageTree_

edm::propagate_const<TTree*> edm::RootOutputFile::parentageTree_
private

Definition at line 127 of file RootOutputFile.h.

Referenced by finishEndFile(), RootOutputFile(), and writeParentageRegistry().

◆ pBranchListIndexes_

BranchListIndexes const* edm::RootOutputFile::pBranchListIndexes_
private

Definition at line 135 of file RootOutputFile.h.

Referenced by RootOutputFile(), and writeOne().

◆ pEventAux_

EventAuxiliary const* edm::RootOutputFile::pEventAux_
private

Definition at line 130 of file RootOutputFile.h.

Referenced by RootOutputFile(), and writeOne().

◆ pEventEntryInfoVector_

edm::propagate_const<StoredProductProvenanceVector*> edm::RootOutputFile::pEventEntryInfoVector_
private

Definition at line 134 of file RootOutputFile.h.

Referenced by pEventEntryInfoVector(), and writeOne().

◆ pEventSelectionIDs_

EventSelectionIDVector const* edm::RootOutputFile::pEventSelectionIDs_
private

Definition at line 136 of file RootOutputFile.h.

Referenced by RootOutputFile(), and writeOne().

◆ pLumiAux_

LuminosityBlockAuxiliary const* edm::RootOutputFile::pLumiAux_
private

Definition at line 131 of file RootOutputFile.h.

Referenced by RootOutputFile().

◆ processHistoryRegistry_

ProcessHistoryRegistry edm::RootOutputFile::processHistoryRegistry_
private

◆ pRunAux_

RunAuxiliary const* edm::RootOutputFile::pRunAux_
private

Definition at line 132 of file RootOutputFile.h.

Referenced by RootOutputFile().

◆ reportToken_

JobReport::Token edm::RootOutputFile::reportToken_
private

◆ runAux_

RunAuxiliary edm::RootOutputFile::runAux_
private

Definition at line 129 of file RootOutputFile.h.

Referenced by writeRun().

◆ runEntryNumber_

IndexIntoFile::EntryNumber_t edm::RootOutputFile::runEntryNumber_
private

Definition at line 121 of file RootOutputFile.h.

Referenced by writeRun().

◆ runTree_

RootOutputTree edm::RootOutputFile::runTree_
private

Definition at line 139 of file RootOutputFile.h.

Referenced by respondToCloseInputFile(), RootOutputFile(), and writeRun().

◆ storedMergeableRunProductMetadata_

StoredMergeableRunProductMetadata edm::RootOutputFile::storedMergeableRunProductMetadata_
private

Definition at line 123 of file RootOutputFile.h.

Referenced by writeRun(), and writeStoredMergeableRunProductMetadata().

◆ treePointers_

RootOutputTreePtrArray edm::RootOutputFile::treePointers_
private

Definition at line 140 of file RootOutputFile.h.

Referenced by fillBranches(), finishEndFile(), and RootOutputFile().

◆ whyNotFastClonable_

int edm::RootOutputFile::whyNotFastClonable_
private

Definition at line 115 of file RootOutputFile.h.

Referenced by beginInputFile(), and fillBranches().

◆ wrapperBaseTClass_

edm::propagate_const<TClass*> edm::RootOutputFile::wrapperBaseTClass_
private

Definition at line 145 of file RootOutputFile.h.

Referenced by fillBranches().

edm::LuminosityBlockAuxiliary::run
RunNumber_t run() const
Definition: LuminosityBlockAuxiliary.h:31
edm::RootOutputFile::dataTypeReported_
bool dataTypeReported_
Definition: RootOutputFile.h:141
edm::FileBlock::BranchMismatch
Definition: FileBlock.h:54
edm::EventAuxiliary::event
EventNumber_t event() const
Definition: EventAuxiliary.h:72
edm::poolNames::branchIDListBranchName
std::string const & branchIDListBranchName()
Definition: BranchType.cc:186
edm::RootOutputTree::optimizeBaskets
void optimizeBaskets(ULong64_t size)
Definition: RootOutputTree.h:95
edm::errors::MismatchedInputFiles
Definition: EDMException.h:52
edm::ProcessHistoryRegistry::registerProcessHistory
bool registerProcessHistory(ProcessHistory const &processHistory)
Definition: ProcessHistoryRegistry.cc:11
mps_fire.i
i
Definition: mps_fire.py:355
edm::RootOutputFile::setBranchAliases
void setBranchAliases(TTree *tree, SelectedProducts const &branches) const
Definition: RootOutputFile.cc:645
edm::poolNames::fileFormatVersionBranchName
std::string const & fileFormatVersionBranchName()
Definition: BranchType.cc:192
edm::RootOutputFile::indexIntoFile_
IndexIntoFile indexIntoFile_
Definition: RootOutputFile.h:122
edm::RootOutputFile::pRunAux_
RunAuxiliary const * pRunAux_
Definition: RootOutputFile.h:132
edm::RootOutputFile::runEntryNumber_
IndexIntoFile::EntryNumber_t runEntryNumber_
Definition: RootOutputFile.h:121
edm::FileBlock::OutputMaxEventsTooSmall
Definition: FileBlock.h:52
edm::getWrapperBasePtr
std::unique_ptr< WrapperBase > getWrapperBasePtr(void *p, int offset)
Definition: getWrapperBasePtr.h:8
edm::RootOutputFile::filePtr
std::shared_ptr< TFile const > filePtr() const
Definition: RootOutputFile.h:101
edm::RootOutputFile::parentageIDs_
std::map< ParentageID, unsigned int > parentageIDs_
Definition: RootOutputFile.h:143
edm::IndexIntoFile::addEntry
void addEntry(ProcessHistoryID const &processHistoryID, RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event, EntryNumber_t entry)
Definition: IndexIntoFile.cc:75
edm::sort_all
void sort_all(RandomAccessSequence &s)
wrappers for std::sort
Definition: Algorithms.h:92
edm::errors::LogicError
Definition: EDMException.h:37
edm::FileID::fid
std::string const & fid() const
Definition: FileID.h:19
MicroEventContent_cff.branch
branch
Definition: MicroEventContent_cff.py:152
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
tree
Definition: tree.py:1
edm::FileBlock::NoRootInputSource
Definition: FileBlock.h:27
edm::ParentageRegistry::instance
static ParentageRegistry * instance()
Definition: ParentageRegistry.cc:4
edm::poolNames::parameterSetsTreeName
std::string const & parameterSetsTreeName()
Definition: BranchType.cc:214
edm::BranchListIndexes
std::vector< BranchListIndex > BranchListIndexes
Definition: BranchListIndex.h:18
edm::RootOutputFile::whyNotFastClonable_
int whyNotFastClonable_
Definition: RootOutputFile.h:115
edm::RootOutputFile::treePointers_
RootOutputTreePtrArray treePointers_
Definition: RootOutputFile.h:140
cms::cuda::assert
assert(be >=bs)
edm::RootOutputFile::fid_
FileID fid_
Definition: RootOutputFile.h:118
edm::poolNames::indexIntoFileBranchName
std::string const & indexIntoFileBranchName()
Definition: BranchType.cc:201
info
static const TGPicture * info(bool iBackgroundIsBlack)
Definition: FWCollectionSummaryWidget.cc:152
edm::RootOutputFile::lumiEntryNumber_
IndexIntoFile::EntryNumber_t lumiEntryNumber_
Definition: RootOutputFile.h:120
edm::RootOutputFile::lumiTree_
RootOutputTree lumiTree_
Definition: RootOutputFile.h:138
full
Definition: GenABIO.cc:168
edm::RootOutputFile::file_
std::string file_
Definition: RootOutputFile.h:111
edm::RootOutputTree::writeTTree
static void writeTTree(TTree *tree)
Definition: RootOutputTree.cc:276
DTskim_cfg.dataType
dataType
Definition: DTskim_cfg.py:56
edm::poolNames::branchListIndexesBranchName
std::string const & branchListIndexesBranchName()
Definition: BranchType.cc:212
edm::InRun
Definition: BranchType.h:11
edm::BranchType
BranchType
Definition: BranchType.h:11
edm::BranchTypeToAuxiliaryBranchName
std::string const & BranchTypeToAuxiliaryBranchName(BranchType const &branchType)
Definition: BranchType.cc:115
edm::RootOutputTree::checkSplitLevelsAndBasketSizes
bool checkSplitLevelsAndBasketSizes(TTree *inputTree) const
Definition: RootOutputTree.cc:132
end
#define end
Definition: vmac.h:39
mps_monitormerge.items
list items
Definition: mps_monitormerge.py:29
edm::NumBranchTypes
Definition: BranchType.h:11
edm::RootOutputFile::fillBranches
void fillBranches(BranchType const &branchType, OccurrenceForOutput const &occurrence, StoredProductProvenanceVector *productProvenanceVecPtr=nullptr, ProductProvenanceRetriever const *provRetriever=nullptr)
Definition: RootOutputFile.cc:687
edm::poolNames::mergeableRunProductMetadataBranchName
std::string const & mergeableRunProductMetadataBranchName()
Definition: BranchType.cc:204
edm::RootOutputFile::fileName
std::string const & fileName() const
Definition: RootOutputFile.h:76
edm::EventAuxiliary::run
RunNumber_t run() const
Definition: EventAuxiliary.h:73
edm::RootOutputFile::pLumiAux_
LuminosityBlockAuxiliary const * pLumiAux_
Definition: RootOutputFile.h:131
edm::propagate_const::get
element_type const * get() const
Definition: propagate_const.h:64
edm::FileBlock::CanFastClone
Definition: FileBlock.h:24
edm::RootOutputFile::metaDataTree_
edm::propagate_const< TTree * > metaDataTree_
Definition: RootOutputFile.h:125
edm::poolNames::parentageBranchName
std::string const & parentageBranchName()
Definition: BranchType.cc:159
edm::RootOutputFile::nEventsInLumi_
unsigned long nEventsInLumi_
Definition: RootOutputFile.h:124
edm::RootOutputFile::pEventEntryInfoVector_
edm::propagate_const< StoredProductProvenanceVector * > pEventEntryInfoVector_
Definition: RootOutputFile.h:134
edm::RootOutputFile::processHistoryRegistry_
ProcessHistoryRegistry processHistoryRegistry_
Definition: RootOutputFile.h:142
edm::RootOutputFile::filePtr_
edm::propagate_const< std::shared_ptr< TFile > > filePtr_
Definition: RootOutputFile.h:117
cms::Digest
Definition: Digest.h:46
edm::RootOutputTree::maybeFastCloneTree
void maybeFastCloneTree(bool canFastClone, bool canFastCloneAux, TTree *tree, std::string const &option)
Definition: RootOutputTree.cc:292
edm::errors::FatalRootError
Definition: EDMException.h:51
edm::RootOutputTree::setAutoFlush
void setAutoFlush(Long64_t size)
Definition: RootOutputTree.h:97
edm::fillParameterSetBranch
void fillParameterSetBranch(TTree *parameterSetsTree, int basketSize)
Definition: CommonProvenanceFiller.cc:18
dumpMFGeometry_cfg.prod
prod
Definition: dumpMFGeometry_cfg.py:24
corrVsCorr.selection
selection
main part
Definition: corrVsCorr.py:100
edm::RootOutputFile::insertProductProvenance
bool insertProductProvenance(const ProductProvenance &, std::set< StoredProductProvenance > &oToInsert)
Definition: RootOutputFile.cc:763
Service
edm::RootOutputFile::branchesWithStoredHistory_
std::set< BranchID > branchesWithStoredHistory_
Definition: RootOutputFile.h:144
edm::RootOutputFile::OutputItemList
PoolOutputModule::OutputItemList OutputItemList
Definition: RootOutputFile.h:48
edm::RootOutputTree::checkIfFastClonable
bool checkIfFastClonable(TTree *inputTree) const
Definition: RootOutputTree.cc:180
edm::InEvent
Definition: BranchType.h:11
edm::RootOutputFile::wrapperBaseTClass_
edm::propagate_const< TClass * > wrapperBaseTClass_
Definition: RootOutputFile.h:145
edm::RootOutputFile::canFastCloneAux_
bool canFastCloneAux_
Definition: RootOutputFile.h:116
b
double b
Definition: hdecay.h:118
edm::poolNames::parentageTreeName
std::string const & parentageTreeName()
Definition: BranchType.cc:157
edm::BranchIDLists
std::vector< BranchIDList > BranchIDLists
Definition: BranchIDList.h:19
edm::RootOutputFile::insertAncestors
void insertAncestors(ProductProvenance const &iGetParents, ProductProvenanceRetriever const *iMapper, bool produced, std::set< BranchID > const &producedBranches, std::set< StoredProductProvenance > &oToFill)
Definition: RootOutputFile.cc:662
mitigatedMETSequence_cff.U
U
Definition: mitigatedMETSequence_cff.py:36
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
edm::get_underlying_safe
std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)
Definition: get_underlying_safe.h:40
edm::poolNames::eventSelectionsBranchName
std::string const & eventSelectionsBranchName()
Definition: BranchType.cc:210
edm::RootOutputFile::eventTree_
RootOutputTree eventTree_
Definition: RootOutputFile.h:137
edm::RootOutputTree::makeTTree
static TTree * makeTTree(TFile *filePtr, std::string const &name, int splitLevel)
Definition: RootOutputTree.cc:121
edm::ProductRegistry::ProductList
std::map< BranchKey, BranchDescription > ProductList
Definition: ProductRegistry.h:36
edm::getFileFormatVersion
int getFileFormatVersion()
Definition: GetFileFormatVersion.cc:4
edm::InLumi
Definition: BranchType.h:11
edm::poolNames::productDescriptionBranchName
std::string const & productDescriptionBranchName()
Definition: BranchType.cc:165
MainPageGenerator.tree
tree
Definition: MainPageGenerator.py:264
edm::RootOutputFile::pBranchListIndexes_
BranchListIndexes const * pBranchListIndexes_
Definition: RootOutputFile.h:135
edm::EventAuxiliary::luminosityBlock
LuminosityBlockNumber_t luminosityBlock() const
Definition: EventAuxiliary.h:67
edm::RootOutputFile::runTree_
RootOutputTree runTree_
Definition: RootOutputFile.h:139
Exception
edm::RootOutputFile::eventEntryInfoVector_
StoredProductProvenanceVector eventEntryInfoVector_
Definition: RootOutputFile.h:133
edm::RootOutputTree::checkEntriesInReadBranches
bool checkEntriesInReadBranches(Long64_t expectedNumberOfEntries) const
Definition: RootOutputTree.cc:202
edm::RootOutputFile::parentageTree_
edm::propagate_const< TTree * > parentageTree_
Definition: RootOutputFile.h:127
edm::PoolOutputModule::DropDroppedPrior
Definition: PoolOutputModule.h:41
edm::RootOutputFile::logicalFile_
std::string logicalFile_
Definition: RootOutputFile.h:112
edm::RootOutputFile::reportToken_
JobReport::Token reportToken_
Definition: RootOutputFile.h:113
B2GTnPMonitor_cfi.item
item
Definition: B2GTnPMonitor_cfi.py:147
edm::ProcessHistoryRegistry::reducedProcessHistoryID
ProcessHistoryID const & reducedProcessHistoryID(ProcessHistoryID const &fullID) const
Definition: ProcessHistoryRegistry.cc:23
edm::RootOutputFile::runAux_
RunAuxiliary runAux_
Definition: RootOutputFile.h:129
alignCSCRings.r
r
Definition: alignCSCRings.py:93
edm::PoolOutputModule::DropPrior
Definition: PoolOutputModule.h:41
L1DTConfigBti_cff.LL
LL
Definition: L1DTConfigBti_cff.py:25
edm::RootOutputTree::setEntries
void setEntries()
Definition: RootOutputTree.h:84
edm::BranchTypeToProductProvenanceBranchName
std::string const & BranchTypeToProductProvenanceBranchName(BranchType const &BranchType)
Definition: BranchType.cc:134
edm::RootOutputFile::om_
edm::propagate_const< PoolOutputModule * > om_
Definition: RootOutputFile.h:114
eostools.move
def move(src, dest)
Definition: eostools.py:511
edm::match
std::string match(BranchDescription const &a, BranchDescription const &b, std::string const &fileName)
Definition: BranchDescription.cc:351
edm::LuminosityBlockAuxiliary::luminosityBlock
LuminosityBlockNumber_t luminosityBlock() const
Definition: LuminosityBlockAuxiliary.h:30
edm::ProcessHistoryID
Hash< ProcessHistoryType > ProcessHistoryID
Definition: ProcessHistoryID.h:8
edm::RootOutputFile::eventEntryNumber_
IndexIntoFile::EntryNumber_t eventEntryNumber_
Definition: RootOutputFile.h:119
edm::RunAuxiliary::setProcessHistoryID
void setProcessHistoryID(ProcessHistoryID const &phid)
Definition: RunAuxiliary.h:26
edm::poolNames::metaDataTreeName
std::string const & metaDataTreeName()
Definition: BranchType.cc:162
edm::EventAuxiliary::processHistoryID
ProcessHistoryID const & processHistoryID() const
Definition: EventAuxiliary.h:61
SiStripOfflineCRack_cfg.alias
alias
Definition: SiStripOfflineCRack_cfg.py:129
Exception
Definition: hltDiff.cc:246
edm::StoredMergeableRunProductMetadata::optimizeBeforeWrite
void optimizeBeforeWrite()
Definition: StoredMergeableRunProductMetadata.cc:31
edm::RunAuxiliary::run
RunNumber_t run() const
Definition: RunAuxiliary.h:31
edm::RootOutputTree::addAuxiliary
void addAuxiliary(std::string const &branchName, T const *&pAux, int bufSize, bool allowCloning=true)
Definition: RootOutputTree.h:34
edm::errors::OtherCMS
Definition: EDMException.h:27
edm::fillProcessHistoryBranch
void fillProcessHistoryBranch(TTree *metaDataTree, int basketSize, ProcessHistoryRegistry const &processHistoryRegistry)
Definition: CommonProvenanceFiller.cc:32
edm::poolNames::thinnedAssociationsHelperBranchName
std::string const & thinnedAssociationsHelperBranchName()
Definition: BranchType.cc:189
StoredProductProvenance
edm::PoolOutputModule::DropNone
Definition: PoolOutputModule.h:41
test_L1EGCrystalClusterEmulator_cfg.fastCloning
fastCloning
Definition: test_L1EGCrystalClusterEmulator_cfg.py:60
edm::IndexIntoFile::sortVector_Run_Or_Lumi_Entries
void sortVector_Run_Or_Lumi_Entries()
Definition: IndexIntoFile.cc:392
edm::LuminosityBlockAuxiliary::setProcessHistoryID
void setProcessHistoryID(ProcessHistoryID const &phid)
Definition: LuminosityBlockAuxiliary.h:29
edm::poolNames::productDependenciesBranchName
std::string const & productDependenciesBranchName()
Definition: BranchType.cc:168
mps_fire.result
result
Definition: mps_fire.py:303
edm::EventAuxiliary::isRealData
bool isRealData() const
Definition: EventAuxiliary.h:74
dummy
Definition: DummySelector.h:38
edm::poolNames::fileIdentifierBranchName
std::string const & fileIdentifierBranchName()
Definition: BranchType.cc:195
edm::moduleName
std::string moduleName(Provenance const &provenance, ProcessHistory const &history)
Definition: Provenance.cc:27
edm::RootOutputFile::pEventAux_
EventAuxiliary const * pEventAux_
Definition: RootOutputFile.h:130
edm::RootOutputFile::pEventEntryInfoVector
StoredProductProvenanceVector const * pEventEntryInfoVector() const
Definition: RootOutputFile.h:103
hltrates_dqm_sourceclient-live_cfg.offset
offset
Definition: hltrates_dqm_sourceclient-live_cfg.py:82
edm::EventSelectionIDVector
std::vector< EventSelectionID > EventSelectionIDVector
Definition: EventSelectionID.h:16
CommonMethods.cp
def cp(fromDir, toDir, listOfFiles, overwrite=False, smallList=False)
Definition: CommonMethods.py:192
edm::RootOutputFile::lumiAux_
LuminosityBlockAuxiliary lumiAux_
Definition: RootOutputFile.h:128
edm::RootOutputFile::pEventSelectionIDs_
EventSelectionIDVector const * pEventSelectionIDs_
Definition: RootOutputFile.h:136
edm::PoolOutputModule::DropAll
Definition: PoolOutputModule.h:41
edm::errors::Configuration
Definition: EDMException.h:36
edm::RootOutputFile::parameterSetsTree_
edm::propagate_const< TTree * > parameterSetsTree_
Definition: RootOutputFile.h:126
edm::RootOutputFile::storedMergeableRunProductMetadata_
StoredMergeableRunProductMetadata storedMergeableRunProductMetadata_
Definition: RootOutputFile.h:123
benchmark_cfg.fb
fb
Definition: benchmark_cfg.py:14
edm::StoredProductProvenanceVector
std::vector< StoredProductProvenance > StoredProductProvenanceVector
Definition: StoredProductProvenance.h:34
edm::FileBlock::SplitLevelMismatch
Definition: FileBlock.h:53
findQualityFiles.size
size
Write out results.
Definition: findQualityFiles.py:443
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37
edm::createGlobalIdentifier
std::string createGlobalIdentifier()
Definition: GlobalIdentifier.cc:5