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()),
31 const DDPosData* pd((*walker_).current().second);
66 if ((*walker_).nextSibling()) {
70 expn.logp_ = curr.first;
71 expn.posd_ = curr.second;
79 expn.trans_ = expnBefore.
trans_ + (expnBefore.
rot_ * expn.posd_->trans());
83 if (!(expn.posd_->rot() == posdOld->
rot())) {
84 expn.rot_ = expnBefore.
rot_ * expn.posd_->rot();
87 expn.trans_ = expn.posd_->trans();
88 expn.rot_ = expn.posd_->rot();
103 bool depthNotReached(
true);
108 depthNotReached =
false;
111 if (depthNotReached) {
112 if ((*walker_).firstChild()) {
125 DDExpandedNode expn(curr.first, curr.second, newTrans, newRot, 0);
140 bool scopeRoot(
false);
151 if ((*walker_).parent()) {
199 edm::LogInfo(
"DDExpandedView") <<
"--GeoHistory-Dump--[" << std::endl;
201 for (
const auto& it : history) {
202 edm::LogInfo(
"DDExpandedView") <<
" " <<
i << it.logicalPart() << std::endl;
205 edm::LogInfo(
"DDExpandedView") <<
"]---------" << std::endl;
217 std::vector<const DDsvalues_type*>
result;
224 if (!
specs.empty()) {
226 for (
const auto& it :
specs) {
232 result.emplace_back(it.second);
249 for (
const auto& it :
specs) {
251 merge(merged, *it.second);
322 for (;
i <
pos[
j].siblingno(); ++
i) {
358 if (curNode == sc[cur]) {
362 if (!(
history_.back() == sc[cur])) {
396 for (
size_t i = 1;
i < sz; ++
i) {
400 for (
int k = 0;
k <
pos; ++
k) {
430 for (; it < sz; ++it) {
437 std::ostringstream oss;
439 for (
int const* it =
n; it !=
n + sz; ++it) {
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.
const DDTranslation & translation() const
The absolute translation of the current node.
bool descend(const DDGeoHistory &sc)
const DDRotationMatrix & rot() const
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 ...
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
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
void specificsV(std::vector< const DDsvalues_type *> &vc) const
WalkerType * walker_
the tricky walker
std::vector< std::pair< unsigned int, DDValue > > DDsvalues_type
DDsvalues_type mergedSpecifics() const
void dump(const DDGeoHistory &history)
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.
typename math::Graph< N, E >::value_type value_type
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
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.
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 'path' 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.
Log< level::Info, false > LogInfo
const DDTranslation & trans() const
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_
???
const std::vector< std::pair< const DDPartSelection *, const DDsvalues_type * > > & attachedSpecifics(void) const
std::string printNavType(int const *n, size_t sz)
DDGeoHistory scope_
scope of the expanded view
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
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
def merge(dictlist, TELL=False)