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;
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());
57 G4cout <<
"No Top LV Found" << 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() ==
nullptr) {
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() !=
nullptr) {
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 dumpLV(G4LogicalVolume *lv, std::string str)
Container::value_type value_type
std::vector< G4LogicalVolume * > topLV
void update(const BeginOfRun *run) override
This routine will be called when the appropriate signal arrives.
std::vector< std::string > nodeNames
CheckOverlap(edm::ParameterSet const &p)
G4VPhysicalVolume * getTopPV()