Transforming data with Pipelines¶
Pipelines are the construct used to compose filters that transform the published input data into new meshes. This is where users specify typical geometric transforms (e.g., clipping and slicing), field based transforms (e.g., threshold and contour), etc. The resulting data from each Pipeline can be used as input to Scenes or Extracts. Each pipeline contains one or more filters that transform the published mesh data. See Ascent’s Scenes docs for deeper details on Pipelines.
Calculating and rendering contours¶
#include "ascent.hpp"
#include "conduit_blueprint.hpp"
using namespace ascent;
using namespace conduit;
int main(int argc, char **argv)
{
//create example mesh using the conduit blueprint braid helper
Node mesh;
conduit::blueprint::mesh::examples::braid("hexs",
25,
25,
25,
mesh);
// Use Ascent to calculate and render contours
Ascent a;
// open ascent
a.open();
// publish mesh to ascent
a.publish(mesh);
// setup actions
Node actions;
Node &add_act = actions.append();
add_act["action"] = "add_pipelines";
Node &pipelines = add_act["pipelines"];
// create a pipeline (pl1) with a contour filter (f1)
pipelines["pl1/f1/type"] = "contour";
// extract contours where braid variable
// equals 0.2 and 0.4
Node &contour_params = pipelines["pl1/f1/params"];
contour_params["field"] = "braid";
double iso_vals[2] = {0.2, 0.4};
contour_params["iso_values"].set(iso_vals,2);
// declare a scene to render the pipeline result
Node &add_act2 = actions.append();
add_act2["action"] = "add_scenes";
Node & scenes = add_act2["scenes"];
// add a scene (s1) with one pseudocolor plot (p1) that
// will render the result of our pipeline (pl1)
scenes["s1/plots/p1/type"] = "pseudocolor";
scenes["s1/plots/p1/pipeline"] = "pl1";
scenes["s1/plots/p1/field"] = "braid";
// set the output file name (ascent will add ".png")
scenes["s1/image_name"] = "out_pipeline_ex1_contour";
// print our full actions tree
std::cout << actions.to_yaml() << std::endl;
// execute the actions
a.execute(actions);
a.close();
}
import conduit
import conduit.blueprint
import ascent
import numpy as np
mesh = conduit.Node()
conduit.blueprint.mesh.examples.braid("hexs",
25,
25,
25,
mesh)
# Use Ascent to calculate and render contours
a = ascent.Ascent()
a.open()
# publish our mesh to ascent
a.publish(mesh);
# setup actions
actions = conduit.Node()
add_act = actions.append()
add_act["action"] = "add_pipelines"
pipelines = add_act["pipelines"]
# create a pipeline (pl1) with a contour filter (f1)
pipelines["pl1/f1/type"] = "contour"
# extract contours where braid variable
# equals 0.2 and 0.4
contour_params = pipelines["pl1/f1/params"]
contour_params["field"] = "braid"
iso_vals = np.array([0.2, 0.4],dtype=np.float32)
contour_params["iso_values"].set(iso_vals)
# declare a scene to render the pipeline result
add_act2 = actions.append()
add_act2["action"] = "add_scenes"
scenes = add_act2["scenes"]
# add a scene (s1) with one pseudocolor plot (p1) that
# will render the result of our pipeline (pl1)
scenes["s1/plots/p1/type"] = "pseudocolor"
scenes["s1/plots/p1/pipeline"] = "pl1"
scenes["s1/plots/p1/field"] = "braid"
# set the output file name (ascent will add ".png")
scenes["s1/image_name"] = "out_pipeline_ex1_contour"
# print our full actions tree
print(actions.to_yaml())
# execute the actions
a.execute(actions)
a.close()
Combining threshold and clip transforms¶
#include "ascent.hpp"
#include "conduit_blueprint.hpp"
using namespace ascent;
using namespace conduit;
int main(int argc, char **argv)
{
//create example mesh using the conduit blueprint braid helper
Node mesh;
conduit::blueprint::mesh::examples::braid("hexs",
25,
25,
25,
mesh);
// Use Ascent to calculate and render contours
Ascent a;
// open ascent
a.open();
// publish mesh to ascent
a.publish(mesh);
// setup actions
Node actions;
Node &add_act = actions.append();
add_act["action"] = "add_pipelines";
Node &pipelines = add_act["pipelines"];
// create a pipeline (pl1) with a contour filter (f1)
pipelines["pl1/f1/type"] = "contour";
// extract contours where braid variable
// equals 0.2 and 0.4
Node &contour_params = pipelines["pl1/f1/params"];
contour_params["field"] = "braid";
double iso_vals[2] = {0.2, 0.4};
contour_params["iso_values"].set(iso_vals,2);
// declare a scene to render the pipeline result
Node &add_act2 = actions.append();
add_act2["action"] = "add_scenes";
Node & scenes = add_act2["scenes"];
// add a scene (s1) with one pseudocolor plot (p1) that
// will render the result of our pipeline (pl1)
scenes["s1/plots/p1/type"] = "pseudocolor";
scenes["s1/plots/p1/pipeline"] = "pl1";
scenes["s1/plots/p1/field"] = "braid";
// set the output file name (ascent will add ".png")
scenes["s1/image_name"] = "out_pipeline_ex1_contour";
// print our full actions tree
std::cout << actions.to_yaml() << std::endl;
// execute the actions
a.execute(actions);
a.close();
}
import conduit
import conduit.blueprint
import ascent
import numpy as np
mesh = conduit.Node()
conduit.blueprint.mesh.examples.braid("hexs",
25,
25,
25,
mesh)
# Use Ascent to calculate and render contours
a = ascent.Ascent()
a.open()
# publish our mesh to ascent
a.publish(mesh);
# setup actions
actions = conduit.Node()
add_act = actions.append()
add_act["action"] = "add_pipelines"
pipelines = add_act["pipelines"]
# create a pipeline (pl1) with a contour filter (f1)
pipelines["pl1/f1/type"] = "contour"
# extract contours where braid variable
# equals 0.2 and 0.4
contour_params = pipelines["pl1/f1/params"]
contour_params["field"] = "braid"
iso_vals = np.array([0.2, 0.4],dtype=np.float32)
contour_params["iso_values"].set(iso_vals)
# declare a scene to render the pipeline result
add_act2 = actions.append()
add_act2["action"] = "add_scenes"
scenes = add_act2["scenes"]
# add a scene (s1) with one pseudocolor plot (p1) that
# will render the result of our pipeline (pl1)
scenes["s1/plots/p1/type"] = "pseudocolor"
scenes["s1/plots/p1/pipeline"] = "pl1"
scenes["s1/plots/p1/field"] = "braid"
# set the output file name (ascent will add ".png")
scenes["s1/image_name"] = "out_pipeline_ex1_contour"
# print our full actions tree
print(actions.to_yaml())
# execute the actions
a.execute(actions)
a.close()
Creating and rendering the multiple pipelines¶
#include "ascent.hpp"
#include "conduit_blueprint.hpp"
using namespace ascent;
using namespace conduit;
int main(int argc, char **argv)
{
//create example mesh using the conduit blueprint braid helper
Node mesh;
conduit::blueprint::mesh::examples::braid("hexs",
25,
25,
25,
mesh);
// Use Ascent to calculate and render contours
Ascent a;
// open ascent
a.open();
// publish mesh to ascent
a.publish(mesh);
// setup actions
Node actions;
Node &add_act = actions.append();
add_act["action"] = "add_pipelines";
Node &pipelines = add_act["pipelines"];
// create a pipeline (pl1) with a contour filter (f1)
pipelines["pl1/f1/type"] = "contour";
// extract contours where braid variable
// equals 0.2 and 0.4
Node &contour_params = pipelines["pl1/f1/params"];
contour_params["field"] = "braid";
double iso_vals[2] = {0.2, 0.4};
contour_params["iso_values"].set(iso_vals,2);
// declare a scene to render the pipeline result
Node &add_act2 = actions.append();
add_act2["action"] = "add_scenes";
Node & scenes = add_act2["scenes"];
// add a scene (s1) with one pseudocolor plot (p1) that
// will render the result of our pipeline (pl1)
scenes["s1/plots/p1/type"] = "pseudocolor";
scenes["s1/plots/p1/pipeline"] = "pl1";
scenes["s1/plots/p1/field"] = "braid";
// set the output file name (ascent will add ".png")
scenes["s1/image_name"] = "out_pipeline_ex1_contour";
// print our full actions tree
std::cout << actions.to_yaml() << std::endl;
// execute the actions
a.execute(actions);
a.close();
}
import conduit
import conduit.blueprint
import ascent
import numpy as np
mesh = conduit.Node()
conduit.blueprint.mesh.examples.braid("hexs",
25,
25,
25,
mesh)
# Use Ascent to calculate and render contours
a = ascent.Ascent()
a.open()
# publish our mesh to ascent
a.publish(mesh);
# setup actions
actions = conduit.Node()
add_act = actions.append()
add_act["action"] = "add_pipelines"
pipelines = add_act["pipelines"]
# create a pipeline (pl1) with a contour filter (f1)
pipelines["pl1/f1/type"] = "contour"
# extract contours where braid variable
# equals 0.2 and 0.4
contour_params = pipelines["pl1/f1/params"]
contour_params["field"] = "braid"
iso_vals = np.array([0.2, 0.4],dtype=np.float32)
contour_params["iso_values"].set(iso_vals)
# declare a scene to render the pipeline result
add_act2 = actions.append()
add_act2["action"] = "add_scenes"
scenes = add_act2["scenes"]
# add a scene (s1) with one pseudocolor plot (p1) that
# will render the result of our pipeline (pl1)
scenes["s1/plots/p1/type"] = "pseudocolor"
scenes["s1/plots/p1/pipeline"] = "pl1"
scenes["s1/plots/p1/field"] = "braid"
# set the output file name (ascent will add ".png")
scenes["s1/image_name"] = "out_pipeline_ex1_contour"
# print our full actions tree
print(actions.to_yaml())
# execute the actions
a.execute(actions)
a.close()