Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:11:31

0001 // -*- C++ -*-
0002 #ifndef Fireworks_Core_FWFileEntry_h
0003 #define Fireworks_Core_FWFileEntry_h
0004 //
0005 // Package:     Core
0006 // Class  :     FWFileEntry
0007 //
0008 
0009 // system include files
0010 #include <string>
0011 #include <sigc++/sigc++.h>
0012 
0013 #include "TTree.h"
0014 
0015 // user include files
0016 // MT -- to get auxBranch
0017 #include "DataFormats/FWLite/interface/Event.h"
0018 #include "Fireworks/Core/interface/FWEventSelector.h"
0019 #include "Fireworks/Core/interface/FWTEventList.h"
0020 #include "Fireworks/Core/interface/FWConfigurable.h"
0021 
0022 // forward declarations
0023 class FWEventItem;
0024 class FWTEventList;
0025 class FWTTreeCache;
0026 class CSGAction;
0027 class CmsShowMain;
0028 class TFile;
0029 class TGWindow;
0030 class FWEventItemsManager;
0031 
0032 namespace edm {
0033   class EventID;
0034 }
0035 
0036 class FWFileEntry {
0037 public:
0038   struct Filter {
0039     FWTEventList* m_eventList;
0040     FWEventSelector* m_selector;  // owned by navigator
0041     bool m_needsUpdate;
0042 
0043     Filter(FWEventSelector* s) : m_eventList(nullptr), m_selector(s), m_needsUpdate(true) {}
0044     ~Filter() { delete m_eventList; }
0045 
0046     bool hasSelectedEvents() { return m_eventList && m_eventList->GetN(); }
0047   };
0048 
0049   FWFileEntry(const std::string& name, bool checkVersion, bool checkGlobalTag);
0050   virtual ~FWFileEntry();
0051 
0052   TFile* file() { return m_file; }
0053   fwlite::Event* event() { return m_event; }
0054   TTree* tree() { return m_eventTree; }
0055   FWTEventList* globalSelection() { return m_globalEventList; }
0056   FWTTreeCache* fwTreeCache();
0057 
0058   std::list<Filter*>& filters() { return m_filterEntries; }
0059 
0060   const std::string& getGlobalTag() const { return m_globalTag; }
0061 
0062   void openFile(bool, bool);
0063   void closeFile();
0064 
0065   bool isEventSelected(int event);
0066 
0067   bool hasSelectedEvents();
0068 
0069   bool hasActiveFilters();
0070 
0071   int firstSelectedEvent();
0072   int lastSelectedEvent();
0073 
0074   int lastEvent() { return m_eventTree->GetEntries() - 1; }
0075 
0076   int nextSelectedEvent(int event);
0077   int previousSelectedEvent(int event);
0078 
0079   void needUpdate() { m_needUpdate = true; }
0080   void updateFilters(const FWEventItemsManager* eiMng, bool isOR);
0081 
0082   // CallIns from FWEventItemsManager for tree-cache add/remove branch
0083   void NewEventItemCallIn(const FWEventItem* it);
0084   void RemovingEventItemCallIn(const FWEventItem* it);
0085 
0086   FWFileEntry(const FWFileEntry&) = delete;                   // stop default
0087   const FWFileEntry& operator=(const FWFileEntry&) = delete;  // stop default
0088 
0089 private:
0090   void runFilter(Filter* fe, const FWEventItemsManager* eiMng);
0091   bool filterEventsWithCustomParser(Filter* filter);
0092 
0093   std::string getBranchName(const FWEventItem* it) const;
0094 
0095   std::string m_name;
0096   TFile* m_file;
0097   TTree* m_eventTree;
0098   fwlite::Event* m_event;
0099 
0100   bool m_needUpdate;  // To be set in navigator::filterChanged/Added, newFile
0101   std::string m_globalTag;
0102 
0103   std::list<Filter*> m_filterEntries;
0104   FWTEventList* m_globalEventList;
0105 };
0106 #endif