CMS 3D CMS Logo

Public Types | Public Member Functions | Private Member Functions | Private Attributes

edm::RootTree Class Reference

#include <RootTree.h>

List of all members.

Public Types

typedef roottree::BranchMap BranchMap
typedef roottree::EntryNumber EntryNumber

Public Member Functions

void addBranch (BranchKey const &key, BranchDescription const &prod, std::string const &oldBranchName)
TBranch *const branchEntryInfoBranch () const
BranchMap const & branches () const
std::vector< std::string > const & branchNames () const
void close ()
bool current ()
void dropBranch (std::string const &oldBranchName)
EntryNumber const & entries () const
EntryNumber const & entryNumber () const
template<typename T >
void fillAux (T *&pAux)
template<typename T >
void fillBranchEntry (TBranch *branch, T *&pbuf)
template<typename T >
void fillBranchEntryMeta (TBranch *branch, T *&pbuf)
void fillStatus ()
void getEntry (TBranch *branch, EntryNumber entry) const
bool isValid () const
boost::shared_ptr< DelayedReadermakeDelayedReader (FileFormatVersion const &fileFormatVersion, boost::shared_ptr< RootFile > rootFilePtr=boost::shared_ptr< RootFile >()) const
TTree const * metaTree () const
bool next ()
bool previous ()
std::vector< ProductStatus >
const & 
productStatuses () const
void resetTraining ()
void rewind ()
 RootTree (boost::shared_ptr< InputFile > filePtr, BranchType const &branchType, unsigned int maxVirtualSize, unsigned int cacheSize, unsigned int learningEntries)
void setEntryNumber (EntryNumber theEntryNumber)
void setPresence (BranchDescription const &prod)
void trainCache (char const *branchNames)
TTree * tree ()
TTree const * tree () const
 ~RootTree ()

Private Member Functions

void setCacheSize (unsigned int cacheSize)
void setTreeMaxVirtualSize (int treeMaxVirtualSize)
void startTraining ()
void stopTraining ()

Private Attributes

TBranch * auxBranch_
TBranch * branchEntryInfoBranch_
boost::shared_ptr< BranchMapbranches_
std::vector< std::string > branchNames_
BranchType branchType_
unsigned int cacheSize_
EntryNumber entries_
EntryNumber entryNumber_
boost::shared_ptr< InputFilefilePtr_
TTree * infoTree_
unsigned int learningEntries_
TTree * metaTree_
std::vector< ProductStatus > * pProductStatuses_
std::vector< ProductStatusproductStatuses_
boost::shared_ptr< TTreeCache > rawTreeCache_
TBranch * statusBranch_
EntryNumber switchOverEntry_
bool trainNow_
TTree * tree_
boost::shared_ptr< TTreeCache > treeCache_

Detailed Description

Definition at line 63 of file RootTree.h.


Member Typedef Documentation

Definition at line 65 of file RootTree.h.

Definition at line 66 of file RootTree.h.


Constructor & Destructor Documentation

edm::RootTree::RootTree ( boost::shared_ptr< InputFile filePtr,
BranchType const &  branchType,
unsigned int  maxVirtualSize,
unsigned int  cacheSize,
unsigned int  learningEntries 
)

Definition at line 33 of file RootTree.cc.

References setCacheSize(), and setTreeMaxVirtualSize().

                                                   :
    filePtr_(filePtr),
    tree_(dynamic_cast<TTree*>(filePtr_.get() != 0 ? filePtr->Get(BranchTypeToProductTreeName(branchType).c_str()) : 0)),
    metaTree_(dynamic_cast<TTree*>(filePtr_.get() != 0 ? filePtr->Get(BranchTypeToMetaDataTreeName(branchType).c_str()) : 0)),
    branchType_(branchType),
    auxBranch_(tree_ ? getAuxiliaryBranch(tree_, branchType_) : 0),
    branchEntryInfoBranch_(metaTree_ ? getProductProvenanceBranch(metaTree_, branchType_) : getProductProvenanceBranch(tree_, branchType_)),
    treeCache_(),
    rawTreeCache_(),
    entries_(tree_ ? tree_->GetEntries() : 0),
    entryNumber_(-1),
    branchNames_(),
    branches_(new BranchMap),
    trainNow_(false),
    switchOverEntry_(-1),
    learningEntries_(learningEntries),
    cacheSize_(cacheSize),
    productStatuses_(), // backward compatibility
    pProductStatuses_(&productStatuses_), // backward compatibility
    infoTree_(dynamic_cast<TTree*>(filePtr_.get() != 0 ? filePtr->Get(BranchTypeToInfoTreeName(branchType).c_str()) : 0)), // backward compatibility
    statusBranch_(infoTree_ ? getStatusBranch(infoTree_, branchType_) : 0) { // backward compatibility
      setTreeMaxVirtualSize(maxVirtualSize);
      setCacheSize(cacheSize);
  }
edm::RootTree::~RootTree ( )

Definition at line 62 of file RootTree.cc.

                      {
  }

Member Function Documentation

void edm::RootTree::addBranch ( BranchKey const &  key,
BranchDescription const &  prod,
std::string const &  oldBranchName 
)

Definition at line 87 of file RootTree.cc.

References branches_, edm::BranchDescription::branchName(), branchNames_, info, edm::BranchDescription::init(), isValid(), metaTree_, edm::BranchDescription::present(), edm::roottree::BranchInfo::productBranch_, edm::roottree::BranchInfo::provenanceBranch_, and tree_.

                                                      {
      assert(isValid());
      prod.init();
      //use the translated branch name
      TBranch* branch = tree_->GetBranch(oldBranchName.c_str());
      roottree::BranchInfo info = roottree::BranchInfo(ConstBranchDescription(prod));
      info.productBranch_ = 0;
      if (prod.present()) {
        info.productBranch_ = branch;
        //we want the new branch name for the JobReport
        branchNames_.push_back(prod.branchName());
      }
      TTree* provTree = (metaTree_ != 0 ? metaTree_ : tree_);
      info.provenanceBranch_ = provTree->GetBranch(oldBranchName.c_str());
      branches_->insert(std::make_pair(key, info));
  }
TBranch* const edm::RootTree::branchEntryInfoBranch ( ) const [inline]

Definition at line 125 of file RootTree.h.

References branchEntryInfoBranch_.

roottree::BranchMap const & edm::RootTree::branches ( ) const

Definition at line 130 of file RootTree.cc.

References branches_.

{return *branches_;}
std::vector<std::string> const& edm::RootTree::branchNames ( ) const [inline]

Definition at line 89 of file RootTree.h.

References branchNames_.

{return branchNames_;}
void edm::RootTree::close ( void  )

Definition at line 217 of file RootTree.cc.

References auxBranch_, branchEntryInfoBranch_, filePtr_, infoTree_, metaTree_, statusBranch_, and tree_.

                   {
    // The TFile is about to be closed, and destructed.
    // Just to play it safe, zero all pointers to quantities that are owned by the TFile.
    auxBranch_  = branchEntryInfoBranch_ = statusBranch_ = 0;
    tree_ = metaTree_ = infoTree_ = 0;
    // We own the treeCache_.
    // We make sure the treeCache_ is detached from the file,
    // so that ROOT does not also delete it.
    filePtr_->SetCacheRead(0);
    // We give up our shared ownership of the TFile itself.
    filePtr_.reset();
  }
bool edm::RootTree::current ( ) [inline]

Definition at line 83 of file RootTree.h.

{return entryNumber_ < entries_ && entryNumber_ >= 0;}
void edm::RootTree::dropBranch ( std::string const &  oldBranchName)

Definition at line 107 of file RootTree.cc.

References beamvalidation::br, entries(), i, python::Node::leaf, and tree_.

                                                     {
      //use the translated branch name
      TBranch* branch = tree_->GetBranch(oldBranchName.c_str());
      if (branch != 0) {
        TObjArray* leaves = tree_->GetListOfLeaves();
        int entries = leaves->GetEntries();
        for (int i = 0; i < entries; ++i) {
          TLeaf* leaf = (TLeaf*)(*leaves)[i];
          if (leaf == 0) continue;
          TBranch* br = leaf->GetBranch();
          if (br == 0) continue;
          if (br->GetMother() == branch) {
            leaves->Remove(leaf);
          }
        }
        leaves->Compress();
        tree_->GetListOfBranches()->Remove(branch);
        tree_->GetListOfBranches()->Compress();
        delete branch;
      }
  }
EntryNumber const& edm::RootTree::entries ( ) const [inline]

Definition at line 87 of file RootTree.h.

References entries_.

Referenced by dropBranch().

{return entries_;}
EntryNumber const& edm::RootTree::entryNumber ( ) const [inline]

Definition at line 86 of file RootTree.h.

References entryNumber_.

{return entryNumber_;}
template<typename T >
void edm::RootTree::fillAux ( T *&  pAux) [inline]

Definition at line 92 of file RootTree.h.

References auxBranch_, entryNumber_, and getEntry().

                           {
      auxBranch_->SetAddress(&pAux);
      getEntry(auxBranch_, entryNumber_);
    }
template<typename T >
void edm::RootTree::fillBranchEntry ( TBranch *  branch,
T *&  pbuf 
) [inline]

Definition at line 108 of file RootTree.h.

References entryNumber_, and getEntry().

                                                    {
      branch->SetAddress(&pbuf);
      getEntry(branch, entryNumber_);
    }
template<typename T >
void edm::RootTree::fillBranchEntryMeta ( TBranch *  branch,
T *&  pbuf 
) [inline]

Definition at line 97 of file RootTree.h.

References entryNumber_, getEntry(), and metaTree_.

                                                        {
      if (metaTree_ != 0) {
        // Metadata was in separate tree.  Not cached.
        branch->SetAddress(&pbuf);
        roottree::getEntry(branch, entryNumber_);
      } else {
        fillBranchEntry<T>(branch, pbuf);
      }
    }
void edm::RootTree::fillStatus ( ) [inline]

Definition at line 120 of file RootTree.h.

References entryNumber_, getEntry(), pProductStatuses_, and statusBranch_.

                      { // backward compatibility
      statusBranch_->SetAddress(&pProductStatuses_); // backward compatibility
      roottree::getEntry(statusBranch_, entryNumber_); // backward compatibility
    } // backward compatibility
void edm::RootTree::getEntry ( TBranch *  branch,
EntryNumber  entry 
) const

Definition at line 169 of file RootTree.cc.

References filePtr_, rawTreeCache_, and treeCache_.

Referenced by fillAux(), fillBranchEntry(), fillBranchEntryMeta(), and fillStatus().

                                                                   {
    if (!treeCache_) {
      filePtr_->SetCacheRead(0);
      roottree::getEntry(branch, entryNumber);
    } else if (treeCache_->IsLearning() && rawTreeCache_) {
      treeCache_->AddBranch(branch, kTRUE);
      filePtr_->SetCacheRead(rawTreeCache_.get());
      roottree::getEntry(branch, entryNumber);
      filePtr_->SetCacheRead(0);
    } else {
      filePtr_->SetCacheRead(treeCache_.get());
      roottree::getEntry(branch, entryNumber);
      filePtr_->SetCacheRead(0);
    }
  }
bool edm::RootTree::isValid ( void  ) const

Definition at line 66 of file RootTree.cc.

References auxBranch_, branchEntryInfoBranch_, entries_, metaTree_, statusBranch_, and tree_.

Referenced by addBranch(), and setPresence().

                          {
    if (metaTree_ == 0 || metaTree_->GetNbranches() == 0) {
      return tree_ != 0 && auxBranch_ != 0;
    }
    if (tree_ != 0 && auxBranch_ != 0 && metaTree_ != 0) { // backward compatibility
      if (branchEntryInfoBranch_ != 0 || statusBranch_ != 0) return true; // backward compatibility
      return (entries_ == metaTree_->GetEntries() && tree_->GetNbranches() <= metaTree_->GetNbranches() + 1);  // backward compatibility
    } // backward compatibility
    return false;
  }
boost::shared_ptr< DelayedReader > edm::RootTree::makeDelayedReader ( FileFormatVersion const &  fileFormatVersion,
boost::shared_ptr< RootFile rootFilePtr = boost::shared_ptr<RootFile>() 
) const

Definition at line 133 of file RootTree.cc.

References branches_, and entryNumber_.

                                                                                                                     {
    boost::shared_ptr<DelayedReader>
        store(new RootDelayedReader(entryNumber_, branches_, *this, fileFormatVersion, rootFilePtr));
    return store;
  }
TTree const* edm::RootTree::metaTree ( ) const [inline]

Definition at line 115 of file RootTree.h.

References metaTree_.

{return metaTree_;}
bool edm::RootTree::next ( void  ) [inline]
bool edm::RootTree::previous ( ) [inline]

Definition at line 82 of file RootTree.h.

References entryNumber_.

Referenced by edm::RootFile::readLuminosityBlockAuxiliary_(), and edm::RootFile::readRunAuxiliary_().

{return --entryNumber_ >= 0;}
std::vector<ProductStatus> const& edm::RootTree::productStatuses ( ) const [inline]

Definition at line 117 of file RootTree.h.

References productStatuses_.

{return productStatuses_;} // backward compatibility
void edm::RootTree::resetTraining ( ) [inline]

Definition at line 127 of file RootTree.h.

References trainNow_.

Referenced by edm::RootFile::RootFile().

{trainNow_ = true;}
void edm::RootTree::rewind ( ) [inline]

Definition at line 84 of file RootTree.h.

References entryNumber_.

Referenced by edm::RootFile::rewind().

{entryNumber_ = 0;}
void edm::RootTree::setCacheSize ( unsigned int  cacheSize) [private]

Definition at line 140 of file RootTree.cc.

References cacheSize_, filePtr_, rawTreeCache_, tree_, and treeCache_.

Referenced by RootTree().

                                               {
    cacheSize_ = cacheSize;
    tree_->SetCacheSize(static_cast<Long64_t>(cacheSize));
    treeCache_.reset(dynamic_cast<TTreeCache*>(filePtr_->GetCacheRead()));
    filePtr_->SetCacheRead(0);
    rawTreeCache_.reset();
  }
void edm::RootTree::setEntryNumber ( EntryNumber  theEntryNumber)

Definition at line 154 of file RootTree.cc.

References entryNumber_, filePtr_, startTraining(), stopTraining(), switchOverEntry_, trainNow_, tree_, and treeCache_.

Referenced by edm::RootFile::initializeDuplicateChecker(), and edm::RootFile::skipEvents().

                                                     {
    filePtr_->SetCacheRead(treeCache_.get());
    entryNumber_ = theEntryNumber;
    tree_->LoadTree(entryNumber_);
    filePtr_->SetCacheRead(0);
    if(treeCache_ && trainNow_ && entryNumber_ >= 0) {
      startTraining();
      trainNow_ = false;
    }
    if (treeCache_ && treeCache_->IsLearning() && switchOverEntry_ >= 0 && entryNumber_ >= switchOverEntry_) {
      stopTraining();
    }
  }
void edm::RootTree::setPresence ( BranchDescription const &  prod)

Definition at line 78 of file RootTree.cc.

References edm::BranchDescription::branchName(), edm::BranchDescription::init(), isValid(), edm::BranchDescription::setDropped(), and tree_.

                                                     {
      assert(isValid());
      prod.init();
      if(tree_->GetBranch(prod.branchName().c_str()) == 0){
        prod.setDropped();
      }
  }
void edm::RootTree::setTreeMaxVirtualSize ( int  treeMaxVirtualSize) [private]

Definition at line 149 of file RootTree.cc.

References tree_.

Referenced by RootTree().

                                                        {
    if (treeMaxVirtualSize >= 0) tree_->SetMaxVirtualSize(static_cast<Long64_t>(treeMaxVirtualSize));
  }
void edm::RootTree::startTraining ( ) [private]

Definition at line 186 of file RootTree.cc.

References edm::poolNames::branchListIndexesBranchName(), branchType_, edm::BranchTypeToAuxiliaryBranchName(), cacheSize_, entryNumber_, filePtr_, edm::InEvent, learningEntries_, rawTreeCache_, switchOverEntry_, tree_, and treeCache_.

Referenced by setEntryNumber().

                          {
    if (cacheSize_ == 0) {
      return;
    }
    assert(treeCache_ && treeCache_->GetOwner() == tree_);
    assert(branchType_ == InEvent);
    assert(!rawTreeCache_);
    treeCache_->SetLearnEntries(learningEntries_);
    tree_->SetCacheSize(static_cast<Long64_t>(cacheSize_));
    rawTreeCache_.reset(dynamic_cast<TTreeCache *>(filePtr_->GetCacheRead()));
    filePtr_->SetCacheRead(0);
    rawTreeCache_->SetLearnEntries(0);
    switchOverEntry_ = entryNumber_ + learningEntries_;
    rawTreeCache_->StartLearningPhase();
    rawTreeCache_->SetEntryRange(entryNumber_, switchOverEntry_);
    rawTreeCache_->AddBranch("*", kTRUE);
    rawTreeCache_->StopLearningPhase();
    treeCache_->StartLearningPhase();
    treeCache_->SetEntryRange(switchOverEntry_, tree_->GetEntries());
    treeCache_->AddBranch(poolNames::branchListIndexesBranchName().c_str(), kTRUE);
    treeCache_->AddBranch(BranchTypeToAuxiliaryBranchName(branchType_).c_str(), kTRUE);
  }
void edm::RootTree::stopTraining ( ) [private]

Definition at line 210 of file RootTree.cc.

References filePtr_, rawTreeCache_, and treeCache_.

Referenced by setEntryNumber().

                         {
    filePtr_->SetCacheRead(treeCache_.get());
    treeCache_->StopLearningPhase();
    rawTreeCache_.reset();
  }
void edm::RootTree::trainCache ( char const *  branchNames)

Definition at line 231 of file RootTree.cc.

References cacheSize_, filePtr_, tree_, and treeCache_.

Referenced by edm::RootFile::RootFile().

                                              {
    if (cacheSize_ == 0) {
      return;
    }
    tree_->LoadTree(0);
    assert(treeCache_);
    filePtr_->SetCacheRead(treeCache_.get());
    assert(treeCache_->GetOwner() == tree_);
    treeCache_->StartLearningPhase();
    treeCache_->SetEntryRange(0, tree_->GetEntries());
    treeCache_->AddBranch(branchNames, kTRUE);
    treeCache_->StopLearningPhase();
    // We own the treeCache_.
    // We make sure the treeCache_ is detached from the file,
    // so that ROOT does not also delete it.
    filePtr_->SetCacheRead(0);
  }
TTree const* edm::RootTree::tree ( ) const [inline]

Definition at line 113 of file RootTree.h.

References tree_.

{return tree_;}
TTree* edm::RootTree::tree ( ) [inline]

Definition at line 114 of file RootTree.h.

References tree_.

{return tree_;}

Member Data Documentation

TBranch* edm::RootTree::auxBranch_ [private]

Definition at line 142 of file RootTree.h.

Referenced by close(), fillAux(), and isValid().

Definition at line 143 of file RootTree.h.

Referenced by branchEntryInfoBranch(), close(), and isValid().

boost::shared_ptr<BranchMap> edm::RootTree::branches_ [private]

Definition at line 152 of file RootTree.h.

Referenced by addBranch(), branches(), and makeDelayedReader().

std::vector<std::string> edm::RootTree::branchNames_ [private]

Definition at line 151 of file RootTree.h.

Referenced by addBranch(), and branchNames().

Definition at line 141 of file RootTree.h.

Referenced by startTraining().

unsigned int edm::RootTree::cacheSize_ [private]

Definition at line 156 of file RootTree.h.

Referenced by setCacheSize(), startTraining(), and trainCache().

Definition at line 149 of file RootTree.h.

Referenced by entries(), isValid(), and next().

boost::shared_ptr<InputFile> edm::RootTree::filePtr_ [private]
TTree* edm::RootTree::infoTree_ [private]

Definition at line 161 of file RootTree.h.

Referenced by close().

unsigned int edm::RootTree::learningEntries_ [private]

Definition at line 155 of file RootTree.h.

Referenced by startTraining().

TTree* edm::RootTree::metaTree_ [private]

Definition at line 140 of file RootTree.h.

Referenced by addBranch(), close(), fillBranchEntryMeta(), isValid(), and metaTree().

Definition at line 160 of file RootTree.h.

Referenced by fillStatus().

Definition at line 159 of file RootTree.h.

Referenced by productStatuses().

boost::shared_ptr<TTreeCache> edm::RootTree::rawTreeCache_ [private]

Definition at line 148 of file RootTree.h.

Referenced by getEntry(), setCacheSize(), startTraining(), and stopTraining().

TBranch* edm::RootTree::statusBranch_ [private]

Definition at line 162 of file RootTree.h.

Referenced by close(), fillStatus(), and isValid().

Definition at line 154 of file RootTree.h.

Referenced by setEntryNumber(), and startTraining().

bool edm::RootTree::trainNow_ [private]

Definition at line 153 of file RootTree.h.

Referenced by resetTraining(), and setEntryNumber().

TTree* edm::RootTree::tree_ [private]
boost::shared_ptr<TTreeCache> edm::RootTree::treeCache_ [private]