Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
// $Id:$
//====================================================================
// AIDA Detector description implementation for LCD
//--------------------------------------------------------------------
//
// Simple program to dump the complete DetElement hierarchy
//
// Author : F.Gaede, CERN/DESY
// Date : 07 Nov 2014
//====================================================================
#include "DD4hep/LCDD.h"
#include "DD4hep/DD4hepUnits.h"
#include "DDRec/Surface.h"
#include "DDRec/DetectorSurfaces.h"
#include "DDRec/SurfaceManager.h"
#include <list>
using namespace std ;
using namespace DD4hep ;
using namespace DD4hep::Geometry;
using namespace DD4hep::DDRec;
using namespace DDSurfaces ;
using namespace dd4hep ;
//=============================================================================
int main(int argc, char** argv ){
if( argc != 2 ) {
std::cout << " usage: dumpdetector compact.xml " << std::endl ;
exit(1) ;
}
std::string inFile = argv[1] ;
LCDD& lcdd = LCDD::getInstance();
lcdd.fromCompact( inFile );
DetElement world = lcdd.world() ;
std::cout << "############################################################################### " << std::endl << std::endl ;
//------------------ breadth first tree traversal ---------
std::list< DetElement > dets ;
std::list< DetElement > daugs ;
std::list< DetElement > gdaugs ;
daugs.push_back( world ) ;
while( ! daugs.empty() ) {
for( std::list< DetElement >::iterator li=daugs.begin() ; li != daugs.end() ; ++li ){
DetElement dau = *li ;
DetElement::Children chMap = dau.children() ;
for ( DetElement::Children::const_iterator it=chMap.begin() ; it != chMap.end() ; ++it ){
DetElement de = (*it).second ;
gdaugs.push_back( de ) ;
}
}
dets.splice( dets.end() , daugs ) ;
daugs.splice( daugs.end() , gdaugs ) ;
}
//------------------ end tree traversal ---------
for ( std::list< DetElement >::const_iterator it=dets.begin() ; it != dets.end() ; ++it ){
DetElement de = (*it) ;
SurfaceManager surfMan( de ) ;
const SurfaceList& sL = surfMan.surfaceList() ;
std::cout << "DetElement: " << de.name() << "[ path: "<< de.placementPath () << "] \t surfaces : " << ( sL.empty() ? 0 : sL.size() ) << std::endl ;
// for( SurfaceList::const_iterator it = sL.begin() ; it != sL.end() ; ++it ){
// Surface* surf = *it ;
// std::cout << " ------------------------- "
// << " surface: " << *surf << std::endl
// << " ------------------------- " << std::endl ;
// }
}
std::cout << "############################################################################### " << std::endl << std::endl ;
return 0;
}
//=============================================================================