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

In This Package:

CalibParam::Tools Namespace Reference


Classes

class  PmtTableWriterAlg

Functions

def mergeTables
def parseTable

Variables

list __all__ = [ "PmtTableWriterAlg", "mergeTables", "parseTable" ]
 Detector = gbl.DayaBay.Detector
 Site = gbl.Site
 DetectorId = gbl.DetectorId
 Context = gbl.Context
 ServiceMode = gbl.ServiceMode
 PmtCalibData = gbl.DayaBay.PmtCalibData
 AdPmtSensor = gbl.DayaBay.AdPmtSensor

Function Documentation

def CalibParam::Tools::mergeTables (   primaryFile,
  changeMap,
  outputFile 
)

Definition at line 319 of file Tools.py.

00319                                                    :
00320     "Simple Non-NuWa python function for merging calibration text tables"
00321     inputTable = parseTable(primaryFile)
00322     # Update table
00323     for changeFile in changeMap.keys():
00324         changeTable = parseTable(changeFile)
00325         changeFields = changeMap[changeFile]
00326         for fieldName in changeFields:
00327             fieldName = fieldName.strip()
00328             if not inputTable["columns"].has_key(fieldName):
00329                 print "Field \"",fieldName,"\" doesn't exist in input table."
00330                 return
00331             inputTable["columns"][fieldName] = changeTable["columns"][fieldName]
00332     # Write output table comments and header
00333     outputTableLines = []
00334     for comment in inputTable["comments"]:
00335         outputTableLines.append(comment)
00336     outputTableLines.append(inputTable["header"])
00337     # determine field lengths
00338     fieldLength = {}
00339     for fieldName in inputTable["fields"]:
00340         fieldLength[fieldName] = max( [len(data) for data in
00341                                        inputTable["columns"][fieldName] ] )
00342     # write data lines
00343     for rowIdx in range(inputTable["numberOfRows"]):
00344         line = ""
00345         for fieldName in inputTable["fields"]:
00346             format = "%"+str(fieldLength[fieldName])+"s " 
00347             line += format % inputTable["columns"][fieldName][rowIdx]
00348         outputTableLines.append(line+"\n")
00349     open(outputFile,"w").writelines(outputTableLines)
00350 
def parseTable(filename):

def CalibParam::Tools::parseTable (   filename  ) 

Definition at line 351 of file Tools.py.

00351                         :
00352     "Simple text table parser"
00353     tableLines = open(filename).readlines()
00354     fieldNames = []
00355     comments = []
00356     headerLine = None
00357     columns = {}
00358     nRows = 0
00359     for line in tableLines:
00360         data = line.strip()
00361         # Catch comments / header
00362         if len(data)>0 and data[0]=='#':
00363             comment = data[1:].strip()
00364             if len(comment)>0 and comment[0] =='[':
00365                 # Found header
00366                 if len(fieldNames) > 0:
00367                     print "Headers already defined by line \"",line,"\""
00368                     return None
00369                 tokens = comment.split(']')
00370                 if len(tokens[-1].strip())==0: tokens = tokens[:-1]
00371                 for token in tokens:
00372                     fieldStart = token.rfind('[')
00373                     if fieldStart<0:
00374                         print "Invalid token \"",token,"\" in line \"",line,"\""
00375                         return None
00376                     fieldName = token[fieldStart+1:].strip()
00377                     fieldNames.append(fieldName)
00378                     columns[fieldName] = []
00379                 headerLine = line
00380             else:
00381                 comments.append(line)
00382             continue
00383         # Data line
00384         fields = data.split()
00385         if len(fields)==0: continue  # Empty line
00386         if len(fields) != len(columns):
00387             print "Invalid number of fields in line \"",line,"\""
00388             return None
00389         for fieldIdx in range(len(fields)):
00390             columns[fieldNames[fieldIdx]].append( fields[fieldIdx] )
00391         nRows += 1
00392     return { "fields":fieldNames,
00393              "comments":comments,
00394              "header":headerLine,
00395              "columns":columns,
00396              "numberOfRows":nRows}
             "numberOfRows":nRows}


Variable Documentation

list CalibParam::Tools::__all__ = [ "PmtTableWriterAlg", "mergeTables", "parseTable" ] [static]

Definition at line 6 of file Tools.py.

CalibParam::Tools::Detector = gbl.DayaBay.Detector [static]

Definition at line 16 of file Tools.py.

CalibParam::Tools::Site = gbl.Site [static]

Definition at line 17 of file Tools.py.

CalibParam::Tools::DetectorId = gbl.DetectorId [static]

Definition at line 18 of file Tools.py.

CalibParam::Tools::Context = gbl.Context [static]

Definition at line 19 of file Tools.py.

CalibParam::Tools::ServiceMode = gbl.ServiceMode [static]

Definition at line 20 of file Tools.py.

CalibParam::Tools::PmtCalibData = gbl.DayaBay.PmtCalibData [static]

Definition at line 21 of file Tools.py.

CalibParam::Tools::AdPmtSensor = gbl.DayaBay.AdPmtSensor [static]

Definition at line 22 of file Tools.py.

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

Generated on Mon Apr 11 20:29:41 2011 for CalibParam by doxygen 1.4.7