File indexing completed on 2024-04-06 12:11:39
0001 #ifndef Fireworks_Core_FWGeometryTableManager_h
0002 #define Fireworks_Core_FWGeometryTableManager_h
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021 #include "Fireworks/Core/interface/FWGeometryTableManagerBase.h"
0022 #include <string>
0023 #include <unordered_map>
0024
0025 class FWGeometryTableViewBase;
0026 class FWGeometryTableView;
0027
0028 #include "TGeoVolume.h"
0029
0030 class FWGeometryTableManager : public FWGeometryTableManagerBase {
0031 public:
0032 enum ECol { kNameColumn, kColorColumn, kTranspColumn, kVisSelfColumn, kVisChildColumn, kMaterialColumn, kNumColumn };
0033
0034 enum GeometryBits { kMatches = BIT(5), kChildMatches = BIT(6), kFilterCached = BIT(7) };
0035
0036 struct Match {
0037 bool m_matches;
0038 bool m_childMatches;
0039 Match() : m_matches(false), m_childMatches(false) {}
0040
0041 bool accepted() const { return m_matches || m_childMatches; }
0042 };
0043
0044 typedef std::unordered_map<TGeoVolume*, Match> Volumes_t;
0045 typedef Volumes_t::iterator Volumes_i;
0046
0047 FWGeometryTableManager(FWGeometryTableView*);
0048 ~FWGeometryTableManager() override;
0049
0050 void recalculateVisibility() override;
0051 void recalculateVisibilityNodeRec(int);
0052 void recalculateVisibilityVolumeRec(int);
0053
0054 void loadGeometry(TGeoNode* iGeoTopNode, TObjArray* iVolumes);
0055 void checkChildMatches(TGeoVolume* v, std::vector<TGeoVolume*>&);
0056 void importChildren(int parent_idx);
0057 void checkHierarchy();
0058
0059
0060 void updateFilter(int);
0061 void printMaterials();
0062
0063 void setDaughtersSelfVisibility(int i, bool v) override;
0064 void setVisibility(NodeInfo& nodeInfo, bool) override;
0065 void setVisibilityChld(NodeInfo& nodeInfo, bool) override;
0066
0067 bool getVisibilityChld(const NodeInfo& nodeInfo) const override;
0068 bool getVisibility(const NodeInfo& nodeInfo) const override;
0069
0070 void assertNodeFilterCache(NodeInfo& data);
0071
0072 int numberOfColumns() const override { return kNumColumn; }
0073 FWTableCellRendererBase* cellRenderer(int iSortedRowNumber, int iCol) const override;
0074
0075 void checkRegionOfInterest(double* center, double radius, long algo);
0076 void resetRegionOfInterest();
0077
0078 protected:
0079 bool nodeIsParent(const NodeInfo&) const override;
0080
0081 const char* cellName(const NodeInfo& data) const override;
0082
0083 public:
0084 FWGeometryTableManager(const FWGeometryTableManager&) = delete;
0085 const FWGeometryTableManager& operator=(const FWGeometryTableManager&) = delete;
0086
0087 private:
0088 FWGeometryTableView* m_browser;
0089
0090 mutable Volumes_t m_volumes;
0091
0092 bool m_filterOff;
0093 };
0094
0095 #endif