#!/usr/bin/env python import os import time from dm.common.utility.loggingManager import LoggingManager from dm.common.utility.timeUtility import TimeUtility from dm.common.processing.plugins.fileProcessor import FileProcessor from dm.common.mongodb.api.fileMongoDbApi import FileMongoDbApi class SddsParameterProcessingPlugin(FileProcessor): PROCESS_SDDS_PARAMETERS_KEY = 'processSddsParameters' def __init__(self): FileProcessor.__init__(self) self.fileMongoDbApi = FileMongoDbApi() self.logger = LoggingManager.getInstance().getLogger(self.__class__.__name__) def processFile(self, fileInfo): experimentFilePath = fileInfo.get('experimentFilePath') experimentName = fileInfo.get('experimentName') daqInfo = fileInfo.get('daqInfo', {}) processSddsParameters = daqInfo.get(self.PROCESS_SDDS_PARAMETERS_KEY) if not processSddsParameters: self.logger.debug('Ignoring file %s for experiment %s' % (experimentFilePath, experimentName)) return self.logger.debug('Processing file %s for experiment %s' % (fileInfo, experimentName)) storageDirectory = fileInfo.get('storageDirectory') storageFilePath = os.path.join(storageDirectory, experimentFilePath) # Load file try: import sddsdata from sdds import SDDS s = SDDS(0) self.logger.error('Loading file %s for experiment %s' % (experimentFilePath, experimentName)) s.load(storageFilePath) except Exception, ex: self.logger.error('Cannot process file %s for experiment %s: %s' % (experimentFilePath, experimentName, ex)) return # Prepare catalogging entry fileInfo2 = {} fileInfo2['fileName'] = os.path.basename(experimentFilePath) fileInfo2['experimentName'] = experimentName for i in range(0,len(s.parameterName)): parameterName = s.parameterName[i] parameterData = s.parameterData[i][0] fileInfo2[parameterName] = parameterData self.fileMongoDbApi.updateOrAddExperimentFile(fileInfo2) self.logger.error('SDDS terminate file %s for experiment %s' % (experimentFilePath, experimentName)) sddsdata.Terminate(0) ####################################################################### # Testing. if __name__ == '__main__': pass