def _preprocess(self, ch, method, properties, body):
    eeg = json.loads(body)

    self.eeg_data = np.vstack([self.eeg_data, get_raw(eeg, self.num_channels)])

    self.count += self.step_size

    timestamp = eeg[-1]["timestamp"]

    if self.enable_ica:
      eeg = from_raw(self.eyeblinks_remover.transform(
          get_raw(eeg, self.num_channels)), self.num_channels)
      if ((self.count >= 5000 and not self.started_fit)
          or self.count % 10000 == 0):
        _LOGGER.info('refitting...')
        self.started_fit = True
        self.refit_ica()

    processed_data = preprocess_stft(eeg, self.electrodes_placement)

    data = {"timestamp": timestamp}
    for key, value in processed_data.items():
      data[key] = processed_data[key][-1]

    _LOGGER.debug("--> output: %s" % data)
    self.mu_publisher.publish(self.routing_keys[self.output_metric], data)
_ELECTRODES_PLACEMENT = {"channel_0": {"main": "channel_0", "artifact": []}}
_BUFFER_SIZE = 128

with open("neurosky.csv", "rb") as inputFile:
  with open("mu_neurosky_converted.csv", "wb") as outputFile:
    
    writer = csv.writer(outputFile)
    writer.writerow(["x", "y", "label"])
    writer.writerow(["float", "float", "int"])
    writer.writerow(["","","C"])

    reader = csv.reader(inputFile)
    
    headers = reader.next()
    eeg_buffer = []
    for row in reader:
      x = row[0]
      raw_eeg = row[4]
      label = row[5]
      eeg = {"timestamp": x, "channel_0": raw_eeg}
        
      if len(eeg_buffer) > _BUFFER_SIZE:
        processed_data = preprocess_stft(eeg_buffer, _ELECTRODES_PLACEMENT)
        eeg_buffer = []
        y = processed_data["channel_0"][-1]
        writer.writerow([x,y,label])
      else:
        eeg_buffer.append(eeg)