53 std::vector<BDSParallelWorldInfo> worlds;
56 for (
const auto& pl : placements)
58 if (!pl.sequence.empty())
60 G4bool samplerWorldRequired =
false;
64 if (sType != BDSSamplerType::none)
66 samplerWorldRequired =
true;
71 worlds.push_back(info);
78 G4bool buildSamplerWorld,
79 G4bool buildPlacementFieldsWorld)
85 std::vector<G4VUserParallelWorld*> worldsRequiringPhysics;
88 if (buildSamplerWorld)
91 massWorld->RegisterParallelWorld(samplerWorld);
95 G4int samplerWorldID = massWorld->GetNumberOfParallelWorld() - 1;
96 massWorldBDS->SetSamplerWorldID(samplerWorldID);
98 acceleratorModel->RegisterParallelWorld(samplerWorld);
99 worldsRequiringPhysics.push_back(
dynamic_cast<G4VUserParallelWorld*
>(samplerWorld));
104 massWorld->RegisterParallelWorld(curvilinearWorld);
105 massWorld->RegisterParallelWorld(curvilinearBridgeWorld);
108 acceleratorModel->RegisterParallelWorld(curvilinearWorld);
109 acceleratorModel->RegisterParallelWorld(curvilinearBridgeWorld);
114 for (
const auto& info : worldInfos)
116 if (info.curvilinearWorld)
120 massWorld->RegisterParallelWorld(cLWorld);
121 massWorld->RegisterParallelWorld(cLBridgeWorld);
122 acceleratorModel->RegisterParallelWorld(cLWorld);
123 acceleratorModel->RegisterParallelWorld(cLBridgeWorld);
125 if (info.samplerWorld)
128 acceleratorModel->RegisterParallelWorld(sWorld);
129 worldsRequiringPhysics.push_back(
dynamic_cast<G4VUserParallelWorld*
>(sWorld));
130 massWorld->RegisterParallelWorld(sWorld);
140 importanceWorldGeometryFile,
141 importanceVolumeMapFile);
142 acceleratorModel->RegisterParallelWorld(importanceWorld);
143 massWorld->RegisterParallelWorld(importanceWorld);
144 worldsRequiringPhysics.push_back(
dynamic_cast<G4VUserParallelWorld*
>(importanceWorld));
148 if (buildPlacementFieldsWorld)
151 acceleratorModel->RegisterParallelWorld(placementFieldsPW);
152 massWorld->RegisterParallelWorld(placementFieldsPW);
155 return worldsRequiringPhysics;