CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Friends
fwlite::ChainEvent Class Reference

#include <ChainEvent.h>

Inheritance diagram for fwlite::ChainEvent:
fwlite::EventBase edm::EventBase

Public Member Functions

virtual bool atEnd () const
 
 ChainEvent (std::vector< std::string > const &iFileNames)
 
Event const * event () const
 
virtual edm::EventAuxiliary const & eventAuxiliary () const
 
Long64_t eventIndex () const
 
virtual Long64_t fileIndex () const
 
void fillParameterSetRegistry () const
 
std::vector
< edm::BranchDescription >
const & 
getBranchDescriptions () const
 
virtual std::string const getBranchNameFor (std::type_info const &, char const *, char const *, char const *) const
 
virtual bool getByLabel (std::type_info const &, char const *, char const *, char const *, void *) const
 
virtual edm::WrapperBase const * getByProductID (edm::ProductID const &) const
 
fwlite::LuminosityBlock const & getLuminosityBlock ()
 
std::vector< std::string > const & getProcessHistory () const
 
fwlite::Run const & getRun ()
 
TFile * getTFile () const
 
edm::WrapperBase const * getThinnedProduct (edm::ProductID const &pid, unsigned int &key) const
 
void getThinnedProducts (edm::ProductID const &pid, std::vector< edm::WrapperBase const * > &foundContainers, std::vector< unsigned int > &keys) const
 
bool isValid () const
 
 operator bool () const
 
ChainEvent const & operator++ ()
 
virtual edm::ProcessHistory const & processHistory () const
 
void setGetter (std::shared_ptr< edm::EDProductGetter > getter)
 
Long64_t size () const
 
bool to (Long64_t iIndex)
 Go to the event at index iIndex. More...
 
bool to (const edm::EventID &id)
 Go to event with event id "id". More...
 
bool to (edm::RunNumber_t run, edm::EventNumber_t event)
 
bool to (edm::RunNumber_t run, edm::LuminosityBlockNumber_t lumi, edm::EventNumber_t event)
 
ChainEvent const & toBegin ()
 
virtual edm::TriggerNames const & triggerNames (edm::TriggerResults const &triggerResults) const
 
virtual edm::TriggerResultsByName triggerResultsByName (std::string const &process) const
 
virtual ~ChainEvent ()
 
- Public Member Functions inherited from fwlite::EventBase
 EventBase ()
 
virtual Long64_t secondaryFileIndex () const
 
virtual ~EventBase ()
 
- Public Member Functions inherited from edm::EventBase
int bunchCrossing () const
 
 EventBase ()
 
edm::EventAuxiliary::ExperimentType experimentType () const
 
template<typename T >
bool get (ProductID const &, Handle< T > &) const
 
template<typename T >
bool getByLabel (InputTag const &, Handle< T > &) const
 
template<>
bool getByLabel (edm::InputTag const &tag, Handle< FWGenericObject > &result) const
 Specialize the getByLabel method to work with a Handle<FWGenericObject> More...
 
edm::EventID id () const
 
bool isRealData () const
 
edm::LuminosityBlockNumber_t luminosityBlock () const
 
int orbitNumber () const
 
edm::Timestamp time () const
 

Static Public Member Functions

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

Private Member Functions

 ChainEvent (Event const &)
 
void findSizes ()
 
ChainEvent const & operator= (Event const &)
 
void switchToFile (Long64_t)
 

Private Attributes

std::vector< Long64_t > accumulatedSize_
 
std::shared_ptr< Eventevent_
 
Long64_t eventIndex_
 
std::shared_ptr< TFile > file_
 
std::vector< std::string > fileNames_
 
std::shared_ptr
< edm::EDProductGetter
getter_
 

Friends

class MultiChainEvent
 

Additional Inherited Members

- Static Protected Member Functions inherited from edm::EventBase
static TriggerNames const * triggerNames_ (edm::TriggerResults const &triggerResults)
 

Detailed Description

Definition at line 46 of file ChainEvent.h.

Constructor & Destructor Documentation

ChainEvent::ChainEvent ( std::vector< std::string > const &  iFileNames)

Definition at line 35 of file ChainEvent.cc.

References accumulatedSize_, edm::poolNames::eventTreeName(), edm::hlt::Exception, file_, fileNames_, nEvents, switchToFile(), and MainPageGenerator::tree.

35  :
36  fileNames_(),
37  file_(),
38  event_(),
39  eventIndex_(0),
41 {
42  Long64_t summedSize=0;
43  accumulatedSize_.reserve(iFileNames.size()+1);
44  fileNames_.reserve(iFileNames.size());
45 
46  for (std::vector<std::string>::const_iterator it= iFileNames.begin(), itEnd = iFileNames.end();
47  it!=itEnd;
48  ++it) {
49  TFile *tfilePtr = TFile::Open(it->c_str());
50  file_ = std::shared_ptr<TFile>(tfilePtr);
51  gROOT->GetListOfFiles()->Remove(tfilePtr);
52  TTree* tree = dynamic_cast<TTree*>(file_->Get(edm::poolNames::eventTreeName().c_str()));
53  if (0 == tree) {
54  throw cms::Exception("NotEdmFile")<<"The file "<<*it<<" has no 'Events' TTree and therefore is not an EDM ROOT file";
55  }
56  Long64_t nEvents = tree->GetEntries();
57  if (nEvents > 0) { // skip empty files
58  fileNames_.push_back(*it);
59  // accumulatedSize_ is the entry # at the beginning of this file
60  accumulatedSize_.push_back(summedSize);
61  summedSize += nEvents;
62  }
63  }
64  // total accumulated size (last enry + 1) at the end of last file
65  accumulatedSize_.push_back(summedSize);
66 
67  if (fileNames_.size() > 0)
68  switchToFile(0);
69 }
std::shared_ptr< TFile > file_
Definition: ChainEvent.h:141
void switchToFile(Long64_t)
Definition: ChainEvent.cc:212
Long64_t eventIndex_
Definition: ChainEvent.h:143
std::vector< Long64_t > accumulatedSize_
Definition: ChainEvent.h:144
std::shared_ptr< Event > event_
Definition: ChainEvent.h:142
std::string const & eventTreeName()
Definition: BranchType.cc:260
UInt_t nEvents
Definition: hcalCalib.cc:42
std::vector< std::string > fileNames_
Definition: ChainEvent.h:140
ChainEvent::~ChainEvent ( )
virtual

Definition at line 76 of file ChainEvent.cc.

77 {
78 }
fwlite::ChainEvent::ChainEvent ( Event const &  )
private

Member Function Documentation

bool ChainEvent::atEnd ( ) const
virtual

Implements fwlite::EventBase.

Definition at line 303 of file ChainEvent.cc.

References event_, eventIndex_, fileNames_, and size().

Referenced by fwlite::AnalyzerWrapper< T >::analyze(), and main().

304 {
305  if (!size()) return true;
306  if (eventIndex_ == static_cast<Long64_t>(fileNames_.size())-1) {
307  return event_->atEnd();
308  }
309  return false;
310 }
Long64_t size() const
Definition: ChainEvent.cc:313
Long64_t eventIndex_
Definition: ChainEvent.h:143
std::shared_ptr< Event > event_
Definition: ChainEvent.h:142
std::vector< std::string > fileNames_
Definition: ChainEvent.h:140
Event const* fwlite::ChainEvent::event ( ) const
inline

Definition at line 108 of file ChainEvent.h.

References event_.

Referenced by Types.EventID::cppID(), and to().

108 { return &*event_; }
std::shared_ptr< Event > event_
Definition: ChainEvent.h:142
edm::EventAuxiliary const & ChainEvent::eventAuxiliary ( ) const
virtual

Implements edm::EventBase.

Definition at line 252 of file ChainEvent.cc.

References event_.

253 {
254  return event_->eventAuxiliary();
255 }
std::shared_ptr< Event > event_
Definition: ChainEvent.h:142
Long64_t fwlite::ChainEvent::eventIndex ( ) const
inline

Definition at line 101 of file ChainEvent.h.

References eventIndex_.

101 { return eventIndex_; }
Long64_t eventIndex_
Definition: ChainEvent.h:143
virtual Long64_t fwlite::ChainEvent::fileIndex ( ) const
inlinevirtual

Reimplemented from fwlite::EventBase.

Definition at line 102 of file ChainEvent.h.

References eventIndex_.

Referenced by python.Events::fileIndicies().

102 { return eventIndex_; }
Long64_t eventIndex_
Definition: ChainEvent.h:143
void ChainEvent::fillParameterSetRegistry ( ) const

Definition at line 325 of file ChainEvent.cc.

References event_.

326 {
327  event_->fillParameterSetRegistry();
328 }
std::shared_ptr< Event > event_
Definition: ChainEvent.h:142
void fwlite::ChainEvent::findSizes ( )
private
std::vector< edm::BranchDescription > const & ChainEvent::getBranchDescriptions ( ) const

Definition at line 234 of file ChainEvent.cc.

References event_.

235 {
236  return event_->getBranchDescriptions();
237 }
std::shared_ptr< Event > event_
Definition: ChainEvent.h:142
std::string const ChainEvent::getBranchNameFor ( std::type_info const &  iType,
char const *  iModule,
char const *  iInstance,
char const *  iProcess 
) const
virtual

Implements fwlite::EventBase.

Definition at line 225 of file ChainEvent.cc.

References event_.

229 {
230  return event_->getBranchNameFor(iType,iModule,iInstance,iProcess);
231 }
std::shared_ptr< Event > event_
Definition: ChainEvent.h:142
bool ChainEvent::getByLabel ( std::type_info const &  iType,
char const *  iModule,
char const *  iInstance,
char const *  iProcess,
void *  iValue 
) const
virtual

Implements fwlite::EventBase.

Definition at line 268 of file ChainEvent.cc.

References event_.

273 {
274  return event_->getByLabel(iType, iModule, iInstance, iProcess, iValue);
275 }
std::shared_ptr< Event > event_
Definition: ChainEvent.h:142
edm::WrapperBase const * ChainEvent::getByProductID ( edm::ProductID const &  iID) const
virtual

Implements fwlite::EventBase.

Definition at line 277 of file ChainEvent.cc.

References event_.

278 {
279  return event_->getByProductID(iID);
280 }
std::shared_ptr< Event > event_
Definition: ChainEvent.h:142
fwlite::LuminosityBlock const & ChainEvent::getLuminosityBlock ( )

Definition at line 257 of file ChainEvent.cc.

References event_.

258 {
259  return event_->getLuminosityBlock();
260 }
std::shared_ptr< Event > event_
Definition: ChainEvent.h:142
std::vector< std::string > const & ChainEvent::getProcessHistory ( ) const

Definition at line 240 of file ChainEvent.cc.

References event_.

241 {
242  return event_->getProcessHistory();
243 }
std::shared_ptr< Event > event_
Definition: ChainEvent.h:142
fwlite::Run const & ChainEvent::getRun ( )

Definition at line 262 of file ChainEvent.cc.

References event_.

263 {
264  return event_->getRun();
265 }
std::shared_ptr< Event > event_
Definition: ChainEvent.h:142
TFile* fwlite::ChainEvent::getTFile ( ) const
inline

Definition at line 91 of file ChainEvent.h.

References event_.

91  {
92  return event_->getTFile();
93  }
std::shared_ptr< Event > event_
Definition: ChainEvent.h:142
edm::WrapperBase const * ChainEvent::getThinnedProduct ( edm::ProductID const &  pid,
unsigned int &  key 
) const

Definition at line 282 of file ChainEvent.cc.

References event_.

282  {
283  return event_->getThinnedProduct(pid, key);
284 }
std::shared_ptr< Event > event_
Definition: ChainEvent.h:142
tuple pid
Definition: sysUtil.py:22
void ChainEvent::getThinnedProducts ( edm::ProductID const &  pid,
std::vector< edm::WrapperBase const * > &  foundContainers,
std::vector< unsigned int > &  keys 
) const

Definition at line 286 of file ChainEvent.cc.

References event_.

288  {
289  event_->getThinnedProducts(pid, foundContainers, keys);
290 }
std::shared_ptr< Event > event_
Definition: ChainEvent.h:142
tuple pid
Definition: sysUtil.py:22
bool ChainEvent::isValid ( void  ) const

Definition at line 293 of file ChainEvent.cc.

References event_.

Referenced by core.AutoHandle.AutoHandle::ReallyLoad().

294 {
295  return event_->isValid();
296 }
std::shared_ptr< Event > event_
Definition: ChainEvent.h:142
ChainEvent::operator bool ( ) const

Definition at line 297 of file ChainEvent.cc.

References event_().

298 {
299  return *event_;
300 }
std::shared_ptr< Event > event_
Definition: ChainEvent.h:142
ChainEvent const & ChainEvent::operator++ ( )
virtual

Implements fwlite::EventBase.

Definition at line 97 of file ChainEvent.cc.

References event_, eventIndex_, fileNames_, and switchToFile().

98 {
99  if(eventIndex_ != static_cast<Long64_t>(fileNames_.size())-1)
100  {
101  ++(*event_);
102  if(event_->atEnd()) {
104  }
105  } else {
106  if(*event_) {
107  ++(*event_);
108  }
109  }
110  return *this;
111 }
void switchToFile(Long64_t)
Definition: ChainEvent.cc:212
Long64_t eventIndex_
Definition: ChainEvent.h:143
std::shared_ptr< Event > event_
Definition: ChainEvent.h:142
std::vector< std::string > fileNames_
Definition: ChainEvent.h:140
ChainEvent const& fwlite::ChainEvent::operator= ( Event const &  )
private
edm::ProcessHistory const & ChainEvent::processHistory ( ) const
virtual

Implements edm::EventBase.

Definition at line 246 of file ChainEvent.cc.

References event_.

247 {
248  return event_->processHistory();
249 }
std::shared_ptr< Event > event_
Definition: ChainEvent.h:142
void fwlite::ChainEvent::setGetter ( std::shared_ptr< edm::EDProductGetter getter)
inline

Definition at line 104 of file ChainEvent.h.

References event_.

104  {
105  event_->setGetter(getter);
106  }
std::shared_ptr< Event > event_
Definition: ChainEvent.h:142
Long64_t ChainEvent::size ( void  ) const

Definition at line 313 of file ChainEvent.cc.

References accumulatedSize_.

Referenced by atEnd(), and toBegin().

314 {
315  return accumulatedSize_.empty() ? 0 : accumulatedSize_.back();
316 }
std::vector< Long64_t > accumulatedSize_
Definition: ChainEvent.h:144
void ChainEvent::switchToFile ( Long64_t  iIndex)
private

Definition at line 212 of file ChainEvent.cc.

References event_, eventIndex_, file_, and fileNames_.

Referenced by ChainEvent(), operator++(), to(), and toBegin().

213 {
214  eventIndex_= iIndex;
215  TFile *tfilePtr = TFile::Open(fileNames_[iIndex].c_str());
216  file_ = std::shared_ptr<TFile>(tfilePtr);
217  gROOT->GetListOfFiles()->Remove(tfilePtr);
218  event_ = std::shared_ptr<Event>(new Event(file_.get()));
219 }
std::shared_ptr< TFile > file_
Definition: ChainEvent.h:141
Long64_t eventIndex_
Definition: ChainEvent.h:143
std::shared_ptr< Event > event_
Definition: ChainEvent.h:142
std::vector< std::string > fileNames_
Definition: ChainEvent.h:140
void ChainEvent::throwProductNotFoundException ( std::type_info const &  iType,
char const *  iModule,
char const *  iInstance,
char const *  iProcess 
)
static

Definition at line 339 of file ChainEvent.cc.

References fwlite::Event::throwProductNotFoundException().

Referenced by fwlite::MultiChainEvent::throwProductNotFoundException().

342  {
343  Event::throwProductNotFoundException(iType,iModule,iInstance,iProcess);
344 }
static void throwProductNotFoundException(std::type_info const &, char const *, char const *, char const *)
Definition: Event.cc:521
bool ChainEvent::to ( Long64_t  iIndex)

Go to the event at index iIndex.

Definition at line 115 of file ChainEvent.cc.

References accumulatedSize_, event_, eventIndex_, and switchToFile().

Referenced by to().

116 {
117  if (iIndex >= accumulatedSize_.back())
118  {
119  // if we're here, then iIndex was not valid
120  return false;
121  }
122 
123  Long64_t offsetIndex = eventIndex_;
124 
125  // we're going backwards, so start from the beginning
126  if (iIndex < accumulatedSize_[offsetIndex]) {
127  offsetIndex = 0;
128  }
129 
130  // is it past the end of this file?
131  while (iIndex >= accumulatedSize_[offsetIndex+1]) {
132  ++offsetIndex;
133  }
134 
135  if(offsetIndex != eventIndex_) {
136  switchToFile(eventIndex_ = offsetIndex);
137  }
138 
139  // adjust to entry # in this file
140  return event_->to(iIndex-accumulatedSize_[offsetIndex]);
141 }
void switchToFile(Long64_t)
Definition: ChainEvent.cc:212
Long64_t eventIndex_
Definition: ChainEvent.h:143
std::vector< Long64_t > accumulatedSize_
Definition: ChainEvent.h:144
std::shared_ptr< Event > event_
Definition: ChainEvent.h:142
bool ChainEvent::to ( const edm::EventID id)

Go to event with event id "id".

Definition at line 146 of file ChainEvent.cc.

References event(), edm::EventBase::luminosityBlock(), DTTTrigCorrFirst::run, and to().

147 {
148  return to(id.run(), id.luminosityBlock(), id.event());
149 }
edm::LuminosityBlockNumber_t luminosityBlock() const
Definition: EventBase.h:63
bool to(Long64_t iIndex)
Go to the event at index iIndex.
Definition: ChainEvent.cc:115
Event const * event() const
Definition: ChainEvent.h:108
bool ChainEvent::to ( edm::RunNumber_t  run,
edm::EventNumber_t  event 
)

Definition at line 192 of file ChainEvent.cc.

References to().

193 {
194  return to(run, 0U, event);
195 }
bool to(Long64_t iIndex)
Go to the event at index iIndex.
Definition: ChainEvent.cc:115
Event const * event() const
Definition: ChainEvent.h:108
bool ChainEvent::to ( edm::RunNumber_t  run,
edm::LuminosityBlockNumber_t  lumi,
edm::EventNumber_t  event 
)

If lumi is non-zero, go to event with given run, lumi, and event number If lumi is zero, go to event with given run and event number

Definition at line 154 of file ChainEvent.cc.

References event_, eventIndex_, fileNames_, compare_using_db::ifile, and switchToFile().

155 {
156 
157  // First try this file
158  if (event_->to(run, lumi, event))
159  {
160  // found it, return
161  return true;
162  }
163  else
164  {
165  // Did not find it, try the other files sequentially.
166  // Someday I can make this smarter. For now... we get something working.
167  Long64_t thisFile = eventIndex_;
168  std::vector<std::string>::const_iterator filesBegin = fileNames_.begin(),
169  filesEnd = fileNames_.end(), ifile = filesBegin;
170  for (; ifile != filesEnd; ++ifile)
171  {
172  // skip the "first" file that we tried
173  if (ifile - filesBegin != thisFile)
174  {
175  // switch to the next file
176  switchToFile(ifile - filesBegin);
177  // check that tree for the desired event
178  if (event_->to(run, lumi, event))
179  {
180  // found it, return
181  return true;
182  }
183  }// end ignore "first" file that we tried
184  }// end loop over files
185 
186  // did not find the event with id "id".
187  return false;
188  }// end if we did not find event id in "first" file
189 }
void switchToFile(Long64_t)
Definition: ChainEvent.cc:212
tuple lumi
Definition: fjr2json.py:35
Long64_t eventIndex_
Definition: ChainEvent.h:143
std::shared_ptr< Event > event_
Definition: ChainEvent.h:142
Event const * event() const
Definition: ChainEvent.h:108
std::vector< std::string > fileNames_
Definition: ChainEvent.h:140
ChainEvent const & ChainEvent::toBegin ( )
virtual

Go to the very first Event

Implements fwlite::EventBase.

Definition at line 200 of file ChainEvent.cc.

References event_, eventIndex_, size(), and switchToFile().

Referenced by fwlite::AnalyzerWrapper< T >::analyze(), and main().

201 {
202  if (!size()) return *this;
203  if (eventIndex_ != 0)
204  {
205  switchToFile(0);
206  }
207  event_->toBegin();
208  return *this;
209 }
Long64_t size() const
Definition: ChainEvent.cc:313
void switchToFile(Long64_t)
Definition: ChainEvent.cc:212
Long64_t eventIndex_
Definition: ChainEvent.h:143
std::shared_ptr< Event > event_
Definition: ChainEvent.h:142
edm::TriggerNames const & ChainEvent::triggerNames ( edm::TriggerResults const &  triggerResults) const
virtual

Implements edm::EventBase.

Definition at line 319 of file ChainEvent.cc.

References event_.

320 {
321  return event_->triggerNames(triggerResults);
322 }
static std::string const triggerResults
Definition: EdmProvDump.cc:40
std::shared_ptr< Event > event_
Definition: ChainEvent.h:142
edm::TriggerResultsByName ChainEvent::triggerResultsByName ( std::string const &  process) const
virtual

Implements edm::EventBase.

Definition at line 331 of file ChainEvent.cc.

References event_.

331  {
332  return event_->triggerResultsByName(process);
333 }
std::shared_ptr< Event > event_
Definition: ChainEvent.h:142
tuple process
Definition: LaserDQM_cfg.py:3

Friends And Related Function Documentation

friend class MultiChainEvent
friend

Definition at line 131 of file ChainEvent.h.

Member Data Documentation

std::vector<Long64_t> fwlite::ChainEvent::accumulatedSize_
private

Definition at line 144 of file ChainEvent.h.

Referenced by ChainEvent(), size(), and to().

std::shared_ptr<Event> fwlite::ChainEvent::event_
private
Long64_t fwlite::ChainEvent::eventIndex_
private

Definition at line 143 of file ChainEvent.h.

Referenced by atEnd(), eventIndex(), fileIndex(), operator++(), switchToFile(), to(), and toBegin().

std::shared_ptr<TFile> fwlite::ChainEvent::file_
private

Definition at line 141 of file ChainEvent.h.

Referenced by ChainEvent(), and switchToFile().

std::vector<std::string> fwlite::ChainEvent::fileNames_
private

Definition at line 140 of file ChainEvent.h.

Referenced by atEnd(), ChainEvent(), operator++(), switchToFile(), and to().

std::shared_ptr<edm::EDProductGetter> fwlite::ChainEvent::getter_
private

Definition at line 145 of file ChainEvent.h.