Example #1
0
static void
handle_replicate_json (UfoDaemon *daemon, UfoMessage *msg)
{
    UfoDaemonPrivate *priv = UFO_DAEMON_GET_PRIVATE (daemon);
    gchar *json;
    UfoTaskGraph *graph;
    GError *error = NULL;

    json = read_json (daemon, msg);

    // send ack
    UfoMessage *response = ufo_message_new (UFO_MESSAGE_ACK, 0);
    ufo_messenger_send_blocking (priv->msger, response, NULL);
    ufo_message_free (response);

    graph = UFO_TASK_GRAPH (ufo_task_graph_new ());
    ufo_task_graph_read_from_data (graph, priv->manager, json, &error);

    if (error != NULL) {
        g_printerr ("%s\n", error->message);
        goto replicate_json_free;
    }

    ufo_scheduler_run (priv->scheduler, graph, NULL);
    g_object_unref (priv->scheduler);

    priv->scheduler = ufo_scheduler_new (priv->config, NULL);

replicate_json_free:
    g_object_unref (graph);
    g_free (json);
}
Example #2
0
static void
handle_stream_json (UfoDaemon *daemon, UfoMessage *msg)
{
    UfoDaemonPrivate *priv = UFO_DAEMON_GET_PRIVATE (daemon);
    gchar *json;
    GList *roots;
    GList *leaves;
    UfoNode *first;
    UfoNode *last;
    GError *error = NULL;

    json = read_json (daemon, msg);
    // send ack
    UfoMessage *response = ufo_message_new (UFO_MESSAGE_ACK, 0);
    ufo_messenger_send_blocking (priv->msger, response, NULL);
    ufo_message_free (response);

    /* Setup local task graph */
    priv->task_graph = UFO_TASK_GRAPH (ufo_task_graph_new ());
    ufo_task_graph_read_from_data (priv->task_graph, priv->manager, json, &error);

#ifdef DEBUG
    ufo_graph_dump_dot (UFO_GRAPH (priv->task_graph), "task_graph_received.dot");
#endif

    if (error != NULL) {
        g_printerr ("%s\n", error->message);
        /* Send error to master */
        return;
    }

    roots = ufo_graph_get_roots (UFO_GRAPH (priv->task_graph));
    g_assert (g_list_length (roots) == 1);

    leaves = ufo_graph_get_leaves (UFO_GRAPH (priv->task_graph));
    g_assert (g_list_length (leaves) == 1);

    first = UFO_NODE (g_list_nth_data (roots, 0));
    last = UFO_NODE (g_list_nth_data (leaves, 0));

    first = remove_dummy_if_present (UFO_GRAPH (priv->task_graph), first);

    priv->input_task = ufo_input_task_new ();
    priv->output_task = ufo_output_task_new (2);

    ufo_graph_connect_nodes (UFO_GRAPH (priv->task_graph),
                             priv->input_task, first,
                             GINT_TO_POINTER (0));

    ufo_graph_connect_nodes (UFO_GRAPH (priv->task_graph),
                             last, priv->output_task,
                             GINT_TO_POINTER (0));

    priv->scheduler_thread = g_thread_create ((GThreadFunc) run_scheduler, daemon, TRUE, NULL);
    g_free (json);
}
Example #3
0
int main(int n_args, char *argv[])
{
  
  GError *error = NULL;

  UfoTaskGraph *ufo_task_graph;
  UfoScheduler *ufo_scheduler;
  UfoPluginManager *ufo_plugin_manager;

  UfoNode *reader;
  UfoNode *cut_sinogram;
  UfoNode *zeropadding;
  UfoNode *fft;
  UfoNode *dfi_sinc;
  UfoNode *swap_quadrants;
  UfoNode *ifft;
  UfoNode *swap_quadrants_inverse;
  UfoNode *region_of_interest;
  UfoNode *backproject;
  UfoNode *filter;
  UfoNode *writer;
  g_type_init ();

  ufo_task_graph = ufo_task_graph_new();

  ufo_plugin_manager = ufo_plugin_manager_new (NULL);

  ufo_scheduler = ufo_scheduler_new (NULL, NULL);
  g_object_set (G_OBJECT (ufo_scheduler),
                "enable-tracing", TRUE,
                NULL);
  
  backproject = ufo_plugin_manager_get_task (ufo_plugin_manager, "backproject", &error);
  g_object_set (G_OBJECT (backproject),
                "axis-pos", 928.0f,
                NULL);

  reader = ufo_plugin_manager_get_task (ufo_plugin_manager, "reader", &error);
  g_object_set (G_OBJECT (reader),
                "path", IN_FILE_NAME,
                NULL);

  cut_sinogram = ufo_plugin_manager_get_task (ufo_plugin_manager, "cut_sinogram", &error);
  g_object_set (G_OBJECT(cut_sinogram),
                "center-of-rotation", 928.0f,
                NULL);

  zeropadding = ufo_plugin_manager_get_task (ufo_plugin_manager, "zeropadding", &error);
  g_object_set (G_OBJECT(zeropadding),
                "oversampling", 2,
                NULL);

  filter = ufo_plugin_manager_get_task (ufo_plugin_manager, "filter", &error);
  g_object_set (G_OBJECT(filter),
                NULL);

  fft = ufo_plugin_manager_get_task (ufo_plugin_manager, "fft", &error);
  g_object_set (G_OBJECT(fft),
                "dimensions", 1,
		"auto-zeropadding", 0,
                NULL);

  dfi_sinc = ufo_plugin_manager_get_task (ufo_plugin_manager, "dfi_sinc", &error);
  g_object_set (G_OBJECT(dfi_sinc),
                "kernel-size", 7,
		"number-presampled-values", 2047,
		"roi-size", 1696,
                NULL);

  swap_quadrants = ufo_plugin_manager_get_task (ufo_plugin_manager, "swap_quadrants", &error);
  g_object_set (G_OBJECT(swap_quadrants),
                NULL);


   ifft = ufo_plugin_manager_get_task (ufo_plugin_manager, "ifft", &error);
  g_object_set (G_OBJECT(ifft),
                "dimensions", 2,
                NULL);

  swap_quadrants_inverse = ufo_plugin_manager_get_task (ufo_plugin_manager, "swap_quadrants", &error);
  g_object_set (G_OBJECT(swap_quadrants_inverse),
                NULL);


  region_of_interest = ufo_plugin_manager_get_task (ufo_plugin_manager, "region_of_interest", &error);
  g_object_set (G_OBJECT(region_of_interest),
		"x", 368,
		"y", 538,
		"width", 1311,
		"height", 1331,
                NULL);
  
  writer = ufo_plugin_manager_get_task (ufo_plugin_manager, "null", &error);
  g_object_set (G_OBJECT (writer), NULL);
  

  ufo_graph_connect_nodes (ufo_task_graph, reader, cut_sinogram, NULL);
  ufo_graph_connect_nodes (ufo_task_graph, cut_sinogram, zeropadding, NULL);
  ufo_graph_connect_nodes (ufo_task_graph, zeropadding, fft, NULL);
  ufo_graph_connect_nodes (ufo_task_graph, fft, dfi_sinc, NULL);
  ufo_graph_connect_nodes (ufo_task_graph, dfi_sinc, swap_quadrants, NULL);
  ufo_graph_connect_nodes (ufo_task_graph, swap_quadrants, ifft, NULL);
  ufo_graph_connect_nodes (ufo_task_graph, ifft, swap_quadrants_inverse, NULL);
  ufo_graph_connect_nodes (ufo_task_graph, swap_quadrants_inverse, region_of_interest, NULL);
  ufo_graph_connect_nodes (ufo_task_graph, region_of_interest, writer, NULL);

  ufo_scheduler_run (ufo_scheduler, ufo_task_graph, &error);
  if (error) printf("\nError: Run was unsuccessful: %s\n", error->message);

  g_object_unref (ufo_task_graph);
  g_object_unref (ufo_scheduler);
  g_object_unref (ufo_plugin_manager);

  g_object_unref (writer);
  g_object_unref (cut_sinogram);
  g_object_unref (zeropadding);
  g_object_unref (fft);
  g_object_unref (dfi_sinc);
  g_object_unref (swap_quadrants);
  g_object_unref (ifft);
  g_object_unref (swap_quadrants_inverse);
  g_object_unref (region_of_interest);
  g_object_unref (reader);

  return 0;
}