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 (const std::vector< std::string > &iFileNames)
 
Event const * event () const
 
virtual edm::EventAuxiliary const & eventAuxiliary () const
 
Long64_t eventIndex () const
 
virtual Long64_t fileIndex () const
 
void fillParameterSetRegistry () 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::LuminosityBlock const & getLuminosityBlock ()
 
const std::vector< std::string > & getProcessHistory () const
 
fwlite::Run const & getRun ()
 
TFile * getTFile () const
 
bool isValid () const
 
 operator bool () const
 
const ChainEventoperator++ ()
 
edm::ProcessHistory const & processHistory () const
 
void setGetter (boost::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)
 
const ChainEventtoBegin ()
 
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<class T >
bool getByLabel (const InputTag &, 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 (const std::type_info &, const char *, const char *, const char *)
 

Private Member Functions

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

Private Attributes

std::vector< Long64_t > accumulatedSize_
 
boost::shared_ptr< Eventevent_
 
Long64_t eventIndex_
 
boost::shared_ptr< TFile > file_
 
std::vector< std::string > fileNames_
 
boost::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 ( const std::vector< std::string > &  iFileNames)

Definition at line 35 of file ChainEvent.cc.

References accumulatedSize_, edm::poolNames::eventTreeName(), edm::hlt::Exception, file_, fileNames_, nEvents, switchToFile(), and diffTreeTool::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_ = boost::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 }
void switchToFile(Long64_t)
Definition: ChainEvent.cc:211
Long64_t eventIndex_
Definition: ChainEvent.h:131
boost::shared_ptr< Event > event_
Definition: ChainEvent.h:130
std::vector< Long64_t > accumulatedSize_
Definition: ChainEvent.h:132
std::string const & eventTreeName()
Definition: BranchType.cc:244
UInt_t nEvents
Definition: hcalCalib.cc:43
boost::shared_ptr< TFile > file_
Definition: ChainEvent.h:129
std::vector< std::string > fileNames_
Definition: ChainEvent.h:128
ChainEvent::~ChainEvent ( )
virtual

Definition at line 76 of file ChainEvent.cc.

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

Member Function Documentation

bool ChainEvent::atEnd ( ) const
virtual

Implements fwlite::EventBase.

Definition at line 293 of file ChainEvent.cc.

References event_, eventIndex_, and fileNames_.

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

294 {
295  if (eventIndex_ == static_cast<Long64_t>(fileNames_.size())-1) {
296  return event_->atEnd();
297  }
298  return false;
299 }
Long64_t eventIndex_
Definition: ChainEvent.h:131
boost::shared_ptr< Event > event_
Definition: ChainEvent.h:130
std::vector< std::string > fileNames_
Definition: ChainEvent.h:128
Event const* fwlite::ChainEvent::event ( ) const
inline

Definition at line 102 of file ChainEvent.h.

References event_.

Referenced by to().

102 { return &*event_; }
boost::shared_ptr< Event > event_
Definition: ChainEvent.h:130
edm::EventAuxiliary const & ChainEvent::eventAuxiliary ( ) const
virtual

Implements edm::EventBase.

Definition at line 251 of file ChainEvent.cc.

References event_.

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

Definition at line 95 of file ChainEvent.h.

References eventIndex_.

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

Reimplemented from fwlite::EventBase.

Definition at line 96 of file ChainEvent.h.

References eventIndex_.

Referenced by python.Events::fileIndicies().

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

Definition at line 314 of file ChainEvent.cc.

References event_.

315 {
316  event_->fillParameterSetRegistry();
317 }
boost::shared_ptr< Event > event_
Definition: ChainEvent.h:130
void fwlite::ChainEvent::findSizes ( )
private
const std::vector< edm::BranchDescription > & ChainEvent::getBranchDescriptions ( ) const

Definition at line 233 of file ChainEvent.cc.

References event_.

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

Implements fwlite::EventBase.

Definition at line 224 of file ChainEvent.cc.

References event_.

228 {
229  return event_->getBranchNameFor(iType,iModule,iInstance,iProcess);
230 }
boost::shared_ptr< Event > event_
Definition: ChainEvent.h:130
bool ChainEvent::getByLabel ( const std::type_info &  iType,
const char *  iModule,
const char *  iInstance,
const char *  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 }
boost::shared_ptr< Event > event_
Definition: ChainEvent.h:130
edm::EDProduct const * ChainEvent::getByProductID ( edm::ProductID const &  iID) const

Definition at line 277 of file ChainEvent.cc.

References event_.

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

Definition at line 256 of file ChainEvent.cc.

References event_.

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

Definition at line 239 of file ChainEvent.cc.

References event_.

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

Definition at line 261 of file ChainEvent.cc.

References event_.

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

Definition at line 91 of file ChainEvent.h.

References event_.

Referenced by PFRootEventManager::reset().

91  {
92  return event_->getTFile();
93  }
boost::shared_ptr< Event > event_
Definition: ChainEvent.h:130
bool ChainEvent::isValid ( void  ) const

Definition at line 283 of file ChainEvent.cc.

References event_.

Referenced by PFRootEventManager::connect(), and PFRootEventManager::reset().

284 {
285  return event_->isValid();
286 }
boost::shared_ptr< Event > event_
Definition: ChainEvent.h:130
ChainEvent::operator bool ( ) const

Definition at line 287 of file ChainEvent.cc.

288 {
289  return *event_;
290 }
boost::shared_ptr< Event > event_
Definition: ChainEvent.h:130
const ChainEvent & 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:211
Long64_t eventIndex_
Definition: ChainEvent.h:131
boost::shared_ptr< Event > event_
Definition: ChainEvent.h:130
std::vector< std::string > fileNames_
Definition: ChainEvent.h:128
const ChainEvent& fwlite::ChainEvent::operator= ( const Event )
private
edm::ProcessHistory const & ChainEvent::processHistory ( ) const
virtual

Implements edm::EventBase.

Definition at line 245 of file ChainEvent.cc.

References event_.

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

Definition at line 98 of file ChainEvent.h.

References event_.

98  {
99  event_->setGetter( getter );
100  }
boost::shared_ptr< Event > event_
Definition: ChainEvent.h:130
Long64_t ChainEvent::size ( void  ) const

Definition at line 302 of file ChainEvent.cc.

References accumulatedSize_.

Referenced by PFRootEventManager::connect(), DisplayManager::DisplayManager(), and PFRootEventManager::initializeEventInformation().

303 {
304  return accumulatedSize_.back();
305 }
std::vector< Long64_t > accumulatedSize_
Definition: ChainEvent.h:132
void ChainEvent::switchToFile ( Long64_t  iIndex)
private

Definition at line 211 of file ChainEvent.cc.

References event_, eventIndex_, file_, and fileNames_.

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

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

Definition at line 328 of file ChainEvent.cc.

References fwlite::Event::throwProductNotFoundException().

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

331  {
332  Event::throwProductNotFoundException(iType,iModule,iInstance,iProcess);
333 }
static void throwProductNotFoundException(const std::type_info &, const char *, const char *, const char *)
Definition: Event.cc:473
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 PFRootEventManager::initializeEventInformation(), PFRootEventManager::processEntry(), and 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:211
Long64_t eventIndex_
Definition: ChainEvent.h:131
boost::shared_ptr< Event > event_
Definition: ChainEvent.h:130
std::vector< Long64_t > accumulatedSize_
Definition: ChainEvent.h:132
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:59
bool to(Long64_t iIndex)
Go to the event at index iIndex.
Definition: ChainEvent.cc:115
Event const * event() const
Definition: ChainEvent.h:102
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:102
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_, indexGen::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:211
tuple lumi
Definition: fjr2json.py:41
Long64_t eventIndex_
Definition: ChainEvent.h:131
boost::shared_ptr< Event > event_
Definition: ChainEvent.h:130
tuple ifile
Definition: indexGen.py:77
Event const * event() const
Definition: ChainEvent.h:102
std::vector< std::string > fileNames_
Definition: ChainEvent.h:128
const ChainEvent & ChainEvent::toBegin ( )
virtual

Go to the very first Event

Implements fwlite::EventBase.

Definition at line 200 of file ChainEvent.cc.

References event_, eventIndex_, and switchToFile().

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

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

Implements edm::EventBase.

Definition at line 308 of file ChainEvent.cc.

References event_.

309 {
310  return event_->triggerNames(triggerResults);
311 }
boost::shared_ptr< Event > event_
Definition: ChainEvent.h:130
edm::TriggerResultsByName ChainEvent::triggerResultsByName ( std::string const &  process) const
virtual

Implements edm::EventBase.

Definition at line 320 of file ChainEvent.cc.

References event_.

320  {
321  return event_->triggerResultsByName(process);
322 }
boost::shared_ptr< Event > event_
Definition: ChainEvent.h:130
tuple process
Definition: align_tpl.py:3

Friends And Related Function Documentation

friend class MultiChainEvent
friend

Definition at line 119 of file ChainEvent.h.

Member Data Documentation

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

Definition at line 132 of file ChainEvent.h.

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

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

Definition at line 131 of file ChainEvent.h.

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

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

Definition at line 129 of file ChainEvent.h.

Referenced by ChainEvent(), and switchToFile().

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

Definition at line 128 of file ChainEvent.h.

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

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

Definition at line 133 of file ChainEvent.h.