void WaitForRegionsToFinishProcessing (ProcessorQueue &analysis_queue, ComputationPlanner &analysis_compute_plan)
{
  // wait for all of the regions to finish processing before moving on to the next
  // image
  // Need better logic...This is just following the different steps involved in signal processing
  analysis_queue.GetCpuQueue()->WaitTillDone();
  if (analysis_queue.GetGpuQueue())
    analysis_queue.GetGpuQueue()->WaitTillDone();
  analysis_queue.GetCpuQueue()->WaitTillDone();
  if (analysis_queue.GetGpuQueue())
    analysis_queue.GetGpuQueue()->WaitTillDone();
//  if (analysis_queue.GetSingleFitGpuQueue())
//    analysis_queue.GetSingleFitGpuQueue()->WaitTillDone();
  if (analysis_compute_plan.use_gpu_acceleration)
    analysis_queue.GetCpuQueue()->WaitTillDone();
}
void SpinUpGPUThreads(ProcessorQueue &analysis_queue, ComputationPlanner &analysis_compute_plan)
{
  if (analysis_compute_plan.use_gpu_acceleration) {
    // create gpu thread for multi flow fit
    CreateGpuThreadsForFitType(analysis_queue.GetGpuInfo(),  
        analysis_compute_plan.numBkgWorkers_gpu, analysis_queue.GetGpuQueue(),
        analysis_compute_plan.valid_devices);
    // create gpu thread for single flow fit
/*    CreateGpuThreadsForFitType(analysis_queue.GetSingleFitGpuInfo(), GPU_SINGLE_FLOW_FIT, 
        analysis_compute_plan.numSingleFlowFitGpuWorkers, analysis_queue.GetSingleFitGpuQueue(),
        analysis_compute_plan.valid_devices);*/
  }
}