CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Friends
DDExpandedView Class Reference

Provides an exploded view of the detector (tree-view) More...

#include <DDExpandedView.h>

Public Types

typedef std::vector< int > nav_type
 std::vector of sibling numbers More...
 
typedef std::pair< int const *, size_t > NavRange
 
using WalkerType = math::GraphWalker< DDLogicalPart, DDPosData * >
 

Public Member Functions

void clearScope ()
 clears the scope; the full tree is available, depth=0 More...
 
int copyno () const
 Copy number associated with the current node. More...
 
nav_type copyNumbers () const
 return the stack of copy numbers More...
 
 DDExpandedView (const DDCompactView &)
 Constructs an expanded-view based on the compact-view. More...
 
int depth () const
 depth of the scope. 0 means unrestricted depth. More...
 
bool firstChild ()
 set the current node to the first child ... More...
 
const DDGeoHistorygeoHistory () const
 The list of ancestors up to the root-node of the current node. More...
 
bool goTo (const nav_type &)
 transversed the DDExpandedView according to the given stack of sibling numbers More...
 
bool goTo (NavRange)
 
bool goTo (int const *newpos, size_t sz)
 
bool goToHistory (const DDGeoHistory &sc)
 
const DDLogicalPartlogicalPart () const
 The logical-part of the current node in the expanded-view. More...
 
DDsvalues_type mergedSpecifics () const
 
void mergedSpecificsV (DDsvalues_type &res) const
 
const std::string & name () const
 The name of the logical-part of the current node in the expanded-view. More...
 
nav_type navPos () const
 return the stack of sibling numbers which indicates the current position in the DDExpandedView More...
 
bool next ()
 set current node to the next node in the expanded tree More...
 
bool nextB ()
 broad search order of next() More...
 
bool nextSibling ()
 set the current node to the next sibling ... More...
 
bool parent ()
 set the current node to the parent node ... More...
 
void reset ()
 true, if a call to firstChild() would succeed (current node has at least one child) More...
 
const DDRotationMatrixrotation () const
 The absolute rotation of the current node. More...
 
const DDGeoHistoryscope () const
 The scope of the expanded-view. More...
 
bool setScope (const DDGeoHistory &hist, int depth=0)
 sets the scope of the expanded view More...
 
std::vector< const DDsvalues_type * > specifics () const
 User specific data attached to the current node. More...
 
void specificsV (std::vector< const DDsvalues_type *> &vc) const
 
const DDTranslationtranslation () const
 The absolute translation of the current node. More...
 
std::vector< double > const & vector (std::string_view iKey) const
 The DDVector information. More...
 
virtual ~DDExpandedView ()
 

Protected Member Functions

bool descend (const DDGeoHistory &sc)
 

Protected Attributes

const DDCompactViewcpv_
 
unsigned int depth_
 depth of the scope, 0==unrestricted depth More...
 
DDGeoHistory history_
 std::vector of DDExpandedNode More...
 
std::vector< nav_typenextBStack_
 
const DDRotationMatrix rot_
 
DDGeoHistory scope_
 scope of the expanded view More...
 
const DDTranslation trans_
 
WalkerType w2_
 
WalkerTypewalker_
 the tricky walker More...
 
const DDPosDataworldpos_
 ??? More...
 

Friends

class DDFilteredView
 

Detailed Description

Provides an exploded view of the detector (tree-view)

DDExpandedView provides a tree-walker (iterator) for the expanded view of the detector description. Further it provides a registration mechanism for call-backs whenever a node in the expanded view becomes current and fullfills the user-defined predicate.

FIXME: DDExpandedView: in the Prototype just one class - FIXME: later seperation of interface & implementation!Taking a DDCompactView the DDExpandedView expands the compact-view into a detector tree. One instance of DDExpandedView corresponds to one node in the tree. It is the 'current' node. By using tree navigation ( next(), nextSibling(), parent(), firstChild() ) the DDExpandedView represents the new corresponding node.

Definition at line 41 of file DDExpandedView.h.

Member Typedef Documentation

◆ nav_type

typedef std::vector<int> DDExpandedView::nav_type

std::vector of sibling numbers

Definition at line 48 of file DDExpandedView.h.

◆ NavRange

typedef std::pair<int const *, size_t> DDExpandedView::NavRange

Definition at line 49 of file DDExpandedView.h.

◆ WalkerType

Definition at line 45 of file DDExpandedView.h.

Constructor & Destructor Documentation

◆ DDExpandedView()

DDExpandedView::DDExpandedView ( const DDCompactView cpv)

Constructs an expanded-view based on the compact-view.

After construction the instance corresponds to the root of the geometrical tree.

Definition at line 21 of file DDExpandedView.cc.

References history_, rot_, trans_, w2_, walker_, and worldpos_.

22  : walker_(nullptr),
23  w2_(cpv.graph(), cpv.root()),
26  depth_(0),
27  worldpos_(cpv.worldPosition()),
28  cpv_(&cpv) {
29  walker_ = &w2_;
30 
31  const DDPosData* pd((*walker_).current().second);
32  if (!pd)
33  pd = worldpos_;
34  DDExpandedNode expn((*walker_).current().first, pd, trans_, rot_, 0);
35 
36  // starting point for position calculations, == root of expanded view
37  history_.emplace_back(expn);
38 }
Relative position of a child-volume inside a parent-volume.
Definition: DDPosData.h:13
DDGeoHistory history_
std::vector of DDExpandedNode
represents one node in the DDExpandedView
unsigned int depth_
depth of the scope, 0==unrestricted depth
WalkerType w2_
WalkerType * walker_
the tricky walker
ROOT::Math::Rotation3D DDRotationMatrix
A DDRotationMatrix is currently implemented with a ROOT Rotation3D.
const DDTranslation trans_
const DDCompactView * cpv_
const DDLogicalPart & root() const
returns the DDLogicalPart representing the root of the geometrical hierarchy
const DDPosData * worldPosition() const
The absolute position of the world.
const DDRotationMatrix rot_
const DDPosData * worldpos_
???
const Graph & graph() const
Provides read-only access to the data structure of the compact-view.
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7

◆ ~DDExpandedView()

DDExpandedView::~DDExpandedView ( )
virtual

Definition at line 40 of file DDExpandedView.cc.

40 {}

Member Function Documentation

◆ clearScope()

void DDExpandedView::clearScope ( )

clears the scope; the full tree is available, depth=0

Definition at line 263 of file DDExpandedView.cc.

References depth_, and scope_.

Referenced by DDFilteredView::clearScope(), and reset().

263  {
264  scope_.clear();
265  depth_ = 0;
266 }
unsigned int depth_
depth of the scope, 0==unrestricted depth
DDGeoHistory scope_
scope of the expanded view

◆ copyno()

int DDExpandedView::copyno ( ) const

Copy number associated with the current node.

Definition at line 54 of file DDExpandedView.cc.

References history_.

Referenced by DDFilteredView::copyno(), DDCompareEPV(), DDExpandedViewDump(), and MagGeoBuilderFromDDD::volumeHandle::volumeHandle().

54 { return history_.back().copyno(); }
DDGeoHistory history_
std::vector of DDExpandedNode

◆ copyNumbers()

DDExpandedView::nav_type DDExpandedView::copyNumbers ( ) const

return the stack of copy numbers

Definition at line 425 of file DDExpandedView.cc.

References history_, and mps_fire::result.

Referenced by DDFilteredView::copyNumbers().

425  {
427  DDGeoHistory::size_type sz = history_.size();
428  nav_type result(sz);
429 
430  for (; it < sz; ++it) {
431  result[it] = history_[it].copyno();
432  }
433  return result;
434 }
DDGeoHistory history_
std::vector of DDExpandedNode
uint16_t size_type
std::vector< int > nav_type
std::vector of sibling numbers

◆ depth()

int DDExpandedView::depth ( ) const

depth of the scope. 0 means unrestricted depth.

Definition at line 52 of file DDExpandedView.cc.

References depth_.

Referenced by DDCompareEPV(), and setScope().

52 { return depth_; }
unsigned int depth_
depth of the scope, 0==unrestricted depth

◆ descend()

bool DDExpandedView::descend ( const DDGeoHistory sc)
protected

Definition at line 341 of file DDExpandedView.cc.

References firstChild(), history_, nextSibling(), and mps_fire::result.

Referenced by setScope().

341  {
342  DDGeoHistory::size_type mxx = sc.size();
343  DDGeoHistory::size_type cur = 0;
344  bool result(false);
345 
346  /* algo: compare currerent node in expanded-view with current-node in sc
347  if matching:
348  (A)go to first child in expanded-view, go one level deeper in sc
349  iterate over all children in expanded-view until one of them
350  matches the current node in sc.
351  if no one matches, return false
352  else continue at (A)
353  else return false
354  */
355  const DDExpandedNode& curNode = history_.back();
356 
357  if (!sc.empty()) {
358  if (curNode == sc[cur]) {
359  bool res(false);
360  while (cur + 1 < mxx && firstChild()) {
361  ++cur;
362  if (!(history_.back() == sc[cur])) {
363  while (nextSibling()) {
364  if (history_.back() == sc[cur]) {
365  res = true;
366  break;
367  }
368  }
369  } else {
370  res = true;
371  }
372  if (res == false)
373  break;
374  }
375  result = res;
376  }
377  }
378  return result;
379 }
DDGeoHistory history_
std::vector of DDExpandedNode
represents one node in the DDExpandedView
uint16_t size_type
Definition: Electron.h:6
bool firstChild()
set the current node to the first child ...
bool nextSibling()
set the current node to the next sibling ...

◆ firstChild()

bool DDExpandedView::firstChild ( )

set the current node to the first child ...

returns true, if a child of the current node exists and updates this otherwise returns false

Definition at line 101 of file DDExpandedView.cc.

References depth_, history_, mps_fire::result, DDPosData::rot(), scope_, DDPosData::trans(), and DDPosData::trans_.

Referenced by MagGeoBuilderFromDDD::build(), DDCompareEPV(), descend(), goTo(), goToHistory(), and next().

101  {
102  bool result(false);
103  bool depthNotReached(true);
104 
105  // Check for the depth within the scope ...
106  if (depth_) {
107  if ((history_.size() - scope_.size()) == depth_) {
108  depthNotReached = false;
109  }
110  }
111  if (depthNotReached) {
112  if ((*walker_).firstChild()) {
113  DDExpandedNode& expnBefore(history_.back());
114  WalkerType::value_type curr = (*walker_).current();
115 
116  DDPosData* newPosd = curr.second;
117 
118  // T = ... (see nextSiblinig())
119  DDTranslation newTrans = expnBefore.trans_ + expnBefore.rot_ * newPosd->trans();
120 
121  // R = ... (see nextSibling())
122  DDRotationMatrix newRot = expnBefore.rot_ * newPosd->rot(); //.inverse();
123 
124  // create a new Expanded node and push it to the history ...
125  DDExpandedNode expn(curr.first, curr.second, newTrans, newRot, 0);
126 
127  history_.emplace_back(expn);
128  result = true;
129  } // if firstChild
130  } // if depthNotReached
131  return result;
132 }
Relative position of a child-volume inside a parent-volume.
Definition: DDPosData.h:13
const DDRotationMatrix & rot() const
Definition: DDPosData.h:31
DDGeoHistory history_
std::vector of DDExpandedNode
represents one node in the DDExpandedView
unsigned int depth_
depth of the scope, 0==unrestricted depth
ROOT::Math::Rotation3D DDRotationMatrix
A DDRotationMatrix is currently implemented with a ROOT Rotation3D.
typename math::Graph< N, E >::value_type value_type
Definition: GraphWalker.h:28
DDTranslation trans_
Definition: DDPosData.h:39
const DDTranslation & trans() const
Definition: DDPosData.h:28
DDGeoHistory scope_
scope of the expanded view
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7

◆ geoHistory()

const DDGeoHistory & DDExpandedView::geoHistory ( ) const

◆ goTo() [1/3]

bool DDExpandedView::goTo ( const nav_type newpos)

transversed the DDExpandedView according to the given stack of sibling numbers

Definition at line 381 of file DDExpandedView.cc.

Referenced by goTo().

381 { return goTo(&newpos.front(), newpos.size()); }
bool goTo(const nav_type &)
transversed the DDExpandedView according to the given stack of sibling numbers

◆ goTo() [2/3]

bool DDExpandedView::goTo ( NavRange  newpos)

Definition at line 383 of file DDExpandedView.cc.

References goTo().

383 { return goTo(newpos.first, newpos.second); }
bool goTo(const nav_type &)
transversed the DDExpandedView according to the given stack of sibling numbers

◆ goTo() [3/3]

bool DDExpandedView::goTo ( int const *  newpos,
size_t  sz 
)

Definition at line 385 of file DDExpandedView.cc.

References firstChild(), goToHistory(), history_, mps_fire::i, dqmdumpme::k, nextSibling(), reset(), and mps_fire::result.

385  {
386  bool result(false);
387 
388  // save the current position
389  DDGeoHistory savedPos = history_;
390 
391  // reset to root node
392  //FIXME: reset to root of scope!!
393  reset();
394 
395  // try to navigate down to the newpos
396  for (size_t i = 1; i < sz; ++i) {
397  result = firstChild();
398  if (result) {
399  int pos = newpos[i];
400  for (int k = 0; k < pos; ++k) {
401  result = nextSibling();
402  }
403  } else {
404  break;
405  }
406  }
407 
408  if (!result) {
409  goToHistory(savedPos);
410  }
411  return result;
412 }
DDGeoHistory history_
std::vector of DDExpandedNode
std::vector< DDExpandedNode > DDGeoHistory
Geometrical &#39;path&#39; of the current node up to the root-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 ...
bool goToHistory(const DDGeoHistory &sc)

◆ goToHistory()

bool DDExpandedView::goToHistory ( const DDGeoHistory pos)

goTo will reset the ExpandedView if pos is not a valid position. Currently no checks are implemented to verify that pos is within the current scope of the ExpandedView.

Definition at line 310 of file DDExpandedView.cc.

References depth_, firstChild(), mps_fire::i, dqmiolumiharvest::j, nextSibling(), reset(), mps_fire::result, alignCSCRings::s, scope_, and setScope().

Referenced by DDFilteredView::firstChild(), goTo(), DDFilteredView::nextSibling(), and DDFilteredView::parent().

310  {
311  bool result = true;
312  int tempD = depth_;
313  DDGeoHistory tempScope = scope_;
314  reset();
315  DDGeoHistory::size_type s = pos.size();
316  for (DDGeoHistory::size_type j = 1; j < s; ++j) {
317  if (!firstChild()) {
318  result = false;
319  break;
320  }
321  int i = 0;
322  for (; i < pos[j].siblingno(); ++i) {
323  if (!nextSibling()) {
324  result = false;
325  }
326  }
327  }
328 
329  if (!result) {
330  reset();
331  setScope(tempScope, tempD);
332  } else {
333  scope_ = tempScope;
334  depth_ = tempD;
335  }
336 
337  return result;
338 }
unsigned int depth_
depth of the scope, 0==unrestricted depth
uint16_t size_type
bool setScope(const DDGeoHistory &hist, int depth=0)
sets the scope of the expanded view
std::vector< DDExpandedNode > DDGeoHistory
Geometrical &#39;path&#39; of the current node up to the root-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 ...
DDGeoHistory scope_
scope of the expanded view

◆ logicalPart()

const DDLogicalPart & DDExpandedView::logicalPart ( ) const

◆ mergedSpecifics()

DDsvalues_type DDExpandedView::mergedSpecifics ( ) const

Definition at line 237 of file DDExpandedView.cc.

References mergedSpecificsV().

237  {
238  DDsvalues_type merged;
239  mergedSpecificsV(merged);
240  return merged;
241 }
std::vector< std::pair< unsigned int, DDValue > > DDsvalues_type
Definition: DDsvalues.h:12
void mergedSpecificsV(DDsvalues_type &res) const

◆ mergedSpecificsV()

void DDExpandedView::mergedSpecificsV ( DDsvalues_type res) const

Definition at line 243 of file DDExpandedView.cc.

References DDLogicalPart::attachedSpecifics(), geoHistory(), compareTotals::hist, logicalPart(), merge(), and HistogramManager_cfi::specs.

Referenced by DDFilteredView::mergedSpecifics(), mergedSpecifics(), and DDFilteredView::mergedSpecificsV().

243  {
244  merged.clear();
245  const auto& specs = logicalPart().attachedSpecifics();
246  if (specs.empty())
247  return;
248  const DDGeoHistory& hist = geoHistory();
249  for (const auto& it : specs) {
250  if (DDCompareEqual(hist, *it.first)())
251  merge(merged, *it.second);
252  }
253 }
const DDLogicalPart & logicalPart() const
The logical-part of the current node in the expanded-view.
compares a given geometrical-history whether it corresponds to the given part-selector ...
Definition: DDComparator.h:15
int merge(int argc, char *argv[])
Definition: DMRmerge.cc:37
std::vector< DDExpandedNode > DDGeoHistory
Geometrical &#39;path&#39; of the current node up to the root-node.
const std::vector< std::pair< const DDPartSelection *, const DDsvalues_type * > > & attachedSpecifics(void) const
const DDGeoHistory & geoHistory() const
The list of ancestors up to the root-node of the current node.

◆ name()

const std::string & DDExpandedView::name ( ) const

The name of the logical-part of the current node in the expanded-view.

Definition at line 44 of file DDExpandedView.cc.

References history_.

Referenced by config.CFG::__str__(), validation.Sample::digest(), and VIDSelectorBase.VIDSelectorBase::initialize().

44 { return history_.back().logp_.ddname().name(); }
DDGeoHistory history_
std::vector of DDExpandedNode

◆ navPos()

DDExpandedView::nav_type DDExpandedView::navPos ( ) const

return the stack of sibling numbers which indicates the current position in the DDExpandedView

Definition at line 414 of file DDExpandedView.cc.

References history_, mps_fire::i, and dqmiolumiharvest::j.

Referenced by GeometryInfoDump::dumpInfo(), and DDFilteredView::navPos().

414  {
417  nav_type pos(j);
418 
419  for (; i < j; ++i)
420  pos[i] = history_[i].siblingno();
421 
422  return pos;
423 }
DDGeoHistory history_
std::vector of DDExpandedNode
uint16_t size_type
std::vector< int > nav_type
std::vector of sibling numbers

◆ next()

bool DDExpandedView::next ( void  )

set current node to the next node in the expanded tree

Tree transversal:

  • try to go to the first child
  • else try to go to the next sibling
  • else try to go to the next sibling of the parent

Currently the whole remaining subtree is transversed when next() is subsequently called.

Definition at line 175 of file DDExpandedView.cc.

References firstChild(), nextSibling(), and parent().

Referenced by DDCompareEPV(), DDExpandedViewDump(), ddstats(), GeometryInfoDump::dumpInfo(), DDFilteredView::next(), and output().

175  {
176  bool res(false);
177  if (firstChild())
178  res = true;
179  else if (nextSibling())
180  res = true;
181  else {
182  while (parent()) {
183  if (nextSibling()) {
184  res = true;
185  break;
186  }
187  }
188  }
189  return res;
190 }
bool parent()
set the current node to the parent node ...
Definition: Electron.h:6
bool firstChild()
set the current node to the first child ...
bool nextSibling()
set the current node to the next sibling ...

◆ nextB()

bool DDExpandedView::nextB ( )

broad search order of next()

broad first

Definition at line 193 of file DDExpandedView.cc.

193  {
194  bool res(false);
195  return res;
196 }
Definition: Electron.h:6

◆ nextSibling()

bool DDExpandedView::nextSibling ( )

set the current node to the next sibling ...

returns true, if a next sibling exists and updates this otherwise returns false. If a scope was set, the nextSibling of the root of the scope is not selected.

Definition at line 61 of file DDExpandedView.cc.

References history_, mps_fire::result, DDPosData::rot(), DDExpandedNode::rot_, scope_, and DDExpandedNode::trans_.

Referenced by MagGeoBuilderFromDDD::build(), DDCompareEPV(), descend(), goTo(), goToHistory(), next(), and DDFilteredView::nextSibling().

61  {
62  bool result(false);
63  if (!scope_.empty() && history_.back() == scope_.back()) {
64  ; // no-next-sibling, if current node is the root of the scope!
65  } else {
66  if ((*walker_).nextSibling()) {
67  DDExpandedNode& expn(history_.back()); // back of history_ is always current node
68  WalkerType::value_type curr = (*walker_).current();
69  DDPosData const* posdOld = expn.posd_;
70  expn.logp_ = curr.first;
71  expn.posd_ = curr.second;
72 
73  DDGeoHistory::size_type hsize = history_.size();
74 
75  if (hsize > 1) {
76  const DDExpandedNode& expnBefore(history_[hsize - 2]);
77 
78  // T = T1 + INV[R1] * T2
79  expn.trans_ = expnBefore.trans_ + (expnBefore.rot_ * expn.posd_->trans());
80 
81  // R = R1*INV[R2]
82  // VI in principle we can do this
83  if (!(expn.posd_->rot() == posdOld->rot())) {
84  expn.rot_ = expnBefore.rot_ * expn.posd_->rot(); //.inverse();
85  }
86  } else {
87  expn.trans_ = expn.posd_->trans();
88  expn.rot_ = expn.posd_->rot(); //.inverse();
89  }
90  ++expn.siblingno_;
91  result = true;
92  }
93  }
94  return result;
95 }
Relative position of a child-volume inside a parent-volume.
Definition: DDPosData.h:13
const DDRotationMatrix & rot() const
Definition: DDPosData.h:31
DDGeoHistory history_
std::vector of DDExpandedNode
represents one node in the DDExpandedView
uint16_t size_type
typename math::Graph< N, E >::value_type value_type
Definition: GraphWalker.h:28
DDGeoHistory scope_
scope of the expanded view

◆ parent()

bool DDExpandedView::parent ( )

set the current node to the parent node ...

returns ture, if a parent exists and updates this otherwise returns false. When false is returned, the root node of the scope is reached.

Definition at line 138 of file DDExpandedView.cc.

References history_, mps_fire::result, and scope_.

Referenced by DDCompareEPV(), next(), DDFilteredView::nextSibling(), reset(), and setScope().

138  {
139  bool result(false);
140  bool scopeRoot(false);
141 
142  // check for a scope
143  if (!scope_.empty()) {
144  if (scope_.back() == history_.back()) {
145  // the current node is the root of the scope
146  scopeRoot = true;
147  }
148  }
149 
150  if (!scopeRoot) {
151  if ((*walker_).parent()) {
152  history_.pop_back();
153  result = true;
154  }
155  }
156 
157  return result;
158 }
DDGeoHistory history_
std::vector of DDExpandedNode
DDGeoHistory scope_
scope of the expanded view

◆ reset()

void DDExpandedView::reset ( void  )

true, if a call to firstChild() would succeed (current node has at least one child)

clears the scope and sets the ExpandedView to its root-node

Definition at line 268 of file DDExpandedView.cc.

References clearScope(), and parent().

Referenced by goTo(), goToHistory(), and DDFilteredView::reset().

268  {
269  clearScope();
270  while (parent())
271  ;
272 }
bool parent()
set the current node to the parent node ...
void clearScope()
clears the scope; the full tree is available, depth=0

◆ rotation()

const DDRotationMatrix & DDExpandedView::rotation ( void  ) const

The absolute rotation of the current node.

Definition at line 48 of file DDExpandedView.cc.

References history_.

Referenced by MagGeoBuilderFromDDD::build(), DDExpandedViewDump(), GeometryInfoDump::dumpInfo(), output(), MagGeoBuilderFromDDD::volumeHandle::referencePlane(), and DDFilteredView::rotation().

48 { return history_.back().rot_; }
DDGeoHistory history_
std::vector of DDExpandedNode

◆ scope()

const DDGeoHistory & DDExpandedView::scope ( ) const

The scope of the expanded-view.

All navigational commands only operate in the subtree rooted by the node marked by the node of the DDGeoHistory returned by this method. If the size() of the scope equals 0, the full scope covering the whole expanded-view is set (default).

Definition at line 261 of file DDExpandedView.cc.

References scope_.

Referenced by DDFilteredView::scope().

261 { return scope_; }
DDGeoHistory scope_
scope of the expanded view

◆ setScope()

bool DDExpandedView::setScope ( const DDGeoHistory sc,
int  depth = 0 
)

sets the scope of the expanded view

The scope of the expanded-view is set to the subtree rooted by the node marked by the DDGeohistory hist. The current not of the expanded view is set to the root of the subtree. All navigational methods apply only on the subtree.

In case of hist not marking a valid node in the expanded-view, the state of the expanded-view is unchanged and false is returned by setScope(). Otherwise true is returned.

Definition at line 284 of file DDExpandedView.cc.

References visDQMUpload::buf, depth(), depth_, descend(), parent(), mps_fire::result, and scope_.

Referenced by goToHistory(), and DDFilteredView::setScope().

284  {
285  bool result(false);
286 
287  DDGeoHistory buf = scope_; // save current scope
288  scope_.clear(); // sets scope to global (full) scope
289 
290  while (parent())
291  ; // move up to the root of the expanded-view
292 
293  if (descend(sc)) { // try to move down the given scope-history ...
294  scope_ = sc;
295  depth_ = depth;
296  result = true;
297  } else {
298  scope_ = buf;
299  }
300 
301  return result;
302 }
bool parent()
set the current node to the parent node ...
bool descend(const DDGeoHistory &sc)
unsigned int depth_
depth of the scope, 0==unrestricted depth
int depth() const
depth of the scope. 0 means unrestricted depth.
std::vector< DDExpandedNode > DDGeoHistory
Geometrical &#39;path&#39; of the current node up to the root-node.
DDGeoHistory scope_
scope of the expanded view

◆ specifics()

std::vector< const DDsvalues_type * > DDExpandedView::specifics ( ) const

User specific data attached to the current node.

User specific data can be attached to single nodes or a selection of nodes in the expanded view through the DDSpecifics interface.

The resulting std::vector is of size 0 if no specific data was attached.

Definition at line 215 of file DDExpandedView.cc.

References mps_fire::result, and specificsV().

215  {
216  // backward compatible
217  std::vector<const DDsvalues_type*> result;
219  return result;
220 }
void specificsV(std::vector< const DDsvalues_type *> &vc) const

◆ specificsV()

void DDExpandedView::specificsV ( std::vector< const DDsvalues_type *> &  vc) const

Definition at line 222 of file DDExpandedView.cc.

References DDLogicalPart::attachedSpecifics(), geoHistory(), compareTotals::hist, logicalPart(), mps_fire::result, and HistogramManager_cfi::specs.

Referenced by DDFilteredView::specifics(), specifics(), and DDFilteredView::specificsV().

222  {
223  const auto& specs = logicalPart().attachedSpecifics();
224  if (!specs.empty()) {
225  result.reserve(specs.size());
226  for (const auto& it : specs) {
227  // a part selection
228  const DDPartSelection& psel = *(it.first);
229  const DDGeoHistory& hist = geoHistory();
230 
231  if (DDCompareEqual(hist, psel)())
232  result.emplace_back(it.second);
233  }
234  }
235 }
const DDLogicalPart & logicalPart() const
The logical-part of the current node in the expanded-view.
compares a given geometrical-history whether it corresponds to the given part-selector ...
Definition: DDComparator.h:15
std::vector< DDExpandedNode > DDGeoHistory
Geometrical &#39;path&#39; of the current node up to the root-node.
const std::vector< std::pair< const DDPartSelection *, const DDsvalues_type * > > & attachedSpecifics(void) const
const DDGeoHistory & geoHistory() const
The list of ancestors up to the root-node of the current node.

◆ translation()

const DDTranslation & DDExpandedView::translation ( void  ) const

The absolute translation of the current node.

Definition at line 46 of file DDExpandedView.cc.

References history_.

Referenced by MagGeoBuilderFromDDD::build(), DDExpandedViewDump(), GeometryInfoDump::dumpInfo(), output(), DDFilteredView::translation(), and MagGeoBuilderFromDDD::volumeHandle::volumeHandle().

46 { return history_.back().trans_; }
DDGeoHistory history_
std::vector of DDExpandedNode

◆ vector()

std::vector<double> const& DDExpandedView::vector ( std::string_view  iKey) const
inline

The DDVector information.

Definition at line 90 of file DDExpandedView.h.

References cpv_, and DDCompactView::vector().

Referenced by DDFilteredView::vector().

90 { return cpv_->vector(iKey); }
std::vector< double > const & vector(std::string_view iKey) const
returns an empty container if not found
const DDCompactView * cpv_

Friends And Related Function Documentation

◆ DDFilteredView

friend class DDFilteredView
friend

Definition at line 42 of file DDExpandedView.h.

Member Data Documentation

◆ cpv_

const DDCompactView* DDExpandedView::cpv_
protected

Definition at line 146 of file DDExpandedView.h.

Referenced by vector().

◆ depth_

unsigned int DDExpandedView::depth_
protected

depth of the scope, 0==unrestricted depth

Definition at line 143 of file DDExpandedView.h.

Referenced by clearScope(), depth(), DDFilteredView::firstChild(), firstChild(), goToHistory(), and setScope().

◆ history_

DDGeoHistory DDExpandedView::history_
protected

◆ nextBStack_

std::vector<nav_type> DDExpandedView::nextBStack_
protected

Definition at line 145 of file DDExpandedView.h.

◆ rot_

const DDRotationMatrix DDExpandedView::rot_
protected

Definition at line 140 of file DDExpandedView.h.

Referenced by DDExpandedView().

◆ scope_

DDGeoHistory DDExpandedView::scope_
protected

◆ trans_

const DDTranslation DDExpandedView::trans_
protected

Definition at line 139 of file DDExpandedView.h.

Referenced by DDExpandedView().

◆ w2_

WalkerType DDExpandedView::w2_
protected

Definition at line 138 of file DDExpandedView.h.

Referenced by DDExpandedView().

◆ walker_

WalkerType* DDExpandedView::walker_
protected

the tricky walker

Definition at line 137 of file DDExpandedView.h.

Referenced by DDExpandedView().

◆ worldpos_

const DDPosData* DDExpandedView::worldpos_
protected

???

Definition at line 144 of file DDExpandedView.h.

Referenced by DDExpandedView().