docs: def parse(self,type_regex=None):
      """
      Each line of the frame cache file is like the following:
  
      /frames/E13/LHO/frames/hoftMon_H1/H-H1_DMT_C00_L2-9246,H,H1_DMT_C00_L2,1,16 1240664820 6231 {924600000 924646720 924646784 924647472 924647712 924700000}
  
      The description is as follows:
  
      1.1) Directory path of files
      1.2) Site
      1.3) Type
      1.4) Number of frames in the files (assumed to be 1)
      1.5) Duration of the frame files.
  
      2) UNIX timestamp for directory modification time.
  
      3) Number of files that that match the above pattern in the directory.
  
      4) List of time range or segments [start, stop)
  
      We store the cache for each site and frameType combination
      as a dictionary where the keys are (directory, duration)
      tuples and the values are segment lists.
  
      Since the cache file is already coalesced we do not
      have to call the coalesce method on the segment lists.
      """
      path = self.__path
      cache = self.cache
      if type_regex:
        type_filter = re.compile(type_regex)
      else:
        type_filter = None
  
      f = open(path, 'r')
  
      # holds this iteration of the cache
      gwfDict = {}
  
      # parse each line in the cache file
      for line in f:
        # ignore lines that don't match the regex
        if type_filter and type_filter.search(line) is None:
          continue
  
        # split on spaces and then comma to get the parts
        header, modTime, fileCount, times = line.strip().split(' ', 3)
        dir, site, frameType, frameCount, duration = header.split(',')
        duration = int(duration)
  
        # times string has form { t1 t2 t3 t4 t5 t6 ... tN t(N+1) }
        # where the (ti, t(i+1)) represent segments
        #
        # first turn the times string into a list of integers
        times = [ int(s) for s in times[1:-1].split(' ') ]
  
        # group the integers by two and turn those tuples into segments
        segments = [ pycbc_glue.segments.segment(a) for a in self.group(times, 2) ]
  
        # initialize if necessary for this site
        if not gwfDict.has_key(site):
          gwfDict[site] = {}
  
        # initialize if necessary for this frame type
        if not gwfDict[site].has_key(frameType):
          gwfDict[site][frameType] = {}
  
        # record segment list as value indexed by the (directory, duration) tuple
        key = (dir, duration)
        if gwfDict[site][frameType].has_key(key):
          msg = "The combination %s is not unique in the frame cache file" \
            % str(key)
          raise RuntimeError, msg
  
        gwfDict[site][frameType][key] = pycbc_glue.segments.segmentlist(segments)
      f.close()
  
      cache['gwf'] = gwfDict