| 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 RPC Strip Detector Elements.
00005 
00006 This generates the Structure XML for all RPC Strip files into DDDB/RpcStripStructure/*.xml.
00007 
00008 This needs to match the hand-written XML in DDDB/RPC/geometry.xml.
00009 
00010 """
00011 
00012 class RpcStripStructure:
00013 
00014     sites = ['db', 'la', 'far']
00015 
00016     def write(self,outdir):
00017         from XmlDetDescGen.util import XmlFile, Comment
00018         from XmlDetDescGen.catalog import Catalog
00019         from XmlDetDescGen.reference import Reference
00020         from XmlDetDescGen.util import ExternalEntity
00021 
00022         topcat = Catalog('Structure');
00023         rpccat = Catalog('RpcStripStructure');
00024         rpccat.refs = []
00025         rpccat.things = []
00026         topcat.refs = [ rpccat ]
00027         topcat.things = []
00028 
00029         ees = []
00030         for site in RpcStripStructure.sites:
00031             cat = Catalog('%s-strip'%site);
00032             cat.refs=[]
00033             eename="%sstrips"%(site)
00034             ees.append((eename,"%s.xml"%(site)))
00035             cat.refs.append(ExternalEntity(eename))
00036             rpccat.refs.append(cat)
00037             
00038         file = XmlFile(dtd="../DTD/structure.dtd",
00039                        external_entities=ees)
00040         file.objects = [ rpccat ]
00041         file.write(outdir+"/structure.xml")
00042 
00043 class RpcStrips:
00044 
00045     lvname="/dd/Geometry/RPC/lvRPCStrip"
00046     siteids = [0x01,0x02,0x04]
00047     siteRpccol = [6,6,9]
00048     rpcid = 07
00049     siteRnames = ['Near','Near','Far']
00050    
00051 
00052     def __init__(self,site,siteid,sitecol,sitename):
00053         self.site = site
00054         self.siteid = siteid
00055         self.sitecol = sitecol
00056         self.sitename = sitename
00057         pass
00058 
00059     # this must match what Conventions/Detectors does
00060     def stripid(self,site,rpc,irow,icol,ilay,istr):
00061         return (site<<24)|(rpc<<16)|(irow<<12)|(icol<<8)|(ilay<<4)|istr
00062 
00063 
00064     def write(self,outdir):
00065 
00066         from XmlDetDescGen.util import XmlFile, Comment
00067         from XmlDetDescGen.structure import DetElem,UserParameter
00068         strips = []
00069         totmods = 0
00070         totstrips = 0
00071         for irow in range(0,9):
00072             irow += 1
00073             for icol in range(0,sitecol):
00074                 icol +=1
00075                 totmods += 1
00076                 for ilay in range(0,4):
00077                     ilay += 1
00078                     for istr in range(0,8):
00079                         istr += 1
00080                         totstrips = totstrips+1
00081                         stripid = self.stripid(siteid,self.rpcid,irow,icol,ilay,istr)
00082                         if irow%2 == 1:
00083                             rowloop = irow/2+1
00084                             unup = 'Un'
00085                         else:
00086                             rowloop =irow/2
00087                             unup = 'Up'
00088                         if icol == 1:
00089                             columnloop = icol
00090                             horslope = 'HorMod'
00091                         else:
00092                             columnloop = icol-1
00093                             horslope = 'SlopMod'
00094                         if ilay%2 == 1:
00095                             layloop = ilay/2+1
00096                             laychoose = '13'
00097                         else:
00098                             layloop = ilay/2
00099                             laychoose = '24'
00100                         data ={ 'site':site, 'rownum':irow, 'columnnum':icol, 'layernum':ilay, 'strnum':istr, 'sitename':sitename, 'rowloop':rowloop, 'columnloop':columnloop, 'layloop':layloop,'laychoose':laychoose, 'unup':unup, 'horslope':horslope }
00101                         if icol == 1:
00102                             npath="pv%(sitename)s%(unup)sHorModArray/pv%(sitename)s%(unup)sHorModColumn:%(rowloop)d/pv%(sitename)s%(unup)sHorModUnit/pvRPCFoam/pvBarCham%(laychoose)sArray/pvBarCham%(laychoose)sArrayOne:%(layloop)d/pvBarCham%(laychoose)sUnit/pvRPCGasgap%(laychoose)s/pvStrip%(laychoose)sArray/pvStrip%(laychoose)sArrayOne:%(strnum)d/pvStrip%(laychoose)sUnit"%data
00103                         elif irow%2 == 1:
00104                             npath="pv%(sitename)sUnSlopModArray/pv%(sitename)sUnSlopModOne:%(rowloop)d/pv%(sitename)sUnSlopMod:%(columnloop)d/pv%(sitename)sSlopModUnit/pvRPCFoam/pvBarCham%(laychoose)sArray/pvBarCham%(laychoose)sArrayOne:%(layloop)d/pvBarCham%(laychoose)sUnit/pvRPCGasgap%(laychoose)s/pvStrip%(laychoose)sArray/pvStrip%(laychoose)sArrayOne:%(strnum)d/pvStrip%(laychoose)sUnit"%data
00105                         else:
00106                             npath="pv%(sitename)sUpSlopModArray/pv%(sitename)sUpSlopModOne:%(rowloop)d/pv%(sitename)sUpSlopMod/pv%(sitename)sUnSlopMod:%(columnloop)d/pv%(sitename)sSlopModUnit/pvRPCFoam/pvBarCham%(laychoose)sArray/pvBarCham%(laychoose)sArrayOne:%(layloop)d/pvBarCham%(laychoose)sUnit/pvRPCGasgap%(laychoose)s/pvStrip%(laychoose)sArray/pvStrip%(laychoose)sArrayOne:%(strnum)d/pvStrip%(laychoose)sUnit"%data
00107 
00108                         de = DetElem('%(site)s-rpc-row%(rownum)d-column%(columnnum)d-layer%(layernum)d-strip%(strnum)d'%data,
00109                         self.lvname,
00110                         npath,
00111                         support="/dd/Structure/RPC/%(site)s-rpc"%data)
00112                         de.refs = [UserParameter("RpcID","int",['0x%x'%stripid],desc="Packed RpcStrip ID")]
00113                         strips.append(de)
00114                         continue
00115                     continue
00116                 continue
00117             continue
00118         print "RPC at %s-site total module number is %d"%(self.site, totmods)
00119         print "RPC at %s-site total read-out-strip channel number is %d"%(self.site, totstrips)
00120         file = XmlFile()
00121         file.objects = strips
00122         file.write(outdir+"/%s.xml"%self.site)
00123             
00124                              
00125 if '__main__' == __name__:
00126 
00127     import sys,os
00128     try:
00129         xddroot = sys.argv[1]
00130     except IndexError:
00131         xddroot = os.getenv("XMLDETDESCROOT")
00132 
00133     if not xddroot:
00134         print "No XMLDETDESCROOT directory given by environment or command line"
00135         print "Using current working directory"
00136         xddroot="."
00137 
00138     outdir=xddroot + "/DDDB/RpcStripStructure"
00139     if not os.path.exists(outdir):
00140         print "Directory does not exist, please make first"
00141         print outdir
00142         sys.exit(1)
00143 
00144     for site,siteid,sitecol,sitename in zip(RpcStripStructure.sites,RpcStrips.siteids,RpcStrips.siteRpccol,RpcStrips.siteRnames):
00145         aps = RpcStrips(site,siteid,sitecol,sitename)
00146         aps.write(outdir)
00147 
00148     aps = RpcStripStructure()
00149     aps.write(outdir)
00150 
00151 
00152 
00153 
| 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