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 lvtopname="/dd/Geometry/AdDetails/lvTopESR"
00051 lvbotname="/dd/Geometry/AdDetails/lvBotESR"
00052 siteids = [0x01,0x02,0x04]
00053 adcounts = [ 2, 2, 4]
00054
00055 def __init__(self,site,siteid,adcount):
00056 self.site = site
00057 self.siteid = siteid
00058 self.adcount = adcount
00059 pass
00060
00061 def write(self,outdir):
00062
00063 from XmlDetDescGen.util import XmlFile, Comment
00064 from XmlDetDescGen.structure import DetElem,UserParameter
00065
00066 for adn in range(0,self.adcount):
00067 adn += 1
00068
00069 reflectors = []
00070
00071 data = {
00072 'site':site,
00073 'siteid':siteid,
00074 'adnum':adn,
00075 }
00076
00077 de = DetElem('%(site)s-ad%(adnum)d-topesr'%data,
00078 self.lvtopname,
00079 npath="pvTopReflector/pvTopRefGap/pvTopESR",
00080 support="/dd/Structure/AD/%(site)s-oil%(adnum)d"%data)
00081 reflectors.append(de)
00082
00083 de = DetElem('%(site)s-ad%(adnum)d-botesr'%data,
00084 self.lvbotname,
00085 npath="pvBotReflector/pvBotRefGap/pvBotESR",
00086 support="/dd/Structure/AD/%(site)s-oil%(adnum)d"%data)
00087 reflectors.append(de)
00088
00089 file = XmlFile()
00090 file.objects = reflectors
00091 file.write(outdir+"/%s%d.xml"%(self.site,adn))
00092 continue
00093
00094 if '__main__' == __name__:
00095
00096 import sys,os
00097 try:
00098 xddroot = sys.argv[1]
00099 except IndexError:
00100 xddroot = os.getenv("XMLDETDESCROOT")
00101
00102 if not xddroot:
00103 print "No XMLDETDESCROOT directory given by environment or command line"
00104 print "Using current working directory"
00105 xddroot="."
00106
00107 outdir=xddroot + "/DDDB/AdReflectorStructure"
00108 if not os.path.exists(outdir):
00109 print "Directory does not exist, please make first"
00110 print outdir
00111 sys.exit(1)
00112
00113
00114 for site,siteid,adcount in zip(AdReflectorStructure.sites,AdReflectors.siteids,AdReflectors.adcounts):
00115 aps = AdReflectors(site,siteid,adcount)
00116 aps.write(outdir)
00117
00118 aps = AdReflectorStructure()
00119 aps.write(outdir)
00120
00121