188 {
189
192 if (!pPVModel) return;
193
194
195
196
197
198
199
200
201
202
204
208
211 G4int detail = verbosity % 10;
212
213 if (verbosity < 10 && pCurrentPV->IsReplicated()) {
214
215 PVPath::const_reverse_iterator thisID = drawnPVPath.rbegin();
216 PVPath::const_reverse_iterator motherID = ++drawnPVPath.rbegin();
219 ++i) {
220 if (i->back().GetPhysicalVolume()->GetLogicalVolume() ==
221 thisID->GetPhysicalVolume()->GetLogicalVolume()) {
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240 if (motherID == drawnPVPath.rend() &&
241 i->size() <= 1)
242 ignore = true;
243 if (motherID != drawnPVPath.rend() &&
244 i->size() > 1 &&
245 motherID->GetPhysicalVolume()->GetLogicalVolume() ==
246 (*i)[i->size() - 2].GetPhysicalVolume()->GetLogicalVolume())
247 ignore = true;
248 }
249 }
250 if (ignore) {
252 return;
253 }
254 }
255
258
259 if (verbosity < 10 &&
262
263
264
266 G4Exception(
"G4ASCIITreeSceneHandler::RequestPrimitives",
267 "vistree0001",
269 "Replica unexpected");
270 }
271
274
277 }
280 return;
281 }
282 }
284
285
286
291 }
292
298
299 for (
size_t i = 0; i < drawnPVPath.size(); i++ ) *
fpOutFile <<
" ";
300
302 << "\":" << currentCopyNo;
303
305 if (verbosity < 10) {
306
314 if (pP) {
315 if (detail < 3) {
320 << " (" << nReplicas << " parametrised volumes)";
321 }
322 }
323 else {
328 << " (" << nReplicas << " replicas)";
329 }
330 }
331 } else {
333 if (verbosity < 10) {
334
336
338 }
339 }
340 }
341
342 if (detail >= 1) {
344 << pCurrentLV->
GetName() <<
"\"";
346 if (sd) {
349 if (roGeom) {
351 }
353 }
354 }
355
356 if (detail >= 2) {
359 << "\"("
361 }
362
363 if (detail >= 3) {
366 << ", ";
367 if (pCurrentMaterial) {
370 <<
" (" << pCurrentMaterial->
GetName() <<
")";
371 } else {
373 }
374 }
375
376 if (detail >= 5) {
377 if (pCurrentMaterial) {
379
382 false,
383
384 pMaterial);
385 G4double daughter_subtracted_volume =
386 daughter_subtracted_mass / pCurrentMaterial->
GetDensity();
388 <<
G4BestUnit(daughter_subtracted_volume,
"Volume")
389 << ", "
390 <<
G4BestUnit(daughter_subtracted_mass,
"Mass");
391 }
392 }
393
395 fLVSet.insert(pCurrentLV);
396 }
397
399
400 return;
401}
std::vector< PVNodeID > PVPath
std::set< PVPath >::iterator ReplicaSetIterator
G4int GetNoDaughters() const
G4double GetMass(G4bool forced=false, G4bool propagate=true, G4Material *parMaterial=0)
G4VSensitiveDetector * GetSensitiveDetector() const
G4double GetDensity() const
const G4String & GetName() const
const std::vector< G4PhysicalVolumeNodeID > & GetDrawnPVPath() const
G4VPhysicalVolume * GetCurrentPV() const
G4LogicalVolume * GetCurrentLV() const
G4Material * GetCurrentMaterial() const
virtual G4bool IsReplicated() const =0
G4LogicalVolume * GetLogicalVolume() const
virtual void GetReplicationData(EAxis &axis, G4int &nReplicas, G4double &width, G4double &offset, G4bool &consuming) const =0
virtual G4VPVParameterisation * GetParameterisation() const =0
virtual G4bool IsParameterised() const =0
G4VReadOutGeometry * GetROgeometry() const
virtual G4GeometryType GetEntityType() const =0
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)