CMS 3D CMS Logo

Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Friends

fwlite::LuminosityBlock Class Reference

#include <LuminosityBlock.h>

Inheritance diagram for fwlite::LuminosityBlock:
fwlite::LuminosityBlockBase edm::LuminosityBlockBase

List of all members.

Public Member Functions

virtual bool atEnd () const
const std::vector
< edm::BranchDescription > & 
getBranchDescriptions () const
virtual const std::string getBranchNameFor (const std::type_info &, const char *, const char *, const char *) const
virtual bool getByLabel (const std::type_info &, const char *, const char *, const char *, void *) const
edm::EDProduct const * getByProductID (edm::ProductID const &) const
fwlite::Run const & getRun () const
bool isValid () const
 LuminosityBlock (boost::shared_ptr< BranchMapReader > branchMap, boost::shared_ptr< RunFactory > runFactory)
 LuminosityBlock (TFile *iFile)
virtual
edm::LuminosityBlockAuxiliary
const & 
luminosityBlockAuxiliary () const
 operator bool () const
const LuminosityBlockoperator++ ()
Long64_t size () const
bool to (edm::RunNumber_t run, edm::LuminosityBlockNumber_t lumi)
 Go to event by Run & LuminosityBlock number.
const LuminosityBlocktoBegin ()
virtual ~LuminosityBlock ()

Static Public Member Functions

static void throwProductNotFoundException (const std::type_info &, const char *, const char *, const char *)

Private Member Functions

const edm::ProcessHistoryhistory () const
 LuminosityBlock (const LuminosityBlock &)
const LuminosityBlockoperator= (const LuminosityBlock &)
void updateAux (Long_t lumiIndex) const

Private Attributes

edm::LuminosityBlockAuxiliary aux_
TBranch * auxBranch_
boost::shared_ptr
< BranchMapReader
branchMap_
DataGetterHelper dataHelper_
EntryFinder entryFinder_
int fileVersion_
edm::ProcessHistoryMap historyMap_
std::vector< const char * > labels_
edm::LuminosityBlockAuxiliarypAux_
edm::LuminosityBlockAuxpOldAux_
std::vector< std::string > procHistoryNames_
boost::shared_ptr< fwlite::Runrun_
boost::shared_ptr< RunFactoryrunFactory_

Friends

class internal::ProductGetter
class LumiHistoryGetter

Detailed Description

Definition at line 58 of file LuminosityBlock.h.


Constructor & Destructor Documentation

LuminosityBlock::LuminosityBlock ( TFile *  iFile)

Definition at line 45 of file LuminosityBlock.cc.

References auxBranch_, branchMap_, edm::BranchTypeToAuxiliaryBranchName(), Exception, fileVersion_, edm::InLumi, edm::poolNames::luminosityBlockTreeName(), pAux_, and runFactory_.

                                              :
    branchMap_(new BranchMapReader(iFile)),
    pAux_(&aux_),
    pOldAux_(0),
    fileVersion_(-1),
    dataHelper_(branchMap_->getLuminosityBlockTree(),
                boost::shared_ptr<HistoryGetterBase>(new LumiHistoryGetter(this)),
                branchMap_)
  {
    if(0==iFile) {
      throw cms::Exception("NoFile")<<"The TFile pointer passed to the constructor was null";
    }

    if(0==branchMap_->getLuminosityBlockTree()) {
      throw cms::Exception("NoLumiTree")<<"The TFile contains no TTree named " <<edm::poolNames::luminosityBlockTreeName();
    }
    //need to know file version in order to determine how to read the basic product info
    fileVersion_ = branchMap_->getFileVersion(iFile);

    //got this logic from IOPool/Input/src/RootFile.cc

    TTree* luminosityBlockTree = branchMap_->getLuminosityBlockTree();
    if(fileVersion_ >= 3 ) {
      auxBranch_ = luminosityBlockTree->GetBranch(edm::BranchTypeToAuxiliaryBranchName(edm::InLumi).c_str());
      if(0==auxBranch_) {
        throw cms::Exception("NoLuminosityBlockAuxilliary")<<"The TTree "
        <<edm::poolNames::luminosityBlockTreeName()
        <<" does not contain a branch named 'LuminosityBlockAuxiliary'";
      }
      auxBranch_->SetAddress(&pAux_);
    } else {
      throw cms::Exception("OldFileVersion")<<"The FWLite Luminosity Block code des not support old file versions";
//       This code commented from fwlite::Event. May be portable if needed.
//       pOldAux_ = new edm::EventAux();
//       auxBranch_ = luminosityBlockTree->GetBranch(edm::BranchTypeToAuxBranchName(edm::InLuminosityBlock).c_str());
//       if(0==auxBranch_) {
//         throw cms::Exception("NoLuminosityBlockAux")<<"The TTree "
//           <<edm::poolNames::luminosityBlockTreeName()
//           <<" does not contain a branch named 'LuminosityBlockAux'";
//       }
//       auxBranch_->SetAddress(&pOldAux_);
    }
    branchMap_->updateLuminosityBlock(0);
    runFactory_ =  boost::shared_ptr<RunFactory>(new RunFactory());
}
LuminosityBlock::LuminosityBlock ( boost::shared_ptr< BranchMapReader branchMap,
boost::shared_ptr< RunFactory runFactory 
)

Definition at line 91 of file LuminosityBlock.cc.

References auxBranch_, branchMap_, edm::BranchTypeToAuxiliaryBranchName(), Exception, fileVersion_, edm::InLumi, edm::poolNames::luminosityBlockTreeName(), and pAux_.

                                                                                                                    :
    branchMap_(branchMap),
    pAux_(&aux_),
    pOldAux_(0),
    fileVersion_(-1),
    dataHelper_(branchMap_->getLuminosityBlockTree(),
                boost::shared_ptr<HistoryGetterBase>(new LumiHistoryGetter(this)),
                branchMap_),
    runFactory_(runFactory)
  {

    if(0==branchMap_->getLuminosityBlockTree()) {
      throw cms::Exception("NoLumiTree")<<"The TFile contains no TTree named " <<edm::poolNames::luminosityBlockTreeName();
    }
    //need to know file version in order to determine how to read the basic event info
    fileVersion_ = branchMap_->getFileVersion();
    //got this logic from IOPool/Input/src/RootFile.cc

    TTree* luminosityBlockTree = branchMap_->getLuminosityBlockTree();
    if(fileVersion_ >= 3 ) {
      auxBranch_ = luminosityBlockTree->GetBranch(edm::BranchTypeToAuxiliaryBranchName(edm::InLumi).c_str());
      if(0==auxBranch_) {
        throw cms::Exception("NoLuminosityBlockAuxilliary")<<"The TTree "
        <<edm::poolNames::luminosityBlockTreeName()
        <<" does not contain a branch named 'LuminosityBlockAuxiliary'";
      }
      auxBranch_->SetAddress(&pAux_);
    } else {
      throw cms::Exception("OldFileVersion")<<"The FWLite Luminosity Block code des not support old file versions";
/*      pOldAux_ = new edm::EventAux();
      auxBranch_ = luminosityBlockTree->GetBranch(edm::BranchTypeToAuxBranchName(edm::InLuminosityBlock).c_str());
      if(0==auxBranch_) {
        throw cms::Exception("NoLuminosityBlockAux")<<"The TTree "
          <<edm::poolNames::luminosityBlockTreeName()
          <<" does not contain a branch named 'LuminosityBlockAux'";
      }
      auxBranch_->SetAddress(&pOldAux_);*/
    }
    branchMap_->updateLuminosityBlock(0);

//     if(fileVersion_ >= 7 ) {
//       eventHistoryTree_ = dynamic_cast<TTree*>(iFile->Get(edm::poolNames::eventHistoryTreeName().c_str()));
//     }

}
LuminosityBlock::~LuminosityBlock ( ) [virtual]

Definition at line 137 of file LuminosityBlock.cc.

References labels_, and pOldAux_.

{
  for(std::vector<const char*>::iterator it = labels_.begin(), itEnd=labels_.end();
      it != itEnd;
      ++it) {
    delete [] *it;
  }
  delete pOldAux_;
}
fwlite::LuminosityBlock::LuminosityBlock ( const LuminosityBlock ) [private]

Member Function Documentation

bool LuminosityBlock::atEnd ( ) const [virtual]

Implements fwlite::LuminosityBlockBase.

Definition at line 204 of file LuminosityBlock.cc.

References branchMap_, and size().

Referenced by getByLabel(), and main().

{
  Long_t luminosityBlockIndex = branchMap_->getLuminosityBlockEntry();
  return luminosityBlockIndex==-1 or luminosityBlockIndex == size();
}
const std::vector<edm::BranchDescription>& fwlite::LuminosityBlock::getBranchDescriptions ( ) const [inline]

Definition at line 95 of file LuminosityBlock.h.

References branchMap_.

                                                                              {
            return branchMap_->getBranchDescriptions();
         }
const std::string LuminosityBlock::getBranchNameFor ( const std::type_info &  iInfo,
const char *  iModuleLabel,
const char *  iProductInstanceLabel,
const char *  iProcessLabel 
) const [virtual]

Definition at line 212 of file LuminosityBlock.cc.

References dataHelper_, and fwlite::DataGetterHelper::getBranchNameFor().

{
    return dataHelper_.getBranchNameFor(iInfo, iModuleLabel, iProductInstanceLabel, iProcessLabel);
}
bool LuminosityBlock::getByLabel ( const std::type_info &  iInfo,
const char *  iModuleLabel,
const char *  iProductInstanceLabel,
const char *  iProcessLabel,
void *  oData 
) const [virtual]

Implements fwlite::LuminosityBlockBase.

Definition at line 222 of file LuminosityBlock.cc.

References atEnd(), branchMap_, dataHelper_, Exception, and fwlite::DataGetterHelper::getByLabel().

                                     {
    if(atEnd()) {
        throw cms::Exception("OffEnd")<<"You have requested data past the last lumi";
    }
    Long_t lumiIndex = branchMap_->getLuminosityBlockEntry();
    return dataHelper_.getByLabel(iInfo, iModuleLabel, iProductInstanceLabel, iProcessLabel, oData, lumiIndex);
}
edm::EDProduct const * LuminosityBlock::getByProductID ( edm::ProductID const &  iID) const

Definition at line 320 of file LuminosityBlock.cc.

References branchMap_, dataHelper_, and fwlite::DataGetterHelper::getByProductID().

                                                             {
  Long_t luminosityBlockIndex = branchMap_->getLuminosityBlockEntry();
  return dataHelper_.getByProductID(iID, luminosityBlockIndex);
}
fwlite::Run const & LuminosityBlock::getRun ( ) const

Definition at line 345 of file LuminosityBlock.cc.

References branchMap_, luminosityBlockAuxiliary(), edm::LuminosityBlockBase::run(), edm::LuminosityBlockAuxiliary::run(), run_, and runFactory_.

Referenced by main().

                                               {
  run_ = runFactory_->makeRun(boost::shared_ptr<BranchMapReader>(&*branchMap_,NoDelete()));
  edm::RunNumber_t run = luminosityBlockAuxiliary().run();
  run_->to(run);
  return *run_;
}
const edm::ProcessHistory & LuminosityBlock::history ( ) const [private]

Definition at line 256 of file LuminosityBlock.cc.

References aux_, b, branchMap_, Exception, fileVersion_, historyMap_, i, edm::poolNames::metaDataTreeName(), edm::poolNames::processHistoryBranchName(), edm::LuminosityBlockAuxiliary::processHistoryID(), edm::poolNames::processHistoryMapBranchName(), procHistoryNames_, and updateAux().

Referenced by fwlite::LumiHistoryGetter::history().

{
  edm::ProcessHistoryID processHistoryID;

  bool newFormat = false;//(fileVersion_ >= 5);

  Long_t lumiIndex = branchMap_->getLuminosityBlockEntry();
  updateAux(lumiIndex);
  if (!newFormat) {
    processHistoryID = aux_.processHistoryID();
  }

  if(historyMap_.empty() || newFormat) {
    procHistoryNames_.clear();
    TTree *meta = dynamic_cast<TTree*>(branchMap_->getFile()->Get(edm::poolNames::metaDataTreeName().c_str()));
    if(0==meta) {
      throw cms::Exception("NoMetaTree")<<"The TFile does not appear to contain a TTree named "
      <<edm::poolNames::metaDataTreeName();
    }
    if (historyMap_.empty()) {
      if (fileVersion_ < 11) {
        edm::ProcessHistoryMap* pPhm=&historyMap_;
        TBranch* b = meta->GetBranch(edm::poolNames::processHistoryMapBranchName().c_str());
        b->SetAddress(&pPhm);
        b->GetEntry(0);
      } else {
        edm::ProcessHistoryVector historyVector;
        edm::ProcessHistoryVector* pPhv=&historyVector;
        TBranch* b = meta->GetBranch(edm::poolNames::processHistoryBranchName().c_str());
        b->SetAddress(&pPhv);
        b->GetEntry(0);
        for (edm::ProcessHistoryVector::const_iterator i = historyVector.begin(), e = historyVector.end();
            i != e; ++i) {
          historyMap_.insert(std::make_pair(i->id(), *i));
        }
      }
    }
//     if (newFormat) {
//       if (fileVersion_ >= 7) {
//         edm::History history;
//         edm::History* pHistory = &history;
//         TBranch* eventHistoryBranch = eventHistoryTree_->GetBranch(edm::poolNames::eventHistoryBranchName().c_str());
//         if (!eventHistoryBranch)
//           throw edm::Exception(edm::errors::FatalRootError)
//             << "Failed to find history branch in event history tree";
//         eventHistoryBranch->SetAddress(&pHistory);
//         eventHistoryTree_->GetEntry(lumiIndex);
//         processHistoryID = history.processHistoryID();
//       } else {
//         std::vector<edm::EventProcessHistoryID> *pEventProcessHistoryIDs = &eventProcessHistoryIDs_;
//         TBranch* b = meta->GetBranch(edm::poolNames::eventHistoryBranchName().c_str());
//         b->SetAddress(&pEventProcessHistoryIDs);
//         b->GetEntry(0);
//         edm::EventProcessHistoryID target(aux_.id(), edm::ProcessHistoryID());
//         processHistoryID = std::lower_bound(eventProcessHistoryIDs_.begin(), eventProcessHistoryIDs_.end(), target)->processHistoryID_;
//       }
//     }

  }
  return historyMap_[processHistoryID];
}
bool LuminosityBlock::isValid ( void  ) const

Definition at line 191 of file LuminosityBlock.cc.

References branchMap_, and size().

Referenced by operator bool().

{
  Long_t luminosityBlockIndex = branchMap_->getLuminosityBlockEntry();
  return luminosityBlockIndex!=-1 and luminosityBlockIndex < size();
}
edm::LuminosityBlockAuxiliary const & LuminosityBlock::luminosityBlockAuxiliary ( ) const [virtual]

Implements edm::LuminosityBlockBase.

Definition at line 235 of file LuminosityBlock.cc.

References aux_, branchMap_, and updateAux().

Referenced by getRun().

{
   Long_t luminosityBlockIndex = branchMap_->getLuminosityBlockEntry();
   updateAux(luminosityBlockIndex);
   return aux_;
}
LuminosityBlock::operator bool ( ) const

Definition at line 198 of file LuminosityBlock.cc.

References isValid().

{
  return isValid();
}
const LuminosityBlock & LuminosityBlock::operator++ ( ) [virtual]

Implements fwlite::LuminosityBlockBase.

Definition at line 152 of file LuminosityBlock.cc.

References branchMap_, and size().

{
   Long_t luminosityBlockIndex = branchMap_->getLuminosityBlockEntry();
   if(luminosityBlockIndex < size())
   {
      branchMap_->updateLuminosityBlock(++luminosityBlockIndex);
   }
   return *this;
}
const LuminosityBlock& fwlite::LuminosityBlock::operator= ( const LuminosityBlock ) [private]
Long64_t LuminosityBlock::size ( void  ) const

Definition at line 185 of file LuminosityBlock.cc.

References branchMap_.

Referenced by atEnd(), isValid(), and operator++().

{
  return branchMap_->getLuminosityBlockTree()->GetEntries();
}
void LuminosityBlock::throwProductNotFoundException ( const std::type_info &  iType,
const char *  iModule,
const char *  iProduct,
const char *  iProcess 
) [static]

Definition at line 330 of file LuminosityBlock.cc.

References edm::TypeID::className(), Exception, and edm::errors::ProductNotFound.

{
    edm::TypeID type(iType);
  throw edm::Exception(edm::errors::ProductNotFound)<<"A branch was found for \n  type ='"<<type.className()<<"'\n  module='"<<iModule
    <<"'\n  productInstance='"<<((0!=iProduct)?iProduct:"")<<"'\n  process='"<<((0!=iProcess)?iProcess:"")<<"'\n"
    "but no data is available for this LuminosityBlock";
}
bool LuminosityBlock::to ( edm::RunNumber_t  run,
edm::LuminosityBlockNumber_t  lumi 
)

Go to event by Run & LuminosityBlock number.

Definition at line 164 of file LuminosityBlock.cc.

References branchMap_, entryFinder_, fwlite::EntryFinder::fillIndex(), fwlite::EntryFinder::findLumi(), and fwlite::EntryFinder::invalidEntry.

{
   entryFinder_.fillIndex(*branchMap_);
   EntryFinder::EntryNumber_t entry = entryFinder_.findLumi(run, luminosityBlock);
   if (entry == EntryFinder::invalidEntry) {
      return false;
   }
   return branchMap_->updateLuminosityBlock(entry);
}
const LuminosityBlock & LuminosityBlock::toBegin ( ) [virtual]

Implements fwlite::LuminosityBlockBase.

Definition at line 175 of file LuminosityBlock.cc.

References branchMap_.

Referenced by main().

{
   branchMap_->updateLuminosityBlock(0);
   return *this;
}
void LuminosityBlock::updateAux ( Long_t  lumiIndex) const [private]

Definition at line 243 of file LuminosityBlock.cc.

References aux_, auxBranch_, edm::conversion(), and pOldAux_.

Referenced by history(), and luminosityBlockAuxiliary().

{
  if(auxBranch_->GetEntryNumber() != luminosityBlockIndex) {
    auxBranch_->GetEntry(luminosityBlockIndex);
    //handling dealing with old version
    if(0 != pOldAux_) {
      conversion(*pOldAux_,aux_);
    }
  }
}

Friends And Related Function Documentation

friend class internal::ProductGetter [friend]

Definition at line 110 of file LuminosityBlock.h.

friend class LumiHistoryGetter [friend]

Definition at line 111 of file LuminosityBlock.h.


Member Data Documentation

Definition at line 130 of file LuminosityBlock.h.

Referenced by history(), luminosityBlockAuxiliary(), and updateAux().

Definition at line 134 of file LuminosityBlock.h.

Referenced by LuminosityBlock(), and updateAux().

boost::shared_ptr<BranchMapReader> fwlite::LuminosityBlock::branchMap_ [mutable, private]

Definition at line 137 of file LuminosityBlock.h.

Referenced by getBranchNameFor(), getByLabel(), and getByProductID().

Definition at line 131 of file LuminosityBlock.h.

Referenced by to().

Definition at line 135 of file LuminosityBlock.h.

Referenced by history(), and LuminosityBlock().

Definition at line 128 of file LuminosityBlock.h.

Referenced by history().

std::vector<const char*> fwlite::LuminosityBlock::labels_ [mutable, private]

Definition at line 127 of file LuminosityBlock.h.

Referenced by ~LuminosityBlock().

Definition at line 132 of file LuminosityBlock.h.

Referenced by LuminosityBlock().

Definition at line 133 of file LuminosityBlock.h.

Referenced by updateAux(), and ~LuminosityBlock().

std::vector<std::string> fwlite::LuminosityBlock::procHistoryNames_ [mutable, private]

Definition at line 129 of file LuminosityBlock.h.

Referenced by history().

boost::shared_ptr<fwlite::Run> fwlite::LuminosityBlock::run_ [mutable, private]

Definition at line 124 of file LuminosityBlock.h.

Referenced by getRun().

boost::shared_ptr<RunFactory> fwlite::LuminosityBlock::runFactory_ [mutable, private]

Definition at line 138 of file LuminosityBlock.h.

Referenced by getRun(), and LuminosityBlock().