15 #include "Math/GenVector/Rotation3D.h" 21 std::cout <<
"*********FIRST BY firstChild, firstChild, nextSibling, nextSibling*********" << std::endl;
47 std::cout <<
"*********THEN BY next, next, next, next*********" << std::endl;
90 while ( git1 != gend1 && git2 != gend2 && ret ) {
97 }
else if (!git1->empty() && !git2->empty() ) {
98 auto cit1 = git1->begin();
99 auto cend1 = git1->end();
100 auto cit2 = git2->begin();
101 auto cend2 = git2->end();
103 while ( cit1 != cend1 && cit2 != cend2 ) {
106 std::cout << ++i <<
" c1--> " <<
g1.edgeData(cit1->second)->copyno() <<
" " << ddcurLP1.
name().
fullname() << std::endl;
107 std::cout << ++i <<
" c2--> " <<
g2.edgeData(cit2->second)->copyno() <<
" " << ddcurLP2.
name().
fullname() << std::endl;
111 if (
p1->copyno() !=
p2->copyno() ||
113 std::cout <<
"Failed to match node (fullname:copy_no): 1: " 115 << ddcurLP2.
name().
fullname() <<
":" <<
p2->copyno() << std::endl;
119 std::cout <<
"Failed to match translation " << std::endl;
123 std::cout <<
"Failed to match rotation " << std::endl;
130 }
else if ( git1->size() != git2->size() ) {
132 std::cout <<
"DDCompactViews are different because number of children do not match" << std::endl;
133 std::cout <<
"graph1 size of edge_list: " << git1->size() <<
" and graph2 size of edge_list: " << git2->size() << std::endl;
161 switch ( lhs.
shape() ) {
187 <<
" even though their names match " << std::endl;
192 <<
" even though their names and shape type match." << std::endl;
213 bool DDCompareDBLVEC(
const std::vector<double>& lhs,
const std::vector<double>& rhs,
double tol)
216 std::ios_base::fmtflags originalFlags =
std::cout.flags();
217 int originalPrecision =
std::cout.precision();
218 if( lhs.size() != rhs.size())
221 std::cout <<
"Size of vectors do not match." << std::endl;
225 for(
size_t i = 0;
i < lhs.size() ; ++
i )
227 if( std::fabs( lhs[
i] - rhs[
i] ) > tol )
230 std::cout <<
"Vector content at index " << i <<
" does not match " ;
231 std::cout << std::setw(12) <<
std::fixed << std::setprecision(4) << lhs[
i] <<
" != " << rhs[
i] << std::endl;
238 std::cout.precision( originalPrecision );
247 std::cout <<
"BooleanSolid names do not match ";
250 std::cout <<
"BooleanSolid shape types do not match ";
253 std::cout <<
"BooleanSolid parameters do not match ";
256 std::cout <<
"BooleanSolid SolidA solids do not match ";
259 std::cout <<
"BooleanSolid SolidB solids do not match ";
262 std::cout <<
"BooleanSolid Translations do not match ";
265 std::cout <<
"BooleanSolid Rotations do not match ";
279 if ( std::fabs(lhs.x() - rhs.x()) > tol
280 || std::fabs(lhs.y() - rhs.y()) > tol
281 || std::fabs(lhs.z() - rhs.z()) > tol ) {
292 std::cout <<
"DDRotation names do not match " 297 std::cout <<
"DDRotationMatrix values do not match " 313 double dist = Distance(lhs,rhs);
314 if ( std::fabs(dist) > tol ) {
315 std::cout <<
"Rotation matrices do not match." << std::endl;
319 lhs.GetComponents(x,y,z);
328 std::cout <<
"," << std::setw(12) <<
std::fixed << std::setprecision(4) << z.Z() << std::endl;
330 rhs.GetComponents(x,y,z);
339 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 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
ROOT::Math::Rotation3D DDRotationMatrix
A DDRotationMatrix is currently implemented with a ROOT Rotation3D.
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.
A DDSolid represents the shape of a part.
DDSolid solidB(void) const
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
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.
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.
Graph::const_adj_iterator adjl_iterator
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.
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 & rotation() const
Returns the read-only rotation-matrix.
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)
const std::string & name() const
Returns the name.