source: trunk/examples/advanced/Tiara/source/py_modules/slabGeometry.py @ 807

Last change on this file since 807 was 807, checked in by garnier, 16 years ago

update

File size: 4.8 KB
Line 
1# $Id: slabGeometry.py,v 1.3 2003/06/20 12:41:07 dressel Exp $
2# -------------------------------------------------------------------
3# GEANT4 tag $Name:  $
4# -------------------------------------------------------------------
5#
6import math
7import G4Kernel
8import parallelHall
9import posLog
10
11class SlabedGeometry(object):
12    def __init__(self, tiaraSpecs, cellWidth, parallelGeo):
13        self.arrPosLogVol = []
14        self.normalCellSolid = None
15        self.logNormCell = None
16        self.lastCellSolid = None
17        self.logLastCell = None
18        self.createCells(tiaraSpecs, cellWidth, parallelGeo)
19
20    def createCells(self, tiaraSpecs, cellWidth, parallelGeo):
21        print "SlabedGeometry::createCells:"
22        print "halfLength", parallelGeo.halfLength,\
23              "halfWidth", parallelGeo.halfWidth
24        nCells = int(tiaraSpecs.experiment.shieldWidth / cellWidth)
25        print "cellWidth", cellWidth
26        print "nCells", nCells
27        zCellStart = tiaraSpecs.dimensions.targetPosZ + \
28                     tiaraSpecs.dimensions.distTargetExperiment + \
29                     tiaraSpecs.experiment.colWidth
30        print "zCellStart", zCellStart
31        zCellRegion = parallelGeo.halfLength - zCellStart
32        print "zCellRegion", zCellRegion
33        lengthLastCell = zCellRegion - nCells * cellWidth
34        print "lengthLastCell", lengthLastCell
35        print "sum cell length:", lengthLastCell + nCells * cellWidth
36        vacuum = tiaraSpecs.materials.GetMaterial("vacuum")
37        self.normalCellSolid = G4Kernel.G4Box("cellBox", 
38                                              parallelGeo.halfWidth,
39                                              parallelGeo.halfWidth,
40                                              cellWidth/2)
41        print "normal box:",parallelGeo.halfWidth,cellWidth/2
42        self.logNormCell = G4Kernel.G4LogicalVolume(self.normalCellSolid,
43                                                    vacuum,
44                                                    "cellLog")
45
46        zPos = zCellStart - 0.5 * cellWidth
47        for i in range(nCells):
48            zPos += cellWidth
49            self.arrPosLogVol.append(posLog.PosLog(zPos, self.logNormCell))
50            print "zPos", zPos
51           
52           
53        self.lastCellSolid = G4Kernel.G4Box("lastCellBox", 
54                                            parallelGeo.halfWidth,
55                                            parallelGeo.halfWidth,
56                                            lengthLastCell/2)
57        self.logLastCell = G4Kernel.G4LogicalVolume(self.lastCellSolid,
58                                                    vacuum,
59                                                    "lastCellLog")
60
61        print "last cell:", parallelGeo.halfWidth, lengthLastCell/2
62
63        zPos += cellWidth/2+lengthLastCell/2
64        self.arrPosLogVol.append(posLog.PosLog(zPos, self.logLastCell))
65        print "last cell zPos", zPos
66           
67
68
69       
70    def getArrPosLogVol(self):
71        return self.arrPosLogVol
72
73
74
75class SlabedImportanceGeometry(object):
76    def __init__(self, tiaraSpecs, cellWidth, impBase, parallelGeo = None):
77        self.parallelGeo = parallelGeo
78        self.tiaraSpecs = tiaraSpecs
79        self.cellWidth = cellWidth
80        self.iStore = None
81        self.geometryCells = []
82        self.base = impBase
83        cellwidth_cm = cellWidth / CLHEP.cm
84        self.nameExt = "-cellWidth_%(cellwidth_cm)d" %vars()
85        self.buildParallelGeometry()
86        self.setImportances()
87       
88    def buildParallelGeometry(self):
89        self.parallelGeo = parallelHall.ParallelHall(self.tiaraSpecs)
90
91        self.slabedGeo = SlabedGeometry(self.tiaraSpecs,
92                                        self.cellWidth,
93                                        self.parallelGeo)
94        self.parallelGeo.placeCells(self.slabedGeo.getArrPosLogVol())
95        self.iStore = G4Kernel.G4IStore(self.parallelGeo.getWorldVolume())
96        self.geometryCells = self.parallelGeo.getGeometryCells()
97       
98    def setImportances(self):
99        worldCell = G4Kernel.G4GeometryCell(self.parallelGeo.\
100                                            getWorldVolume(), 0)
101        self.iStore.AddImportanceGeometryCell(1, worldCell)
102        nCells = len(self.geometryCells)
103        for i in range(nCells-1):
104            cell = self.geometryCells[i]
105            importance = math.pow(self.base, i)
106            print "i=", importance
107            self.iStore.AddImportanceGeometryCell(importance, cell)
108        lastCell = self.geometryCells[nCells-1]
109        importance = math.pow(self.base, nCells-2)
110        print "last cells i=", importance
111        self.iStore.AddImportanceGeometryCell(importance, lastCell)
112       
113
114           
115    def getWorldVolume(self):
116        return self.parallelGeo.getWorldVolume()
117   
118    def getImportanceStore(self):
119        return self.iStore
Note: See TracBrowser for help on using the repository browser.