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 |
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}
list CalibParam::Tools::__all__ = [ "PmtTableWriterAlg", "mergeTables", "parseTable" ] [static] |
CalibParam::Tools::Detector = gbl.DayaBay.Detector [static] |
CalibParam::Tools::Site = gbl.Site [static] |
CalibParam::Tools::DetectorId = gbl.DetectorId [static] |
CalibParam::Tools::Context = gbl.Context [static] |
CalibParam::Tools::ServiceMode = gbl.ServiceMode [static] |