Import Geant4 5.2.0 source tree
This commit is contained in:
@@ -0,0 +1,137 @@
|
||||
# $Id: variableGeometry.py,v 1.2 2003/06/16 17:06:45 dressel Exp $
|
||||
# -------------------------------------------------------------------
|
||||
# GEANT4 tag $Name: geant4-05-02 $
|
||||
# -------------------------------------------------------------------
|
||||
#
|
||||
import G4Kernel
|
||||
import parallelHall
|
||||
import posLog
|
||||
|
||||
class VariableSlobedGeometry(object):
|
||||
def __init__(self,\
|
||||
tiaraSpecs,
|
||||
cellSizeImportanceList,
|
||||
parallelGeo):
|
||||
self.arrPosLogVol = []
|
||||
self.normalCellSolids = []
|
||||
self.logNormCells = []
|
||||
self.lastCellSolid = None
|
||||
self.logLastCell = None
|
||||
self.createCells(tiaraSpecs,
|
||||
cellSizeImportanceList, parallelGeo)
|
||||
|
||||
def createCells(self, tiaraSpecs,
|
||||
cellSizeImportanceList, parallelGeo):
|
||||
nImps = len(cellSizeImportanceList)
|
||||
zCellStart = tiaraSpecs.dimensions.targetPosZ + \
|
||||
tiaraSpecs.dimensions.distTargetExperiment + \
|
||||
tiaraSpecs.experiment.colWidth
|
||||
zCellRegion = parallelGeo.halfLength - zCellStart
|
||||
print "zCellStart", zCellStart, "zCellRegion", zCellRegion
|
||||
vacuum = tiaraSpecs.materials.GetMaterial("vacuum")
|
||||
for i in range(nImps):
|
||||
ncsName = "cellBox_%(i)d" % vars()
|
||||
print "i", i, "cswidth", cellSizeImportanceList[i]["width"]
|
||||
ncs = G4Kernel.G4Box(ncsName,
|
||||
parallelGeo.halfWidth,
|
||||
parallelGeo.halfWidth,
|
||||
0.5 * cellSizeImportanceList[i]["width"])
|
||||
self.normalCellSolids.append(ncs)
|
||||
nclName = "cellLog_%(i)d" % vars()
|
||||
ncl = G4Kernel.G4LogicalVolume(ncs,
|
||||
vacuum,
|
||||
nclName)
|
||||
self.logNormCells.append(ncl)
|
||||
|
||||
zPos = zCellStart
|
||||
for i in range(nImps):
|
||||
zPos += 0.5 * cellSizeImportanceList[i]["width"]
|
||||
print "zPos", zPos, "cellNum", i
|
||||
self.arrPosLogVol.append(posLog.PosLog(zPos, self.logNormCells[i]))
|
||||
zPos += 0.5 * cellSizeImportanceList[i]["width"]
|
||||
|
||||
|
||||
allCellWidth = 0.0
|
||||
for i in range(nImps):
|
||||
allCellWidth+=cellSizeImportanceList[i]["width"]
|
||||
print "allCellWidth", allCellWidth
|
||||
lengthLastCell = zCellRegion - allCellWidth
|
||||
|
||||
self.lastCellSolid = G4Kernel.G4Box("lastCellBox",
|
||||
parallelGeo.halfWidth,
|
||||
parallelGeo.halfWidth,
|
||||
lengthLastCell/2)
|
||||
self.logLastCell = G4Kernel.G4LogicalVolume(self.lastCellSolid,
|
||||
vacuum,
|
||||
"lastCellLog")
|
||||
|
||||
zPos += lengthLastCell/2
|
||||
print "last cell zPos", zPos, "length", lengthLastCell
|
||||
self.arrPosLogVol.append(posLog.PosLog(zPos, self.logLastCell))
|
||||
|
||||
|
||||
def getArrPosLogVol(self):
|
||||
return self.arrPosLogVol
|
||||
|
||||
|
||||
class VariableImpSlabGeometry(object):
|
||||
def __init__(self, tiaraSpecs,
|
||||
parallelGeo = None):
|
||||
self.tiaraSpecs = tiaraSpecs
|
||||
self.cellSizeImportanceList = []
|
||||
self.parallelGeo = parallelGeo
|
||||
self.iStore = None
|
||||
self.geometryCells = []
|
||||
self.base = 0.0
|
||||
self.nameExt = "-variableCellWidth"
|
||||
|
||||
|
||||
def addCellImportance(self, width, faktor):
|
||||
self.cellSizeImportanceList.append(
|
||||
{"width":width, "faktor":faktor})
|
||||
|
||||
|
||||
def construct(self):
|
||||
nImps = len(self.cellSizeImportanceList)
|
||||
if nImps>0:
|
||||
for i in range(nImps):
|
||||
self.base+=1.0*self.cellSizeImportanceList[i]["faktor"]
|
||||
self.base/=nImps
|
||||
self.createParallelGeometry(self.tiaraSpecs)
|
||||
self.setImportances()
|
||||
|
||||
|
||||
def createParallelGeometry(self, tiaraSpecs):
|
||||
self.parallelGeo = parallelHall.ParallelHall(tiaraSpecs)
|
||||
self.slobedGeo = VariableSlobedGeometry(\
|
||||
tiaraSpecs,
|
||||
self.cellSizeImportanceList,
|
||||
self.parallelGeo)
|
||||
self.parallelGeo.placeCells(self.slobedGeo.getArrPosLogVol())
|
||||
self.iStore = G4Kernel.G4IStore(self.parallelGeo.getWorldVolume())
|
||||
self.geometryCells = self.parallelGeo.getGeometryCells()
|
||||
|
||||
def setImportances(self):
|
||||
worldCell = G4Kernel.G4GeometryCell(self.parallelGeo.\
|
||||
getWorldVolume(), 0)
|
||||
self.iStore.AddImportanceGeometryCell(1, worldCell)
|
||||
nCells = len(self.geometryCells)
|
||||
nImps = len(self.cellSizeImportanceList)
|
||||
if ((nCells - 1) != nImps):
|
||||
print "VariableImpSlabGeometry: ERROR importances and cells don't mach!", nCells, nImps
|
||||
importance = 1
|
||||
for i in range(nImps):
|
||||
cell = self.geometryCells[i]
|
||||
importance*=self.cellSizeImportanceList[i]["faktor"]
|
||||
print "i=", importance
|
||||
self.iStore.AddImportanceGeometryCell(importance, cell)
|
||||
|
||||
lastCell = self.geometryCells[nCells-1]
|
||||
print "last cells i=", importance
|
||||
self.iStore.AddImportanceGeometryCell(importance, lastCell)
|
||||
|
||||
def getWorldVolume(self):
|
||||
return self.parallelGeo.getWorldVolume()
|
||||
|
||||
def getImportanceStore(self):
|
||||
return self.iStore
|
||||
Reference in New Issue
Block a user