Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4TouchablePropertiesScene.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
27//
28//
29// John Allison 22nd August 2018.
30// An artificial scene to find the properties of a touchable.
31
33
34//#include "G4PhysicalVolumeModel.hh"
35
37(G4PhysicalVolumeModel* pSearchPVModel,
38 const G4ModelingParameters::PVNameCopyNoPath& requiredTouchable)
39:fpSearchPVModel(pSearchPVModel)
40,fRequiredTouchable(requiredTouchable)
41{}
42
44
45void G4TouchablePropertiesScene::ProcessVolume (const G4VSolid& /*solid*/) {
46
47 const std::vector<G4PhysicalVolumeModel::G4PhysicalVolumeNodeID>&
48 fullPVPath = fpSearchPVModel->GetFullPVPath();
49
50 if (fRequiredTouchable.size() == fullPVPath.size()) {
52 std::vector<G4PhysicalVolumeModel::G4PhysicalVolumeNodeID>::const_iterator
53 iPVNodeId;
54 for (iNameCopyNo = fRequiredTouchable.begin(), iPVNodeId = fullPVPath.begin();
55 iNameCopyNo != fRequiredTouchable.end();
56 ++iNameCopyNo, ++iPVNodeId) {
57 if (!(
58 iNameCopyNo->GetName() ==
59 iPVNodeId->GetPhysicalVolume()->GetName() &&
60 iNameCopyNo->GetCopyNo() ==
61 iPVNodeId->GetPhysicalVolume()->GetCopyNo()
62 )) {
63 break;
64 }
65 }
66 if (iNameCopyNo == fRequiredTouchable.end()) {
67 fFoundTouchableProperties.fTouchablePath = fRequiredTouchable;
68 fFoundTouchableProperties.fpTouchablePV = fpSearchPVModel->GetCurrentPV();
69 fFoundTouchableProperties.fCopyNo = fpSearchPVModel->GetCurrentPVCopyNo();
70 fFoundTouchableProperties.fTouchableGlobalTransform = fpSearchPVModel->GetCurrentTransform();
71 fFoundTouchableProperties.fTouchableBaseFullPVPath = fpSearchPVModel->GetFullPVPath();
72 // Base path is one down from found PV
73 fFoundTouchableProperties.fTouchableBaseFullPVPath.pop_back();
74 fFoundTouchableProperties.fTouchableFullPVPath = fpSearchPVModel->GetFullPVPath();
75 fpSearchPVModel->Abort(); // No need to look further.
76 }
77 }
78}
PVNameCopyNoPath::const_iterator PVNameCopyNoPathConstIterator
std::vector< PVNameCopyNo > PVNameCopyNoPath
const G4Transform3D & GetCurrentTransform() const
G4VPhysicalVolume * GetCurrentPV() const
const std::vector< G4PhysicalVolumeNodeID > & GetFullPVPath() const
G4TouchablePropertiesScene(G4PhysicalVolumeModel *pSearchPVModel, const G4ModelingParameters::PVNameCopyNoPath &requiredTouchable)
G4ModelingParameters::PVNameCopyNoPath fTouchablePath
std::vector< G4PhysicalVolumeNodeID > fTouchableFullPVPath
std::vector< G4PhysicalVolumeNodeID > fTouchableBaseFullPVPath