code: def get_missing_segs_from_frame_file_cache(datafindcaches):
      
      missingFrameSegs = {}
      missingFrames = {}
      for cache in datafindcaches:
          if len(cache) > 0:
              # Don't bother if these are not file:// urls, assume all urls in
              # one cache file must be the same type
              if not cache[0].scheme == 'file':
                  warn_msg = "We have %s entries in the " %(cache[0].scheme,)
                  warn_msg += "cache file. I do not check if these exist."
                  logging.info(warn_msg)
                  continue
              _, currMissingFrames = cache.checkfilesexist(on_missing="warn")
              missingSegs = segments.segmentlist(e.segment \
                                           for e in currMissingFrames).coalesce()
              ifo = cache.ifo
              if ifo not in missingFrameSegs:
                  missingFrameSegs[ifo] = missingSegs
                  missingFrames[ifo] = lal.Cache(currMissingFrames)
              else:
                  missingFrameSegs[ifo].extend(missingSegs)
                  # NOTE: This .coalesce probably isn't needed as the segments
                  # should be disjoint. If speed becomes an issue maybe remove it?
                  missingFrameSegs[ifo].coalesce()
                  missingFrames[ifo].extend(currMissingFrames)
      return missingFrameSegs, missingFrames
docs: This function will use os.path.isfile to determine if all the frame files
      returned by the local datafind server actually exist on the disk. This can
      then be used to update the science times if needed.
  
      Parameters
      -----------
      datafindcaches : OutGroupList
          List of all the datafind output files.
  
      Returns
      --------
      missingFrameSegs : Dict. of ifo keyed glue.segment.segmentlist instances
          The times corresponding to missing frames found in datafindOuts.
      missingFrames: Dict. of ifo keyed lal.Cache instances
          The list of missing frames