2 // ********************************************************************
3 // * License and Disclaimer *
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. *
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. *
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 // ********************************************************************
27 // $Id: G4LogicalVolume.icc 99379 2016-09-20 09:45:19Z gcosmo $
30 // class G4LogicalVolume Inline Implementation file
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 // --------------------------------------------------------------------
41 // ********************************************************************
43 // ********************************************************************
46 const G4String& G4LogicalVolume::GetName() const
51 // ********************************************************************
53 // ********************************************************************
56 void G4LogicalVolume::SetName(const G4String& pName)
61 // ********************************************************************
63 // ********************************************************************
66 G4int G4LogicalVolume::GetInstanceID() const
71 // ********************************************************************
72 // GetMasterFieldManager
73 // ********************************************************************
76 G4FieldManager* G4LogicalVolume::GetMasterFieldManager() const
81 // ********************************************************************
83 // ********************************************************************
86 G4int G4LogicalVolume::GetNoDaughters() const
88 return fDaughters.size();
91 // ********************************************************************
93 // ********************************************************************
96 G4VPhysicalVolume* G4LogicalVolume::GetDaughter(const G4int i) const
101 // ********************************************************************
102 // GetFastSimulationManager
103 // ********************************************************************
106 G4FastSimulationManager* G4LogicalVolume::GetFastSimulationManager () const
108 G4FastSimulationManager* fFSM = 0;
109 if(fRegion) fFSM = fRegion->GetFastSimulationManager();
113 // ********************************************************************
115 // ********************************************************************
118 G4bool G4LogicalVolume::IsDaughter(const G4VPhysicalVolume* p) const
120 G4PhysicalVolumeList::const_iterator i;
121 for ( i=fDaughters.begin(); i!=fDaughters.end(); ++i )
123 if (**i==*p) return true;
128 // ********************************************************************
129 // CharacteriseDaughters
130 // ********************************************************************
133 EVolume G4LogicalVolume::CharacteriseDaughters() const
136 G4VPhysicalVolume *pVol;
138 if ( GetNoDaughters()==1 )
140 pVol = GetDaughter(0);
141 type = pVol->VolumeType();
150 // ********************************************************************
152 // ********************************************************************
155 G4VSolid* G4LogicalVolume::GetMasterSolid() const
160 // ********************************************************************
161 // GetMasterSensitiveDetector
162 // ********************************************************************
165 G4VSensitiveDetector* G4LogicalVolume::GetMasterSensitiveDetector() const
167 return fSensitiveDetector;
170 // ********************************************************************
172 // ********************************************************************
175 G4UserLimits* G4LogicalVolume::GetUserLimits() const
177 if(fUserLimits) return fUserLimits;
178 if(fRegion) return fRegion->GetUserLimits();
182 // ********************************************************************
184 // ********************************************************************
187 void G4LogicalVolume::SetUserLimits(G4UserLimits* pULimits)
189 fUserLimits = pULimits;
192 // ********************************************************************
194 // ********************************************************************
197 G4SmartVoxelHeader* G4LogicalVolume::GetVoxelHeader() const
202 // ********************************************************************
204 // ********************************************************************
207 void G4LogicalVolume::SetVoxelHeader(G4SmartVoxelHeader* pVoxel)
212 // ********************************************************************
214 // ********************************************************************
217 G4double G4LogicalVolume::GetSmartless() const
222 // ********************************************************************
224 // ********************************************************************
227 void G4LogicalVolume::SetSmartless(G4double smt)
232 // ********************************************************************
234 // ********************************************************************
237 G4bool G4LogicalVolume::IsToOptimise() const
242 // ********************************************************************
244 // ********************************************************************
247 void G4LogicalVolume::SetOptimisation(G4bool optim)
252 // ********************************************************************
254 // ********************************************************************
257 G4bool G4LogicalVolume::IsRootRegion() const
262 // ********************************************************************
264 // ********************************************************************
267 void G4LogicalVolume::SetRegionRootFlag(G4bool rreg)
272 // ********************************************************************
274 // ********************************************************************
277 G4bool G4LogicalVolume::IsRegion() const
280 if (fRegion) reg = true;
284 // ********************************************************************
286 // ********************************************************************
289 void G4LogicalVolume::SetRegion(G4Region* reg)
294 // ********************************************************************
296 // ********************************************************************
299 G4Region* G4LogicalVolume::GetRegion() const
304 // ********************************************************************
306 // ********************************************************************
309 void G4LogicalVolume::PropagateRegion()
311 fRegion->ScanVolumeTree(this, true);
314 // ********************************************************************
316 // ********************************************************************
319 void G4LogicalVolume::Lock()
324 // ********************************************************************
326 // ********************************************************************
329 G4bool G4LogicalVolume::operator == ( const G4LogicalVolume& lv) const
331 return (this==&lv) ? true : false;
334 // ********************************************************************
336 // ********************************************************************
339 const G4VisAttributes* G4LogicalVolume::GetVisAttributes () const
341 return fVisAttributes;
344 // ********************************************************************
346 // ********************************************************************
349 void G4LogicalVolume::SetVisAttributes (const G4VisAttributes* pVA)
351 fVisAttributes = pVA;
354 // ********************************************************************
356 // ********************************************************************
359 void G4LogicalVolume::SetBiasWeight(G4double weight)
361 fBiasWeight = weight;
364 // ********************************************************************
366 // ********************************************************************
369 G4double G4LogicalVolume::GetBiasWeight() const