CMS 3D CMS Logo

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

#include <FWFileEntry.h>

Classes

struct  Filter
 

Public Member Functions

void closeFile ()
 
fwlite::Eventevent ()
 
TFile * file ()
 
std::list< Filter * > & filters ()
 
int firstSelectedEvent ()
 
 FWFileEntry (const std::string &name, bool checkVersion)
 
FWTTreeCachefwTreeCache ()
 
FWTEventListglobalSelection ()
 
bool hasActiveFilters ()
 
bool hasSelectedEvents ()
 
bool isEventSelected (int event)
 
int lastEvent ()
 
int lastSelectedEvent ()
 
void needUpdate ()
 
void NewEventItemCallIn (const FWEventItem *it)
 
int nextSelectedEvent (int event)
 
void openFile (bool)
 
int previousSelectedEvent (int event)
 
void RemovingEventItemCallIn (const FWEventItem *it)
 
TTree * tree ()
 
void updateFilters (const FWEventItemsManager *eiMng, bool isOR)
 
virtual ~FWFileEntry ()
 

Private Member Functions

bool filterEventsWithCustomParser (Filter *filter)
 
 FWFileEntry (const FWFileEntry &)=delete
 
std::string getBranchName (const FWEventItem *it) const
 
const FWFileEntryoperator= (const FWFileEntry &)=delete
 
void runFilter (Filter *fe, const FWEventItemsManager *eiMng)
 

Private Attributes

fwlite::Eventm_event
 
TTree * m_eventTree
 
TFile * m_file
 
std::list< Filter * > m_filterEntries
 
FWTEventListm_globalEventList
 
std::string m_name
 
bool m_needUpdate
 

Detailed Description

Definition at line 36 of file FWFileEntry.h.

Constructor & Destructor Documentation

FWFileEntry::FWFileEntry ( const std::string &  name,
bool  checkVersion 
)

Definition at line 30 of file FWFileEntry.cc.

References openFile().

31  : m_name(name),
32  m_file(nullptr),
33  m_eventTree(nullptr),
34  m_event(nullptr),
35  m_needUpdate(true),
36  m_globalEventList(nullptr) {
37  openFile(checkVersion);
38 }
void openFile(bool)
Definition: FWFileEntry.cc:47
TFile * m_file
Definition: FWFileEntry.h:94
bool m_needUpdate
Definition: FWFileEntry.h:98
TTree * m_eventTree
Definition: FWFileEntry.h:95
fwlite::Event * m_event
Definition: FWFileEntry.h:96
FWTEventList * m_globalEventList
Definition: FWFileEntry.h:101
std::string m_name
Definition: FWFileEntry.h:93
FWFileEntry::~FWFileEntry ( )
virtual

Definition at line 40 of file FWFileEntry.cc.

References mps_fire::i, m_filterEntries, and m_globalEventList.

40  {
41  for (std::list<Filter*>::iterator i = m_filterEntries.begin(); i != m_filterEntries.end(); ++i)
42  delete (*i)->m_eventList;
43 
44  delete m_globalEventList;
45 }
std::list< Filter * > m_filterEntries
Definition: FWFileEntry.h:100
FWTEventList * m_globalEventList
Definition: FWFileEntry.h:101
FWFileEntry::FWFileEntry ( const FWFileEntry )
privatedelete

Member Function Documentation

void FWFileEntry::closeFile ( )

Definition at line 143 of file FWFileEntry.cc.

References m_event, m_eventTree, and m_file.

Referenced by CmsShowNavigator::appendFile(), CmsShowNavigator::openFile(), and Vispa.Main.Application.Application::tabCloseRequest().

143  {
144  if (m_file) {
145  printf("Reading %lld bytes in %d transactions.\n", m_file->GetBytesRead(), m_file->GetReadCalls());
146  delete m_file->GetCacheRead(m_eventTree);
147 
148  m_file->Close();
149  delete m_file;
150  }
151  if (m_event)
152  delete m_event;
153 }
TFile * m_file
Definition: FWFileEntry.h:94
TTree * m_eventTree
Definition: FWFileEntry.h:95
fwlite::Event * m_event
Definition: FWFileEntry.h:96
fwlite::Event* FWFileEntry::event ( )
inline

Definition at line 53 of file FWFileEntry.h.

Referenced by Types.EventID::cppID().

53 { return m_event; }
fwlite::Event * m_event
Definition: FWFileEntry.h:96
TFile* FWFileEntry::file ( )
inline

Definition at line 52 of file FWFileEntry.h.

52 { return m_file; }
TFile * m_file
Definition: FWFileEntry.h:94
bool FWFileEntry::filterEventsWithCustomParser ( Filter filter)
private

Definition at line 385 of file FWFileEntry.cc.

References edm::HLTGlobalStatus::accept(), fwlite::Event::atEnd(), FWTEventList::Enter(), ALCARECOTkAlBeamHalo_cff::filter, filters(), RemoveAddSevLevel::flag, fwLog, fwlite::Handle< T >::getByLabel(), mps_fire::i, edm::EventBase::id(), iEvent, dqmiolumiharvest::j, fwlog::kDebug, fwlog::kWarning, list(), m_event, FWFileEntry::Filter::m_eventList, FWEventSelector::m_expression, m_file, FWFileEntry::Filter::m_needsUpdate, FWFileEntry::Filter::m_selector, FWEventSelector::m_triggerProcess, TriggerAnalyzer::passed, corrVsCorr::selection, edm::TriggerNames::size(), AlCaHLTBitMon_QueryRunRegistry::string, fwlite::Event::to(), fwlite::Event::toBegin(), edm::TriggerNames::triggerIndex(), L1TEGammaOffline_cfi::triggerNames, and fwlite::Event::triggerNames().

Referenced by runFilter().

385  {
386  std::string selection(filterEntry->m_selector->m_expression);
387 
388  boost::regex re_spaces("\\s+");
389  selection = boost::regex_replace(selection, re_spaces, "");
390  if (selection.find("&&") != std::string::npos && selection.find("||") != std::string::npos) {
391  // Combination of && and || operators not supported.
392  return false;
393  }
394 
395  fwlite::Handle<edm::TriggerResults> hTriggerResults;
396  edm::TriggerNames const* triggerNames(nullptr);
397  try {
398  hTriggerResults.getByLabel(*m_event, "TriggerResults", "", filterEntry->m_selector->m_triggerProcess.c_str());
399  triggerNames = &(m_event->triggerNames(*hTriggerResults));
400  } catch (...) {
401  fwLog(fwlog::kWarning) << " failed to get trigger results with process name "
402  << filterEntry->m_selector->m_triggerProcess << std::endl;
403  return false;
404  }
405 
406  // std::cout << "Number of trigger names: " << triggerNames->size() << std::endl;
407  // for (unsigned int i=0; i<triggerNames->size(); ++i)
408  // std::cout << " " << triggerNames->triggerName(i);
409  //std::cout << std::endl;
410 
411  bool junction_mode = true; // AND
412  if (selection.find("||") != std::string::npos)
413  junction_mode = false; // OR
414 
415  boost::regex re("\\&\\&|\\|\\|");
416 
417  boost::sregex_token_iterator i(selection.begin(), selection.end(), re, -1);
418  boost::sregex_token_iterator j;
419 
420  // filters and how they enter in the logical expression
421  std::vector<std::pair<unsigned int, bool> > filters;
422 
423  while (i != j) {
424  std::string filter = *i++;
425  bool flag = true;
426  if (filter[0] == '!') {
427  flag = false;
428  filter.erase(filter.begin());
429  }
430  unsigned int index = triggerNames->triggerIndex(filter);
431  if (index == triggerNames->size()) {
432  // Trigger name not found.
433  return false;
434  }
435  filters.push_back(std::make_pair(index, flag));
436  }
437  if (filters.empty())
438  return false;
439 
440  if (filterEntry->m_eventList)
441  filterEntry->m_eventList->Reset();
442  else
443  filterEntry->m_eventList = new FWTEventList();
444  FWTEventList* list = filterEntry->m_eventList;
445 
446  // loop over events
447  edm::EventID currentEvent = m_event->id();
448  unsigned int iEvent = 0;
449 
450  for (m_event->toBegin(); !m_event->atEnd(); ++(*m_event)) {
451  hTriggerResults.getByLabel(*m_event, "TriggerResults", "", filterEntry->m_selector->m_triggerProcess.c_str());
452  std::vector<std::pair<unsigned int, bool> >::const_iterator filter = filters.begin();
453  bool passed = hTriggerResults->accept(filter->first) == filter->second;
454  while (++filter != filters.end()) {
455  if (junction_mode)
456  passed &= hTriggerResults->accept(filter->first) == filter->second;
457  else
458  passed |= hTriggerResults->accept(filter->first) == filter->second;
459  }
460  if (passed)
461  list->Enter(iEvent);
462  ++iEvent;
463  }
464  m_event->to(currentEvent);
465 
466  filterEntry->m_needsUpdate = false;
467 
468  fwLog(fwlog::kDebug) << "FWFile::filterEventsWithCustomParser file [" << m_file->GetName() << "], filter ["
469  << filterEntry->m_selector->m_expression << "], selected [" << list->GetN() << "]" << std::endl;
470 
471  return true;
472 }
Event const & toBegin() override
Go to the very first Event.
Definition: Event.cc:217
bool accept() const
Has at least one path accepted the event?
selection
main part
Definition: corrVsCorr.py:100
void getByLabel(const P &iP, const char *iModuleLabel, const char *iProductInstanceLabel=0, const char *iProcessLabel=0)
Definition: Handle.h:100
bool atEnd() const override
Definition: Event.cc:254
int iEvent
Definition: GenABIO.cc:224
bool to(Long64_t iIndex)
Go to the event at index iIndex.
Definition: Event.cc:195
edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const override
Definition: Event.cc:381
std::list< Filter * > & filters()
Definition: FWFileEntry.h:58
TFile * m_file
Definition: FWFileEntry.h:94
fwlite::Event * m_event
Definition: FWFileEntry.h:96
#define fwLog(_level_)
Definition: fwLog.h:45
edm::EventID id() const
Definition: EventBase.h:59
void Enter(Long64_t entry) override
Definition: FWTEventList.cc:57
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger list("!*","!HLTx*"if it matches 2 triggers or more) will accept the event if all the matching triggers are FAIL.It will reject the event if any of the triggers are PASS or EXCEPTION(this matches the behavior of"!*"before the partial wildcard feature was incorporated).Triggers which are in the READY state are completely ignored.(READY should never be returned since the trigger paths have been run
std::list<Filter*>& FWFileEntry::filters ( )
inline

Definition at line 58 of file FWFileEntry.h.

Referenced by CmsShowNavigator::appendFile(), filterEventsWithCustomParser(), and CmsShowNavigator::openFile().

58 { return m_filterEntries; }
std::list< Filter * > m_filterEntries
Definition: FWFileEntry.h:100
int FWFileEntry::firstSelectedEvent ( )

Definition at line 164 of file FWFileEntry.cc.

References m_globalEventList.

164  {
165  if (m_globalEventList->GetN() > 0) {
166  return m_globalEventList->GetEntry(0);
167  } else {
168  return -1;
169  }
170 }
FWTEventList * m_globalEventList
Definition: FWFileEntry.h:101
FWTTreeCache * FWFileEntry::fwTreeCache ( )

Definition at line 476 of file FWFileEntry.cc.

References m_eventTree, and m_file.

Referenced by NewEventItemCallIn(), and RemovingEventItemCallIn().

476  {
477  FWTTreeCache* tc = dynamic_cast<FWTTreeCache*>(m_file->GetCacheRead(m_eventTree));
478  assert(tc != nullptr && "FWFileEntry::treeCache can not access TTreeCache");
479  return tc;
480 }
TFile * m_file
Definition: FWFileEntry.h:94
TTree * m_eventTree
Definition: FWFileEntry.h:95
std::string FWFileEntry::getBranchName ( const FWEventItem it) const
private

Definition at line 482 of file FWFileEntry.cc.

References edm::TypeWithDict::byName(), fwlite::Event::getBranchNameFor(), m_event, FWEventItem::moduleLabel(), edm::TypeWithDict::name(), FWEventItem::processName(), FWEventItem::productInstanceLabel(), FWEventItem::type(), edm::TypeWithDict::typeInfo(), and edm::wrappedClassName().

Referenced by NewEventItemCallIn(), and RemovingEventItemCallIn().

482  {
483  const edm::TypeWithDict elementType(const_cast<TClass*>(it->type()));
484  const edm::TypeWithDict wrapperType = edm::TypeWithDict::byName(edm::wrappedClassName(elementType.name()));
485  return m_event->getBranchNameFor(
486  wrapperType.typeInfo(), it->moduleLabel().c_str(), it->productInstanceLabel().c_str(), it->processName().c_str());
487 }
const std::string & processName() const
Definition: FWEventItem.cc:444
std::string const getBranchNameFor(std::type_info const &, char const *iModuleLabel, char const *iProductInstanceLabel, char const *iProcessName) const override
Return the branch name in the TFile which contains the data.
Definition: Event.cc:268
static TypeWithDict byName(std::string const &name)
Definition: TypeWithDict.cc:74
const std::string & productInstanceLabel() const
Definition: FWEventItem.cc:442
const TClass * type() const
Definition: FWEventItem.cc:437
std::type_info const & typeInfo() const
fwlite::Event * m_event
Definition: FWFileEntry.h:96
std::string wrappedClassName(std::string const &iFullName)
const std::string & moduleLabel() const
Definition: FWEventItem.cc:441
FWTEventList* FWFileEntry::globalSelection ( )
inline

Definition at line 55 of file FWFileEntry.h.

55 { return m_globalEventList; }
FWTEventList * m_globalEventList
Definition: FWFileEntry.h:101
bool FWFileEntry::hasActiveFilters ( )

Definition at line 210 of file FWFileEntry.cc.

References m_filterEntries.

210  {
211  for (std::list<Filter*>::iterator it = m_filterEntries.begin(); it != m_filterEntries.end(); ++it) {
212  if ((*it)->m_selector->m_enabled)
213  return true;
214  }
215 
216  return false;
217 }
std::list< Filter * > m_filterEntries
Definition: FWFileEntry.h:100
bool FWFileEntry::hasSelectedEvents ( )

Definition at line 162 of file FWFileEntry.cc.

References m_globalEventList.

162 { return m_globalEventList->GetN() > 0; }
FWTEventList * m_globalEventList
Definition: FWFileEntry.h:101
bool FWFileEntry::isEventSelected ( int  event)

Definition at line 157 of file FWFileEntry.cc.

References training_settings::idx, and m_globalEventList.

157  {
158  int idx = m_globalEventList->GetIndex(tree_entry);
159  return idx >= 0;
160 }
FWTEventList * m_globalEventList
Definition: FWFileEntry.h:101
int FWFileEntry::lastEvent ( )
inline

Definition at line 72 of file FWFileEntry.h.

72 { return m_eventTree->GetEntries() - 1; }
TTree * m_eventTree
Definition: FWFileEntry.h:95
int FWFileEntry::lastSelectedEvent ( )

Definition at line 172 of file FWFileEntry.cc.

References m_globalEventList.

172  {
173  if (m_globalEventList->GetN() > 0)
174  return m_globalEventList->GetEntry(m_globalEventList->GetN() - 1);
175  else
176  return -1;
177 }
FWTEventList * m_globalEventList
Definition: FWFileEntry.h:101
void FWFileEntry::needUpdate ( )
inline

Definition at line 77 of file FWFileEntry.h.

References ALCARECOTkAlBeamHalo_cff::filter, and AlCaHLTBitMon_QueryRunRegistry::string.

77 { m_needUpdate = true; }
bool m_needUpdate
Definition: FWFileEntry.h:98
void FWFileEntry::NewEventItemCallIn ( const FWEventItem it)

Definition at line 489 of file FWFileEntry.cc.

References fwTreeCache(), getBranchName(), and FWTTreeCache::IsLogging().

Referenced by openFile().

489  {
490  auto tc = fwTreeCache();
491 
493  printf("FWFileEntry:NewEventItemCallIn FWEventItem %s, learning=%d\n", getBranchName(it).c_str(), tc->IsLearning());
494 
495  tc->AddBranchTopLevel(getBranchName(it).c_str());
496 }
std::string getBranchName(const FWEventItem *it) const
Definition: FWFileEntry.cc:482
static bool IsLogging()
Definition: FWTTreeCache.cc:23
FWTTreeCache * fwTreeCache()
Definition: FWFileEntry.cc:476
int FWFileEntry::nextSelectedEvent ( int  event)

Definition at line 179 of file FWFileEntry.cc.

References training_settings::idx, list(), m_globalEventList, and heppy_batch::val.

179  {
180  // Find next selected event after the current one.
181  // This returns the index in the selected event list.
182  // If none exists -1 is returned.
183 
184  const Long64_t* list = m_globalEventList->GetList();
185  Long64_t val = tree_entry;
186  Long64_t idx = TMath::BinarySearch(m_globalEventList->GetN(), list, val);
187  ++idx;
188  if (idx >= m_globalEventList->GetN() || idx < 0)
189  return -1;
190  return list[idx];
191 }
FWTEventList * m_globalEventList
Definition: FWFileEntry.h:101
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger list("!*","!HLTx*"if it matches 2 triggers or more) will accept the event if all the matching triggers are FAIL.It will reject the event if any of the triggers are PASS or EXCEPTION(this matches the behavior of"!*"before the partial wildcard feature was incorporated).Triggers which are in the READY state are completely ignored.(READY should never be returned since the trigger paths have been run
void FWFileEntry::openFile ( bool  checkVersion)

Definition at line 47 of file FWFileEntry.cc.

References fireworks::acceptDataFormatsVersion(), b, createTree::dd, fireworks::Context::eventItemsManager(), fwLog, utils::gErrorIgnoreLevel, FWGUIManager::getContext(), fireworks::getDecomposedVersion(), FWTTreeCache::GetDefaultCacheSize(), FWGUIManager::getGUIManager(), FWTTreeCache::IsLogging(), FWTTreeCache::IsPrefetching(), fwlog::kInfo, m_event, m_eventTree, m_file, m_name, mps_check::msg, NewEventItemCallIn(), FWEventItemsManager::newItem_, edm::ProcessConfiguration::processName(), edm::ProcessConfiguration::releaseVersion(), RemovingEventItemCallIn(), fwlite::Event::size(), fireworks::supportedDataFormatsVersion(), findQualityFiles::v, and x.

Referenced by Vispa.Main.Application.Application::_readCommandLineAttributes(), Vispa.Main.Application.Application::doubleClickOnFile(), FWFileEntry(), Vispa.Main.Application.Application::openFileDialog(), and Vispa.Main.Application.Application::openRecentFileSlot().

47  {
48  gErrorIgnoreLevel = 3000; // suppress warnings about missing dictionaries
49 
50  TFile* newFile = TFile::Open(m_name.c_str());
51 
52  if (newFile == nullptr || newFile->IsZombie() || !newFile->Get("Events")) {
53  // std::cout << "Invalid file. Ignored." << std::endl;
54  // return false;
55  throw std::runtime_error("Invalid file. Ignored.");
56  }
57 
58  m_file = newFile;
59 
60  gErrorIgnoreLevel = -1;
61 
62  // check CMSSW relese version for compatibility
63  if (checkVersion) {
64  typedef std::vector<edm::ProcessHistory> provList;
65 
66  TTree* metaData = dynamic_cast<TTree*>(m_file->Get("MetaData"));
67  TBranch* b = metaData->GetBranch("ProcessHistory");
68  provList* x = nullptr;
69  b->SetAddress(&x);
70  b->GetEntry(0);
71 
72  const edm::ProcessConfiguration* dd = nullptr;
73  int latestVersion = 0;
74  int currentVersionArr[] = {0, 0, 0};
75  for (auto const& processHistory : *x) {
76  for (auto const& processConfiguration : processHistory) {
77  // std::cout << processConfiguration.releaseVersion() << " " << processConfiguration.processName() << std::endl;
78  TString dcv = processConfiguration.releaseVersion();
79  fireworks::getDecomposedVersion(dcv, currentVersionArr);
80  int nvv = currentVersionArr[0] * 100 + currentVersionArr[1] * 10 + currentVersionArr[2];
81  if (nvv > latestVersion) {
82  latestVersion = nvv;
83  dd = &processConfiguration;
84  }
85  }
86  }
87 
88  if (latestVersion) {
89  fwLog(fwlog::kInfo) << "Checking process history. " << m_name.c_str() << " latest process \"" << dd->processName()
90  << "\", version " << dd->releaseVersion() << std::endl;
91 
92  b->SetAddress(nullptr);
93  TString v = dd->releaseVersion();
96  TString msg = Form(
97  "incompatible data: Process version does not mactch major data formats version. File produced with %s. "
98  "Data formats version \"CMSSW_%d_%d_%d\".\n",
99  dd->releaseVersion().c_str(),
100  di[0],
101  di[1],
102  di[2]);
103  msg += "Use --no-version-check option if you still want to view the file.\n";
104  throw std::runtime_error(msg.Data());
105  }
106  } else {
107  TString msg = "No process history available\n";
108  msg += "Use --no-version-check option if you still want to view the file.\n";
109  throw std::runtime_error(msg.Data());
110  }
111  }
112 
113  m_eventTree = dynamic_cast<TTree*>(m_file->Get("Events"));
114 
115  if (m_eventTree == nullptr) {
116  throw std::runtime_error("Cannot find TTree 'Events' in the data file");
117  }
118 
119  // Initialize caching, this helps also in the case of local file.
121  printf("FWFileEntry::openFile enabling FWTTreeCache for file class '%s'.", m_file->ClassName());
122 
123  auto tc = new FWTTreeCache(m_eventTree, FWTTreeCache::GetDefaultCacheSize());
124  m_file->SetCacheRead(tc, m_eventTree);
125  tc->SetEnablePrefetching(FWTTreeCache::IsPrefetching());
126  tc->SetLearnEntries(20);
127  tc->SetLearnPrefill(TTreeCache::kAllBranches);
128  tc->StartLearningPhase();
129 
130  // load event, set DataGetterHelper callback for branch access
131  m_event = new fwlite::Event(m_file, false, [tc](TBranch const& b) { tc->BranchAccessCallIn(&b); });
132 
133  // Connect to collection add/remove signals
135  eiMng->newItem_.connect(boost::bind(&FWFileEntry::NewEventItemCallIn, this, _1));
136  eiMng->removingItem_.connect(boost::bind(&FWFileEntry::RemovingEventItemCallIn, this, _1));
137  // no need to connect to goingToClearItems_ ... individual removes are emitted.
138 
139  if (m_event->size() == 0)
140  throw std::runtime_error("fwlite::Event size == 0");
141 }
fireworks::Context * getContext()
Definition: FWGUIManager.h:152
const FWEventItemsManager * eventItemsManager() const
Definition: Context.h:56
void RemovingEventItemCallIn(const FWEventItem *it)
Definition: FWFileEntry.cc:498
void getDecomposedVersion(const TString &s, int *out)
Definition: fwPaths.cc:26
Long64_t size() const
Returns number of events in the file.
Definition: Event.cc:245
std::string const & processName() const
int * supportedDataFormatsVersion()
Definition: fwPaths.cc:35
static bool IsLogging()
Definition: FWTTreeCache.cc:23
static bool IsPrefetching()
Definition: FWTTreeCache.cc:27
sigc::signal< void, FWEventItem * > newItem_
static int GetDefaultCacheSize()
Definition: FWTTreeCache.cc:30
TFile * m_file
Definition: FWFileEntry.h:94
TTree * m_eventTree
Definition: FWFileEntry.h:95
fwlite::Event * m_event
Definition: FWFileEntry.h:96
static FWGUIManager * getGUIManager()
#define fwLog(_level_)
Definition: fwLog.h:45
ReleaseVersion const & releaseVersion() const
double b
Definition: hdecay.h:118
tuple msg
Definition: mps_check.py:285
gErrorIgnoreLevel
Definition: utils.py:28
bool acceptDataFormatsVersion(TString &n)
Definition: fwPaths.cc:60
std::string m_name
Definition: FWFileEntry.h:93
void NewEventItemCallIn(const FWEventItem *it)
Definition: FWFileEntry.cc:489
const FWFileEntry& FWFileEntry::operator= ( const FWFileEntry )
privatedelete
int FWFileEntry::previousSelectedEvent ( int  event)

Definition at line 193 of file FWFileEntry.cc.

References training_settings::idx, list(), m_globalEventList, and heppy_batch::val.

193  {
194  // Find first selected event before current one.
195  // This returns the index in the selected event list.
196  // If none exists -1 is returned.
197 
198  const Long64_t* list = m_globalEventList->GetList();
199  Long64_t val = tree_entry;
200  Long64_t idx = TMath::BinarySearch(m_globalEventList->GetN(), list, val);
201  if (list[idx] == val)
202  --idx;
203  if (idx >= 0)
204  return list[idx];
205  else
206  return -1;
207 }
FWTEventList * m_globalEventList
Definition: FWFileEntry.h:101
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger list("!*","!HLTx*"if it matches 2 triggers or more) will accept the event if all the matching triggers are FAIL.It will reject the event if any of the triggers are PASS or EXCEPTION(this matches the behavior of"!*"before the partial wildcard feature was incorporated).Triggers which are in the READY state are completely ignored.(READY should never be returned since the trigger paths have been run
void FWFileEntry::RemovingEventItemCallIn ( const FWEventItem it)

Definition at line 498 of file FWFileEntry.cc.

References fwTreeCache(), getBranchName(), and FWTTreeCache::IsLogging().

Referenced by openFile().

498  {
499  auto tc = fwTreeCache();
500 
502  printf("FWFileEntry:RemovingEventItemCallIn FWEventItem %s, learning=%d\n",
503  getBranchName(it).c_str(),
504  tc->IsLearning());
505 
506  tc->DropBranchTopLevel(getBranchName(it).c_str());
507 }
std::string getBranchName(const FWEventItem *it) const
Definition: FWFileEntry.cc:482
static bool IsLogging()
Definition: FWTTreeCache.cc:23
FWTTreeCache * fwTreeCache()
Definition: FWFileEntry.cc:476
void FWFileEntry::runFilter ( Filter fe,
const FWEventItemsManager eiMng 
)
private

Definition at line 256 of file FWFileEntry.cc.

References b, FWEventItemsManager::begin(), edm::TypeWithDict::byName(), end, FWEventItemsManager::end(), filterEventsWithCustomParser(), newFWLiteAna::found, fwLog, fwlite::Event::getBranchNameFor(), FWEventItem::getPrimaryData(), FWEventItem::hasEvent(), mps_fire::i, FWTTreeCache::IsPrefetching(), B2GTnPMonitor_cfi::item, fwlog::kDebug, fwlog::kError, fwlog::kInfo, fwlog::kWarning, m_event, FWFileEntry::Filter::m_eventList, m_eventTree, FWEventSelector::m_expression, m_file, FWFileEntry::Filter::m_needsUpdate, FWFileEntry::Filter::m_selector, FWEventSelector::m_triggerProcess, FWEventItem::moduleLabel(), Skims_PA_cff::name, edm::TypeWithDict::name(), FWEventItem::processName(), FWEventItem::productInstanceLabel(), mps_fire::result, FWEventItem::setEvent(), AlCaHLTBitMon_QueryRunRegistry::string, FWEventItem::type(), edm::TypeWithDict::typeInfo(), and edm::wrappedClassName().

Referenced by updateFilters().

256  {
257  if (!filter->m_selector->m_triggerProcess.empty()) {
259  return;
260  }
261 
262  // parse selection for known Fireworks expressions
263  std::string interpretedSelection = filter->m_selector->m_expression;
264  // list of branch names to be added to tree-cache
265  std::vector<std::string> branch_names;
266 
267  for (FWEventItemsManager::const_iterator i = eiMng->begin(), end = eiMng->end(); i != end; ++i) {
268  FWEventItem* item = *i;
269  if (item == nullptr)
270  continue;
271  // FIXME: hack to get full branch name filled
272  if (!item->hasEvent()) {
273  item->setEvent(m_event);
274  item->getPrimaryData();
275  item->setEvent(nullptr);
276  }
277 
278  boost::regex re(std::string("\\$") + (*i)->name());
279 
280  if (boost::regex_search(interpretedSelection, re)) {
281  const edm::TypeWithDict elementType(const_cast<TClass*>(item->type()));
282  const edm::TypeWithDict wrapperType = edm::TypeWithDict::byName(edm::wrappedClassName(elementType.name()));
283  std::string fullBranchName = m_event->getBranchNameFor(wrapperType.typeInfo(),
284  item->moduleLabel().c_str(),
285  item->productInstanceLabel().c_str(),
286  item->processName().c_str());
287 
288  interpretedSelection = boost::regex_replace(interpretedSelection, re, fullBranchName + ".obj");
289 
290  branch_names.push_back(fullBranchName);
291 
292  // printf("selection after applying s/%s/%s/: %s\n",
293  // (std::string("\\$") + (*i)->name()).c_str(),
294  // ((*i)->m_fullBranchName + ".obj").c_str(),
295  // interpretedSelection.c_str());
296  }
297  }
298 
299  std::size_t found = interpretedSelection.find('$');
300  if (found != std::string::npos) {
301  fwLog(fwlog::kError) << "FWFileEntry::RunFilter invalid expression " << interpretedSelection << std::endl;
302  filter->m_needsUpdate = false;
303  return;
304  }
305 
306  m_file->cd();
307  m_eventTree->SetEventList(nullptr);
308 
309  auto prevCache = m_file->GetCacheRead(m_eventTree);
310 
311  auto interCache = new TTreeCache(m_eventTree, 10 * 1024 * 1024);
312  // Do not disconnect the cache, it will be reattached after filtering.
313  m_file->SetCacheRead(interCache, m_eventTree, TFile::kDoNotDisconnect);
314  interCache->SetEnablePrefetching(FWTTreeCache::IsPrefetching());
315  for (auto& b : branch_names)
316  interCache->AddBranch(b.c_str(), true);
317  interCache->StopLearningPhase();
318 
319  // Since ROOT will leave any TBranches used in the filtering at the last event,
320  // we need to be able to reset them to what fwlite::Event expects them to be.
321  // We do this by holding onto the old buffers and create temporary new ones.
322 
323  std::map<TBranch*, void*> prevAddrs;
324 
325  {
326  TObjArray* branches = m_eventTree->GetListOfBranches();
327  std::unique_ptr<TIterator> pIt(branches->MakeIterator());
328  while (TObject* branchObj = pIt->Next()) {
329  TBranch* b = dynamic_cast<TBranch*>(branchObj);
330  if (nullptr != b) {
331  const char* name = b->GetName();
332  unsigned int length = strlen(name);
333  if (length > 1 && name[length - 1] != '.') {
334  // This is not a data branch so we should ignore it.
335  continue;
336  }
337  if (nullptr != b->GetAddress()) {
338  if (prevAddrs.find(b) != prevAddrs.end()) {
339  fwLog(fwlog::kWarning) << "FWFileEntry::runFilter branch is already in the map!\n";
340  }
341  prevAddrs.insert(std::make_pair(b, b->GetAddress()));
342 
343  // std::cout <<"Zeroing branch: "<< b->GetName() <<" "<< (void*) b->GetAddress() <<std::endl;
344  b->SetAddress(nullptr);
345  }
346  }
347  }
348  }
349 
350  if (filter->m_eventList)
351  filter->m_eventList->Reset();
352  else
353  filter->m_eventList = new FWTEventList;
354 
355  fwLog(fwlog::kInfo) << "FWFileEntry::runFilter Running filter " << interpretedSelection << "' "
356  << "for file '" << m_file->GetName() << "'.\n";
357 
358  TEveSelectorToEventList stoelist(filter->m_eventList, interpretedSelection.c_str());
359  Long64_t result = m_eventTree->Process(&stoelist);
360 
361  if (result < 0)
362  fwLog(fwlog::kWarning) << "FWFileEntry::runFilter in file [" << m_file->GetName() << "] filter ["
363  << filter->m_selector->m_expression << "] is invalid." << std::endl;
364  else
365  fwLog(fwlog::kDebug) << "FWFileEntry::runFilter is file [" << m_file->GetName() << "], filter ["
366  << filter->m_selector->m_expression << "] has [" << filter->m_eventList->GetN()
367  << "] events selected" << std::endl;
368 
369  // Set back the old branch buffers.
370  {
371  for (auto i : prevAddrs) {
372  // std::cout <<"Resetting branch: "<< i.first->GetName() <<" "<< i.second <<std::endl;
373  i.first->SetAddress(i.second);
374  }
375  }
376 
377  m_file->SetCacheRead(prevCache, m_eventTree);
378  delete interCache;
379 
380  filter->m_needsUpdate = false;
381 }
void setEvent(const edm::EventBase *iEvent)
Definition: FWEventItem.cc:111
void getPrimaryData() const
Definition: FWEventItem.cc:396
const std::string & processName() const
Definition: FWEventItem.cc:444
std::string const getBranchNameFor(std::type_info const &, char const *iModuleLabel, char const *iProductInstanceLabel, char const *iProcessName) const override
Return the branch name in the TFile which contains the data.
Definition: Event.cc:268
static TypeWithDict byName(std::string const &name)
Definition: TypeWithDict.cc:74
const std::string & productInstanceLabel() const
Definition: FWEventItem.cc:442
const TClass * type() const
Definition: FWEventItem.cc:437
static bool IsPrefetching()
Definition: FWTTreeCache.cc:27
bool filterEventsWithCustomParser(Filter *filter)
Definition: FWFileEntry.cc:385
std::type_info const & typeInfo() const
#define end
Definition: vmac.h:39
TFile * m_file
Definition: FWFileEntry.h:94
TTree * m_eventTree
Definition: FWFileEntry.h:95
fwlite::Event * m_event
Definition: FWFileEntry.h:96
const_iterator begin() const
NOTE: iterator is allowed to return a null object for items that have been removed.
#define fwLog(_level_)
Definition: fwLog.h:45
std::string wrappedClassName(std::string const &iFullName)
bool hasEvent() const
Definition: FWEventItem.h:128
double b
Definition: hdecay.h:118
std::vector< FWEventItem * >::const_iterator const_iterator
const std::string & moduleLabel() const
Definition: FWEventItem.cc:441
const_iterator end() const
TTree* FWFileEntry::tree ( )
inline
void FWFileEntry::updateFilters ( const FWEventItemsManager eiMng,
bool  isOR 
)

Definition at line 220 of file FWFileEntry.cc.

References FWTEventList::Add(), fwLog, fwlog::kDebug, m_eventTree, m_file, m_filterEntries, m_globalEventList, m_needUpdate, and runFilter().

220  {
221  if (!m_needUpdate)
222  return;
223 
224  if (m_globalEventList)
225  m_globalEventList->Reset();
226  else
228 
229  for (std::list<Filter*>::iterator it = m_filterEntries.begin(); it != m_filterEntries.end(); ++it) {
230  if ((*it)->m_selector->m_enabled && (*it)->m_needsUpdate) {
231  runFilter(*it, eiMng);
232  }
233  // Need to re-check if enabled after filtering as it can be set to false
234  // in runFilter().
235  if ((*it)->m_selector->m_enabled) {
236  if ((*it)->hasSelectedEvents()) {
237  if (globalOR || m_globalEventList->GetN() == 0) {
238  m_globalEventList->Add((*it)->m_eventList);
239  } else {
240  m_globalEventList->Intersect((*it)->m_eventList);
241  }
242  } else if (!globalOR) {
243  m_globalEventList->Reset();
244  break;
245  }
246  }
247  }
248 
249  fwLog(fwlog::kDebug) << "FWFileEntry::updateFilters in [" << m_file->GetName() << "] global selection ["
250  << m_globalEventList->GetN() << "/" << m_eventTree->GetEntries() << "]" << std::endl;
251 
252  m_needUpdate = false;
253 }
std::list< Filter * > m_filterEntries
Definition: FWFileEntry.h:100
TFile * m_file
Definition: FWFileEntry.h:94
bool m_needUpdate
Definition: FWFileEntry.h:98
TTree * m_eventTree
Definition: FWFileEntry.h:95
#define fwLog(_level_)
Definition: fwLog.h:45
void runFilter(Filter *fe, const FWEventItemsManager *eiMng)
Definition: FWFileEntry.cc:256
FWTEventList * m_globalEventList
Definition: FWFileEntry.h:101
void Add(const TEventList *list) override
Definition: FWTEventList.cc:7

Member Data Documentation

fwlite::Event* FWFileEntry::m_event
private
TTree* FWFileEntry::m_eventTree
private

Definition at line 95 of file FWFileEntry.h.

Referenced by closeFile(), fwTreeCache(), openFile(), runFilter(), and updateFilters().

TFile* FWFileEntry::m_file
private
std::list<Filter*> FWFileEntry::m_filterEntries
private

Definition at line 100 of file FWFileEntry.h.

Referenced by hasActiveFilters(), updateFilters(), and ~FWFileEntry().

FWTEventList* FWFileEntry::m_globalEventList
private
std::string FWFileEntry::m_name
private

Definition at line 93 of file FWFileEntry.h.

Referenced by openFile().

bool FWFileEntry::m_needUpdate
private

Definition at line 98 of file FWFileEntry.h.

Referenced by updateFilters().