CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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 boost::array
< RootOutputTree
*, NumBranchTypes
RootOutputTreePtrArray
 

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)
 
bool shouldWeCloseFile () const
 
void writeBranchIDListRegistry ()
 
void writeFileFormatVersion ()
 
void writeFileIdentifier ()
 
void writeIndexIntoFile ()
 
void writeLuminosityBlock (LuminosityBlockPrincipal const &lb)
 
void writeOne (EventPrincipal const &e)
 
void writeParameterSetRegistry ()
 
void writeParentageRegistry ()
 
void writeProcessConfigurationRegistry ()
 
void writeProcessHistoryRegistry ()
 
void writeProductDependencies ()
 
void writeProductDescriptionRegistry ()
 
void writeRun (RunPrincipal const &r)
 
 ~RootOutputFile ()
 

Private Member Functions

void fillBranches (BranchType const &branchType, Principal const &principal, ProductProvenanceVector *productProvenanceVecPtr)
 
void insertAncestors (ProductProvenance const &iGetParents, Principal const &principal, bool produced, std::set< ProductProvenance > &oToFill)
 
void setBranchAliases (TTree *tree, Selections const &branches) const
 

Private Attributes

std::set< BranchIDbranchesWithStoredHistory_
 
bool canFastCloneAux_
 
bool dataTypeReported_
 
ProductProvenanceVector eventEntryInfoVector_
 
IndexIntoFile::EntryNumber_t eventEntryNumber_
 
RootOutputTree eventTree_
 
FileID fid_
 
std::string file_
 
boost::shared_ptr< TFile > filePtr_
 
IndexIntoFile indexIntoFile_
 
std::string logicalFile_
 
LuminosityBlockAuxiliary lumiAux_
 
ProductProvenanceVector lumiEntryInfoVector_
 
IndexIntoFile::EntryNumber_t lumiEntryNumber_
 
RootOutputTree lumiTree_
 
TTree * metaDataTree_
 
PoolOutputModule const * om_
 
TTree * parameterSetsTree_
 
std::set< ParentageIDparentageIDs_
 
TTree * parentageTree_
 
BranchListIndexes const * pBranchListIndexes_
 
EventAuxiliary const * pEventAux_
 
ProductProvenanceVectorpEventEntryInfoVector_
 
EventSelectionIDVector const * pEventSelectionIDs_
 
LuminosityBlockAuxiliary const * pLumiAux_
 
ProductProvenanceVectorpLumiEntryInfoVector_
 
RunAuxiliary const * pRunAux_
 
ProductProvenanceVectorpRunEntryInfoVector_
 
JobReport::Token reportToken_
 
RunAuxiliary runAux_
 
ProductProvenanceVector runEntryInfoVector_
 
IndexIntoFile::EntryNumber_t runEntryNumber_
 
RootOutputTree runTree_
 
RootOutputTreePtrArray treePointers_
 
int whyNotFastClonable_
 

Detailed Description

Definition at line 39 of file RootOutputFile.h.

Member Typedef Documentation

Definition at line 41 of file RootOutputFile.h.

Definition at line 42 of file RootOutputFile.h.

Definition at line 43 of file RootOutputFile.h.

Constructor & Destructor Documentation

edm::RootOutputFile::RootOutputFile ( PoolOutputModule om,
std::string const &  fileName,
std::string const &  logicalFileName 
)
explicit

Definition at line 62 of file RootOutputFile.cc.

References edm::RootOutputTree::addAuxiliary(), edm::RootOutputTree::addBranch(), edm::PoolOutputModule::auxItems(), branchesWithStoredHistory_, edm::poolNames::branchListIndexesBranchName(), edm::BranchDescription::branchName(), revisionDML::branchType(), edm::BranchTypeToAuxiliaryBranchName(), edm::BranchTypeToBranchEntryInfoBranchName(), edm::PoolOutputModule::catalog(), edm::createGlobalIdentifier(), cms::Digest::digest(), edm::PoolOutputModule::eventAutoFlushSize(), edm::poolNames::eventSelectionsBranchName(), eventTree_, fid_, file_, filePtr_, edm::BranchDescription::fullClassName(), i, edm::InEvent, edm::BranchDescription::init(), edm::InLumi, edm::InRun, logicalFile_, lumiTree_, edm::RootOutputTree::makeTTree(), metaDataTree_, edm::poolNames::metaDataTreeName(), edm::PoolOutputModule::moduleLabel(), edm::BranchDescription::moduleLabel(), edm::NumBranchTypes, om_, parameterSetsTree_, edm::poolNames::parameterSetsTreeName(), parentageTree_, edm::poolNames::parentageTreeName(), pBranchListIndexes_, pEventAux_, pEventEntryInfoVector_, pEventSelectionIDs_, pLumiAux_, pLumiEntryInfoVector_, edm::BranchDescription::processName(), edm::BranchDescription::productInstanceName(), pRunAux_, pRunEntryInfoVector_, reportToken_, runTree_, edm::PoolOutputModule::selectedOutputItemList(), edm::RootOutputTree::setAutoFlush(), edm::sort_all(), cms::MD5Result::toString(), treePointers_, and edm::BranchDescription::wrappedName().

62  :
63  file_(fileName),
64  logicalFile_(logicalFileName),
65  reportToken_(0),
66  om_(om),
69  filePtr_(TFile::Open(file_.c_str(), "recreate", "", om_->compressionLevel())),
70  fid_(),
71  eventEntryNumber_(0LL),
72  lumiEntryNumber_(0LL),
73  runEntryNumber_(0LL),
75  metaDataTree_(0),
77  parentageTree_(0),
78  lumiAux_(),
79  runAux_(),
80  pEventAux_(0),
82  pRunAux_(&runAux_),
94  treePointers_(),
95  dataTypeReported_(false),
96  parentageIDs_(),
98 
99  if (-1 != om->eventAutoFlushSize()) {
100  eventTree_.setAutoFlush(-1*om->eventAutoFlushSize());
101  }
103  pEventAux_, om_->auxItems()[InEvent].basketSize_);
105  pEventEntryInfoVector_, om_->auxItems()[InEvent].basketSize_);
107  pEventSelectionIDs_, om_->auxItems()[InEvent].basketSize_);
109  pBranchListIndexes_, om_->auxItems()[InEvent].basketSize_);
110 
112  pLumiAux_, om_->auxItems()[InLumi].basketSize_);
114  pLumiEntryInfoVector_, om_->auxItems()[InLumi].basketSize_);
115 
117  pRunAux_, om_->auxItems()[InRun].basketSize_);
119  pRunEntryInfoVector_, om_->auxItems()[InRun].basketSize_);
120 
122  treePointers_[InLumi] = &lumiTree_;
123  treePointers_[InRun] = &runTree_;
124 
125  for(int i = InEvent; i < NumBranchTypes; ++i) {
126  BranchType branchType = static_cast<BranchType>(i);
127  RootOutputTree *theTree = treePointers_[branchType];
128  for(OutputItemList::const_iterator it = om_->selectedOutputItemList()[branchType].begin(),
129  itEnd = om_->selectedOutputItemList()[branchType].end();
130  it != itEnd; ++it) {
131  BranchDescription const& desc = *it->branchDescription_;
132  desc.init();
133  theTree->addBranch(desc.branchName(),
134  desc.wrappedName(),
135  it->product_,
136  it->splitLevel_,
137  it->basketSize_,
138  it->branchDescription_->produced());
139  //make sure we always store product registry info for all branches we create
140  branchesWithStoredHistory_.insert(it->branchID());
141  }
142  }
143  // Don't split metadata tree or event description tree
147 
148  fid_ = FileID(createGlobalIdentifier());
149 
150  // For the Job Report, get a vector of branch names in the "Events" tree.
151  // Also create a hash of all the branch names in the "Events" tree
152  // in a deterministic order, except use the full class name instead of the friendly class name.
153  // To avoid extra string copies, we create a vector of pointers into the product registry,
154  // and use a custom comparison operator for sorting.
155  std::vector<std::string> branchNames;
156  std::vector<BranchDescription const*> branches;
157  branchNames.reserve(om_->selectedOutputItemList()[InEvent].size());
158  branches.reserve(om->selectedOutputItemList()[InEvent].size());
159  for(OutputItemList::const_iterator it = om_->selectedOutputItemList()[InEvent].begin(),
160  itEnd = om_->selectedOutputItemList()[InEvent].end();
161  it != itEnd; ++it) {
162  branchNames.push_back(it->branchDescription_->branchName());
163  branches.push_back(it->branchDescription_);
164  }
165  // Now sort the branches for the hash.
166  sort_all(branches, sorterForJobReportHash);
167  // Now, make a concatenated string.
168  std::ostringstream oss;
169  char const underscore = '_';
170  for(std::vector<BranchDescription const*>::const_iterator it = branches.begin(), itEnd = branches.end(); it != itEnd; ++it) {
171  BranchDescription const& bd = **it;
172  oss << bd.fullClassName() << underscore
173  << bd.moduleLabel() << underscore
174  << bd.productInstanceName() << underscore
175  << bd.processName() << underscore;
176  }
177  std::string stringrep = oss.str();
178  cms::Digest md5alg(stringrep);
179 
180  // Register the output file with the JobReport service
181  // and get back the token for it.
182  std::string moduleName = "PoolOutputModule";
183  Service<JobReport> reportSvc;
184  reportToken_ = reportSvc->outputFileOpened(
185  file_, logicalFile_, // PFN and LFN
186  om_->catalog(), // catalog
187  moduleName, // module class name
188  om_->moduleLabel(), // module label
189  fid_.fid(), // file id (guid)
190  std::string(), // data type (not yet known, so string is empty).
191  md5alg.digest().toString(), // branch hash
192  branchNames); // branch names being written
193  }
std::set< ParentageID > parentageIDs_
int i
Definition: DBlmapReader.cc:9
LuminosityBlockAuxiliary lumiAux_
std::string const & BranchTypeToAuxiliaryBranchName(BranchType const &branchType)
Definition: BranchType.cc:108
int const & basketSize() const
std::string const & parentageTreeName()
Definition: BranchType.cc:148
std::string const & catalog() const
std::string const & moduleLabel() const
ProductProvenanceVector eventEntryInfoVector_
int const & compressionLevel() const
ProductProvenanceVector * pRunEntryInfoVector_
OutputItemListArray const & selectedOutputItemList() const
std::string const & eventSelectionsBranchName()
Definition: BranchType.cc:227
void setAutoFlush(Long64_t size)
BranchType
Definition: BranchType.h:11
std::set< BranchID > branchesWithStoredHistory_
std::vector< EventSelectionID > EventSelectionIDVector
std::string const & parameterSetsTreeName()
Definition: BranchType.cc:235
std::string const & fileName() const
ProductProvenanceVector * pLumiEntryInfoVector_
RootOutputTree eventTree_
std::vector< BranchListIndex > BranchListIndexes
PoolOutputModule const * om_
IndexIntoFile::EntryNumber_t eventEntryNumber_
LuminosityBlockAuxiliary const * pLumiAux_
std::string logicalFile_
int const & splitLevel() const
std::string const & BranchTypeToBranchEntryInfoBranchName(BranchType const &branchType)
Definition: BranchType.cc:120
std::string const & metaDataTreeName()
Definition: BranchType.cc:157
static TTree * makeTTree(TFile *filePtr, std::string const &name, int splitLevel)
int const & whyNotFastClonable() const
std::vector< ProductProvenance > ProductProvenanceVector
EventSelectionIDVector const * pEventSelectionIDs_
void sort_all(RandomAccessSequence &s)
wrappers for std::sort
Definition: Algorithms.h:120
RootOutputTree runTree_
void addAuxiliary(std::string const &branchName, T const *&pAux, int bufSize)
AuxItemArray const & auxItems() const
IndexIntoFile indexIntoFile_
int const & treeMaxVirtualSize() const
IndexIntoFile::EntryNumber_t runEntryNumber_
boost::array< bool, NumBranchTypes > const & hasNewlyDroppedBranch() const
Definition: OutputModule.h:58
EventAuxiliary const * pEventAux_
RunAuxiliary runAux_
std::string const & branchListIndexesBranchName()
Definition: BranchType.cc:231
ProductProvenanceVector runEntryInfoVector_
RootOutputTreePtrArray treePointers_
BranchListIndexes const * pBranchListIndexes_
IndexIntoFile::EntryNumber_t lumiEntryNumber_
RootOutputTree lumiTree_
boost::shared_ptr< TFile > filePtr_
RunAuxiliary const * pRunAux_
JobReport::Token reportToken_
std::string createGlobalIdentifier()
ProductProvenanceVector lumiEntryInfoVector_
ProductProvenanceVector * pEventEntryInfoVector_
edm::RootOutputFile::~RootOutputFile ( )
inline

Definition at line 46 of file RootOutputFile.h.

46 {}

Member Function Documentation

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

Definition at line 281 of file RootOutputFile.cc.

References edm::PoolOutputModule::basketOrder(), edm::FileBlock::branchListIndexesUnchanged(), edm::FileBlock::BranchMismatch, edm::FileBlock::CanFastClone, canFastCloneAux_, edm::RootOutputTree::checkIfFastClonable(), edm::RootOutputTree::checkSplitLevelsAndBasketSizes(), eventTree_, edm::hlt::Exception, file_, edm::FileBlock::fileFormatVersion(), edm::FileBlock::fileName(), edm::OutputModule::hasNewlyDroppedBranch(), edm::FileBlock::hasNewlyDroppedBranch(), edm::InEvent, edm::PoolOutputModule::inputFileCount(), edm::match(), edm::RootOutputTree::maybeFastCloneTree(), edm::errors::MismatchedInputFiles, edm::FileFormatVersion::noMetaDataTrees(), edm::FileBlock::NoRootInputSource, om_, edm::FileBlock::OutputMaxEventsTooSmall, edm::PoolOutputModule::overrideInputFileSplitLevels(), reportToken_, edm::FileBlock::SplitLevelMismatch, edm::FileBlock::tree(), edm::PoolOutputModule::whyNotFastClonable(), edm::FileBlock::whyNotFastClonable(), and whyNotFastClonable_.

281  {
282 
283  // Reset per input file information
285  canFastCloneAux_ = false;
286 
287  if(fb.tree() != 0) {
288 
289  whyNotFastClonable_ |= fb.whyNotFastClonable();
290 
291  if(remainingEvents >= 0 && remainingEvents < fb.tree()->GetEntries()) {
293  }
294 
296  if(!match) {
298  // We may be fast copying. We must disable fast copying if the split levels
299  // or basket sizes do not match.
301  } else {
302  // We are using the input split levels and basket sizes from the first input file
303  // for copied output branches. In this case, we throw an exception if any branches
304  // have different split levels or basket sizes in a subsequent input file.
305  // If the mismatch is in the first file, there is a bug somewhere, so we assert.
306  assert(om_->inputFileCount() > 1);
307  throw Exception(errors::MismatchedInputFiles, "RootOutputFile::beginInputFile()") <<
308  "Merge failure because input file " << file_ << " has different ROOT split levels or basket sizes\n" <<
309  "than previous files. To allow merging in splite of this, use the configuration parameter\n" <<
310  "overrideInputFileSplitLevels=cms.untracked.bool(True)\n" <<
311  "in every PoolOutputModule.\n";
312  }
313  }
314 
315  // Since this check can be time consuming, we do it only if we would otherwise fast clone.
317  if(!eventTree_.checkIfFastClonable(fb.tree())) {
319  }
320  }
321  // We now check if we can fast copy the auxiliary branches.
322  // We can do so only if we can otherwise fast copy,
323  // the input file has the current format (these branches are in the Events Tree),
324  // there are no newly dropped or produced products,
325  // and the branch list indexes do not need modification.
328  fb.fileFormatVersion().noMetaDataTrees() &&
330  !fb.hasNewlyDroppedBranch()[InEvent] &&
331  !reg->anyProductProduced() &&
332  fb.branchListIndexesUnchanged();
333 
334  // Report the fast copying status.
335  Service<JobReport> reportSvc;
336  reportSvc->reportFastCopyingStatus(reportToken_, fb.fileName(), whyNotFastClonable_ == FileBlock::CanFastClone);
337  } else {
339  }
340 
342 
343  // Possibly issue warning or informational message if we haven't fast cloned.
344  if(fb.tree() != 0 && whyNotFastClonable_ != FileBlock::CanFastClone) {
345  maybeIssueWarning(whyNotFastClonable_, fb.fileName(), file_);
346  }
347  }
bool const & overrideInputFileSplitLevels() const
bool checkSplitLevelsAndBasketSizes(TTree *inputTree) const
std::string match(BranchDescription const &a, BranchDescription const &b, std::string const &fileName, BranchDescription::MatchMode m)
bool checkIfFastClonable(TTree *inputTree) const
RootOutputTree eventTree_
PoolOutputModule const * om_
std::string const & basketOrder() const
int const & whyNotFastClonable() const
boost::array< bool, NumBranchTypes > const & hasNewlyDroppedBranch() const
Definition: OutputModule.h:58
void maybeFastCloneTree(bool canFastClone, bool canFastCloneAux, TTree *tree, std::string const &option)
int const & inputFileCount() const
JobReport::Token reportToken_
std::string const& edm::RootOutputFile::fileName ( ) const
inline

Definition at line 67 of file RootOutputFile.h.

References file_.

67 {return file_;}
void edm::RootOutputFile::fillBranches ( BranchType const &  branchType,
Principal const &  principal,
ProductProvenanceVector productProvenanceVecPtr 
)
private

Definition at line 629 of file RootOutputFile.cc.

References branchesWithStoredHistory_, edm::Principal::branchMapperPtr(), revisionDML::branchType(), edm::FileBlock::CanFastClone, CommonMethods::cp(), edm::PoolOutputModule::DropDroppedPrior, edm::PoolOutputModule::dropMetaData(), edm::PoolOutputModule::DropNone, edm::PoolOutputModule::DropPrior, edm::Principal::getForOutput(), i, edm::InEvent, insertAncestors(), om_, parentageIDs_, cmsRelvalreport::principal(), edm::es::produced, edm::OutputHandle::productProvenance(), edm::PoolOutputModule::selectedOutputItemList(), treePointers_, whyNotFastClonable_, and edm::OutputHandle::wrapper().

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

632  {
633 
634  std::vector<boost::shared_ptr<EDProduct> > dummies;
635 
636  bool const fastCloning = (branchType == InEvent) && (whyNotFastClonable_ == FileBlock::CanFastClone);
637 
639 
640  std::set<ProductProvenance> provenanceToKeep;
641 
642  // Loop over EDProduct branches, fill the provenance, and write the branch.
643  for(OutputItemList::const_iterator i = items.begin(), iEnd = items.end(); i != iEnd; ++i) {
644 
645  BranchID const& id = i->branchDescription_->branchID();
646  branchesWithStoredHistory_.insert(id);
647 
648  bool produced = i->branchDescription_->produced();
649  bool keepProvenance = om_->dropMetaData() == PoolOutputModule::DropNone ||
652  bool getProd = (produced || !fastCloning ||
653  treePointers_[branchType]->uncloned(i->branchDescription_->branchName()));
654 
655  EDProduct const* product = 0;
656  OutputHandle const oh = principal.getForOutput(id, getProd);
657  if(keepProvenance && oh.productProvenance()) {
658  provenanceToKeep.insert(*oh.productProvenance());
659  assert(principal.branchMapperPtr());
660  insertAncestors(*oh.productProvenance(), principal, produced, provenanceToKeep);
661  }
662  product = oh.wrapper();
663  if(getProd) {
664  if(product == 0) {
665  // No product with this ID is in the event.
666  // Add a null product.
667  TClass* cp = gROOT->GetClass(i->branchDescription_->wrappedName().c_str());
668  boost::shared_ptr<EDProduct> dummy(static_cast<EDProduct*>(cp->New()));
669  dummies.push_back(dummy);
670  product = dummy.get();
671  }
672  i->product_ = product;
673  }
674  }
675 
676  for(std::set<ProductProvenance>::const_iterator it = provenanceToKeep.begin(), itEnd=provenanceToKeep.end();
677  it != itEnd; ++it) {
678  parentageIDs_.insert(it->parentageID());
679  }
680 
681  productProvenanceVecPtr->assign(provenanceToKeep.begin(), provenanceToKeep.end());
682  treePointers_[branchType]->fillTree();
683  productProvenanceVecPtr->clear();
684  }
std::set< ParentageID > parentageIDs_
int i
Definition: DBlmapReader.cc:9
DropMetaData const & dropMetaData() const
OutputItemListArray const & selectedOutputItemList() const
std::set< BranchID > branchesWithStoredHistory_
PoolOutputModule const * om_
PoolOutputModule::OutputItemList OutputItemList
eventsetup::produce::Produce produced
Definition: ESProducts.cc:21
void insertAncestors(ProductProvenance const &iGetParents, Principal const &principal, bool produced, std::set< ProductProvenance > &oToFill)
RootOutputTreePtrArray treePointers_
void edm::RootOutputFile::finishEndFile ( )

Definition at line 550 of file RootOutputFile.cc.

References revisionDML::branchType(), filePtr_, i, edm::InEvent, edm::OutputModule::keptProducts(), metaDataTree_, edm::NumBranchTypes, om_, parameterSetsTree_, parentageTree_, reportToken_, setBranchAliases(), diffTreeTool::tree, treePointers_, and edm::RootOutputTree::writeTTree().

550  {
551  metaDataTree_->SetEntries(-1);
554 
556 
557  // Create branch aliases for all the branches in the
558  // events/lumis/runs trees. The loop is over all types of data
559  // products.
560  for(int i = InEvent; i < NumBranchTypes; ++i) {
561  BranchType branchType = static_cast<BranchType>(i);
563  treePointers_[branchType]->writeTree();
564  }
565 
566  // close the file -- mfp
567  // Just to play it safe, zero all pointers to objects in the TFile to be closed.
569  for(RootOutputTreePtrArray::iterator it = treePointers_.begin(), itEnd = treePointers_.end(); it != itEnd; ++it) {
570  (*it)->close();
571  (*it) = 0;
572  }
573  filePtr_->Close();
574  filePtr_.reset();
575 
576  // report that file has been closed
577  Service<JobReport> reportSvc;
578  reportSvc->outputFileClosed(reportToken_);
579 
580  }
int i
Definition: DBlmapReader.cc:9
SelectionsArray const & keptProducts() const
Definition: OutputModule.h:57
void setBranchAliases(TTree *tree, Selections const &branches) const
BranchType
Definition: BranchType.h:11
PoolOutputModule const * om_
static void writeTTree(TTree *tree)
RootOutputTreePtrArray treePointers_
boost::shared_ptr< TFile > filePtr_
JobReport::Token reportToken_
void edm::RootOutputFile::insertAncestors ( ProductProvenance const &  iGetParents,
Principal const &  principal,
bool  produced,
std::set< ProductProvenance > &  oToFill 
)
private

Definition at line 604 of file RootOutputFile.cc.

References branchesWithStoredHistory_, edm::BranchMapper::branchIDToProvenance(), edm::Principal::branchMapperPtr(), edm::PoolOutputModule::DropAll, edm::PoolOutputModule::DropDroppedPrior, edm::PoolOutputModule::dropMetaData(), edm::PoolOutputModule::DropNone, edm::PoolOutputModule::DropPrior, edm::Principal::getProvenance(), info, om_, edm::ProductProvenance::parentage(), edm::Parentage::parents(), and edm::es::produced.

Referenced by fillBranches().

607  {
611  BranchMapper const& iMapper = *principal.branchMapperPtr();
612  std::vector<BranchID> const& parentIDs = iGetParents.parentage().parents();
613  for(std::vector<BranchID>::const_iterator it = parentIDs.begin(), itEnd = parentIDs.end();
614  it != itEnd; ++it) {
615  branchesWithStoredHistory_.insert(*it);
616  boost::shared_ptr<ProductProvenance> info = iMapper.branchIDToProvenance(*it);
617  if(info) {
619  principal.getProvenance(info->branchID()).product().produced()) {
620  if(oToFill.insert(*info).second) {
621  //haven't seen this one yet
622  insertAncestors(*info, principal, produced, oToFill);
623  }
624  }
625  }
626  }
627  }
DropMetaData const & dropMetaData() const
std::set< BranchID > branchesWithStoredHistory_
PoolOutputModule const * om_
eventsetup::produce::Produce produced
Definition: ESProducts.cc:21
void insertAncestors(ProductProvenance const &iGetParents, Principal const &principal, bool produced, std::set< ProductProvenance > &oToFill)
void edm::RootOutputFile::respondToCloseInputFile ( FileBlock const &  fb)

Definition at line 349 of file RootOutputFile.cc.

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

349  {
353  }
RootOutputTree eventTree_
RootOutputTree runTree_
RootOutputTree lumiTree_
void edm::RootOutputFile::setBranchAliases ( TTree *  tree,
Selections const &  branches 
) const
private

Definition at line 583 of file RootOutputFile.cc.

References ExpressReco_HICollisions_FallBack::alias, Selections::begin(), edm::BranchDescription::branchAliases(), edm::BranchDescription::branchName(), Selections::end(), full, i, edm::BranchDescription::moduleLabel(), and edm::BranchDescription::productInstanceName().

Referenced by finishEndFile().

583  {
584  if(tree && tree->GetNbranches() != 0) {
585  for(Selections::const_iterator i = branches.begin(), iEnd = branches.end();
586  i != iEnd; ++i) {
587  BranchDescription const& pd = **i;
588  std::string const& full = pd.branchName() + "obj";
589  if(pd.branchAliases().empty()) {
590  std::string const& alias =
591  (pd.productInstanceName().empty() ? pd.moduleLabel() : pd.productInstanceName());
592  tree->SetAlias(alias.c_str(), full.c_str());
593  } else {
594  std::set<std::string>::const_iterator it = pd.branchAliases().begin(), itEnd = pd.branchAliases().end();
595  for(; it != itEnd; ++it) {
596  tree->SetAlias((*it).c_str(), full.c_str());
597  }
598  }
599  }
600  }
601  }
int i
Definition: DBlmapReader.cc:9
Definition: GenABIO.cc:193
bool edm::RootOutputFile::shouldWeCloseFile ( ) const

Definition at line 355 of file RootOutputFile.cc.

References filePtr_, edm::PoolOutputModule::maxFileSize(), om_, and findQualityFiles::size.

355  {
356  unsigned int const oneK = 1024;
357  Long64_t size = filePtr_->GetSize()/oneK;
358  return(size >= om_->maxFileSize());
359  }
unsigned int const & maxFileSize() const
PoolOutputModule const * om_
boost::shared_ptr< TFile > filePtr_
tuple size
Write out results.
void edm::RootOutputFile::writeBranchIDListRegistry ( )

Definition at line 495 of file RootOutputFile.cc.

References b, edm::PoolOutputModule::basketSize(), edm::poolNames::branchIDListBranchName(), edm::detail::ThreadSafeIndexedRegistry< T, E >::data(), edm::detail::ThreadSafeIndexedRegistry< T, E >::instance(), metaDataTree_, om_, and L1TEmulatorMonitor_cff::p.

495  {
497  TBranch* b = metaDataTree_->Branch(poolNames::branchIDListBranchName().c_str(), &p, om_->basketSize(), 0);
498  assert(b);
499  b->Fill();
500  }
int const & basketSize() const
PoolOutputModule const * om_
double b
Definition: hdecay.h:120
static ThreadSafeIndexedRegistry * instance()
collection_type & data()
Provide access to the contained collection.
std::string const & branchIDListBranchName()
Definition: BranchType.cc:197
void edm::RootOutputFile::writeFileFormatVersion ( )

Definition at line 445 of file RootOutputFile.cc.

References b, edm::PoolOutputModule::basketSize(), edm::poolNames::fileFormatVersionBranchName(), edm::getFileFormatVersion(), metaDataTree_, and om_.

445  {
446  FileFormatVersion fileFormatVersion(getFileFormatVersion());
447  FileFormatVersion* pFileFmtVsn = &fileFormatVersion;
448  TBranch* b = metaDataTree_->Branch(poolNames::fileFormatVersionBranchName().c_str(), &pFileFmtVsn, om_->basketSize(), 0);
449  assert(b);
450  b->Fill();
451  }
int const & basketSize() const
std::string const & fileFormatVersionBranchName()
Definition: BranchType.cc:202
PoolOutputModule const * om_
int getFileFormatVersion()
double b
Definition: hdecay.h:120
void edm::RootOutputFile::writeFileIdentifier ( )

Definition at line 453 of file RootOutputFile.cc.

References b, edm::PoolOutputModule::basketSize(), fid_, edm::poolNames::fileIdentifierBranchName(), metaDataTree_, and om_.

453  {
454  FileID* fidPtr = &fid_;
455  TBranch* b = metaDataTree_->Branch(poolNames::fileIdentifierBranchName().c_str(), &fidPtr, om_->basketSize(), 0);
456  assert(b);
457  b->Fill();
458  }
int const & basketSize() const
PoolOutputModule const * om_
double b
Definition: hdecay.h:120
std::string const & fileIdentifierBranchName()
Definition: BranchType.cc:207
void edm::RootOutputFile::writeIndexIntoFile ( )

Definition at line 460 of file RootOutputFile.cc.

References b, edm::PoolOutputModule::basketSize(), indexIntoFile_, edm::poolNames::indexIntoFileBranchName(), metaDataTree_, om_, and edm::IndexIntoFile::sortVector_Run_Or_Lumi_Entries().

460  {
462  IndexIntoFile* iifPtr = &indexIntoFile_;
463  TBranch* b = metaDataTree_->Branch(poolNames::indexIntoFileBranchName().c_str(), &iifPtr, om_->basketSize(), 0);
464  assert(b);
465  b->Fill();
466  }
int const & basketSize() const
void sortVector_Run_Or_Lumi_Entries()
PoolOutputModule const * om_
std::string const & indexIntoFileBranchName()
Definition: BranchType.cc:217
double b
Definition: hdecay.h:120
IndexIntoFile indexIntoFile_
void edm::RootOutputFile::writeLuminosityBlock ( LuminosityBlockPrincipal const &  lb)

Definition at line 401 of file RootOutputFile.cc.

References edm::IndexIntoFile::addEntry(), edm::LuminosityBlockPrincipal::aux(), fillBranches(), indexIntoFile_, edm::InLumi, lumiAux_, lumiEntryNumber_, edm::LuminosityBlockAuxiliary::luminosityBlock(), lumiTree_, edm::RootOutputTree::optimizeBaskets(), pLumiEntryInfoVector_, edm::Principal::processHistoryID(), edm::LuminosityBlockAuxiliary::run(), and edm::LuminosityBlockAuxiliary::setProcessHistoryID().

401  {
402  // Auxiliary branch
403  // NOTE: lumiAux_ must be filled before calling fillBranches since it gets written out in that routine.
404  lumiAux_ = lb.aux();
405  // Use the updated process historyID
406  lumiAux_.setProcessHistoryID(lb.processHistoryID());
407  // Add lumi to index.
408  indexIntoFile_.addEntry(lb.processHistoryID(), lumiAux_.run(), lumiAux_.luminosityBlock(), 0U, lumiEntryNumber_);
411  lumiTree_.optimizeBaskets(10ULL*1024*1024);
412  }
LuminosityBlockAuxiliary lumiAux_
void fillBranches(BranchType const &branchType, Principal const &principal, ProductProvenanceVector *productProvenanceVecPtr)
ProductProvenanceVector * pLumiEntryInfoVector_
void setProcessHistoryID(ProcessHistoryID const &phid)
LuminosityBlockNumber_t luminosityBlock() const
void addEntry(ProcessHistoryID const &processHistoryID, RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event, EntryNumber_t entry)
IndexIntoFile indexIntoFile_
IndexIntoFile::EntryNumber_t lumiEntryNumber_
RootOutputTree lumiTree_
void optimizeBaskets(ULong64_t size)
void edm::RootOutputFile::writeOne ( EventPrincipal const &  e)

Definition at line 361 of file RootOutputFile.cc.

References edm::IndexIntoFile::addEntry(), edm::EventPrincipal::aux(), edm::EventPrincipal::branchListIndexes(), ExpressReco_HICollisions_FallBack::dataType, dataTypeReported_, edm::EventID::event(), edm::EventAuxiliary::event(), eventEntryNumber_, edm::EventPrincipal::eventSelectionIDs(), fillBranches(), edm::EventPrincipal::id(), indexIntoFile_, edm::InEvent, edm::EventAuxiliary::isRealData(), edm::EventAuxiliary::luminosityBlock(), om_, pBranchListIndexes_, pEventAux_, pEventEntryInfoVector_, pEventSelectionIDs_, edm::EventAuxiliary::processHistoryID(), edm::Principal::processHistoryID(), reportToken_, edm::EventID::run(), edm::EventAuxiliary::run(), edm::OutputModule::selectorConfig(), and edm::OutputModule::wantAllEvents().

361  {
362  // Auxiliary branch
363  pEventAux_ = &e.aux();
364 
365  // Because getting the data may cause an exception to be thrown we want to do that
366  // first before writing anything to the file about this event
367  // NOTE: pEventAux_, pBranchListIndexes_, pEventSelectionIDs_, and pEventEntryInfoVector_
368  // must be set before calling fillBranches since they get written out in that routine.
369  assert(pEventAux_->processHistoryID() == e.processHistoryID());
370  pBranchListIndexes_ = &e.branchListIndexes();
371 
372  // Note: The EventSelectionIDVector should have a one to one correspondence with the processes in the process history.
373  // Therefore, a new entry should be added if and only if the current process has been added to the process history,
374  // which is done if and only if there is a produced product.
376  EventSelectionIDVector esids = e.eventSelectionIDs();
377  if (reg->anyProductProduced() || !om_->wantAllEvents()) {
378  esids.push_back(om_->selectorConfig());
379  }
380  pEventSelectionIDs_ = &esids;
382 
383  // Add the dataType to the job report if it hasn't already been done
384  if(!dataTypeReported_) {
385  Service<JobReport> reportSvc;
386  std::string dataType("MC");
387  if(pEventAux_->isRealData()) dataType = "Data";
388  reportSvc->reportDataType(reportToken_, dataType);
389  dataTypeReported_ = true;
390  }
391 
392  // Add event to index
395 
396  // Report event written
397  Service<JobReport> reportSvc;
398  reportSvc->eventWrittenToFile(reportToken_, e.id().run(), e.id().event());
399  }
bool isRealData() const
void fillBranches(BranchType const &branchType, Principal const &principal, ProductProvenanceVector *productProvenanceVecPtr)
RunNumber_t run() const
std::vector< EventSelectionID > EventSelectionIDVector
LuminosityBlockNumber_t luminosityBlock() const
bool wantAllEvents() const
Definition: OutputModule.h:66
PoolOutputModule const * om_
IndexIntoFile::EntryNumber_t eventEntryNumber_
void addEntry(ProcessHistoryID const &processHistoryID, RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event, EntryNumber_t entry)
EventSelectionIDVector const * pEventSelectionIDs_
IndexIntoFile indexIntoFile_
ProcessHistoryID const & processHistoryID() const
EventAuxiliary const * pEventAux_
BranchListIndexes const * pBranchListIndexes_
EventNumber_t event() const
JobReport::Token reportToken_
ParameterSetID selectorConfig() const
Definition: OutputModule.h:84
ProductProvenanceVector * pEventEntryInfoVector_
void edm::RootOutputFile::writeParameterSetRegistry ( )

Definition at line 502 of file RootOutputFile.cc.

References b, edm::PoolOutputModule::basketSize(), edm::detail::ThreadSafeRegistry< KEY, T, E >::begin(), edm::detail::ThreadSafeRegistry< KEY, T, E >::end(), edm::poolNames::idToParameterSetBlobsBranchName(), edm::detail::ThreadSafeRegistry< KEY, T, E >::instance(), om_, and parameterSetsTree_.

502  {
503  std::pair<ParameterSetID, ParameterSetBlob> idToBlob;
504  std::pair<ParameterSetID, ParameterSetBlob>* pIdToBlob = &idToBlob;
505  TBranch* b = parameterSetsTree_->Branch(poolNames::idToParameterSetBlobsBranchName().c_str(),&pIdToBlob,om_->basketSize(), 0);
506 
508  itEnd = pset::Registry::instance()->end();
509  it != itEnd;
510  ++it) {
511  idToBlob.first = it->first;
512  idToBlob.second.pset() = it->second.toString();
513 
514  b->Fill();
515  }
516  }
std::string const & idToParameterSetBlobsBranchName()
Definition: BranchType.cc:239
int const & basketSize() const
PoolOutputModule const * om_
collection_type::const_iterator const_iterator
double b
Definition: hdecay.h:120
static ThreadSafeRegistry * instance()
void edm::RootOutputFile::writeParentageRegistry ( )

Definition at line 427 of file RootOutputFile.cc.

References edm::PoolOutputModule::basketSize(), edm::detail::ThreadSafeRegistry< KEY, T, E >::begin(), ExpressReco_HICollisions_FallBack::e, edm::detail::ThreadSafeRegistry< KEY, T, E >::end(), edm::hlt::Exception, edm::errors::FatalRootError, i, edm::detail::ThreadSafeRegistry< KEY, T, E >::instance(), om_, edm::poolNames::parentageBranchName(), parentageIDs_, and parentageTree_.

427  {
428  Parentage const* desc(0);
429 
430  if(!parentageTree_->Branch(poolNames::parentageBranchName().c_str(),
431  &desc, om_->basketSize(), 0))
433  << "Failed to create a branch for Parentages in the output file";
434 
436  std::set<ParentageID>::const_iterator pidend = parentageIDs_.end();
437  for(ParentageRegistry::const_iterator i = ptReg.begin(), e = ptReg.end(); i != e; ++i) {
438  if(parentageIDs_.find(i->first) != pidend) {
439  desc = &(i->second);
440  parentageTree_->Fill();
441  }
442  }
443  }
std::set< ParentageID > parentageIDs_
int i
Definition: DBlmapReader.cc:9
int const & basketSize() const
edm::detail::ThreadSafeRegistry< edm::ParentageID, edm::Parentage > ParentageRegistry
PoolOutputModule const * om_
collection_type::const_iterator const_iterator
std::string const & parentageBranchName()
Definition: BranchType.cc:152
static ThreadSafeRegistry * instance()
void edm::RootOutputFile::writeProcessConfigurationRegistry ( )

Definition at line 468 of file RootOutputFile.cc.

References b, edm::PoolOutputModule::basketSize(), edm::detail::ThreadSafeRegistry< KEY, T, E >::data(), ExpressReco_HICollisions_FallBack::e, i, edm::detail::ThreadSafeRegistry< KEY, T, E >::instance(), metaDataTree_, om_, L1TEmulatorMonitor_cff::p, edm::poolNames::processConfigurationBranchName(), and edm::sort_all().

468  {
470  Map const& procConfigMap = ProcessConfigurationRegistry::instance()->data();
471  ProcessConfigurationVector procConfigVector;
472  for(Map::const_iterator i = procConfigMap.begin(), e = procConfigMap.end(); i != e; ++i) {
473  procConfigVector.push_back(i->second);
474  }
475  sort_all(procConfigVector);
476  ProcessConfigurationVector* p = &procConfigVector;
477  TBranch* b = metaDataTree_->Branch(poolNames::processConfigurationBranchName().c_str(), &p, om_->basketSize(), 0);
478  assert(b);
479  b->Fill();
480  }
int i
Definition: DBlmapReader.cc:9
int const & basketSize() const
ProcessConfigurationRegistry::vector_type ProcessConfigurationVector
std::map< key_type, value_type > collection_type
PoolOutputModule const * om_
void sort_all(RandomAccessSequence &s)
wrappers for std::sort
Definition: Algorithms.h:120
double b
Definition: hdecay.h:120
std::string const & processConfigurationBranchName()
Definition: BranchType.cc:192
static ThreadSafeRegistry * instance()
collection_type & data()
Provide access to the contained collection.
void edm::RootOutputFile::writeProcessHistoryRegistry ( )

Definition at line 482 of file RootOutputFile.cc.

References b, edm::PoolOutputModule::basketSize(), edm::detail::ThreadSafeRegistry< KEY, T, E >::data(), ExpressReco_HICollisions_FallBack::e, i, edm::detail::ThreadSafeRegistry< KEY, T, E >::instance(), metaDataTree_, om_, L1TEmulatorMonitor_cff::p, and edm::poolNames::processHistoryBranchName().

482  {
484  Map const& procHistoryMap = ProcessHistoryRegistry::instance()->data();
485  ProcessHistoryVector procHistoryVector;
486  for(Map::const_iterator i = procHistoryMap.begin(), e = procHistoryMap.end(); i != e; ++i) {
487  procHistoryVector.push_back(i->second);
488  }
489  ProcessHistoryVector* p = &procHistoryVector;
490  TBranch* b = metaDataTree_->Branch(poolNames::processHistoryBranchName().c_str(), &p, om_->basketSize(), 0);
491  assert(b);
492  b->Fill();
493  }
int i
Definition: DBlmapReader.cc:9
int const & basketSize() const
std::map< key_type, value_type > collection_type
PoolOutputModule const * om_
ProcessHistoryRegistry::vector_type ProcessHistoryVector
std::string const & processHistoryBranchName()
Definition: BranchType.cc:187
double b
Definition: hdecay.h:120
static ThreadSafeRegistry * instance()
collection_type & data()
Provide access to the contained collection.
void edm::RootOutputFile::writeProductDependencies ( )

Definition at line 542 of file RootOutputFile.cc.

References b, edm::PoolOutputModule::basketSize(), edm::OutputModule::branchChildren(), metaDataTree_, om_, and edm::poolNames::productDependenciesBranchName().

542  {
543  BranchChildren& pDeps = const_cast<BranchChildren&>(om_->branchChildren());
544  BranchChildren* ppDeps = &pDeps;
545  TBranch* b = metaDataTree_->Branch(poolNames::productDependenciesBranchName().c_str(), &ppDeps, om_->basketSize(), 0);
546  assert(b);
547  b->Fill();
548  }
int const & basketSize() const
PoolOutputModule const * om_
BranchChildren const & branchChildren() const
Definition: OutputModule.h:64
double b
Definition: hdecay.h:120
std::string const & productDependenciesBranchName()
Definition: BranchType.cc:167
void edm::RootOutputFile::writeProductDescriptionRegistry ( )

Definition at line 518 of file RootOutputFile.cc.

References b, edm::PoolOutputModule::basketSize(), branchesWithStoredHistory_, end, metaDataTree_, om_, and edm::poolNames::productDescriptionBranchName().

518  {
519  // Make a local copy of the ProductRegistry, removing any transient or pruned products.
520  typedef ProductRegistry::ProductList ProductList;
522  ProductRegistry pReg(reg->productList());
523  ProductList& pList = const_cast<ProductList &>(pReg.productList());
524  std::set<BranchID>::iterator end = branchesWithStoredHistory_.end();
525  for(ProductList::iterator it = pList.begin(); it != pList.end();) {
526  if(branchesWithStoredHistory_.find(it->second.branchID()) == end) {
527  // avoid invalidating iterator on deletion
528  ProductList::iterator itCopy = it;
529  ++it;
530  pList.erase(itCopy);
531 
532  } else {
533  ++it;
534  }
535  }
536 
537  ProductRegistry* ppReg = &pReg;
538  TBranch* b = metaDataTree_->Branch(poolNames::productDescriptionBranchName().c_str(), &ppReg, om_->basketSize(), 0);
539  assert(b);
540  b->Fill();
541  }
int const & basketSize() const
std::map< BranchKey, BranchDescription > ProductList
std::set< BranchID > branchesWithStoredHistory_
PoolOutputModule const * om_
#define end
Definition: vmac.h:38
double b
Definition: hdecay.h:120
std::string const & productDescriptionBranchName()
Definition: BranchType.cc:162
void edm::RootOutputFile::writeRun ( RunPrincipal const &  r)

Definition at line 414 of file RootOutputFile.cc.

References edm::IndexIntoFile::addEntry(), edm::RunPrincipal::aux(), fillBranches(), indexIntoFile_, edm::InRun, edm::RootOutputTree::optimizeBaskets(), edm::Principal::processHistoryID(), pRunEntryInfoVector_, edm::RunAuxiliary::run(), runAux_, runEntryNumber_, runTree_, and edm::RunAuxiliary::setProcessHistoryID().

414  {
415  // Auxiliary branch
416  // NOTE: runAux_ must be filled before calling fillBranches since it gets written out in that routine.
417  runAux_ = r.aux();
418  // Use the updated process historyID
419  runAux_.setProcessHistoryID(r.processHistoryID());
420  // Add run to index.
421  indexIntoFile_.addEntry(r.processHistoryID(), runAux_.run(), 0U, 0U, runEntryNumber_);
422  ++runEntryNumber_;
424  runTree_.optimizeBaskets(10ULL*1024*1024);
425  }
void fillBranches(BranchType const &branchType, Principal const &principal, ProductProvenanceVector *productProvenanceVecPtr)
ProductProvenanceVector * pRunEntryInfoVector_
void addEntry(ProcessHistoryID const &processHistoryID, RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event, EntryNumber_t entry)
RootOutputTree runTree_
IndexIntoFile indexIntoFile_
IndexIntoFile::EntryNumber_t runEntryNumber_
RunAuxiliary runAux_
void setProcessHistoryID(ProcessHistoryID const &phid)
Definition: RunAuxiliary.h:36
void optimizeBaskets(ULong64_t size)
RunNumber_t run() const
Definition: RunAuxiliary.h:41

Member Data Documentation

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

Definition at line 97 of file RootOutputFile.h.

Referenced by beginInputFile().

bool edm::RootOutputFile::dataTypeReported_
private

Definition at line 124 of file RootOutputFile.h.

Referenced by writeOne().

ProductProvenanceVector edm::RootOutputFile::eventEntryInfoVector_
private

Definition at line 112 of file RootOutputFile.h.

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

Definition at line 100 of file RootOutputFile.h.

Referenced by writeOne().

RootOutputTree edm::RootOutputFile::eventTree_
private

Definition at line 120 of file RootOutputFile.h.

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

FileID edm::RootOutputFile::fid_
private

Definition at line 99 of file RootOutputFile.h.

Referenced by RootOutputFile(), and writeFileIdentifier().

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

Definition at line 92 of file RootOutputFile.h.

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

boost::shared_ptr<TFile> edm::RootOutputFile::filePtr_
private

Definition at line 98 of file RootOutputFile.h.

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

IndexIntoFile edm::RootOutputFile::indexIntoFile_
private

Definition at line 103 of file RootOutputFile.h.

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

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

Definition at line 93 of file RootOutputFile.h.

Referenced by RootOutputFile().

LuminosityBlockAuxiliary edm::RootOutputFile::lumiAux_
private

Definition at line 107 of file RootOutputFile.h.

Referenced by writeLuminosityBlock().

ProductProvenanceVector edm::RootOutputFile::lumiEntryInfoVector_
private

Definition at line 113 of file RootOutputFile.h.

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

Definition at line 101 of file RootOutputFile.h.

Referenced by writeLuminosityBlock().

RootOutputTree edm::RootOutputFile::lumiTree_
private

Definition at line 121 of file RootOutputFile.h.

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

TTree* edm::RootOutputFile::metaDataTree_
private
PoolOutputModule const* edm::RootOutputFile::om_
private
TTree* edm::RootOutputFile::parameterSetsTree_
private

Definition at line 105 of file RootOutputFile.h.

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

std::set<ParentageID> edm::RootOutputFile::parentageIDs_
private

Definition at line 125 of file RootOutputFile.h.

Referenced by fillBranches(), and writeParentageRegistry().

TTree* edm::RootOutputFile::parentageTree_
private

Definition at line 106 of file RootOutputFile.h.

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

BranchListIndexes const* edm::RootOutputFile::pBranchListIndexes_
private

Definition at line 118 of file RootOutputFile.h.

Referenced by RootOutputFile(), and writeOne().

EventAuxiliary const* edm::RootOutputFile::pEventAux_
private

Definition at line 109 of file RootOutputFile.h.

Referenced by RootOutputFile(), and writeOne().

ProductProvenanceVector* edm::RootOutputFile::pEventEntryInfoVector_
private

Definition at line 115 of file RootOutputFile.h.

Referenced by RootOutputFile(), and writeOne().

EventSelectionIDVector const* edm::RootOutputFile::pEventSelectionIDs_
private

Definition at line 119 of file RootOutputFile.h.

Referenced by RootOutputFile(), and writeOne().

LuminosityBlockAuxiliary const* edm::RootOutputFile::pLumiAux_
private

Definition at line 110 of file RootOutputFile.h.

Referenced by RootOutputFile().

ProductProvenanceVector* edm::RootOutputFile::pLumiEntryInfoVector_
private

Definition at line 116 of file RootOutputFile.h.

Referenced by RootOutputFile(), and writeLuminosityBlock().

RunAuxiliary const* edm::RootOutputFile::pRunAux_
private

Definition at line 111 of file RootOutputFile.h.

Referenced by RootOutputFile().

ProductProvenanceVector* edm::RootOutputFile::pRunEntryInfoVector_
private

Definition at line 117 of file RootOutputFile.h.

Referenced by RootOutputFile(), and writeRun().

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

Definition at line 94 of file RootOutputFile.h.

Referenced by beginInputFile(), finishEndFile(), RootOutputFile(), and writeOne().

RunAuxiliary edm::RootOutputFile::runAux_
private

Definition at line 108 of file RootOutputFile.h.

Referenced by writeRun().

ProductProvenanceVector edm::RootOutputFile::runEntryInfoVector_
private

Definition at line 114 of file RootOutputFile.h.

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

Definition at line 102 of file RootOutputFile.h.

Referenced by writeRun().

RootOutputTree edm::RootOutputFile::runTree_
private

Definition at line 122 of file RootOutputFile.h.

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

RootOutputTreePtrArray edm::RootOutputFile::treePointers_
private

Definition at line 123 of file RootOutputFile.h.

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

int edm::RootOutputFile::whyNotFastClonable_
private

Definition at line 96 of file RootOutputFile.h.

Referenced by beginInputFile(), and fillBranches().