00001
00002
00003 """
00004 Generate AD Reflector Detector Elements.
00005
00006 This generates the Structure XML for all AD Reflectors into the TDS at
00007 /dd/Structure/AdDetails/ and files in to DDDB/AdReflectorStructure/*.xml.
00008
00009 This needs to match the hand-written XML in DDDB/AdDetails/geometry.xml.
00010
00011 """
00012
00013 class AdReflectorStructure:
00014
00015 sites = ['db', 'la', 'far']
00016
00017 def write(self,outdir):
00018 from XmlDetDescGen.util import XmlFile, Comment
00019 from XmlDetDescGen.catalog import Catalog
00020 from XmlDetDescGen.reference import Reference
00021 from XmlDetDescGen.util import ExternalEntity
00022
00023 topcat = Catalog('Structure');
00024 adcat = Catalog('AdReflectorStructure');
00025 adcat.refs = []
00026 adcat.things = []
00027 topcat.refs = [ adcat ]
00028 topcat.things = []
00029
00030 ees = []
00031 for site,adcount in zip(AdReflectorStructure.sites,AdReflectors.adcounts):
00032 cat = Catalog('%s-ad'%site);
00033 cat.refs=[]
00034 for iad in range(0,adcount):
00035 iad += 1
00036 eename="%s%dreflectors"%(site,iad)
00037 ees.append((eename,"%s%d.xml"%(site,iad)))
00038 cat.refs.append(ExternalEntity(eename))
00039 continue
00040 adcat.refs.append(cat)
00041
00042 file = XmlFile(dtd="../DTD/structure.dtd",
00043 external_entities=ees)
00044 file.objects = [ adcat ]
00045 file.write(outdir+"/structure.xml")
00046
00047
00048 class AdReflectors:
00049
00050 lvbotname="/dd/Geometry/AdDetails/lvBotESR"
00051 siteids = [0x01,0x02,0x04]
00052 adcounts = [ 2, 2, 4]
00053
00054 def __init__(self,site,siteid,adcount):
00055 self.site = site
00056 self.siteid = siteid
00057 self.adcount = adcount
00058 pass
00059
00060 def write(self,outdir):
00061
00062 from XmlDetDescGen.util import XmlFile, Comment
00063 from XmlDetDescGen.structure import DetElem,UserParameter
00064
00065 for adn in range(0,self.adcount):
00066 adn += 1
00067
00068 reflectors = []
00069
00070 data = {
00071 'site':site,
00072 'siteid':siteid,
00073 'adnum':adn,
00074 }
00075
00076 de = DetElem('%(site)s-ad%(adnum)d-botesr'%data,
00077 self.lvbotname,
00078 npath="pvBotReflector/pvBotRefGap/pvBotESR",
00079 support="/dd/Structure/AD/%(site)s-oil%(adnum)d"%data)
00080 reflectors.append(de)
00081
00082 file = XmlFile()
00083 file.objects = reflectors
00084 file.write(outdir+"/%s%d.xml"%(self.site,adn))
00085 continue
00086
00087 if '__main__' == __name__:
00088
00089 import sys,os
00090 try:
00091 xddroot = sys.argv[1]
00092 except IndexError:
00093 xddroot = os.getenv("XMLDETDESCROOT")
00094
00095 if not xddroot:
00096 print "No XMLDETDESCROOT directory given by environment or command line"
00097 print "Using current working directory"
00098 xddroot="."
00099
00100
00101 xddroot = ".."
00102
00103 outdir=xddroot + "/DDDB/AdReflectorStructure"
00104 if not os.path.exists(outdir):
00105 print "Directory does not exist, please make first"
00106 print outdir
00107 sys.exit(1)
00108
00109
00110 for site,siteid,adcount in zip(AdReflectorStructure.sites,AdReflectors.siteids,AdReflectors.adcounts):
00111 aps = AdReflectors(site,siteid,adcount)
00112 aps.write(outdir)
00113
00114 aps = AdReflectorStructure()
00115 aps.write(outdir)
00116
00117