Public Member Functions | |
def | __init__ |
def | param_fullname |
def | param_diffname |
def | parameters |
def | logical_volume |
def | physical_volume |
Public Attributes | |
name | |
nick | |
thickness | |
material | |
parent | |
child | |
params | |
logvol | |
physvol |
Definition at line 18 of file gen.py.
def gen::Element::__init__ | ( | self, | ||
name, | ||||
nick, | ||||
material, | ||||
thickness = "0*m" , |
||||
parent = None | ||||
) |
Definition at line 19 of file gen.py.
00019 : 00020 self.name=name 00021 self.nick=nick 00022 self.thickness=thickness 00023 self.material=material 00024 self.parent=parent 00025 self.child=None 00026 if parent: parent.child = self 00027 self.params = {} 00028 self.logvol = {} 00029 self.physvol = {} 00030 return 00031 def param_fullname(self,param_name,site=""):
def gen::Element::param_fullname | ( | self, | ||
param_name, | ||||
site = "" | ||||
) |
def gen::Element::param_diffname | ( | self, | ||
diffname, | ||||
param_name, | ||||
site = "" | ||||
) |
Definition at line 37 of file gen.py.
00037 : 00038 return "%sPool%s%s"%(site,diffname,param_name) 00039 00040 def parameters(self):
def gen::Element::parameters | ( | self | ) |
Definition at line 41 of file gen.py.
00041 : 00042 from XmlDetDescGen.parameter import Parameter 00043 00044 if self.params: return self.params 00045 00046 p = Parameter(self.param_fullname("Thickness"),self.thickness,"Thickness of %s"%self.nick) 00047 self.params[self.param_fullname("Thickness")] = p 00048 00049 00050 if self.parent.name == 'HallBot': 00051 parentThickness = "0*m" 00052 else: 00053 parentThickness = self.parent.param_fullname('Thickness') 00054 for site in ["Near","Far"]: 00055 for dim in ["X","Y"]: 00056 pname = "Size"+dim 00057 self.params[self.param_fullname(pname,site)] = \ 00058 Parameter(self.param_fullname(pname,site), 00059 self.parent.param_fullname(pname,site)+"-2*"+parentThickness) 00060 continue 00061 continue 00062 00063 self.params[self.param_fullname('SizeZ')] = \ 00064 Parameter(self.param_fullname('SizeZ'), 00065 self.parent.param_fullname('SizeZ')+"-"+parentThickness) 00066 00067 self.params[self.param_fullname('LiftSizeZ')] = \ 00068 Parameter(self.param_fullname('LiftSizeZ'),"0.5*"+parentThickness) 00069 00070 bevel = [] 00071 elem = self 00072 while elem: 00073 bevel.append(elem.param_fullname('Thickness')) 00074 elem = elem.child 00075 continue 00076 self.params[self.param_fullname('BevelSize')] = \ 00077 Parameter(self.param_fullname('BevelSize'), 00078 "2*(sqrt(2)-1)*(%s)"%"+".join(bevel)) 00079 00080 return self.params 00081 def logical_volume(self,site):
def gen::Element::logical_volume | ( | self, | ||
site | ||||
) |
Definition at line 82 of file gen.py.
00082 : 00083 try: 00084 return self.logvol[site] 00085 except KeyError: 00086 pass 00087 00088 from XmlDetDescGen.geometry import Box,Boolean,BooleanSecondary,Logvol,PosXYZ,RotXYZ 00089 00090 # Make the subtracted ones first 00091 subtracted = [] 00092 signX = ['0.5*%s', '0.5*%s','-0.5*%s','-0.5*%s'] 00093 signY = ['0.5*%s','-0.5*%s', '0.5*%s','-0.5*%s'] 00094 signX2 = ['0.5*%s', '0.5*%s','-0.5*%s','-0.5*%s'] 00095 signY2 = ['0*%s', '0.5*%s','-0.5*%s', '0.5*%s','-0.5*%s'] 00096 signR = ['0*%s', '0.5*%s','-0.5*%s', '0.5*%s','-0.5*%s'] 00097 00098 if self.name=="OWS": 00099 00100 for ind in range(0,4): 00101 subtracted.append(BooleanSecondary( 00102 Box(site.lower()+'_pool_'+self.name.lower()+'_sub%d'%ind, 00103 sizeX=self.param_diffname('Liner','BevelSize'), 00104 sizeY=self.param_diffname('Liner','BevelSize'), 00105 sizeZ="SubShift+" + self.param_fullname('SizeZ')), 00106 PosXYZ(X=signX[ind]%self.param_diffname('Liner','SizeX',site), 00107 Y=signY[ind]%self.param_diffname('Liner','SizeY',site), 00108 Z="0*m"), 00109 RotXYZ(rotZ="45*degree"))) 00110 00111 for ind in range(4,8): 00112 subtracted.append(BooleanSecondary( 00113 Box(site.lower()+'_pool_'+self.name.lower()+'_sub%d'%ind, 00114 sizeX=self.param_fullname('BevelSize'), 00115 sizeY=self.param_fullname('BevelSize'), 00116 sizeZ=self.param_fullname('SizeZ')), 00117 PosXYZ(X=signX[ind-4]%self.param_fullname('SizeX',site), 00118 Y=signY[ind-4]%self.param_fullname('SizeY',site), 00119 Z="-TopGapThickness"), 00120 RotXYZ(rotZ="45*degree"))) 00121 00122 subtracted.append(BooleanSecondary( 00123 Box(site.lower()+'_pool_'+self.name.lower()+'_sub8', 00124 sizeX=self.param_fullname('SizeX',site), 00125 sizeY="SubShift", 00126 sizeZ=self.param_fullname('SizeZ')), 00127 PosXYZ(X="0*cm", 00128 Y=self.param_fullname('SizeY',site)+"/2."+"+SubShift/2.-PoolLinerThickness", 00129 Z="-TopGapThickness"), 00130 RotXYZ(rotZ="0*degree"))) 00131 00132 subtracted.append(BooleanSecondary( 00133 Box(site.lower()+'_pool_'+self.name.lower()+'_sub9', 00134 sizeX=self.param_fullname('SizeX',site), 00135 sizeY="SubShift", 00136 sizeZ=self.param_fullname('SizeZ')), 00137 PosXYZ(X="0*cm", 00138 Y=self.param_fullname('SizeY',site)+"/(-2.)"+"-SubShift/2.+PoolLinerThickness", 00139 Z="-TopGapThickness"), 00140 RotXYZ(rotZ="0*degree"))) 00141 00142 subtracted.append(BooleanSecondary( 00143 Box(site.lower()+'_pool_'+self.name.lower()+'_sub10', 00144 sizeX=self.param_fullname('SizeX',site), 00145 sizeY="SubShift", 00146 sizeZ=self.param_fullname('SizeZ')), 00147 PosXYZ(X=self.param_fullname('SizeX',site)+"/2."+"+SubShift/2.-PoolLinerThickness", 00148 Y="0*cm", 00149 Z="-TopGapThickness"), 00150 RotXYZ(rotZ="90*degree"))) 00151 00152 subtracted.append(BooleanSecondary( 00153 Box(site.lower()+'_pool_'+self.name.lower()+'_sub11', 00154 sizeX=self.param_fullname('SizeX',site), 00155 sizeY="SubShift", 00156 sizeZ=self.param_fullname('SizeZ')), 00157 PosXYZ(X=self.param_fullname('SizeX',site)+"/(-2.)"+"-SubShift/2.+PoolLinerThickness", 00158 Y="0*cm", 00159 Z="-TopGapThickness"), 00160 RotXYZ(rotZ="90*degree"))) 00161 00162 00163 00164 # Make the subtraction 00165 sub = Boolean("subtraction",site.lower()+'_pool_'+self.name.lower()+'_box', 00166 Box(site.lower()+'_pool_'+self.name.lower(), 00167 sizeX=self.param_diffname('Liner','SizeX',site), 00168 sizeY=self.param_diffname('Liner','SizeY',site), 00169 sizeZ=self.param_fullname('SizeZ')), 00170 subtracted) 00171 00172 elif self.name=="IWS": 00173 00174 for ind in range(0,4): 00175 subtracted.append(BooleanSecondary( 00176 Box(site.lower()+'_pool_'+self.name.lower()+'_sub%d'%ind, 00177 sizeX=self.param_diffname('Curtain','BevelSize'), 00178 sizeY=self.param_diffname('Curtain','BevelSize'), 00179 sizeZ="SubShift+" + self.param_fullname('SizeZ')), 00180 PosXYZ(X=signX[ind]%self.param_diffname('Curtain','SizeX',site), 00181 Y=signY[ind]%self.param_diffname('Curtain','SizeY',site), 00182 Z="0*m"), 00183 RotXYZ(rotZ="45*degree"))) 00184 00185 for ind in range(4,8): 00186 subtracted.append(BooleanSecondary( 00187 Box(site.lower()+'_pool_'+self.name.lower()+'_sub%d'%ind, 00188 sizeX=self.param_fullname('BevelSize'), 00189 sizeY=self.param_fullname('BevelSize'), 00190 sizeZ=self.param_fullname('SizeZ')), 00191 PosXYZ(X=signX[ind-4]%self.param_fullname('SizeX',site), 00192 Y=signY[ind-4]%self.param_fullname('SizeY',site), 00193 Z="-TopGapThickness"), 00194 RotXYZ(rotZ="45*degree"))) 00195 00196 subtracted.append(BooleanSecondary( 00197 Box(site.lower()+'_pool_'+self.name.lower()+'_sub8', 00198 sizeX=self.param_fullname('SizeX',site), 00199 sizeY="SubShift", 00200 sizeZ=self.param_fullname('SizeZ')), 00201 PosXYZ(X="0*cm", 00202 Y=self.param_fullname('SizeY',site)+"/2."+"+SubShift/2.-PoolCurtainThickness", 00203 Z="-TopGapThickness"), 00204 RotXYZ(rotZ="0*degree"))) 00205 00206 subtracted.append(BooleanSecondary( 00207 Box(site.lower()+'_pool_'+self.name.lower()+'_sub9', 00208 sizeX=self.param_fullname('SizeX',site), 00209 sizeY="SubShift", 00210 sizeZ=self.param_fullname('SizeZ')), 00211 PosXYZ(X="0*cm", 00212 Y=self.param_fullname('SizeY',site)+"/(-2.)"+"-SubShift/2.+PoolCurtainThickness", 00213 Z="-TopGapThickness"), 00214 RotXYZ(rotZ="0*degree"))) 00215 00216 subtracted.append(BooleanSecondary( 00217 Box(site.lower()+'_pool_'+self.name.lower()+'_sub10', 00218 sizeX=self.param_fullname('SizeX',site), 00219 sizeY="SubShift", 00220 sizeZ=self.param_fullname('SizeZ')), 00221 PosXYZ(X=self.param_fullname('SizeX',site)+"/2."+"+SubShift/2.-PoolCurtainThickness", 00222 Y="0*cm", 00223 Z="-TopGapThickness"), 00224 RotXYZ(rotZ="90*degree"))) 00225 00226 subtracted.append(BooleanSecondary( 00227 Box(site.lower()+'_pool_'+self.name.lower()+'_sub11', 00228 sizeX=self.param_fullname('SizeX',site), 00229 sizeY="SubShift", 00230 sizeZ=self.param_fullname('SizeZ')), 00231 PosXYZ(X=self.param_fullname('SizeX',site)+"/(-2.)"+"-SubShift/2.+PoolCurtainThickness", 00232 Y="0*cm", 00233 Z="-TopGapThickness"), 00234 RotXYZ(rotZ="90*degree"))) 00235 00236 00237 00238 # Make the subtraction 00239 sub = Boolean("subtraction",site.lower()+'_pool_'+self.name.lower()+'_box', 00240 Box(site.lower()+'_pool_'+self.name.lower(), 00241 sizeX=self.param_diffname('Curtain','SizeX',site), 00242 sizeY=self.param_diffname('Curtain','SizeY',site), 00243 sizeZ=self.param_fullname('SizeZ')), 00244 subtracted) 00245 00246 else: 00247 for ind in range(0,4): 00248 subtracted.append(BooleanSecondary( 00249 Box(site.lower()+'_pool_'+self.name.lower()+'_sub%d'%ind, 00250 sizeX=self.param_fullname('BevelSize'), 00251 sizeY=self.param_fullname('BevelSize'), 00252 sizeZ="1*cm+"+self.param_fullname('SizeZ')), 00253 PosXYZ(X=signX[ind]%self.param_fullname('SizeX',site), 00254 Y=signY[ind]%self.param_fullname('SizeY',site), 00255 Z="0*m"), 00256 RotXYZ(rotZ="45*degree"))) 00257 00258 # Make the subtraction 00259 sub = Boolean("subtraction",site.lower()+'_pool_'+self.name.lower()+'_box', 00260 Box(site.lower()+'_pool_'+self.name.lower(), 00261 sizeX=self.param_fullname('SizeX',site), 00262 sizeY=self.param_fullname('SizeY',site), 00263 sizeZ=self.param_fullname('SizeZ')), 00264 subtracted) 00265 00266 00267 if self.child: 00268 from XmlDetDescGen.geometry import Physvol 00269 00270 pvs = self.child.physical_volume(site) 00271 if gen_pool_pmts and self.name == "OWS": 00272 pvs.append(Physvol("pv%sOutPTE"%site,"/dd/Geometry/PmtPanel/lv%sOutPTE"%site)) 00273 00274 00275 else: # must be OWS, add ADEs 00276 #from XmlDetDescGen.util import ExternalEntity 00277 #pvs = [ ExternalEntity('AD%sPlacements'%site) ] 00278 00279 from XmlDetDescGen.geometry import Physvol, PosXYZ 00280 00281 pvs = [] 00282 if site == 'Near': 00283 pvs.append(Physvol("pvNearADE1","/dd/Geometry/AD/lvADE", 00284 PosXYZ(X="1*(0.5*NearPoolIWSSizeX-PoolIWSThickness)", 00285 Z="ADadeZplace"))); 00286 pvs.append(Physvol("pvNearADE2","/dd/Geometry/AD/lvADE", 00287 PosXYZ(X="-1*(0.5*NearPoolIWSSizeX-PoolIWSThickness)", 00288 Z="ADadeZplace"))); 00289 else: 00290 pvs.append(Physvol("pvFarADE1","/dd/Geometry/AD/lvADE", 00291 PosXYZ(X="1*(0.5*FarPoolIWSSizeX-PoolIWSThickness)", 00292 Y="1*(0.5*FarPoolIWSSizeY-PoolIWSThickness)", 00293 Z="ADadeZplace"))) 00294 pvs.append(Physvol("pvFarADE2","/dd/Geometry/AD/lvADE", 00295 PosXYZ(X="-1*(0.5*FarPoolIWSSizeX-PoolIWSThickness)", 00296 Y="1*(0.5*FarPoolIWSSizeY-PoolIWSThickness)", 00297 Z="ADadeZplace"))) 00298 pvs.append(Physvol("pvFarADE3","/dd/Geometry/AD/lvADE", 00299 PosXYZ(X="-1*(0.5*FarPoolIWSSizeX-PoolIWSThickness)", 00300 Y="-1*(0.5*FarPoolIWSSizeY-PoolIWSThickness)", 00301 Z="ADadeZplace"))) 00302 pvs.append(Physvol("pvFarADE4","/dd/Geometry/AD/lvADE", 00303 PosXYZ(X="1*(0.5*FarPoolIWSSizeX-PoolIWSThickness)", 00304 Y="-1*(0.5*FarPoolIWSSizeY-PoolIWSThickness)", 00305 Z="ADadeZplace"))) 00306 if gen_pool_pmts: 00307 pvs.append(Physvol("pv%sInPTE"%site,"/dd/Geometry/PmtPanel/lv%sInPTE"%site)) 00308 00309 from XmlDetDescGen.util import ExternalEntity 00310 pvs.append(ExternalEntity("%sHandWrittenPhysVols"%site)) 00311 00312 lv = Logvol('lv'+site+'Pool'+self.name,self.material,sub,pvs) 00313 self.logvol[site] = lv; 00314 return lv; 00315 def physical_volume(self,site):
def gen::Element::physical_volume | ( | self, | ||
site | ||||
) |
Definition at line 316 of file gen.py.
00316 : 00317 try: 00318 return self.physvol[site] 00319 except KeyError: 00320 pass 00321 00322 from XmlDetDescGen.geometry import Physvol,PosXYZ 00323 00324 lv = self.logical_volume(site) 00325 #print site,self.name,lv.name 00326 pv = Physvol('pv'+site+'Pool'+self.name,lv, 00327 PosXYZ(X="0*m",Y="0*m",Z=self.param_fullname('LiftSizeZ'))) 00328 self.physvol[site] = [pv] 00329 return self.physvol[site] 00330 00331 00332 class Pool: