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) ]