]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TGeant4/TG4GeometryManager.cxx
limit max step for low density materials - fgLimitDensity, fgMaxStep added
[u/mrichter/AliRoot.git] / TGeant4 / TG4GeometryManager.cxx
index de2b544073598aab65651fbf760562226f09622c..686c02f751ef167fa5c147f4395f587c5982a7e7 100644 (file)
@@ -40,6 +40,8 @@
 void G3CLRead(G4String &, char *);
 
 TG4GeometryManager* TG4GeometryManager::fgInstance = 0;
+const G4double      TG4GeometryManager::fgLimitDensity = 0.001*(g/cm3);
+const G4double      TG4GeometryManager::fgMaxStep = 10*cm;
 
 //_____________________________________________________________________________
 TG4GeometryManager::TG4GeometryManager() 
@@ -922,7 +924,7 @@ void TG4GeometryManager::SetUserLimits(const TG4G3CutVector& cuts,
 
   for (G4int i=0; i<lvStore->size(); i++) {
     G4LogicalVolume* lv = (*lvStore)[i];
-
     // get limits from G3Med
     G4int mediumIndex = fGeometryServices->GetMediumId(lv);    
     G4UserLimits* limits = G3Med.get(mediumIndex)->GetLimits();
@@ -939,6 +941,10 @@ void TG4GeometryManager::SetUserLimits(const TG4G3CutVector& cuts,
         tg4Limits = new TG4Limits(name, cuts, controls); 
     }
     
+    // limit max step for low density materials (< AIR)
+    if (lv->GetMaterial()->GetDensity() < fgLimitDensity ) 
+      tg4Limits->SetMaxAllowedStep(fgMaxStep);
+    
     // update controls in limits according to the setup 
     // in the passed vector
     tg4Limits->Update(controls);