void loadData(string filename) {
     ofBuffer buffer = ofBufferFromFile(filename);
     data = vector<float>();
     for(auto line : buffer.getLines()) {
         data.push_back(ofToFloat(line));
     }
     data = cleanHeartRate(data);
     plot = LinePlot();
     plot.set(data);
     
     int n = data.size();
     vector<float> t = mult(1./60, range(0, n));
     vector<float> freq = range(bpmToHz(40), bpmToHz(1), bpmToHz(80));
     vector<float> lombData = lomb(t, data, freq);
     analysis = LinePlot();
     analysis.set(lombData);
 }
void lomb_api(const mxArray *prhs[4], const mxArray *plhs[3])
{
  emxArray_real_T *t;
  emxArray_real_T *h;
  emxArray_real_T *f;
  emxArray_real_T *P;
  emxArray_real_T *prob;
  real_T ofac;
  real_T hifac;
  emlrtStack st = { NULL, NULL, NULL };

  st.tls = emlrtRootTLSGlobal;
  emlrtHeapReferenceStackEnterFcnR2012b(&st);
  emxInit_real_T(&st, &t, 1, true);
  emxInit_real_T(&st, &h, 1, true);
  emxInit_real_T(&st, &f, 1, true);
  emxInit_real_T(&st, &P, 1, true);
  emxInit_real_T(&st, &prob, 1, true);
  prhs[0] = emlrtProtectR2012b(prhs[0], 0, false, -1);
  prhs[1] = emlrtProtectR2012b(prhs[1], 1, false, -1);

  /* Marshall function inputs */
  emlrt_marshallIn(&st, emlrtAlias(prhs[0]), "t", t);
  emlrt_marshallIn(&st, emlrtAlias(prhs[1]), "h", h);
  ofac = g_emlrt_marshallIn(&st, emlrtAliasP(prhs[2]), "ofac");
  hifac = g_emlrt_marshallIn(&st, emlrtAliasP(prhs[3]), "hifac");

  /* Invoke the target function */
  lomb(t, h, ofac, hifac, f, P, prob);

  /* Marshall function outputs */
  plhs[0] = c_emlrt_marshallOut(f);
  plhs[1] = c_emlrt_marshallOut(P);
  plhs[2] = c_emlrt_marshallOut(prob);
  prob->canFreeData = false;
  emxFree_real_T(&prob);
  P->canFreeData = false;
  emxFree_real_T(&P);
  f->canFreeData = false;
  emxFree_real_T(&f);
  h->canFreeData = false;
  emxFree_real_T(&h);
  t->canFreeData = false;
  emxFree_real_T(&t);
  emlrtHeapReferenceStackLeaveFcnR2012b(&st);
}