code: def multiifo_noise_coincident_area(ifos, slop):
      
      # set up detector objects
      dets = {}
      for ifo in ifos:
          dets[ifo] = pycbc.detector.Detector(ifo)
      n_ifos = len(ifos)
  
      if n_ifos == 2:
          allowed_area = 2. * \
              (dets[ifos[0]].light_travel_time_to_detector(dets[ifos[1]]) + slop)
      elif n_ifos == 3:
          tofs = numpy.zeros(n_ifos)
          ifo2_num = []
  
          # calculate travel time between detectors (plus extra for timing error)
          # TO DO: allow for different timing errors between different detectors
          for i, ifo in enumerate(ifos):
              ifo2_num.append(int(numpy.mod(i + 1, n_ifos)))
              det0 = dets[ifo]
              det1 = dets[ifos[ifo2_num[i]]]
              tofs[i] = det0.light_travel_time_to_detector(det1) + slop
  
          # combine these to calculate allowed area
          allowed_area = 0
          for i, _ in enumerate(ifos):
              allowed_area += 2 * tofs[i] * tofs[ifo2_num[i]] - tofs[i]**2
      else:
          raise NotImplementedError("Not able to deal with more than 3 ifos")
  
      return allowed_area
docs: calculate the total extent of time offset between 2 detectors,
      or area of the 2d space of time offsets for 3 detectors, for
      which a coincidence can be generated
  
      Parameters
      ----------
      ifos: list of strings
          list of interferometers
      slop: float
          extra time to add to maximum time-of-flight for timing error
  
      Returns
      -------
      allowed_area: float
          area in units of seconds^(n_ifos-1) that coincident values can fall in