def calculate_file_xco2(ts_obj, file_obj, curr_dir, psurf_file, ak_file, data_label): logger = logging.getLogger(LOGGING_NAME) # See if extra files are available psurf_obj = ts_obj.get_cached_file(curr_dir, psurf_file) ak_obj = ts_obj.get_cached_file(curr_dir, ak_file) if ak_obj == None: ak_data = None else: ak_data = ak_obj.data try: in_press_profile = file_obj[PRESSURE_COLUMN] except LookupError: logger.error('For file "%s" LookupError: %s' % (file_obj.filename,traceback.format_exception_only(*sys.exc_info()[0:2]))) return None if in_press_profile == None or in_press_profile.shape[0] == 0: logger.error('Could not calculate xco2 from file: "%s" for run dir "%s" due to missing pressure column' % (file_obj.filename. curr_dir)) if psurf_obj != None: out_press_profile = apply_psurf_to_pressures(in_press_profile[:,0], psurf_obj[PSURF_COLUMN][0,0]) else: out_press_profile = in_press_profile[:,0] # Get desired atmosphere profiles for calculation try: co2_profile = file_obj[CO2_COLUMN] except LookupError: logger.error('Could not find column named: %s' % CO2_COLUMN) return None if co2_profile == None or co2_profile.shape[0] == 0: logger.error('Could not calculate xco2 from file: "%s" for run dir "%s" due to missing CO2 column' % (file_obj.filename. curr_dir)) return None try: co2_profile = OCO_MathUtil.resample_profile(in_press_profile, co2_profile[:,0], out_press_profile) except ValueError: logger.error('Could not resample profile with inputs: in_pressure_profile = %s, co2_profile = %s, out_pressure_profile = %s' % (in_press_profile, co2_profile[:,0], out_press_profile)) return None # Get temperature and water profiles, if results are empty make sure we # pass None to compute_xco2 temp_profile = file_obj[TEMPERATURE_COLUMN] if temp_profile != None and temp_profile.shape[0] == 0: temp_profile = None else: temp_profile = OCO_MathUtil.resample_profile(in_press_profile, temp_profile[:,0], out_press_profile) h2o_profile = file_obj[H2O_COLUMN] if h2o_profile != None and h2o_profile.shape[0] == 0: h2o_profile = None else: h2o_profile = OCO_MathUtil.resample_profile(in_press_profile, h2o_profile[:,0], out_press_profile) calc_xco2 = OCO_MathUtil.compute_xco2(co2_profile, out_press_profile, temp_profile, h2o_profile, ak_data) return [ (data_label, calc_xco2) ]