FWFileEntry

Filter

Macros

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
// -*- C++ -*-
#ifndef Fireworks_Core_FWFileEntry_h
#define Fireworks_Core_FWFileEntry_h
//
// Package:     Core
// Class  :     FWFileEntry
//

// system include files
#include <string>
#include <sigc++/sigc++.h>

#include "TTree.h"

// user include files
// MT -- to get auxBranch
#include "DataFormats/FWLite/interface/Event.h"
#include "Fireworks/Core/interface/FWEventSelector.h"
#include "Fireworks/Core/interface/FWTEventList.h"
#include "Fireworks/Core/interface/FWConfigurable.h"

// forward declarations
class FWEventItem;
class FWTEventList;
class FWTTreeCache;
class CSGAction;
class CmsShowMain;
class TFile;
class TGWindow;
class FWEventItemsManager;

namespace edm {
  class EventID;
}

class FWFileEntry {
public:
  struct Filter {
    FWTEventList* m_eventList;
    FWEventSelector* m_selector;  // owned by navigator
    bool m_needsUpdate;

    Filter(FWEventSelector* s) : m_eventList(nullptr), m_selector(s), m_needsUpdate(true) {}
    ~Filter() { delete m_eventList; }

    bool hasSelectedEvents() { return m_eventList && m_eventList->GetN(); }
  };

  FWFileEntry(const std::string& name, bool checkVersion, bool checkGlobalTag);
  virtual ~FWFileEntry();

  TFile* file() { return m_file; }
  fwlite::Event* event() { return m_event; }
  TTree* tree() { return m_eventTree; }
  FWTEventList* globalSelection() { return m_globalEventList; }
  FWTTreeCache* fwTreeCache();

  std::list<Filter*>& filters() { return m_filterEntries; }

  const std::string& getGlobalTag() const { return m_globalTag; }

  void openFile(bool, bool);
  void closeFile();

  bool isEventSelected(int event);

  bool hasSelectedEvents();

  bool hasActiveFilters();

  int firstSelectedEvent();
  int lastSelectedEvent();

  int lastEvent() { return m_eventTree->GetEntries() - 1; }

  int nextSelectedEvent(int event);
  int previousSelectedEvent(int event);

  void needUpdate() { m_needUpdate = true; }
  void updateFilters(const FWEventItemsManager* eiMng, bool isOR);

  // CallIns from FWEventItemsManager for tree-cache add/remove branch
  void NewEventItemCallIn(const FWEventItem* it);
  void RemovingEventItemCallIn(const FWEventItem* it);

  FWFileEntry(const FWFileEntry&) = delete;                   // stop default
  const FWFileEntry& operator=(const FWFileEntry&) = delete;  // stop default

private:
  void runFilter(Filter* fe, const FWEventItemsManager* eiMng);
  bool filterEventsWithCustomParser(Filter* filter);

  std::string getBranchName(const FWEventItem* it) const;

  std::string m_name;
  TFile* m_file;
  TTree* m_eventTree;
  fwlite::Event* m_event;

  bool m_needUpdate;  // To be set in navigator::filterChanged/Added, newFile
  std::string m_globalTag;

  std::list<Filter*> m_filterEntries;
  FWTEventList* m_globalEventList;
};
#endif