Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4VReadOutGeometry.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// $Id$
28//
29
30#include "G4VReadOutGeometry.hh"
31#include "G4Navigator.hh"
32
33
35 :ROworld(0),fincludeList(0),
36 fexcludeList(0),touchableHistory(0)
37{
38 name = "unknown";
40}
41
43{
44 fincludeList = 0;
45 fexcludeList = 0;
46 name = right.name;
47 ROworld = right.ROworld;
50 // COPY CONSTRUCTOR NOT STRAIGHT FORWARD: need to copy the touchabelHistory
51 // VALUE, same for navigator and same for the World+Geom hierachy
52}
53
55 :ROworld(0),fincludeList(0),
56 fexcludeList(0),name(n),touchableHistory(0)
57{
59}
60
62{
63 //if(ROworld) delete ROworld; //should we do ? will it delete the goem tree also ?
64 if(fincludeList) delete fincludeList;
65 if(fexcludeList) delete fexcludeList;
67 if(ROnavigator) delete ROnavigator;
68}
69
71{
72 delete fincludeList; fincludeList = 0;
73 delete fexcludeList; fexcludeList = 0;
74 name = right.name;
75 ROworld = right.ROworld;
77 delete ROnavigator; ROnavigator = new G4Navigator();
78 return *this;
79}
80
82{ return (this == (G4VReadOutGeometry *) &right); }
83
85{ return (this != (G4VReadOutGeometry *) &right); }
86
88{
89 ROworld = Build();
91}
92
94{
95 ROhist = 0;
96 G4bool incFlg = true;
99 { incFlg = false; }
100 else if ((fincludeList)&&(fincludeList->CheckPV(PV)))
101 { incFlg = true; }
103 { incFlg = false; }
105 { incFlg = true; }
106 if(!incFlg) return false;
107
108 if(ROworld)
109 { incFlg = FindROTouchable(currentStep); }
110 if(incFlg)
111 { ROhist = touchableHistory; }
112 return incFlg;
113}
114
116{
117 // Update G4TouchableHistory object (touchableHistory)
118 // using the parallel readout world (ROworld)
119 // Return false in case the current Step is outside of the
120 // sensitive volume of the readout world.
121
122 // At first invokation, creates the touchable history. Note
123 // that default value (false) of Locate method is used.
124 // ---------> But the default Value is TRUE <-------------------- J.A.
126 {
129 currentStep->GetPreStepPoint()->GetPosition(),
130 currentStep->GetPreStepPoint()->GetMomentumDirection(),
132 }
133 else
134 {
136 currentStep->GetPreStepPoint()->GetPosition(),
137 currentStep->GetPreStepPoint()->GetMomentumDirection(),
139 true);
140 }
141 // Can the above be improved by the use of an isotropic safety
142 // in order to avoid LocateGlobalPointAndUpdateTouchable
143 // at each Step ?
144 // Should require that an RO geometry is notified at the
145 // starting of a track to avoid possible confusion looking
146 // at the safety value only.
147
148 // checks if volume is sensitive:
149 G4VPhysicalVolume* currentVolume = touchableHistory->GetVolume();
150 // checks first if a physical volume exists here:
151 if ( currentVolume )
152 {
153 return currentVolume->GetLogicalVolume()->
154 GetSensitiveDetector() != 0;
155 }
156 // no sensitive volume found: returns false
157 return false;
158}
159
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
void LocateGlobalPointAndUpdateTouchable(const G4ThreeVector &position, const G4ThreeVector &direction, G4VTouchable *touchableToUpdate, const G4bool RelativeSearch=true)
void SetWorldVolume(G4VPhysicalVolume *pWorld)
G4bool CheckLV(const G4LogicalVolume *lvp) const
G4bool CheckPV(const G4VPhysicalVolume *pvp) const
const G4ThreeVector & GetPosition() const
const G4ThreeVector & GetMomentumDirection() const
G4VPhysicalVolume * GetPhysicalVolume() const
Definition: G4Step.hh:78
G4StepPoint * GetPreStepPoint() const
G4VPhysicalVolume * GetVolume(G4int depth=0) const
G4LogicalVolume * GetLogicalVolume() const
G4VPhysicalVolume * ROworld
G4int operator==(const G4VReadOutGeometry &right) const
G4SensitiveVolumeList * fincludeList
G4Navigator * ROnavigator
virtual G4bool CheckROVolume(G4Step *, G4TouchableHistory *&)
G4int operator!=(const G4VReadOutGeometry &right) const
virtual G4bool FindROTouchable(G4Step *)
G4TouchableHistory * touchableHistory
const G4VReadOutGeometry & operator=(const G4VReadOutGeometry &right)
virtual G4VPhysicalVolume * Build()=0
G4SensitiveVolumeList * fexcludeList