12 #include "Math/GenVector/Cartesian3D.h" 13 #include "Math/GenVector/DisplacementVector3D.h" 14 #include "Math/GenVector/Rotation3D.h" 23 w2_(cpv.graph(), cpv.
root()),
27 worldpos_(cpv.worldPosition()) {
30 const DDPosData* pd((*walker_).current().second);
65 if ((*walker_).nextSibling()) {
69 expn.logp_ = curr.first;
70 expn.posd_ = curr.second;
78 expn.trans_ = expnBefore.
trans_ + (expnBefore.
rot_ * expn.posd_->trans());
82 if (!(expn.posd_->rot() == posdOld->
rot())) {
83 expn.rot_ = expnBefore.
rot_ * expn.posd_->rot();
86 expn.trans_ = expn.posd_->trans();
87 expn.rot_ = expn.posd_->rot();
102 bool depthNotReached(
true);
107 depthNotReached =
false;
110 if (depthNotReached) {
111 if ((*walker_).firstChild()) {
124 DDExpandedNode expn(curr.first, curr.second, newTrans, newRot, 0);
139 bool scopeRoot(
false);
150 if ((*walker_).parent()) {
198 edm::LogInfo(
"DDExpandedView") <<
"--GeoHistory-Dump--[" << std::endl;
200 for (
const auto& it : history) {
201 edm::LogInfo(
"DDExpandedView") <<
" " << i << it.logicalPart() << std::endl;
204 edm::LogInfo(
"DDExpandedView") <<
"]---------" << std::endl;
216 std::vector<const DDsvalues_type*>
result;
223 if (!
specs.empty()) {
224 result.reserve(
specs.size());
225 for (
const auto& it :
specs) {
231 result.emplace_back(it.second);
248 for (
const auto& it :
specs) {
250 merge(merged, *it.second);
321 for (; i < pos[
j].siblingno(); ++
i) {
357 if (curNode == sc[cur]) {
361 if (!(
history_.back() == sc[cur])) {
395 for (
size_t i = 1;
i < sz; ++
i) {
399 for (
int k = 0;
k < pos; ++
k) {
429 for (; it < sz; ++it) {
436 std::ostringstream oss;
438 for (
int const* it = n; it != n + sz; ++it) {
bool next()
set current node to the next node in the expanded tree
const DDRotationMatrix & rotation() const
The absolute rotation of the current node.
bool parent()
set the current node to the parent node ...
Relative position of a child-volume inside a parent-volume.
DDsvalues_type mergedSpecifics() const
bool descend(const DDGeoHistory &sc)
nav_type copyNumbers() const
return the stack of copy numbers
const std::string & name() const
The name of the logical-part of the current node in the expanded-view.
compares a given geometrical-history whether it corresponds to the given part-selector ...
ROOT::Math::Rotation3D DDRotationMatrix
A DDRotationMatrix is currently implemented with a ROOT Rotation3D.
virtual ~DDExpandedView()
DDGeoHistory history_
std::vector of DDExpandedNode
std::vector< const DDsvalues_type * > specifics() const
User specific data attached to the current node.
represents one node in the DDExpandedView
unsigned int depth_
depth of the scope, 0==unrestricted depth
Compact representation of the geometrical detector hierarchy.
std::pair< int const *, size_t > NavRange
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
nav_type navPos() const
return the stack of sibling numbers which indicates the current position in the DDExpandedView ...
const DDGeoHistory & geoHistory() const
The list of ancestors up to the root-node of the current node.
WalkerType * walker_
the tricky walker
std::vector< std::pair< unsigned int, DDValue > > DDsvalues_type
void dump(const DDGeoHistory &history)
void specificsV(std::vector< const DDsvalues_type * > &vc) const
const DDTranslation trans_
DDExpandedView(const DDCompactView &)
Constructs an expanded-view based on the compact-view.
int depth() const
depth of the scope. 0 means unrestricted depth.
const DDRotationMatrix & rot() const
typename math::Graph< DDLogicalPart, DDPosData * >::value_type value_type
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
const DDTranslation & trans() const
bool setScope(const DDGeoHistory &hist, int depth=0)
sets the scope of the expanded view
const DDTranslation & translation() const
The absolute translation of the current node.
void clearScope()
clears the scope; the full tree is available, depth=0
std::vector< DDExpandedNode > DDGeoHistory
Geometrical 'path' of the current node up to the root-node.
bool nextB()
broad search order of next()
const DDGeoHistory & scope() const
The scope of the expanded-view.
void reset()
true, if a call to firstChild() would succeed (current node has at least one child) ...
int copyno() const
Copy number associated with the current node.
bool firstChild()
set the current node to the first child ...
bool nextSibling()
set the current node to the next sibling ...
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_
???
const DDLogicalPart & logicalPart() const
The logical-part of the current node in the expanded-view.
std::string printNavType(int const *n, size_t sz)
DDGeoHistory scope_
scope of the expanded view
const std::vector< std::pair< const DDPartSelection *, const DDsvalues_type * > > & attachedSpecifics(void) const
void mergedSpecificsV(DDsvalues_type &res) const
std::vector< int > nav_type
std::vector of sibling numbers
def merge(dictlist, TELL=False)