G4LogicalVolume.icc

Go to the documentation of this file.
00001 //
00002 // ********************************************************************
00003 // * License and Disclaimer                                           *
00004 // *                                                                  *
00005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
00006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
00007 // * conditions of the Geant4 Software License,  included in the file *
00008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
00009 // * include a list of copyright holders.                             *
00010 // *                                                                  *
00011 // * Neither the authors of this software system, nor their employing *
00012 // * institutes,nor the agencies providing financial support for this *
00013 // * work  make  any representation or  warranty, express or implied, *
00014 // * regarding  this  software system or assume any liability for its *
00015 // * use.  Please see the license in the file  LICENSE  and URL above *
00016 // * for the full disclaimer and the limitation of liability.         *
00017 // *                                                                  *
00018 // * This  code  implementation is the result of  the  scientific and *
00019 // * technical work of the GEANT4 collaboration.                      *
00020 // * By using,  copying,  modifying or  distributing the software (or *
00021 // * any work based  on the software)  you  agree  to acknowledge its *
00022 // * use  in  resulting  scientific  publications,  and indicate your *
00023 // * acceptance of all terms of the Geant4 Software license.          *
00024 // ********************************************************************
00025 //
00026 //
00027 // $Id$
00028 //
00029 // 
00030 // class G4LogicalVolume Inline Implementation file
00031 //
00032 // 10.20.97 - P. MoraDeFreitas : Added SetFastSimulation method.
00033 // 05.11.98 - M. Verderi: Add Get/Set methods for fBiasWeight
00034 // 09.11.98 - J. Apostolakis:  Changed MagneticField to FieldManager
00035 // 12.02.99 - S.Giani: Added set/get methods for voxelization quality
00036 // 18.04.01 - G.Cosmo: Migrated to STL vector
00037 // 17.05.02 - G.Cosmo: Added IsToOptimise() method
00038 // --------------------------------------------------------------------
00039 
00040 // ********************************************************************
00041 // GetName
00042 // ********************************************************************
00043 //
00044 inline
00045 G4String G4LogicalVolume::GetName() const
00046 {
00047   return fName;
00048 }
00049     
00050 // ********************************************************************
00051 // SetName
00052 // ********************************************************************
00053 //
00054 inline
00055 void G4LogicalVolume::SetName(const G4String& pName)
00056 {
00057   fName = pName;
00058 }
00059 
00060 // ********************************************************************
00061 // GetFieldManager
00062 // ********************************************************************
00063 //
00064 inline
00065 G4FieldManager* G4LogicalVolume::GetFieldManager() const
00066 {
00067   return fFieldManager;
00068 }
00069 
00070 // ********************************************************************
00071 // GetNoDaughters
00072 // ********************************************************************
00073 //
00074 inline
00075 G4int G4LogicalVolume::GetNoDaughters() const
00076 {
00077   return fDaughters.size();
00078 }
00079 
00080 // ********************************************************************
00081 // GetDaughter
00082 // ********************************************************************
00083 //
00084 inline
00085 G4VPhysicalVolume* G4LogicalVolume::GetDaughter(const G4int i) const
00086 {
00087   return fDaughters[i];
00088 }
00089 
00090 // ********************************************************************
00091 // GetFastSimulationManager
00092 // ********************************************************************
00093 //
00094 inline
00095 G4FastSimulationManager* G4LogicalVolume::GetFastSimulationManager () const 
00096 {
00097   G4FastSimulationManager* fFSM = 0;
00098   if(fRegion) fFSM = fRegion->GetFastSimulationManager();
00099   return fFSM;
00100 }
00101 
00102 // ********************************************************************
00103 // AddDaughter
00104 // ********************************************************************
00105 //
00106 inline
00107 void G4LogicalVolume::AddDaughter(G4VPhysicalVolume* pNewDaughter)
00108 {
00109   if( !fDaughters.empty() && fDaughters[0]->IsReplicated() )
00110   {
00111     std::ostringstream message;
00112     message << "ERROR - Attempt to place a volume in a mother volume" << G4endl
00113             << "        already containing a replicated volume." << G4endl
00114             << "        A volume can either contain several placements" << G4endl
00115             << "        or a unique replica or parameterised volume !" << G4endl
00116             << "           Mother logical volume: " << GetName() << G4endl
00117             << "           Placing volume: " << pNewDaughter->GetName() << G4endl;
00118     G4Exception("G4LogicalVolume::AddDaughter()", "GeomMgt0002",
00119                 FatalException, message,
00120                 "Replica or parameterised volume must be the only daughter !");
00121   }
00122 
00123   fMass = 0.;
00124   fDaughters.push_back(pNewDaughter);
00125 
00126   G4LogicalVolume* pDaughterLogical = pNewDaughter->GetLogicalVolume();
00127 
00128   // Propagate the Field Manager, if the daughter has no field Manager.
00129   //
00130   G4FieldManager* pDaughterFieldManager = pDaughterLogical->GetFieldManager();
00131 
00132   if( pDaughterFieldManager == 0 )
00133   {
00134     pDaughterLogical->SetFieldManager(fFieldManager, false);
00135   }
00136   if (fRegion)
00137   {
00138     PropagateRegion();
00139     fRegion->RegionModified(true);
00140   }
00141 }
00142 
00143 // ********************************************************************
00144 // IsDaughter
00145 // ********************************************************************
00146 //
00147 inline
00148 G4bool G4LogicalVolume::IsDaughter(const G4VPhysicalVolume* p) const
00149 {
00150   G4PhysicalVolumeList::const_iterator i;
00151   for ( i=fDaughters.begin(); i!=fDaughters.end(); ++i )
00152   {
00153     if (**i==*p) return true;
00154   }
00155   return false;
00156 }
00157 
00158 // ********************************************************************
00159 // RemoveDaughter
00160 // ********************************************************************
00161 //
00162 inline
00163 void G4LogicalVolume::RemoveDaughter(const G4VPhysicalVolume* p)
00164 {
00165   G4PhysicalVolumeList::iterator i;
00166   for ( i=fDaughters.begin(); i!=fDaughters.end(); ++i )
00167   {
00168     if (**i==*p)
00169     {
00170       fDaughters.erase(i);
00171       break;
00172     }
00173   }
00174   if (fRegion)
00175   {
00176     fRegion->RegionModified(true);
00177   }
00178   fMass = 0.;
00179 }
00180 
00181 // ********************************************************************
00182 // ClearDaughters
00183 // ********************************************************************
00184 //
00185 inline
00186 void G4LogicalVolume::ClearDaughters()
00187 {
00188   G4PhysicalVolumeList::iterator i;
00189   for ( i=fDaughters.begin(); i!=fDaughters.end(); ++i )
00190   {
00191     fDaughters.erase(i);
00192   }
00193   if (fRegion)
00194   {
00195     fRegion->RegionModified(true);
00196   }
00197   fMass = 0.;
00198 }
00199 
00200 // ********************************************************************
00201 // GetSolid
00202 // ********************************************************************
00203 //
00204 inline
00205 G4VSolid* G4LogicalVolume::GetSolid() const
00206 {
00207   return fSolid;
00208 }
00209 
00210 // ********************************************************************
00211 // SetSolid
00212 // ********************************************************************
00213 //
00214 inline
00215 void G4LogicalVolume::SetSolid(G4VSolid *pSolid)
00216 {
00217   assert(pSolid != 0);
00218   fSolid=pSolid;
00219   fMass = 0.;
00220 }
00221 
00222 // ********************************************************************
00223 // GetMaterial
00224 // ********************************************************************
00225 //
00226 inline
00227 G4Material* G4LogicalVolume::GetMaterial() const
00228 {
00229   return fMaterial;
00230 }
00231 
00232 // ********************************************************************
00233 // SetMaterial
00234 // ********************************************************************
00235 //
00236 inline
00237 void G4LogicalVolume::SetMaterial(G4Material *pMaterial)
00238 {
00239   fMaterial=pMaterial;
00240   fMass = 0.;
00241 }
00242 
00243 // ********************************************************************
00244 // UpdateMaterial
00245 // ********************************************************************
00246 //
00247 inline
00248 void G4LogicalVolume::UpdateMaterial(G4Material *pMaterial)
00249 {
00250   fMaterial=pMaterial;
00251   if(fRegion) { fCutsCouple = fRegion->FindCouple(pMaterial); }
00252   fMass = 0.;
00253 }
00254 
00255 // ********************************************************************
00256 // GetSensitiveDetector
00257 // ********************************************************************
00258 //
00259 inline
00260 G4VSensitiveDetector* G4LogicalVolume::GetSensitiveDetector() const
00261 {
00262   return fSensitiveDetector;
00263 }
00264 
00265 // ********************************************************************
00266 // SetSensitiveDetector
00267 // ********************************************************************
00268 //
00269 inline
00270 void G4LogicalVolume::SetSensitiveDetector(G4VSensitiveDetector* pSDetector)
00271 {
00272   fSensitiveDetector = pSDetector;
00273 }
00274 
00275 // ********************************************************************
00276 // GetUserLimits
00277 // ********************************************************************
00278 //
00279 inline
00280 G4UserLimits* G4LogicalVolume::GetUserLimits() const
00281 {
00282   if(fUserLimits) return fUserLimits;
00283   if(fRegion) return fRegion->GetUserLimits();
00284   return 0;
00285 }
00286 
00287 // ********************************************************************
00288 // SetUserLimits
00289 // ********************************************************************
00290 //
00291 inline
00292 void G4LogicalVolume::SetUserLimits(G4UserLimits* pULimits)
00293 {
00294   fUserLimits = pULimits;
00295 }
00296 
00297 // ********************************************************************
00298 // GetVoxelHeader
00299 // ********************************************************************
00300 //
00301 inline
00302 G4SmartVoxelHeader* G4LogicalVolume::GetVoxelHeader() const
00303 {
00304   return fVoxel;
00305 }
00306 
00307 // ********************************************************************
00308 // SetVoxelHeader
00309 // ********************************************************************
00310 //
00311 inline
00312 void G4LogicalVolume::SetVoxelHeader(G4SmartVoxelHeader* pVoxel)
00313 {
00314   fVoxel = pVoxel;
00315 }
00316 
00317 // ********************************************************************
00318 // GetSmartless
00319 // ********************************************************************
00320 //
00321 inline
00322 G4double G4LogicalVolume::GetSmartless() const
00323 {
00324   return fSmartless;
00325 }
00326 
00327 // ********************************************************************
00328 // SetSmartless
00329 // ********************************************************************
00330 //
00331 inline
00332 void G4LogicalVolume::SetSmartless(G4double smt)
00333 {
00334   fSmartless = smt;
00335 }
00336 
00337 // ********************************************************************
00338 // IsToOptimise
00339 // ********************************************************************
00340 //
00341 inline
00342 G4bool G4LogicalVolume::IsToOptimise() const
00343 {
00344   return fOptimise;
00345 }
00346 
00347 // ********************************************************************
00348 // SetOptimisation
00349 // ********************************************************************
00350 //
00351 inline
00352 void G4LogicalVolume::SetOptimisation(G4bool optim)
00353 {
00354   fOptimise = optim;
00355 }
00356 
00357 // ********************************************************************
00358 // IsRootRegion
00359 // ********************************************************************
00360 //
00361 inline
00362 G4bool G4LogicalVolume::IsRootRegion() const
00363 {
00364   return fRootRegion;
00365 }
00366 
00367 // ********************************************************************
00368 // SetRegionRootFlag
00369 // ********************************************************************
00370 //
00371 inline
00372 void G4LogicalVolume::SetRegionRootFlag(G4bool rreg)
00373 {
00374   fRootRegion = rreg;
00375 }
00376 
00377 // ********************************************************************
00378 // IsRegion
00379 // ********************************************************************
00380 //
00381 inline
00382 G4bool G4LogicalVolume::IsRegion() const
00383 {
00384   G4bool reg = false;
00385   if (fRegion) reg = true;
00386   return reg;
00387 }
00388 
00389 // ********************************************************************
00390 // SetRegion
00391 // ********************************************************************
00392 //
00393 inline
00394 void G4LogicalVolume::SetRegion(G4Region* reg)
00395 {
00396   fRegion = reg;
00397 }
00398 
00399 // ********************************************************************
00400 // GetRegion
00401 // ********************************************************************
00402 //
00403 inline
00404 G4Region* G4LogicalVolume::GetRegion() const
00405 {
00406   return fRegion;
00407 }
00408 
00409 // ********************************************************************
00410 // PropagateRegion
00411 // ********************************************************************
00412 //
00413 inline
00414 void G4LogicalVolume::PropagateRegion()
00415 {
00416   fRegion->ScanVolumeTree(this, true);
00417 }
00418 
00419 // ********************************************************************
00420 // GetMaterialCutsCouple
00421 // ********************************************************************
00422 //
00423 inline
00424 const G4MaterialCutsCouple* G4LogicalVolume::GetMaterialCutsCouple() const
00425 {
00426   return fCutsCouple;
00427 }
00428 
00429 // ********************************************************************
00430 // SetMaterialCutsCouple
00431 // ********************************************************************
00432 //
00433 inline
00434 void G4LogicalVolume::SetMaterialCutsCouple(G4MaterialCutsCouple* cuts)
00435 {
00436   fCutsCouple = cuts;
00437 }
00438 
00439 // ********************************************************************
00440 // Lock
00441 // ********************************************************************
00442 //
00443 inline
00444 void G4LogicalVolume::Lock()
00445 {
00446   fLock = true;
00447 }
00448 
00449 // ********************************************************************
00450 // Operator ==
00451 // ********************************************************************
00452 //
00453 inline
00454 G4bool G4LogicalVolume::operator == ( const G4LogicalVolume& lv) const
00455 {
00456   return (this==&lv) ? true : false;
00457 }
00458 
00459 // ********************************************************************
00460 // GetVisAttributes
00461 // ********************************************************************
00462 //
00463 inline
00464 const G4VisAttributes* G4LogicalVolume::GetVisAttributes () const
00465 {
00466   return fVisAttributes;
00467 }
00468 
00469 // ********************************************************************
00470 // SetVisAttributes
00471 // ********************************************************************
00472 //
00473 inline
00474 void G4LogicalVolume::SetVisAttributes (const G4VisAttributes* pVA)
00475 {
00476   fVisAttributes = pVA;
00477 }
00478 
00479 // ********************************************************************
00480 // SetBiasWeight
00481 // ********************************************************************
00482 //
00483 inline
00484 void G4LogicalVolume::SetBiasWeight(G4double weight)
00485 {
00486   fBiasWeight = weight;
00487 }
00488 
00489 // ********************************************************************
00490 // GetBiasWeight
00491 // ********************************************************************
00492 //
00493 inline
00494 G4double G4LogicalVolume::GetBiasWeight() const
00495 {
00496   return fBiasWeight;
00497 }
00498 

Generated on Mon May 27 17:48:49 2013 for Geant4 by  doxygen 1.4.7