8 #include "TTreeIndex.h" 9 #include "TTreeCache.h" 18 if (branch ==
nullptr) {
23 TBranch* getProductProvenanceBranch(TTree* tree,
BranchType const& branchType) {
30 unsigned int nIndexes,
31 unsigned int maxVirtualSize,
32 unsigned int cacheSize,
33 unsigned int learningEntries,
34 bool enablePrefetching,
39 branchType_(branchType),
40 auxBranch_(tree_ ? getAuxiliaryBranch(tree_, branchType_) :
nullptr),
44 rawTriggerTreeCache_(),
47 entries_(tree_ ? tree_->GetEntries() : 0),
66 throw cms::Exception(
"WrongFileFormat")<<
"The ROOT file does not contain a TTree named "<<
BranchTypeToProductTreeName(branchType)<<
"\n This is either not an edm ROOT file or is one that has been corrupted.";
70 long treeAutoFlush = (tree_ ? tree_->GetAutoFlush() : 0);
71 if (treeAutoFlush < 0) {
73 Long64_t averageEventSizeBytes = tree_->GetZipBytes() / (tree_->GetEntries()+1) + 1;
84 Int_t branchCount = tree_->GetListOfBranches()->GetEntriesFast();
95 assert(index < entryNumberForIndex_->
size());
101 assert(index < entryNumberForIndex_->
size());
131 if(
tree_->GetBranch(oldBranchName.c_str()) ==
nullptr){
141 TBranch* branch =
tree_->GetBranch(oldBranchName.c_str());
157 TBranch* branch =
tree_->GetBranch(oldBranchName.c_str());
158 if (branch !=
nullptr) {
159 TObjArray* leaves =
tree_->GetListOfLeaves();
160 int entries = leaves->GetEntries();
162 TLeaf* leaf = (TLeaf*)(*leaves)[
i];
163 if (leaf ==
nullptr)
continue;
164 TBranch*
br = leaf->GetBranch();
165 if (br ==
nullptr)
continue;
166 if (br->GetMother() ==
branch) {
167 leaves->Remove(leaf);
171 tree_->GetListOfBranches()->Remove(branch);
172 tree_->GetListOfBranches()->Compress();
183 tree_->SetCacheSize(static_cast<Long64_t>(cacheSize));
192 if (treeMaxVirtualSize >= 0)
tree_->SetMaxVirtualSize(static_cast<Long64_t>(treeMaxVirtualSize));
213 if(theEntryNumber < entryNumber_ and theEntryNumber >=0) {
225 triggerTreeCache_->SetEntryRange(theEntryNumber,
tree_->GetEntries());
229 TTree::TClusterIterator clusterIter =
tree_->GetClusterIterator(theEntryNumber);
289 TTree::TClusterIterator clusterIter =
tree_->GetClusterIterator(entryNumber);
296 tree_->SetCacheSize(static_cast<Long64_t>(5*1024*1024));
300 int branchCount = branches->GetEntriesFast();
305 for (
int i=0;
i<branchCount;
i++) {
306 TBranch *tmp_branch = (TBranch*)branches->UncheckedAt(
i);
328 tree_->SetCacheSize(static_cast<Long64_t>(5*1024*1024));
352 TTreeCache *triggerCache =
nullptr;
374 branch->GetEntry(entryNumber);
422 rawEnd =
tree_->GetEntries();
490 int branchCount = branches->GetEntriesFast();
491 for (
int i=0;
i<branchCount;
i++) {
492 TBranch *branch = (TBranch*)branches->UncheckedAt(
i);
493 if ((branchNames[0] ==
'*') || (strcmp(branchNames, branch->GetName()) == 0)) {
504 postEventReadSource);
513 n = branch->GetEntry(entryNumber);
525 n = tree->GetEntry(entryNumber);
533 std::unique_ptr<TTreeCache>
536 tree->SetCacheSize(cacheSize);
537 std::unique_ptr<TTreeCache> treeCache(dynamic_cast<TTreeCache*>(file.
GetCacheRead()));
538 if (
nullptr != treeCache.get()) {
539 treeCache->StartLearningPhase();
540 treeCache->SetEntryRange(0, tree->GetEntries());
541 treeCache->AddBranch(branchNames, kTRUE);
542 treeCache->StopLearningPhase();
std::string const & branchName() const
std::string const & BranchTypeToMetaDataTreeName(BranchType const &branchType)
std::string const & BranchTypeToAuxiliaryBranchName(BranchType const &branchType)
unsigned int learningEntries_
TTreeCache * checkTriggerCache(TBranch *branch, EntryNumber entryNumber) const
std::shared_ptr< TTreeCache > rawTriggerTreeCache_
void dropBranch(std::string const &oldBranchName)
std::vector< std::string > branchNames_
std::vector< std::string > const & branchNames() const
std::shared_ptr< TTreeCache > treeCache_
EntryNumber rawTriggerSwitchOverEntry_
EntryNumber const & entries() const
void setSignals(signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const *preEventReadSource, signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const *postEventReadSource)
std::unordered_set< TBranch * > trainedSet_
TBranch * branchEntryInfoBranch_
void setPresence(BranchDescription &prod, std::string const &oldBranchName)
void trainCache(char const *branchNames)
std::unique_ptr< RootDelayedReader > rootDelayedReader_
void setTreeMaxVirtualSize(int treeMaxVirtualSize)
void insertEntryForIndex(unsigned int index)
DelayedReader * resetAndGetRootDelayedReader() const
T const & get(Event const &event, InputTag const &tag)
TTreeCache * selectCache(TBranch *branch, EntryNumber entryNumber) const
unsigned long treeAutoFlush_
void addBranch(BranchDescription const &prod, std::string const &oldBranchName)
BranchID const & branchID() const
std::string const & BranchTypeToBranchEntryInfoBranchName(BranchType const &branchType)
void setDropped(bool isDropped)
std::string const & BranchTypeToProductTreeName(BranchType const &branchType)
IndexIntoFile::EntryNumber_t EntryNumber
TTreeCache * checkTriggerCacheImpl(TBranch *branch, EntryNumber entryNumber) const
EntryNumber const & entryNumber() const
std::string const & BranchTypeToInfoTreeName(BranchType const &branchType)
TBranch * provenanceBranch_
DelayedReader * rootDelayedReader() const
EntryNumber const & entryNumberForIndex(unsigned int index) const
std::shared_ptr< TTreeCache > rawTreeCache_
void getEntry(TBranch *branch, EntryNumber entry) const
void insert(edm::BranchID const &iKey, BranchInfo const &iInfo)
void addContext(std::string const &context)
std::shared_ptr< InputFile > filePtr_
void setCacheSize(unsigned int cacheSize)
bool performedSwitchOver_
std::unique_ptr< std::vector< EntryNumber > > entryNumberForIndex_
bool skipEntries(unsigned int &offset)
std::unordered_set< TBranch * > triggerSet_
RootTree(std::shared_ptr< InputFile > filePtr, BranchType const &branchType, unsigned int nIndexes, unsigned int maxVirtualSize, unsigned int cacheSize, unsigned int learningEntries, bool enablePrefetching, InputType inputType)
std::string const & BranchTypeToAuxBranchName(BranchType const &branchType)
BranchMap const & branches() const
std::string const & branchListIndexesBranchName()
EntryNumber switchOverEntry_
std::shared_ptr< TTreeCache > triggerTreeCache_
def branchType(schema, name)
void setEntryNumber(EntryNumber theEntryNumber)
roottree::EntryNumber EntryNumber