11 #include "G4LogicalVolumeStore.hh"
12 #include "G4PVPlacement.hh"
13 #include "G4PVParameterised.hh"
14 #include "G4LogicalVolume.hh"
15 #include "G4Material.hh"
16 #include "G4TransportationManager.hh"
21 std::vector<std::string> defNames;
24 G4cout <<
"CheckOverlap:: initialised with "
25 <<
nodeNames.size() <<
" Node Names and Resolution "
26 << nPoints <<
" the names are:" << G4endl;
28 G4cout <<
"CheckOverlap:: Node[" <<
ii <<
"] : " <<
nodeNames[
ii] << G4endl;
36 const G4LogicalVolumeStore * lvs = G4LogicalVolumeStore::GetInstance();
37 G4cout <<
"CheckOverlap::update nLV= " << lvs->size() << G4endl;
38 std::vector<G4LogicalVolume *>::const_iterator lvcite;
40 for (lvcite = lvs->begin(); lvcite != lvs->end(); lvcite++) {
42 if ((*lvcite)->GetName() == (G4String)(
nodeNames[
ii])) {
43 topLV.push_back((*lvcite));
47 G4cout <<
"Name of node " << (++
i) <<
" : "
48 << (*lvcite)->GetName() << G4endl;
52 G4VPhysicalVolume * theTopPV =
getTopPV();
53 topLV.push_back(theTopPV->GetLogicalVolume());
56 if (
topLV.size() == 0) {
57 G4cout <<
"No Top LV Found" << G4endl;
60 G4cout <<
"Top LV Name " <<
topLV[
ii]->GetName() << G4endl;
67 unsigned int leafDepth) {
71 std::set< G4LogicalVolume * > lvDaughters;
72 int NoDaughters = lv->GetNoDaughters();
73 while ((NoDaughters--)>0) {
74 G4VPhysicalVolume * pvD = lv->GetDaughter(NoDaughters);
76 lvDaughters.insert(pvD->GetLogicalVolume());
79 std::set< G4LogicalVolume * >::const_iterator scite;
80 mmlvpv::const_iterator mmcite;
83 for (scite = lvDaughters.begin(); scite != lvDaughters.end(); scite++) {
84 std::pair< mmlvpv::iterator, mmlvpv::iterator > mmER = lvpvDaughters.equal_range(*scite);
86 for (mmcite = mmER.first ; mmcite != mmER.second; mmcite++)
87 checkPV((*mmcite).second, leafDepth+1);
98 if (pv->GetMotherLogical()) mother = pv->GetMotherLogical()->GetName();
99 if (!pv->IsReplicated()) {
100 G4PVPlacement* pvplace =
dynamic_cast<G4PVPlacement*
>(
pv);
101 G4bool
ok = pvplace->CheckOverlaps(
nPoints);
102 G4cout <<
"Placed PV " << pvplace->GetName()
103 <<
" Number " << pvplace->GetCopyNo()
104 <<
" in mother " << mother <<
" at depth "
105 << leafDepth <<
" Status " << ok << G4endl;
107 if(pv->GetRotation() == 0) {
108 G4cout <<
"Translation " << pv->GetTranslation()
109 <<
" and with no rotation" << G4endl;
111 G4cout <<
"Translation " << pv->GetTranslation()
112 <<
" and with rotation "<< *(pv->GetRotation()) << G4endl;
114 G4LogicalVolume* lv = pv->GetLogicalVolume();
116 if (pv->GetMotherLogical()) {
117 lv = pv->GetMotherLogical();
122 if (pv->GetParameterisation() != 0) {
123 G4PVParameterised* pvparam =
dynamic_cast<G4PVParameterised*
>(
pv);
124 G4bool
ok = pvparam->CheckOverlaps(
nPoints);
125 G4cout <<
"Parametrized PV " << pvparam->GetName()
126 <<
" in mother " << mother <<
" at depth "
127 << leafDepth <<
" Status " << ok << G4endl;
134 return G4TransportationManager::GetTransportationManager()
135 ->GetNavigatorForTracking()->GetWorldVolume();
139 G4cout <<
"Dump of " << str <<
" Logical Volume "
140 << lv->GetName() <<
" Solid: "
141 << lv->GetSolid()->GetName() <<
" Material: "
142 << lv->GetMaterial()->GetName() << G4endl;
143 G4cout << *(lv->GetSolid()) << G4endl;
void checkPV(G4VPhysicalVolume *pv, unsigned int leafDepth)
T getUntrackedParameter(std::string const &, T const &) const
void checkHierarchyLeafPVLV(G4LogicalVolume *lv, unsigned int leafDepth)
std::multimap< G4LogicalVolume *, G4VPhysicalVolume *, std::less< G4LogicalVolume * > > mmlvpv
void update(const BeginOfRun *run)
This routine will be called when the appropriate signal arrives.
void dumpLV(G4LogicalVolume *lv, std::string str)
std::vector< G4LogicalVolume * > topLV
Container::value_type value_type
std::vector< std::string > nodeNames
CheckOverlap(edm::ParameterSet const &p)
G4VPhysicalVolume * getTopPV()