| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

gen.py

Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 
00003 """
00004 Generate AD PMT Detector Elements.
00005 
00006 This generates the Structure XML for all AD PMTs into the TDS at
00007 /dd/Structure/AdPmts and files in to DDDB/AdPmtStructure/*.xml.
00008 
00009 This needs to match the hand-written XML in DDDB/AdPmts/geometry.xml.
00010 
00011 """
00012 
00013 class AdPmtStructure:
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('AdPmtStructure');
00025         adcat.refs = []
00026         adcat.things = []
00027         topcat.refs = [ adcat ]
00028         topcat.things = []
00029 
00030         ees = []
00031         for site,adcount in zip(AdPmtStructure.sites,AdPmts.adcounts):
00032             cat = Catalog('%s-ad'%site);
00033             cat.refs=[]
00034             for iad in range(0,adcount):
00035                 iad += 1
00036                 eename="%s%dpmts"%(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 AdPmts:
00049 
00050     lvname="/dd/Geometry/PMT/lvPmtHemiwPmtHolder"
00051     lvname2="/dd/Geometry/PMT/lvHeadonPmtFrame"
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     # this must match what Conventions/Detectors does
00062     def pmtid(self,site,adn,icol,iring):
00063         return (site<<24)|(adn<<16)|(iring<<8)|icol
00064 
00065 
00066     def write(self,outdir):
00067 
00068         from XmlDetDescGen.util import XmlFile, Comment
00069         from XmlDetDescGen.structure import DetElem,UserParameter
00070 
00071         for adn in range(0,self.adcount):
00072             adn += 1
00073 
00074             pmts = []
00075 
00076             ipmt = 0
00077             for iring in range(0,8):
00078                 iring += 1
00079                 
00080                 for icol in range(0,24):
00081                     icol += 1
00082                     ipmt = ipmt+1
00083                     pmtid = self.pmtid(siteid,adn,icol,iring)
00084                     data = {
00085                         'site':site,
00086                         'siteid':siteid,
00087                         'adnum':adn,
00088                         'ringnum':iring,
00089                         'columnnum':icol,
00090                         'pmtid':pmtid
00091                         }
00092                     
00093                     de = DetElem('%(site)s-ad%(adnum)d-ring%(ringnum)d-column%(columnnum)d'%data,
00094                                  self.lvname,
00095                                  npath="pvAdPmtArray/pvAdPmtArrayRotated/pvAdPmtRingInCyl:%(ringnum)s/pvAdPmtInRing:%(columnnum)d/pvAdPmtUnit"%data,
00096                                  support="/dd/Structure/AD/%(site)s-oil%(adnum)d"%data)
00097                     
00098                     de.refs = [UserParameter("PmtID","int",['0x%x'%pmtid],desc="Packed PMT ID")]
00099                     
00100                     pmts.append(de)
00101                     continue
00102                 continue
00103 
00104             iring = 0      
00105             for icol in range(0,6):
00106                 icol += 1
00107                 ipmt = ipmt+1
00108                 pmtid = self.pmtid(siteid,adn,icol,iring)
00109                 data = {
00110                         'site':site,
00111                         'siteid':siteid,
00112                         'adnum':adn,
00113                         'ringnum':iring,
00114                         'columnnum':icol,
00115                         'pmtid':pmtid
00116                         }
00117                     
00118                 de = DetElem('%(site)s-ad%(adnum)d-ring%(ringnum)d-column%(columnnum)d'%data,
00119                              self.lvname2,
00120                              npath="pvAdPmtArray/pvAd2inPmt:%(columnnum)d"%data,
00121                              support="/dd/Structure/AD/%(site)s-oil%(adnum)d"%data)
00122                     
00123                 de.refs = [UserParameter("PmtID","int",['0x%x'%pmtid],desc="Packed PMT ID")]
00124                     
00125                 pmts.append(de)
00126                 continue
00127 
00128             file = XmlFile()
00129             file.objects = pmts
00130             file.write(outdir+"/%s%d.xml"%(self.site,adn))
00131             continue
00132                              
00133 if '__main__' == __name__:
00134 
00135     import sys,os
00136     try:
00137         xddroot = sys.argv[1]
00138     except IndexError:
00139         xddroot = os.getenv("XMLDETDESCROOT")
00140 
00141     if not xddroot:
00142         print "No XMLDETDESCROOT directory given by environment or command line"
00143         print "Using current working directory"
00144         xddroot="."
00145 
00146     xddroot = ".."
00147 
00148     outdir=xddroot + "/DDDB/AdPmtStructure"
00149     if not os.path.exists(outdir):
00150         print "Directory does not exist, please make first"
00151         print outdir
00152         sys.exit(1)
00153 
00154 
00155     for site,siteid,adcount in zip(AdPmtStructure.sites,AdPmts.siteids,AdPmts.adcounts):
00156         aps = AdPmts(site,siteid,adcount)
00157         aps.write(outdir)
00158 
00159     aps = AdPmtStructure()
00160     aps.write(outdir)
00161 
00162 
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:14:01 2011 for XmlDetDesc by doxygen 1.4.7