Ignore:
Timestamp:
02/05/07 15:05:35 (13 years ago)
Author:
mggr
Message:

initial version of PML methods (will need testing) - mggr checking in for mhen

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI02-CSML/branches/csml-pml/parser.py

    r2444 r2452  
    10261026        csElement.__init__(self,**kwargs) 
    10271027 
     1028class RawFileExtract(FileExtract, csElement): 
     1029 
     1030   # Note: Unlike the other file extracts, this sets a self.dataInterface 
     1031   # attribute, which is used by the overridden getData to determine which 
     1032   # Data Interface is used to read the file. This is necessary because the 
     1033   # getUnknownDataInterface() method determines which DI to use based on 
     1034   # filename suffix (raw files could be called anything) or by inspecting 
     1035   # the file (raw files have no magic numbers or other markers that could 
     1036   # be used to unequivocally determine the file type). 
     1037   def __init__(self,**kwargs): 
     1038      FileExtract.__init__(self, **kwargs) 
     1039      elems=['endianness', 'fillValue'] 
     1040      addelems(self,elems) 
     1041      children={elems[0]:[CSML('endianness'), 'csString'],elems[1]:[CSML('fillValue'), 'csString']} 
     1042      addchildren(self,children) 
     1043      csElement.__init__(self,**kwargs) 
     1044      self.dataInterface = csml.csmllibs.csmldataiface.RawFileInterface 
     1045 
     1046 
     1047   # raw and image extracts need access to metadata defined in the CSML to 
     1048   # correctly read the file. This method overrides the FileExtract getData() 
     1049   # method making use of the readFile() DI method to pass this metadata to 
     1050   # the data interface. 
     1051   # TODO: This should probably be moved outside parser.py, possibly into 
     1052   # API/ops_FileExtract 
     1053   def getData(self,  fileposition=None,**kwargs): 
     1054       #file position defines the position of the filename if a list of filenames exists 
     1055       #**kwargs can hold subsetting request. 
     1056        
     1057       if fileposition is not None: 
     1058           file = self.fileList.fileNames.CONTENT.split()[fileposition] 
     1059       else: 
     1060           file = self.fileName.CONTENT 
     1061       
     1062       # Determine metadata required to correctly read and process the 
     1063       # raw file: 
     1064       meta = {} 
     1065       meta['dimensions'] = self.arraySize.CONTENT.split() 
     1066       if self.numericTransform: 
     1067          meta['numericTransform'] = self.numericTransform.CONTENT.strip() 
     1068       if self.endianness: 
     1069          meta['endianness'] = self.endianness.CONTENT.strip() 
     1070       if self.fillValue: 
     1071          meta['fillValue'] = self.fillValue.CONTENT.strip() 
     1072       if self.numericType: 
     1073          type = self.numericType.CONTENT.strip() 
     1074          if type == 'float': 
     1075             meta['signedness'] = 'signed' 
     1076             meta['type']       = 'float' 
     1077             meta['depth']      = 32 
     1078          elif type == 'double': 
     1079             meta['signedness'] = 'signed' 
     1080             meta['type']       = 'float' 
     1081             meta['depth']      = 64 
     1082          elif type == 'uint': 
     1083             meta['signedness'] = 'unsigned' 
     1084             meta['type']       = 'int' 
     1085             meta['depth']      = int(type[4:]) 
     1086          elif type == 'int': 
     1087             meta['signedness'] = 'signed' 
     1088             meta['type']       = 'int' 
     1089             meta['depth']      = int(type[3:]) 
     1090 
     1091       if self.dataInterface: 
     1092          DI = self.dataInterface() 
     1093       else: 
     1094          DI = csml.csmllibs.csmldataiface.DataInterface() 
     1095          DI = DI.getUnknownInterfaceType(file) 
     1096 
     1097       DI.openFile(file) 
     1098       DI.readFile(**meta) 
     1099       if kwargs: 
     1100          print 'subsetting' 
     1101          data = DI.getSubsetOfDataForVar(**kwargs) 
     1102       else: 
     1103          print 'non subsetting' 
     1104          data = DI.getDataForVar() 
     1105       fillValue = DI.getFillValue() 
     1106       DC=DataContainer(data) 
     1107       dataArray=DC.dataArray 
     1108       DI.closeFile() 
     1109       return dataArray, fillValue, None, None 
     1110 
     1111 
     1112# Note: This is derived from RawFileExtract, because it requires the overriden 
     1113# getData(). 
     1114class ImageFileExtract(RawFileExtract, csElement): 
     1115 
     1116   def __init__(self,**kwargs): 
     1117      FileExtract.__init__(self, **kwargs) 
     1118      elems=['fillValue'] 
     1119      addelems(self,elems) 
     1120      children={elems[0]:[CSML('fillValue'), 'csString']} 
     1121      addchildren(self,children) 
     1122      csElement.__init__(self,**kwargs) 
     1123      self.dataInterface = csml.csmllibs.csmldataiface.ImageFileInterface 
    10281124 
    10291125class SimpleCondition(csElement):  
Note: See TracChangeset for help on using the changeset viewer.