Public Member Functions | |
def | __init__ |
def | geometry_catalog |
def | get_param_header |
def | get_pool_parameters |
def | parameters_file |
def | geometry_files |
def | thing_files |
def | detid |
def | structure_file |
Public Attributes | |
parameters_filename | |
geometry_filename | |
structure_filename | |
pool_elements | |
general_parameters | |
geometry_cat | |
outdir |
Definition at line 337 of file gen.py.
def gen::Pool::__init__ | ( | self | ) |
Definition at line 338 of file gen.py.
00338 : 00339 self.parameters_filename="parameters.xml" 00340 self.geometry_filename="geometry.xml" 00341 self.structure_filename="structure.xml" 00342 00343 hallbot = Element("HallBot","bottom of hall","Rock") 00344 dead = Element("Dead","dead space","DeadWater","84*mm",hallbot) 00345 # liner = Element("Liner","tyvek liner","Tyvek","50*micrometer",dead) 00346 liner = Element("Liner","tyvek liner","Tyvek","4*mm",dead) 00347 ows = Element("OWS","outer water shield","OwsWater","1.0*m",liner) 00348 # curtain = Element("Curtain","tyvek curtain","Tyvek","50*micrometer",ows) 00349 curtain = Element("Curtain","tyvek curtain","Tyvek","4*mm",ows) 00350 iws = Element("IWS","inner water shield","IwsWater","4.037*m",curtain) 00351 00352 self.pool_elements = { "Dead":dead, "Liner":liner, "OWS":ows, "Curtain":curtain, "IWS":iws } 00353 00354 #self.general_parameters = [ 00355 # Parameter("PoolLipHeight","0.2*m","Height of concrete lip around pool") 00356 # ] 00357 00358 self.geometry_cat = None 00359 self.outdir = "." 00360 return 00361 def geometry_catalog(self):
def gen::Pool::geometry_catalog | ( | self | ) |
Definition at line 362 of file gen.py.
00362 : 00363 if self.geometry_cat: return self.geometry_cat 00364 00365 from XmlDetDescGen.catalog import Catalog 00366 from XmlDetDescGen.reference import Reference 00367 00368 topcat = Catalog('Geometry'); 00369 poolcat = Catalog('Pool'); 00370 00371 # This is fake, just to get the right /dd/Geometry path 00372 topcat.refs = [ Reference("#Pool",poolcat) ] 00373 00374 for name in pool_element_names: 00375 ele = self.pool_elements[name] 00376 for site in ["Near","Far"]: 00377 lv = ele.logical_volume(site) 00378 poolcat.refs.append(Reference("%s.xml#%s"%(name,lv.name),lv)) 00379 continue 00380 continue 00381 00382 # Important, needed so full_paths can be set 00383 topcat.update() 00384 00385 self.geometry_cat = poolcat 00386 return poolcat 00387 00388 def get_param_header(self):
def gen::Pool::get_param_header | ( | self | ) |
Definition at line 389 of file gen.py.
00389 : 00390 00391 from XmlDetDescGen.util import Comment 00392 00393 s = [] 00394 s.append(''' 00395 Define the water pool. This is done by subsequently placing 00396 these volumes inside the bootom of the hall and then placing each 00397 in the previous. 00398 ''') 00399 for thing in pool_element_names: 00400 s.append(' - %s'%thing) 00401 continue 00402 s.append(''' 00403 Each of these elements are specified by their thickness relative 00404 to their parents and the assumptions that they are concentric in 00405 X and Y and are lifted by one thickness when placed so that all 00406 their tops are coplanar. In addition, a bevel size is 00407 calculated. This is used to subtract out the corners of the 00408 boxes to make octagonal shapes. It is assumed that Z sizes are 00409 site-independent. 00410 00411 This all results in parameters looking like: 00412 00413 NearPool_THING_SizeX 00414 NearPool_THING_SizeY 00415 FarPool_THING_SizeX 00416 FarPool_THING_SizeY 00417 Pool_THING_SizeZ 00418 Pool_THING_LiftZ 00419 Pool_THING_BevelSize 00420 00421 Where _THING_ is 00422 ''') 00423 for thing in pool_element_names: 00424 ele = self.pool_elements[thing] s.append(' %s - %s'%(ele.name,ele.nick))
def gen::Pool::get_pool_parameters | ( | self | ) |
Definition at line 425 of file gen.py.
00429 : 00430 from XmlDetDescGen.parameter import Parameter 00431 ret = [Parameter('TableHeight','2.5*m','Distance from pool floor to AD table'), 00432 Parameter("ADadeZplace",'TableHeight+0.5*ADadeHeight-0.5*PoolIWSSizeZ-PoolDeadThickness-PoolLinerThickness-PoolOWSThickness-PoolCurtainThickness','A position of AD adeelopes'),] 00433 00434 for thing in pool_element_names: 00435 ele = self.pool_elements[thing] 00436 params = ele.parameters() 00437 p = params[ele.param_fullname('Thickness')] 00438 ret.append(p) 00439 continue 00440 for thing in pool_element_names: 00441 ele = self.pool_elements[thing] 00442 for name,param in ele.params.iteritems(): 00443 if name == ele.param_fullname('Thickness'):continue 00444 ret.append(param) continue
def gen::Pool::parameters_file | ( | self | ) |
def gen::Pool::geometry_files | ( | self | ) |
Definition at line 453 of file gen.py.
00457 : 00458 from XmlDetDescGen.util import XmlFile,ExternalEntity 00459 file = XmlFile(dtd="../DTD/geometry.dtd", 00460 objects=[ExternalEntity("SiteParameters"), 00461 ExternalEntity("PoolParameters"), 00462 ExternalEntity("PoolDetailsParameters"), 00463 self.geometry_catalog()], 00464 external_entities=[("SiteParameters","../Sites/parameters.xml"),("PoolDetailsParameters","../PoolDetails/parameters.xml"), 00465 ("PoolParameters","parameters.xml")]) file.write(self.outdir+"/"+self.geometry_filename)
def gen::Pool::thing_files | ( | self | ) |
Definition at line 466 of file gen.py.
00470 : 00471 from XmlDetDescGen.util import XmlFile,ExternalEntity 00472 for name in pool_element_names: 00473 ele = self.pool_elements[name] 00474 00475 ees = [("SiteParameters","../Sites/parameters.xml"),("PoolDetailsParameters","../PoolDetails/parameters.xml"), 00476 ("PoolParameters","parameters.xml"), 00477 ("FarHandWrittenPhysVols","../PoolDetails/Far%sPhysVols.xml"%name), 00478 ("NearHandWrittenPhysVols","../PoolDetails/Near%sPhysVols.xml"%name)] 00479 00480 objects = [ExternalEntity("SiteParameters"),ExternalEntity("PoolDetailsParameters"), 00481 ExternalEntity("PoolParameters")] 00482 00483 if name == "IWS": 00484 ees += [("ADParameters","../AD/parameters.xml")] 00485 objects += [ExternalEntity("ADParameters")] 00486 pass 00487 00488 objects += [ele.logical_volume("Near"), 00489 ele.logical_volume("Far")] 00490 00491 file = XmlFile(dtd="../DTD/geometry.dtd", 00492 objects=objects, 00493 external_entities=ees) file.write("%s/%s.xml"%(self.outdir,name))
def gen::Pool::detid | ( | self, | ||
loc, | ||||
det | ||||
) |
Definition at line 494 of file gen.py.
00498 : 00499 # All hard coded numbers from Conventions/DetectorId.h 00500 if loc.lower() == 'db': 00501 iloc = 0x01 00502 elif loc.lower() == 'la': 00503 iloc = 0x02 00504 elif loc.lower() == 'far': 00505 iloc = 0x04 00506 else: 00507 iloc = 0x00 00508 if det.lower() == 'iws': 00509 idet = 5 00510 elif det.lower() == 'ows': 00511 idet = 6 00512 else: 00513 idet = 0 00514 detid = ((iloc<<24)|(idet<<16)) 00515 from XmlDetDescGen.structure import UserParameter 00516 return UserParameter("DetectorID","int", ['0x%x'%detid], desc="Packed Detector ID")
def gen::Pool::structure_file | ( | self | ) |
Definition at line 517 of file gen.py.
00521 : 00522 from XmlDetDescGen.util import XmlFile,ExternalEntity 00523 from XmlDetDescGen.reference import Reference 00524 from XmlDetDescGen.structure import DetElem 00525 from XmlDetDescGen.catalog import Catalog 00526 00527 ees = [ ("dbInnFinpmts", "../PoolPmtStructure/dbInnFin.xml"), 00528 ("dbOutFinpmts", "../PoolPmtStructure/dbOutFin.xml"), 00529 ("dbOutFoutpmts", "../PoolPmtStructure/dbOutFout.xml"), 00530 ("laInnFinpmts", "../PoolPmtStructure/laInnFin.xml"), 00531 ("laOutFinpmts", "../PoolPmtStructure/laOutFin.xml"), 00532 ("laOutFoutpmts", "../PoolPmtStructure/laOutFout.xml"), 00533 ("farInnFinpmts", "../PoolPmtStructure/farInnFin.xml"), 00534 ("farOutFinpmts", "../PoolPmtStructure/farOutFin.xml"), 00535 ("farOutFoutpmts", "../PoolPmtStructure/farOutFout.xml") 00536 ] 00537 00538 file = XmlFile(dtd="../DTD/structure.dtd", 00539 external_entities=ees) 00540 00541 # To assure logical volume's full_path is set 00542 gc = self.geometry_catalog() 00543 gc.update() 00544 00545 topcat = Catalog('Structure'); 00546 poolcat = Catalog('Pool'); 00547 # Clear our refs because some how this is filled with the 00548 # contents of the /Geometry/Pool catalog! Python bug??? 00549 poolcat.refs = [] 00550 topcat.refs = [ poolcat ] 00551 00552 base = "/dd/Structure/Pool/" 00553 00554 delist = {"DB":[],"LA":[],"Far":[]} 00555 00556 last_support = "/dd/Structure/Sites/%(loc)s-rock" 00557 00558 for (thing,npath) in pool_detelem_data: 00559 ele = self.pool_elements[thing] 00560 nf="Near" 00561 for loc,adn in zip(["DB","LA","Far"],[2,2,4]): 00562 if loc == "Far": nf = "Far" 00563 lv_name = '/dd/Geometry/Pool/'+ele.logical_volume(nf).name 00564 de = DetElem(loc.lower()+'-'+thing.lower(), 00565 lv_name, 00566 npath%{"loc":loc,"nf":nf}, 00567 last_support%{'loc':loc.lower()}) 00568 de.refs = [] 00569 if thing == 'IWS': 00570 for iad in range(0,adn): 00571 iad+=1 00572 href='../AD/structure.xml#%s-ade%d'%(loc.lower(),iad) 00573 de.refs.append(Reference(href,de)) 00574 continue 00575 if thing == 'IWS': 00576 de.refs.append(ExternalEntity(loc.lower()+"InnFinpmts")) 00577 if thing == 'OWS': 00578 de.refs.append(ExternalEntity(loc.lower()+"OutFinpmts")) 00579 de.refs.append(ExternalEntity(loc.lower()+"OutFoutpmts")) 00580 00581 if thing == 'IWS' or thing == 'OWS': 00582 de.refs.append(self.detid(loc,thing)) 00583 poolcat.things.append(de) 00584 delist[loc].append(de) 00585 continue 00586 last_support = base+"%(loc)s-"+ thing.lower() 00587 continue 00588 00589 00590 # Fix up detelemrefs 00591 for (k,lst) in delist.iteritems(): 00592 lst.reverse() 00593 while lst: 00594 de = lst.pop() 00595 try: 00596 next_de = lst[-1] 00597 except IndexError: 00598 break 00599 de.refs.insert(0,Reference("#%s"%next_de.name,next_de)) 00600 continue 00601 continue 00602 00603 file.objects = [ poolcat ] file.write(self.outdir+"/"+self.structure_filename)