Geant4  10.03
G4LogicalVolume.icc
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: G4LogicalVolume.icc 99379 2016-09-20 09:45:19Z gcosmo $
28 //
29 //
30 // class G4LogicalVolume Inline Implementation file
31 //
32 // 15.01.13 - G.Cosmo, A.Dotti: Modified for thread-safety for MT
33 // 10.20.97 - P. MoraDeFreitas : Added SetFastSimulation method
34 // 05.11.98 - M. Verderi: Add Get/Set methods for fBiasWeight
35 // 09.11.98 - J. Apostolakis: Changed MagneticField to FieldManager
36 // 12.02.99 - S.Giani: Added set/get methods for voxelization quality
37 // 18.04.01 - G.Cosmo: Migrated to STL vector
38 // 17.05.02 - G.Cosmo: Added IsToOptimise() method
39 // --------------------------------------------------------------------
40 
41 // ********************************************************************
42 // GetName
43 // ********************************************************************
44 //
45 inline
46 const G4String& G4LogicalVolume::GetName() const
47 {
48  return fName;
49 }
50 
51 // ********************************************************************
52 // SetName
53 // ********************************************************************
54 //
55 inline
56 void G4LogicalVolume::SetName(const G4String& pName)
57 {
58  fName = pName;
59 }
60 
61 // ********************************************************************
62 // GetInstanceID
63 // ********************************************************************
64 //
65 inline
66 G4int G4LogicalVolume::GetInstanceID() const
67 {
68  return instanceID;
69 }
70 
71 // ********************************************************************
72 // GetMasterFieldManager
73 // ********************************************************************
74 //
75 inline
76 G4FieldManager* G4LogicalVolume::GetMasterFieldManager() const
77 {
78  return fFieldManager;
79 }
80 
81 // ********************************************************************
82 // GetNoDaughters
83 // ********************************************************************
84 //
85 inline
86 G4int G4LogicalVolume::GetNoDaughters() const
87 {
88  return fDaughters.size();
89 }
90 
91 // ********************************************************************
92 // GetDaughter
93 // ********************************************************************
94 //
95 inline
96 G4VPhysicalVolume* G4LogicalVolume::GetDaughter(const G4int i) const
97 {
98  return fDaughters[i];
99 }
100 
101 // ********************************************************************
102 // GetFastSimulationManager
103 // ********************************************************************
104 //
105 inline
106 G4FastSimulationManager* G4LogicalVolume::GetFastSimulationManager () const
107 {
108  G4FastSimulationManager* fFSM = 0;
109  if(fRegion) fFSM = fRegion->GetFastSimulationManager();
110  return fFSM;
111 }
112 
113 // ********************************************************************
114 // IsDaughter
115 // ********************************************************************
116 //
117 inline
118 G4bool G4LogicalVolume::IsDaughter(const G4VPhysicalVolume* p) const
119 {
120  G4PhysicalVolumeList::const_iterator i;
121  for ( i=fDaughters.begin(); i!=fDaughters.end(); ++i )
122  {
123  if (**i==*p) return true;
124  }
125  return false;
126 }
127 
128 // ********************************************************************
129 // CharacteriseDaughters
130 // ********************************************************************
131 //
132 inline
133 EVolume G4LogicalVolume::CharacteriseDaughters() const
134 {
135  EVolume type;
136  G4VPhysicalVolume *pVol;
137 
138  if ( GetNoDaughters()==1 )
139  {
140  pVol = GetDaughter(0);
141  type = pVol->VolumeType();
142  }
143  else
144  {
145  type = kNormal;
146  }
147  return type;
148 }
149 
150 // ********************************************************************
151 // GetMasterSolid
152 // ********************************************************************
153 //
154 inline
155 G4VSolid* G4LogicalVolume::GetMasterSolid() const
156 {
157  return fSolid;
158 }
159 
160 // ********************************************************************
161 // GetMasterSensitiveDetector
162 // ********************************************************************
163 //
164 inline
165 G4VSensitiveDetector* G4LogicalVolume::GetMasterSensitiveDetector() const
166 {
167  return fSensitiveDetector;
168 }
169 
170 // ********************************************************************
171 // GetUserLimits
172 // ********************************************************************
173 //
174 inline
175 G4UserLimits* G4LogicalVolume::GetUserLimits() const
176 {
177  if(fUserLimits) return fUserLimits;
178  if(fRegion) return fRegion->GetUserLimits();
179  return 0;
180 }
181 
182 // ********************************************************************
183 // SetUserLimits
184 // ********************************************************************
185 //
186 inline
187 void G4LogicalVolume::SetUserLimits(G4UserLimits* pULimits)
188 {
189  fUserLimits = pULimits;
190 }
191 
192 // ********************************************************************
193 // GetVoxelHeader
194 // ********************************************************************
195 //
196 inline
197 G4SmartVoxelHeader* G4LogicalVolume::GetVoxelHeader() const
198 {
199  return fVoxel;
200 }
201 
202 // ********************************************************************
203 // SetVoxelHeader
204 // ********************************************************************
205 //
206 inline
207 void G4LogicalVolume::SetVoxelHeader(G4SmartVoxelHeader* pVoxel)
208 {
209  fVoxel = pVoxel;
210 }
211 
212 // ********************************************************************
213 // GetSmartless
214 // ********************************************************************
215 //
216 inline
217 G4double G4LogicalVolume::GetSmartless() const
218 {
219  return fSmartless;
220 }
221 
222 // ********************************************************************
223 // SetSmartless
224 // ********************************************************************
225 //
226 inline
227 void G4LogicalVolume::SetSmartless(G4double smt)
228 {
229  fSmartless = smt;
230 }
231 
232 // ********************************************************************
233 // IsToOptimise
234 // ********************************************************************
235 //
236 inline
237 G4bool G4LogicalVolume::IsToOptimise() const
238 {
239  return fOptimise;
240 }
241 
242 // ********************************************************************
243 // SetOptimisation
244 // ********************************************************************
245 //
246 inline
247 void G4LogicalVolume::SetOptimisation(G4bool optim)
248 {
249  fOptimise = optim;
250 }
251 
252 // ********************************************************************
253 // IsRootRegion
254 // ********************************************************************
255 //
256 inline
257 G4bool G4LogicalVolume::IsRootRegion() const
258 {
259  return fRootRegion;
260 }
261 
262 // ********************************************************************
263 // SetRegionRootFlag
264 // ********************************************************************
265 //
266 inline
267 void G4LogicalVolume::SetRegionRootFlag(G4bool rreg)
268 {
269  fRootRegion = rreg;
270 }
271 
272 // ********************************************************************
273 // IsRegion
274 // ********************************************************************
275 //
276 inline
277 G4bool G4LogicalVolume::IsRegion() const
278 {
279  G4bool reg = false;
280  if (fRegion) reg = true;
281  return reg;
282 }
283 
284 // ********************************************************************
285 // SetRegion
286 // ********************************************************************
287 //
288 inline
289 void G4LogicalVolume::SetRegion(G4Region* reg)
290 {
291  fRegion = reg;
292 }
293 
294 // ********************************************************************
295 // GetRegion
296 // ********************************************************************
297 //
298 inline
299 G4Region* G4LogicalVolume::GetRegion() const
300 {
301  return fRegion;
302 }
303 
304 // ********************************************************************
305 // PropagateRegion
306 // ********************************************************************
307 //
308 inline
309 void G4LogicalVolume::PropagateRegion()
310 {
311  fRegion->ScanVolumeTree(this, true);
312 }
313 
314 // ********************************************************************
315 // Lock
316 // ********************************************************************
317 //
318 inline
319 void G4LogicalVolume::Lock()
320 {
321  fLock = true;
322 }
323 
324 // ********************************************************************
325 // Operator ==
326 // ********************************************************************
327 //
328 inline
329 G4bool G4LogicalVolume::operator == ( const G4LogicalVolume& lv) const
330 {
331  return (this==&lv) ? true : false;
332 }
333 
334 // ********************************************************************
335 // GetVisAttributes
336 // ********************************************************************
337 //
338 inline
339 const G4VisAttributes* G4LogicalVolume::GetVisAttributes () const
340 {
341  return fVisAttributes;
342 }
343 
344 // ********************************************************************
345 // SetVisAttributes
346 // ********************************************************************
347 //
348 inline
349 void G4LogicalVolume::SetVisAttributes (const G4VisAttributes* pVA)
350 {
351  fVisAttributes = pVA;
352 }
353 
354 // ********************************************************************
355 // SetBiasWeight
356 // ********************************************************************
357 //
358 inline
359 void G4LogicalVolume::SetBiasWeight(G4double weight)
360 {
361  fBiasWeight = weight;
362 }
363 
364 // ********************************************************************
365 // GetBiasWeight
366 // ********************************************************************
367 //
368 inline
369 G4double G4LogicalVolume::GetBiasWeight() const
370 {
371  return fBiasWeight;
372 }