CMS 3D CMS Logo

DDExpandedView.h
Go to the documentation of this file.
1 #ifndef DDExpandedView_h
2 #define DDExpandedView_h
3 
4 #include <cstddef>
5 #include <iosfwd>
6 #include <map>
7 #include <string>
8 #include <utility>
9 #include <vector>
10 
20 
21 class DDFilteredView;
22 class DDLogicalPart;
23 struct DDPosData;
24 
35 
42  friend class DDFilteredView;
43 
44 public:
46 
48  typedef std::vector<int> nav_type;
49  typedef std::pair<int const *, size_t> NavRange;
50 
53 
54  virtual ~DDExpandedView();
55 
57  const DDLogicalPart &logicalPart() const;
58 
60  const std::string &name() const;
61 
63  const DDTranslation &translation() const;
64 
66  const DDRotationMatrix &rotation() const;
67 
69  const DDGeoHistory &geoHistory() const;
70 
72  bool goTo(const nav_type &);
73  bool goTo(NavRange);
74  bool goTo(int const *newpos, size_t sz);
75 
77  nav_type navPos() const;
78 
80  nav_type copyNumbers() const;
81 
83  std::vector<const DDsvalues_type *> specifics() const;
84  void specificsV(std::vector<const DDsvalues_type *> &vc) const;
85 
87  void mergedSpecificsV(DDsvalues_type &res) const;
88 
90  std::vector<double> const &vector(std::string_view iKey) const { return cpv_->vector(iKey); }
91 
93  int copyno() const;
94 
95  // navigation
96 
98  const DDGeoHistory &scope() const;
99 
101  bool setScope(const DDGeoHistory &hist, int depth = 0);
102 
104  void clearScope();
105 
107  int depth() const;
108 
110  bool next();
111 
113  bool nextB();
114 
116  bool nextSibling();
117 
119  bool firstChild();
120 
122  bool parent();
123 
125  //bool hasChildren() const;
126 
128  void reset();
129 
130  /* was protected, now public; was named goTo, now goToHistory*/
131  bool goToHistory(const DDGeoHistory &sc);
132 
133 protected:
134  bool descend(const DDGeoHistory &sc);
135 
136 protected:
143  unsigned int depth_;
145  std::vector<nav_type> nextBStack_;
147 };
148 
149 std::string printNavType(int const *n, size_t sz);
150 inline std::ostream &operator<<(std::ostream &os, const DDExpandedView::nav_type &n) {
151  os << printNavType(&n.front(), n.size());
152  return os;
153 }
154 inline std::ostream &operator<<(std::ostream &os, const DDExpandedView::NavRange &n) {
155  os << printNavType(n.first, n.second);
156  return os;
157 }
158 #endif
bool next()
set current node to the next node in the expanded tree
nav_type copyNumbers() const
return the stack of copy numbers
bool parent()
set the current node to the parent node ...
Relative position of a child-volume inside a parent-volume.
Definition: DDPosData.h:13
const DDTranslation & translation() const
The absolute translation of the current node.
bool descend(const DDGeoHistory &sc)
const DDLogicalPart & logicalPart() const
The logical-part of the current node in the expanded-view.
std::vector< double > const & vector(std::string_view iKey) const
returns an empty container if not found
nav_type navPos() const
return the stack of sibling numbers which indicates the current position in the DDExpandedView ...
virtual ~DDExpandedView()
DDGeoHistory history_
std::vector of DDExpandedNode
unsigned int depth_
depth of the scope, 0==unrestricted depth
Compact representation of the geometrical detector hierarchy.
Definition: DDCompactView.h:81
std::pair< int const *, size_t > NavRange
Definition: Electron.h:6
WalkerType w2_
void specificsV(std::vector< const DDsvalues_type *> &vc) const
WalkerType * walker_
the tricky walker
std::vector< std::pair< unsigned int, DDValue > > DDsvalues_type
Definition: DDsvalues.h:12
DDsvalues_type mergedSpecifics() const
ROOT::Math::Rotation3D DDRotationMatrix
A DDRotationMatrix is currently implemented with a ROOT Rotation3D.
const DDTranslation trans_
DDExpandedView(const DDCompactView &)
Constructs an expanded-view based on the compact-view.
std::string printNavType(int const *n, size_t sz)
std::ostream & operator<<(std::ostream &os, const DDExpandedView::nav_type &n)
const DDCompactView * cpv_
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
Definition: DDLogicalPart.h:93
bool setScope(const DDGeoHistory &hist, int depth=0)
sets the scope of the expanded view
void clearScope()
clears the scope; the full tree is available, depth=0
const DDGeoHistory & scope() const
The scope of the expanded-view.
std::vector< nav_type > nextBStack_
int depth() const
depth of the scope. 0 means unrestricted depth.
const std::string & name() const
The name of the logical-part of the current node in the expanded-view.
std::vector< DDExpandedNode > DDGeoHistory
Geometrical &#39;path&#39; of the current node up to the root-node.
bool nextB()
broad search order of next()
int copyno() const
Copy number associated with the current node.
void reset()
true, if a call to firstChild() would succeed (current node has at least one child) ...
bool firstChild()
set the current node to the first child ...
bool nextSibling()
set the current node to the next sibling ...
const DDRotationMatrix & rotation() const
The absolute rotation of the current node.
std::vector< const DDsvalues_type * > specifics() const
User specific data attached to the current node.
void mergedSpecificsV(DDsvalues_type &res) const
const DDRotationMatrix rot_
bool goToHistory(const DDGeoHistory &sc)
bool goTo(const nav_type &)
transversed the DDExpandedView according to the given stack of sibling numbers
const DDPosData * worldpos_
???
DDGeoHistory scope_
scope of the expanded view
Provides an exploded view of the detector (tree-view)
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7
std::vector< double > const & vector(std::string_view iKey) const
The DDVector information.
const DDGeoHistory & geoHistory() const
The list of ancestors up to the root-node of the current node.
std::vector< int > nav_type
std::vector of sibling numbers