15 #include "Math/GenVector/Rotation3D.h" 24 std::cout <<
"*********FIRST BY firstChild, firstChild, nextSibling, nextSibling*********" << std::endl;
50 std::cout <<
"*********THEN BY next, next, next, next*********" << std::endl;
96 while ( git1 != gend1 && git2 != gend2 && ret ) {
103 }
else if (!git1->empty() && !git2->empty() ) {
104 auto cit1 = git1->begin();
105 auto cend1 = git1->end();
106 auto cit2 = git2->begin();
107 auto cend2 = git2->end();
109 while ( cit1 != cend1 && cit2 != cend2 ) {
112 std::cout << ++i <<
" c1--> " <<
g1.edgeData(cit1->second)->copyno() <<
" " << ddcurLP1.
name().
fullname() << std::endl;
113 std::cout << ++i <<
" c2--> " <<
g2.edgeData(cit2->second)->copyno() <<
" " << ddcurLP2.
name().
fullname() << std::endl;
117 if (
p1->copyno() !=
p2->copyno() ||
119 std::cout <<
"Failed to match node (fullname:copy_no): 1: " 121 << ddcurLP2.
name().
fullname() <<
":" <<
p2->copyno() << std::endl;
125 std::cout <<
"Failed to match translation " << std::endl;
129 std::cout <<
"Failed to match rotation " << std::endl;
136 }
else if ( git1->size() != git2->size() ) {
138 std::cout <<
"DDCompactViews are different because number of children do not match" << std::endl;
139 std::cout <<
"graph1 size of edge_list: " << git1->size() <<
" and graph2 size of edge_list: " << git2->size() << std::endl;
173 switch ( lhs.
shape() ) {
199 <<
" even though their names match " << std::endl;
204 <<
" even though their names and shape type match." << std::endl;
232 std::ios_base::fmtflags originalFlags =
std::cout.flags();
233 int originalPrecision =
std::cout.precision();
234 if( lhs.size() != rhs.size())
237 std::cout <<
"Size of vectors do not match." << std::endl;
241 for(
size_t i = 0;
i < lhs.size() ; ++
i )
243 if( std::fabs( lhs[
i] - rhs[
i] ) >
tol_ )
246 std::cout <<
"Vector content at index " << i <<
" does not match " ;
247 std::cout << std::setw(12) <<
std::fixed << std::setprecision(4) << lhs[
i] <<
" != " << rhs[
i] << std::endl;
254 std::cout.precision( originalPrecision );
265 std::cout <<
"BooleanSolid names do not match ";
268 std::cout <<
"BooleanSolid shape types do not match ";
271 std::cout <<
"BooleanSolid parameters do not match ";
274 std::cout <<
"BooleanSolid SolidA solids do not match ";
277 std::cout <<
"BooleanSolid SolidB solids do not match ";
280 std::cout <<
"BooleanSolid Translations do not match ";
283 std::cout <<
"BooleanSolid Rotations do not match ";
299 if ( std::fabs(lhs.x() - rhs.x()) >
tol_ 300 || std::fabs(lhs.y() - rhs.y()) >
tol_ 301 || std::fabs(lhs.z() - rhs.z()) >
tol_ ) {
315 std::cout <<
"DDRotation names do not match " 320 std::cout <<
"DDRotationMatrix values do not match " 338 double dist = Distance(lhs,rhs);
339 if ( std::fabs(dist) >
tol_ ) {
340 std::cout <<
"Rotation matrices do not match." << std::endl;
344 lhs.GetComponents(x,y,z);
353 std::cout <<
"," << std::setw(12) <<
std::fixed << std::setprecision(4) << z.Z() << std::endl;
355 rhs.GetComponents(x,y,z);
364 std::cout <<
"," << std::setw(12) <<
std::fixed << std::setprecision(4) << z.Z() << std::endl;
bool next()
set current node to the next node in the expanded tree
const DDRotationMatrix * rotation() const
Returns the read-only rotation-matrix.
const std::vector< double > & parameters(void) const
Give the parameters of the solid.
bool parent()
set the current node to the parent node ...
Relative position of a child-volume inside a parent-volume.
std::vector< double >::size_type index_type
bool operator()(const DDCompactView &lhs, const DDCompactView &rhs) const
Needs to know about rotmat because of BooleanSolid.
DDTranslation translation(void) const
const DDSolid & solid(void) const
Returns a reference object of the solid being the shape of this LogicalPart.
Compact representation of the geometrical detector hierarchy.
Needs to know because of Rotation Matrix of Boolean Relationship.
A DDSolid represents the shape of a part.
DDSolid solidB(void) const
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
bool operator()(const DDTranslation &lhs, const DDTranslation &rhs) const
Represents a uniquely identifyable rotation matrix.
DDRotation rotation(void) const
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DD3Vector
A DD Translation is currently implemented with Root Vector3D.
bool operator()(const DDLogicalPart &lhs, const DDLogicalPart &rhs) const
int depth() const
depth of the scope. 0 means unrestricted depth.
const std::string fullname() const
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
DDSolidShape shape(void) const
The type of the solid.
bool operator()(const std::vector< double > &lhs, const std::vector< double > &rhs) const
Graph::const_adj_iterator adjl_iterator
bool operator()(DDExpandedView &lhs, DDExpandedView &rhs) const
bool operator()(const DDSolid &lhs, const DDSolid &rhs) const
bool operator()(const DDBooleanSolid &lhs, const DDBooleanSolid &rhs) const
DDSolid solidA(void) const
const Graph & graph() const
Provides read-only access to the data structure of the compact-view.
DDComparators need to know if names of DDRotation matter.
bool operator()(const DDRotationMatrix &lhs, const DDRotationMatrix &rhs) const
int copyno() const
Copy number associated with the current node.
bool firstChild()
set the current node to the first child ...
Allows to compare name or not. If not, compares only values of the rotation matrix.
bool nextSibling()
set the current node to the next sibling ...
LogicalParts have solids which could be BooleanSolids.
math::Graph< DDLogicalPart, DDPosData * > Graph
adj_list::const_iterator const_adj_iterator
const DDLogicalPart & logicalPart() const
The logical-part of the current node in the expanded-view.
Provides an exploded view of the detector (tree-view)
ROOT::Math::Rotation3D DDRotationMatrix
A DDRotationMatrix is currently implemented with a ROOT Rotation3D.
bool operator()(const DDRotation &lhs, const DDRotation &rhs) const
const std::string & name() const
Returns the name.