/search.css" rel="stylesheet" type="text/css"/> /search.js">
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

makeFeeCableMap.py
Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 #
00003 # Make a text table of the mapping between:
00004 #  Detector Sensors:         Identifies PMT/RPC by geometry in the experiment
00005 #  Electronics Channels IDs: Identifies crate/board/connectors in electronics
00006 #  Hardware IDs:             Identifies specific pieces of hardware/barcodes
00007 #
00008 # Unconnected channels/hardware are identified using IDs of type 'Unknown'
00009 
00010 import math
00011 from GaudiPython import gbl
00012 
00013 # Make shortcuts to DayaBay classes
00014 Detector = gbl.DayaBay.Detector
00015 Site = gbl.Site
00016 DetectorId = gbl.DetectorId
00017 AdPmtSensor = gbl.DayaBay.AdPmtSensor
00018 PoolPmtSensor = gbl.DayaBay.PoolPmtSensor
00019 FeeChannelId = gbl.DayaBay.FeeChannelId
00020 HardwareId = gbl.DayaBay.HardwareId
00021 PmtHardwareId = gbl.DayaBay.PmtHardwareId
00022 FeeHardwareId = gbl.DayaBay.FeeHardwareId
00023 Hardware = gbl.DayaBay.Hardware
00024 
00025 #for RPC
00026 FecChannelId = gbl.DayaBay.FecChannelId
00027 HardwareId = gbl.DayaBay.HardwareId
00028 RpcSensor = gbl.DayaBay.RpcSensor
00029 RpcHardwareId = gbl.DayaBay.RpcHardwareId
00030 FecHardwareId = gbl.DayaBay.FecHardwareId
00031 
00032 def getRpcIds():
00033     "Return a list of the RPC Detectors"
00034     global RpcIds
00035     return RpcIds
00036 
00037 def getRpcSensorIds():
00038     "Return a map of the RPC sensors by detector"
00039     RpcRows = range(1,10)
00040     NearRpcColumns = range(1,7)
00041     FarRpcColumns = range(1,10)
00042     RpcLayers = range(1,5)
00043     RpcStrips = range(1,9)
00044     NearRpcSensors= [ [row, column, layer, strip] for row in RpcRows for column in NearRpcColumns for layer in RpcLayers for strip in RpcStrips ]
00045     FarRpcSensors= [ [row, column, layer, strip] for row in RpcRows for column in FarRpcColumns for layer in RpcLayers for strip in RpcStrips ]
00046 
00047     RpcSensorIds = {}
00048     for detector in getRpcIds():
00049         rpcSensors = []
00050         if detector.site() == Site.kFar:
00051             rpcSensors = FarRpcSensors
00052         else:
00053             rpcSensors = NearRpcSensors
00054         RpcSensorIds[detector] = [ RpcSensor(row, column, layer, strip,
00055                                            detector.site(),
00056                                            detector.detectorId())
00057                                for [row, column, layer, strip] in rpcSensors]
00058     return RpcSensorIds
00059 
00060 def getFecChannelIds():
00061     "Return a list of the FEC channel IDs"
00062     nFecConnectorsPerBoard = 32
00063     #nFeeBoardsAd = 13
00064     #nFeeBoardsNearIws = 8
00065     #nFeeBoardsNearOws = 11
00066     #nFeeBoardsFarIws = 10
00067     #nFeeBoardsFarOws = 14
00068 
00069     fecIds = {}
00070     detectors = getRpcIds()
00071     rpcIds = getRpcSensorIds()
00072     for detector in detectors:
00073         nBoards = int(math.ceil( len(rpcIds[detector])
00074                                  / float(nFecConnectorsPerBoard) ) ) 
00075         fecIds[detector] = [FecChannelId(board, connector,
00076                                          detector.site(),
00077                                          detector.detectorId())
00078                             for board in range(1,nBoards+1)
00079                             for connector in range(1,nFecConnectorsPerBoard+1)]
00080 
00081     return fecIds
00082 
00083 RpcIds = [  Detector(Site.kDayaBay, DetectorId.kRPC),
00084             Detector(Site.kLingAo, DetectorId.kRPC),
00085             Detector(Site.kFar, DetectorId.kRPC) ]
00086 
00087 AdIds = [ Detector(Site.kDayaBay, DetectorId.kAD1),
00088           Detector(Site.kDayaBay, DetectorId.kAD2),
00089           Detector(Site.kLingAo, DetectorId.kAD1),
00090           Detector(Site.kLingAo, DetectorId.kAD2),
00091           Detector(Site.kFar, DetectorId.kAD1),
00092           Detector(Site.kFar, DetectorId.kAD2),
00093           Detector(Site.kFar, DetectorId.kAD3),
00094           Detector(Site.kFar, DetectorId.kAD4) ]
00095 
00096 WaterVetoIds = [ Detector(Site.kDayaBay, DetectorId.kIWS),
00097                      Detector(Site.kDayaBay, DetectorId.kOWS),
00098                      Detector(Site.kLingAo, DetectorId.kIWS),
00099                      Detector(Site.kLingAo, DetectorId.kOWS),
00100                      Detector(Site.kFar, DetectorId.kIWS),
00101                      Detector(Site.kFar, DetectorId.kOWS) ]
00102 
00103 def getAdIds():
00104     "Return a list of the AD Detectors"
00105     global AdIds
00106     return AdIds
00107 
00108 def getAdPmtIds():
00109     "Return a map of the AD PMTs by detector"
00110     AdRings = range(1,9)
00111     AdColumns = range(1,25)
00112     AdPmts8Inch = [ [ring, column] for ring in AdRings for column in AdColumns ]
00113     nCalibPmts = 6
00114     AdPmts2Inch = [ [0, calibIndex] for calibIndex in range(1,nCalibPmts + 1) ]
00115     AdPmts = AdPmts8Inch + AdPmts2Inch
00116 
00117     AdPmtIds = {}
00118     for detector in getAdIds():
00119         AdPmtIds[detector] = [ AdPmtSensor(ring, column,
00120                                            detector.site(),
00121                                            detector.detectorId())
00122                                for [ring,column] in AdPmts]
00123     return AdPmtIds
00124 
00125 def getWaterVetoIds():
00126     "Return a list of the Water Veto Detectors"
00127     global WaterVetoIds
00128     return WaterVetoIds
00129 
00130 def getWaterVetoPmtIds():
00131     "Return a map of the Water Veto PMTs by detector"
00132     # Taken from:
00133     #  dybgaudi/Detector/XmlDetDesc/python/XmlDetDescGen/PoolPmtStructure/gen.py
00134     wallcounts = [9,    9,   8]
00135     nearInFin = [10,8,24,8,10,8,24,8,20]
00136     nearOutFin = [8,8,16,8,8,8,16,8,29]
00137     nearOutFout = [4,8,12,8,4,8,12,8]
00138     farInFin = [24,8,24,8,24,8,24,8,32]
00139     farOutFin = [16,8,16,8,16,8,16,8,32]
00140     farOutFout = [16,8,16,8,16,8,16,8]
00141 
00142     nearIwsPmts = []
00143     for wallNumber in range(1, wallcounts[0]+1):
00144         for wallSpot in range(1, nearInFin[wallNumber-1]+1):
00145             nearIwsPmts.append( [wallSpot, wallNumber, 1] )
00146             
00147     nearOwsPmts = []
00148     for wallNumber in range(1, wallcounts[1]+1):
00149         for wallSpot in range(1, nearOutFin[wallNumber-1]+1):
00150             nearOwsPmts.append( [wallSpot, wallNumber, 1] )
00151     for wallNumber in range(1, wallcounts[2]+1):
00152         for wallSpot in range(1, nearOutFout[wallNumber-1]+1):
00153             nearOwsPmts.append( [wallSpot, wallNumber, 0] )
00154 
00155     farIwsPmts = []
00156     for wallNumber in range(1, wallcounts[0]+1):
00157         for wallSpot in range(1, farInFin[wallNumber-1]+1):
00158             farIwsPmts.append( [wallSpot, wallNumber, 1] )
00159 
00160     farOwsPmts = []
00161     for wallNumber in range(1, wallcounts[1]+1):
00162         for wallSpot in range(1, farOutFin[wallNumber-1]+1):
00163             farOwsPmts.append( [wallSpot, wallNumber, 1] )
00164     for wallNumber in range(1, wallcounts[2]+1):
00165         for wallSpot in range(1, farOutFout[wallNumber-1]+1):
00166             farOwsPmts.append( [wallSpot, wallNumber, 0] )
00167 
00168     PoolPmtIds = {}
00169     for detector in getWaterVetoIds():
00170         poolPmts = []
00171         if detector.site() == Site.kFar:
00172             if detector.detectorId() == DetectorId.kIWS:
00173                 poolPmts = farIwsPmts
00174             else:
00175                 poolPmts = farOwsPmts
00176         else:
00177             if detector.detectorId() == DetectorId.kIWS:
00178                 poolPmts = nearIwsPmts
00179             else:
00180                 poolPmts = nearOwsPmts
00181         PoolPmtIds[detector] = [ PoolPmtSensor(wallNumber,
00182                                                wallSpot,
00183                                                inwardFacing,
00184                                                detector.site(),
00185                                                detector.detectorId())
00186                                  for [wallSpot, wallNumber, inwardFacing] in poolPmts]
00187     return PoolPmtIds
00188 
00189 def getAllPmtIds():
00190     "Return all PMT IDs"
00191     pmtIds = {}
00192     pmtIds.update(getAdPmtIds())
00193     pmtIds.update(getWaterVetoPmtIds())
00194     return pmtIds
00195     
00196 def getFeeChannelIds():
00197     "Return a list of the FEE channel IDs"
00198     nFeeConnectorsPerBoard = 16
00199     #nFeeBoardsAd = 13
00200     #nFeeBoardsNearIws = 8
00201     #nFeeBoardsNearOws = 11
00202     #nFeeBoardsFarIws = 10
00203     #nFeeBoardsFarOws = 14
00204 
00205     feeIds = {}
00206     detectors = getAdIds() + getWaterVetoIds()
00207     pmtIds = getAllPmtIds()
00208     for detector in detectors:
00209         nBoards = int(math.ceil( len(pmtIds[detector])
00210                                  / float(nFeeConnectorsPerBoard) ) ) 
00211         feeIds[detector] = [FeeChannelId(board, connector,
00212                                          detector.site(),
00213                                          detector.detectorId())
00214                             for board in range(1,nBoards+1)
00215                             for connector in range(1,nFeeConnectorsPerBoard+1)]
00216 
00217     return feeIds
00218 
00219 def pmtDescription(pmtId):
00220     "Return a string representation of PMT ID"
00221     if pmtId.detectorId() == DetectorId.kIWS:
00222         return "%s-wall%d-spot%d" % (pmtId.detName(),
00223                                      pmtId.wallNumber(),
00224                                      pmtId.wallSpot())
00225     elif pmtId.detectorId() == DetectorId.kOWS:
00226         facing = None
00227         if pmtId.inwardFacing(): facing = "in"
00228         else: facing = "out"
00229         return "%s-wall%d-spot%d-%s" % (pmtId.detName(),
00230                                         pmtId.wallNumber(),
00231                                         pmtId.wallSpot(),
00232                                         facing)
00233     else:
00234         return "%s-ring%02d-column%02d" % (pmtId.detName(),
00235                                            pmtId.ring(),
00236                                            pmtId.column())
00237 
00238 def rpcDescription(rpcId):
00239     "Return a string representation of RPC ID"
00240     return "%s-row%02d-column%02d-layer%02d-strip-%02d" % (rpcId.detName(),
00241                                                            rpcId.panelRow(),
00242                                                            rpcId.panelColumn(),
00243                                                            rpcId.layer(),
00244                                                            rpcId.strip())
00245 
00246 def channelDescription(channelId):
00247     "Return a string representation of FEE/FEC channel ID"
00248     return "%s-board%02d-connector%02d" % (channelId.detName(),
00249                                            channelId.board(),
00250                                            channelId.connector())
00251 
00252 def hardwareDescription(hardwareId):
00253     "Return a string representation of the hardware ID"
00254     if hardwareId.type() == Hardware.kFee:
00255         return "%s-%d" % (Hardware.AsString(hardwareId.type()),
00256                           hardwareId.boardId())
00257     else:
00258         return "%s-%d" % (Hardware.AsString(hardwareId.type()),
00259                           hardwareId.id())
00260 
00261 def printCableMap():
00262     "Print a map of the cable connections"
00263     detectors = getAdIds() + getWaterVetoIds()
00264     pmtIds = getAllPmtIds()
00265     channelIds = getFeeChannelIds()
00266     pmt8inchHardwareIndex = 1
00267     pmt2inchHardwareIndex = 1
00268     boardHardwareNumber = {}
00269     nextFeeBoardNumber = 1
00270     print "#  ChannelID                    Description ElecHardwareId Description     SensorID                       Description SensorHardwareID   Description"
00271     for detector in detectors:
00272         pmtIndex = 0
00273         currentPmts = pmtIds[detector]
00274         nPmts = len(currentPmts)
00275         for channelId in channelIds[detector]:
00276             pmtId = None
00277             pmtHardwareId = None
00278             if pmtIndex < nPmts:
00279                 pmtId = currentPmts[pmtIndex]
00280                 if pmtId.detName().find("AD")>0 and pmtId.ring() == 0:
00281                     pmtHardwareId = PmtHardwareId(pmt2inchHardwareIndex,
00282                                                   Hardware.kPmt2inch)
00283                     pmt2inchHardwareIndex += 1
00284                 else:
00285                     pmtHardwareId = PmtHardwareId(pmt8inchHardwareIndex,
00286                                                   Hardware.kPmt8inch)
00287                     pmt8inchHardwareIndex += 1
00288             else:
00289                 pmtId = AdPmtSensor()
00290                 pmtHardwareId = HardwareId()
00291             boardId = channelId.boardId().fullPackedData()
00292             if not boardHardwareNumber.has_key( boardId ):
00293                 boardHardwareNumber[boardId] = nextFeeBoardNumber
00294                 nextFeeBoardNumber += 1
00295             feeHardwareId = FeeHardwareId(boardHardwareNumber[boardId],
00296                                           channelId.connector())
00297             print "%12d %30s %14d %11s %12d %33s %16d %13s" % (
00298                 channelId.fullPackedData(),
00299                 channelDescription(channelId),
00300                 feeHardwareId.fullPackedData(),
00301                 hardwareDescription(feeHardwareId),
00302                 pmtId.fullPackedData(),
00303                 pmtDescription(pmtId),
00304                 pmtHardwareId.fullPackedData(),
00305                 hardwareDescription(pmtHardwareId))
00306             pmtIndex += 1
00307 
00308 def printFecCableMap():
00309     "Print a map of the cable connections"
00310     detectors = getRpcIds()
00311     rpcIds = getRpcSensorIds()
00312     channelIds = getFecChannelIds()
00313     boardHardwareNumber = {}
00314     nextFecBoardNumber = 1
00315 #    print "#  ChannelID                    Description ElecHardwareId Description     SensorID                       Description SensorHardwareID   Description"
00316     for detector in detectors:
00317         rpcIndex = 0
00318         currentRpcs = rpcIds[detector]
00319         nRpcs = len(currentRpcs)
00320         for channelId in channelIds[detector]:
00321             rpcId = None
00322             rpcHardwareId = None
00323             if rpcIndex < nRpcs:
00324                 rpcId = currentRpcs[rpcIndex]
00325                 iPanel = int(math.ceil(len(channelIds)/32))
00326                 rpcHardwareId = RpcHardwareId(iPanel, rpcId.layer(), rpcId.strip())
00327             else:
00328                 rpcId = RpcSensor()
00329                 rpcHardwareId = HardwareId()
00330             boardId = channelId.boardId().fullPackedData()
00331             if not boardHardwareNumber.has_key( boardId ):
00332                 boardHardwareNumber[boardId] = nextFecBoardNumber
00333                 nextFecBoardNumber += 1
00334             fecHardwareId = FecHardwareId(boardHardwareNumber[boardId],
00335                                           channelId.connector())
00336 #            print channelId.fullPackedData(), rpcId.fullPackedData()
00337             print "%12d %30s %14d %11s %12d %33s %16d %13s" % (
00338                 channelId.fullPackedData(),
00339                 channelDescription(channelId),
00340                 fecHardwareId.fullPackedData(),
00341                 hardwareDescription(fecHardwareId),
00342                 rpcId.fullPackedData(),
00343                 rpcDescription(rpcId),
00344                 rpcHardwareId.fullPackedData(),
00345                 hardwareDescription(rpcHardwareId))
00346             rpcIndex += 1
00347 if __name__ == "__main__":
00348     printCableMap() #FEE
00349     printFecCableMap()  #FEC
00350     
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Fri May 16 2014 09:59:23 for DataSvc by doxygen 1.7.4