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