upxo package
Module contents
UPXO — UKAEA Poly-XTAL Operations
UPXO is an open-source Python framework for generating, analysing, manipulating, meshing, visualising, and exporting representative polycrystalline grain structures for materials science.
It is primarily developed for multi-scale computational studies of nuclear structural materials but applies equally to aerospace, automotive, and data-driven materials research.
Quick Start
UPXO grain structure simulations are driven by an Excel dashboard file that holds all simulation parameters. The minimal workflow is:
from upxo.ggrowth.mcgs import mcgs
pxt = mcgs(input_dashboard='path/to/input_dashboard.xls')
pxt.simulate()
pxt.detect_grains()
tslice = pxt.m[-1] # last saved Monte-Carlo step
gs = pxt.gs[tslice] # grain structure at that step
gs.char_morph_2d(
use_version=2,
npixels=True,
aspect_ratio=True,
solidity=True,
make_skim_prop=True,
)
print(gs.prop.head()) # pandas DataFrame of grain properties
See the Getting Started and Workflows pages for annotated step-by-step examples.
Package Structure
The UPXO package is organised into the following sub-packages:
Grain structure generation
upxo.ggrowth— Monte-Carlo grain growth simulation (Potts model, 2D and 3D)upxo.pxtal— Core grain structure classes and temporal-slice data modelupxo.grids— Grid construction and managementupxo.algorithms— Low-level MC iteration algorithms
Grain characterisation and operations
upxo.gsdataops— Grid and grain-ID operations on labelled imagesupxo.charops— Morphological characterisation routinesupxo.pxtalops— Grain structure operations: smoothing, merging, detectionupxo.connops— Connectivity and neighbourhood operationsupxo.topOps— Topological analysisupxo.netops— Grain network / graph operationsupxo.gbops— Grain boundary operations
Crystal structure and orientation
upxo.xtal— Grain object definitions (2D and 3D)upxo.xtalops— Crystal operationsupxo.xtalphy— Crystal physics: orientation, texture, slip systemsupxo.material— Material definitions
Meshing
upxo.meshing— Conformant and non-conformant FE mesh generation
Visualisation
upxo.viz— 2D and 3D plotting (matplotlib, pyvista)
Data interfaces
upxo.interfaces— Import/export: Abaqus, DAMASK, MOOSE, Dream.3D, EBSD, Excel, VTKupxo.statops— Statistical operations and samplingupxo.repqual— Representativeness quality assessment
Geometry and spatial entities
upxo.geoEntities— Points, lines, polygons, surfaces (2D and 3D)
Supporting utilities
upxo._sup— Internal data handlers, type validators, and utility functions
Key Concepts
- Labelled Feature Image (LFI / lgi)
A NumPy integer array where every element holds the integer ID of the grain it belongs to. This is the fundamental data representation of a grain structure in UPXO. Grain IDs are 1-based; 0 is reserved for background.
- Time slice (tslice / gsid)
A single saved snapshot of the grain structure at a given Monte-Carlo step.
pxt.mis the list of saved step indices;pxt.gs[tslice]retrieves the correspondingmcgs2_grain_structureobject.- mcgs2_grain_structure
The per-time-slice container. Holds the labelled grain image (
gs.lgi), the number of detected grains (gs.n), per-grain morphological properties (gs.prop), and neighbour data (gs.neigh_gid).
See the Key Concepts page for a full explanation.
Further Reading
Subpackages
- upxo.algorithms package
- Submodules
- upxo.algorithms.alg200 module
- upxo.algorithms.alg200gen module
- upxo.algorithms.alg201 module
- upxo.algorithms.alg202 module
- upxo.algorithms.alg220 module
- upxo.algorithms.alg221 module
- upxo.algorithms.alg222 module
- upxo.algorithms.alg223 module
- upxo.algorithms.alg224 module
- upxo.algorithms.alg230 module
- upxo.algorithms.alg300 module
- upxo.algorithms.alg300_old module
- upxo.algorithms.alg300a module
- upxo.algorithms.alg300b module
- upxo.algorithms.alg301 module
- upxo.algorithms.alg302 module
- upxo.algorithms.alg310 module
- upxo.algorithms.alg310_bu module
- upxo.algorithms.alg310_bu2 module
- upxo.algorithms.alg310_bu3 module
- Module contents
- Submodules
- upxo.analysis package
- upxo.charops package
- Submodules
- upxo.charops.mchar module
- mchar — Morphological characterisation of labelled feature images
detect_features()characterise_features_in_image_2d()characterise_features_in_image_v2()classify_grain_positions_2d()boundary_grain_fraction()build_grain_props()extract_prop_area()extract_prop_eq_diameter()extract_prop_perimeter()extract_prop_perimeter_crofton()extract_prop_solidity()extract_prop_major_axis_length()extract_prop_minor_axis_length()extract_prop_morph_ori()extract_prop_feret_diameter()extract_prop_euler_number()extract_prop_eccentricity()extract_prop_aspect_ratio()extract_prop_compactness()extract_prop_npixels()extract_prop_gb_pixels()get_grain_size_distribution_from_slice()
- upxo.charops.mchar module
- Module contents
- Submodules
- upxo.connops package
- upxo.dclasses package
- upxo.external package
- upxo.fdbOps package
- upxo.flags_and_controls package
- upxo.gbops package
- Submodules
- upxo.gbops.gbpoint_ops module
- upxo.gbops.geo1 module
- upxo.gbops.grainBoundOps3d module
- upxo.gbops.mcgb2dops module
- Module: mcgb2dops
- Functions
- Usage
PL_cell_boundaries()PL_cellb_junction_points()detect_cell_boundaries()pad_lfi()find_common_interface_boundaries()segment_cell_boundaries()see_bsegs_gids()characterise_boundary_segments()detect_junction_points()find_basic_JPO_stats()sort_junction_points()mask_featIDImg_at_coords()pad_with()segment_existing_boundaries()circular_sort()circular_sort_method1()method1()method2()method3_2d()calculate_junction_order()build_grain_pairs()identify_grain_boundary_pixels()find_gb_junction_point_map()compute_grain_boundary_locs()
- Module contents
- Submodules
- upxo.geoEntities package
- Submodules
- upxo.geoEntities.bases module
- upxo.geoEntities.comparisions module
- upxo.geoEntities.edge2d module
- upxo.geoEntities.featmake module
- upxo.geoEntities.geoCmp module
- upxo.geoEntities.geoOps2D module
- upxo.geoEntities.geoOps3D module
- upxo.geoEntities.muledge2d module
- upxo.geoEntities.mulpoint2d module
- upxo.geoEntities.mulpoint2d_old module
- upxo.geoEntities.mulpoint3d module
- upxo.geoEntities.mulsline2d module
- upxo.geoEntities.mulsline3d module
- upxo.geoEntities.plane module
- upxo.geoEntities.point2d module
- upxo.geoEntities.point3d module
- upxo.geoEntities.point_processes module
- upxo.geoEntities.polygon2d module
- upxo.geoEntities.polygon2d_from_shapely module
- upxo.geoEntities.polygon3d module
- upxo.geoEntities.pops module
- Usage
- Functions
CMPEQ_points()CMPEQ_pnt_fast_exact()CMPEQ_pnt_fast_EPS()CMPEQ_pnt_fast_tdist()CMPEQ_up2d_edge()CMPEQ_up2d_edges()DIST_point_edges()RELPOS_point_points_above()RELPOS_point_points_below()RELPOS_point_points_left()RELPOS_point_points_right()xadd()yadd()xmul()ymul()xdiv()ydiv()xabs()yabs()intize()floatize()roundround()xroundround()yroundround()roundceil()xroundceil()yroundceil()roundfloor()xroundfloor()yroundfloor()negxy()negx()negy()mirrorx()mirrory()translate()rotate()distance()pixelize()make_polygon()
- upxo.geoEntities.ring2d module
- upxo.geoEntities.sline2d module
- upxo.geoEntities.sline3d module
- upxo.geoEntities.surface module
- Module contents
- Submodules
- upxo.ggrowth package
- upxo.grids package
- upxo.gsContainters package
- Submodules
- Module contents
MC_GS_Container2dMC_GS_Container2d.indbMC_GS_Container2d.gssetMC_GS_Container2d.mctimeStartMC_GS_Container2d.mctimeStepMC_GS_Container2d.mctimeEndMC_GS_Container2d.char_kwargsMC_GS_Container2d.by_upxoMCSIM_gsset_GEN()MC_GS_Container2d.plot_temporal_distributions()MC_GS_Container2d.indbMC_GS_Container2d.gssetMC_GS_Container2d.mctimeStartMC_GS_Container2d.mctimeStepMC_GS_Container2d.mctimeEndMC_GS_Container2d.char_kwargsMC_GS_Container2d.stats_table
- upxo.gsdataops package
- Submodules
- upxo.gsdataops.gid_ops module
- Imports
- Metadata
- Applications
- Definitions
merge_label_into()get_all_masks()find_O1_neigh_2d()find_O1_neigh_3d()find_O1_neigh_2d_fids()find_O2_neigh_3d_fids()extract_neigh_gid_subset()select_neighs_with_probability()shuffleLFIIDs()find_neighs2d()find_neighs3d()get_nth_order_neighbors()detect_islands()find_small_fids()find_boundary_fids2d()find_boundary_fids3d()find_internal_fids2d()find_internal_fids3d()find_corner_fids2d()find_corner_fids3d()find_edge_fids2d()find_edge_fids3d()
- upxo.gsdataops.grid_ops module
- Imports
- Metadata
- Applications
- Definitions
merge_label_into()section_from_3d()build_pvgrid()mask_featIDImg_at_coords()find_feature_extended_bbox_pix()find_extended_bbox_pix_fids()find_extended_bounding_box_all_grains()rescale_grid_2d()stretch_grid_2d()resample_grid_2d()resample_grid_3d()rescale_grid_3d()stretch_grid_3d()detect_grains_cc3d()detect_grains_3d()detect_grains_3d_optimized()detect_grains_using_s()detect_grains_fast_v3()detect_grains_greedy_3d()shuffle_feature_IDs()merge_features_to_neighs()get_ball_footprint()smooth_voxMorph_npass()smooth_voxMorph_1pass()majority_filter_2d()majority_filter_3d_npass()majority_filter_3d_1pass()compute_grain_bounding_boxes()compute_local_grain_mask()generate_test_2D_LFI_1()generate_constrained_hybrid_seeds()generate_constrained_hybrid_seeds_3d()generate_poisson_disk_seeds()generate_darted_seeds()pad_lfi()find_gb_v1()segment_grain_boundaries()make_gbsegImage()combine_partitions()detect_features_in_image_MCstateWise_2d()compute_twin_thickness_stats()compute_grain_intercept_lengths()compute_linear_intercepts_2d()extract_2d_slice_pair()clean_voxel_spikes_3d()split_disconnected_lobes_3d()
- upxo.gsdataops.gid_ops module
- Module contents
- Submodules
- upxo.heirGs package
- upxo.imageOps package
- upxo.interfaces package
- Subpackages
- upxo.interfaces.abaqus package
- upxo.interfaces.c package
- upxo.interfaces.damask package
- upxo.interfaces.defdap package
- upxo.interfaces.dream3d package
- upxo.interfaces.io package
- upxo.interfaces.matlab package
- upxo.interfaces.moose package
- upxo.interfaces.os package
- upxo.interfaces.report package
- upxo.interfaces.user_inputs package
- Module contents
- Subpackages
- upxo.jpops package
- upxo.material package
- upxo.mechanics package
- upxo.meshing package
- Subpackages
- Submodules
- upxo.meshing.conformal_mesher2d module
- upxo.meshing.elemOps module
- elemOps.py
rebuild_elConnectivity()get_elCentroids_2d()compute_elementQuality_AR_2d()compute_min_angle_deg_2d()find_elIDs_by_quality()build_global_element_numbering()find_el_neigh()find_nthOrderNeigh()extract_elements_within_distance_to_gb()resolve_eltypes()build_element_ids_by_band()select_elements_in_bands()
- upxo.meshing.gsmesh2d module
- upxo.meshing.mesher_2d module
- upxo.meshing.nonConformalMesher module
- upxo.meshing.pxtalmesh_01 module
- upxo.meshing.writer_ABQ module
- Module contents
- upxo.misc package
- upxo.netops package
- upxo.parswep package
- upxo.propOps package
- upxo.pxtal package
- Subpackages
- Submodules
- upxo.pxtal.FMSteels module
- upxo.pxtal.geogs module
- upxo.pxtal.geometrification module
- upxo.pxtal.geotess module
- upxo.pxtal.gridops module
find_label_voxel_locs()compute_label_bounds()extract_bounded_subarray()map_values_to_labels()slice_scalar_field_3d()mask_labels()bresenham_line_3d()values_along_line_3d()intercept_properties_from_values()intercept_summary_from_values()opposing_boundary_points()axis_intercept_grain_size()directional_intercept_grain_size()local_neighborhood()neighbor_labels_at_location()plane_slice()relabel_multistate_slice_2d()grid_axis()domain_volume_from_axes()extract_random_subdomains()make_grid_pxtal()
- upxo.pxtal.images module
- upxo.pxtal.images1 module
- upxo.pxtal.img_essentials_01 module
- upxo.pxtal.mcgs2_temporal_slice module
- upxo.pxtal.mcgs3_temporal_slice module
- upxo.pxtal.polycrystal module
- upxo.pxtal.polyxtal module
- upxo.pxtal.pxtal_ori_map_2d module
- upxo.pxtal.single_phased module
- upxo.pxtal.vortess2d module
- upxo.pxtal.vortess3d module
- upxo.pxtal.vt module
- Module contents
gtess2dgtess2d.gen_methodgtess2d.spsgtess2d.pxtalsgtess2d.ninstgtess2d.instngtess2d.uinputsgtess2d.xboundgtess2d.yboundgtess2d.fdb_basegtess2d.geolinkgtess2d.fdb_subgrainsgtess2d.fdb_papsgtess2d.mpropgtess2d.tpropgtess2d.idmap_c_supcgtess2d.idmap_c_subcgtess2d.boundsgtess2d.infogtess2d.seedsgtess2d.from_mpoint2d()gtess2d.from_shapely_mulpolygon()gtess2d.from_geometrified_mcgs2d()gtess2d.from_seed_points()gtess2d.from_geometry_link()gtess2d.extract_shapely_coords_all_grains()gtess2d.add_supcell_instances()gtess2d.partition_cells()gtess2d.voronoi_subdivision()gtess2d.get_pxtal()gtess2d.get_cells()gtess2d.get_all_cids()gtess2d.convert_subgrains_to_paps()gtess2d.make_sub_blocks_in_blocks()gtess2d.make_blocks_in_paps()gtess2d.assign_loc_tags()gtess2d.relate_cv_cids()gtess2d.find_On_neigh()gtess2d.find_neigh_nplus1()gtess2d.setup_fid()gtess2d.get_stat()gtess2d.setup_mprop()gtess2d.setup_tprop()gtess2d.find_areas()gtess2d.find_mprop_all()gtess2d.find_ar()gtess2d.link_geom()gtess2d.make_upxo_gs()gtess2d.reconstruct_pxtal_from_geom_link()gtess2d.setup_fdb()gtess2d.add_fdb()gtess2d.plot()gtess2d.plot_cells()gtess2d.get_nboundaries_cell()gtess2d.get_cell_vertices_ext_from_cell()gtess2d.get_cell_vertices_ext_from_lr()gtess2d.get_cell_vertices()gtess2d.get_cell_edge_lengths()gtess2d.sf_gbz_cell()gtess2d.sf_gbz()gtess2d.gen_pol6_grid()gtess2d.fidgtess2d.flocgtess2d.cids_basegtess2d.fdb_pixgtess2d.fdb_pertgtess2d.fdb_supsetgtess2d.neighs_cidgtess2d.xomapgtess2d.ngtess2d.gbjpgtess2d.grain_locsgtess2d.gposgtess2d.find_scells_in_tcell()gtess2d.assemble_cells()gtess2d.perturb_feat()gtess2d.fe_mesh()gtess2d.get_idmap_cf()gtess2d.get_idmap_fc()gtess2d.validate_instance_ID()
geotess2dgeotess2d.boundsgeotess2d.seedsgeotess2d.gridgeotess2d.xtalsgeotess2d.gidgeotess2d.neigh_gidgeotess2d.propgeotess2d.infogeotess2d.set_seed_points()geotess2d.make_seeds_random()geotess2d.make_seeds_pdisc()geotess2d.make_seeds_dart()geotess2d.set_seeds()geotess2d.save()geotess2d.load()geotess2d.find_neighbours()geotess2d.find_first_nearest_neighbours()geotess2d.find_second_nearest_neighbours()geotess2d.filter_boundary_grains()geotess2d.filter_internal_grains()geotess2d.filter_grains_by_loc()geotess2d.filter_grains_by_prop()geotess2d.divide_all_edges_in_half()geotess2d.move_new_vertex_point()geotess2d.perturb_grain_boundaries()geotess2d.convert_to_pixels()geotess2d.boundsgeotess2d.seedsgeotess2d.gridgeotess2d.gridpointsgeotess2d.jpgeotess2d.vpgeotess2d.gbedgesgeotess2d.gbseggeotess2d.xtalsgeotess2d.gidgeotess2d.neigh_gidgeotess2d.propgeotess2d.info
generate_voronoi_2d()compute_standard_voronoi_2d()compute_power_diagram_2d()cvt_relax_2d()perturb_interfaces_2d()
- upxo.pxtalops package
- Submodules
- upxo.pxtalops.Characterizer module
- upxo.pxtalops.detect_grains_from_mcstates module
- upxo.pxtalops.grain_boundary_zones module
- upxo.pxtalops.grain_splitting_3d module
- upxo.pxtalops.gssmooth2d module
- upxo.pxtalops.manipulator_mergers module
- upxo.pxtalops.mcgsops2d module
- upxo.pxtalops.modeModifierMcgs2d module
- upxo.pxtalops.morphochar module
- upxo.pxtalops.temporalPatcher module
- upxo.pxtalops.twin3d module
- upxo.pxtalops.vox2geom module
- upxo.pxtalops.vtgsops2d module
- Module contents
- Submodules
- upxo.repgen package
- upxo.reporting package
- Submodules
- Module contents
ReportSessionReportSession.update_run_metadata()ReportSession.entriesReportSession.remove_entry()ReportSession.clear()ReportSession.add_section()ReportSession.add_image()ReportSession.add_table()ReportSession.add_text()ReportSession.add_params_snapshot()ReportSession.save()ReportSession.load()ReportSession.open()
ImageEntryTableEntryTextEntryParamsEntrySectionHeaderrender_html()
- upxo.repqual package
- upxo.statops package
- upxo.surrModelOps package
- upxo.tempops package
- upxo.texOps package
- upxo.topOps package
- upxo.uiOps package
- upxo.viz package
- Subpackages
- Submodules
- upxo.viz.artwork_definitions module
- upxo.viz.dataviz module
- upxo.viz.ebsdviz module
- Usage
plot_grain_labels()plot_euler_maps()build_ipf_rgb()plot_grain_size_histogram()plot_grain_structure_with_boundaries()plot_mdf()plot_mdf_selected()plot_csl_grain_map()print_parent_grain_summary()plot_parent_grain_summary()plot_parent_twin_map()plot_combined_parent_twin_map()compute_pct_interior_grains()compute_grain_role_property_distributions()plot_grain_role_property_distributions()plot_grain_role_property_stats()print_grain_role_ratios()plot_grain_role_map()plot_twin_introduction_map()default_bin_width()plot_twin_thickness_stats()plot_grain_area_comparison()
- upxo.viz.gbviz module
- upxo.viz.gsviz module
see_map()see_bsegs_gid()see_bsegs_gid_pix()plot_multipolygon_geometric()pvgrid_dimensions_from_scalar()pvgrid_cell_data_from_scalar()make_pvgrid()make_pvgrid_2d()plot_pvgrid()grain_viewer()view_selected_grain_boundary_voxels()viz_clip_plane()viz_mesh_slice()viz_mesh_slice_ortho()vox2geom_plots()view_grains()view_boundary_voxels()see_clip_plane()see_mesh_slice()see_mesh_slice_ortho()plot_manifold_geom()see_2dPoints()
- upxo.viz.helpers module
- upxo.viz.meshviz module
- meshviz.py
see_femesh()plot_elements_by_ids_geomMesh()plot_elements_geometric_grain()plot_elements_by_elIDs()plot_elements_geometric_grains()pick_contrasting_colours_from_cmap()resolve_band_colours()resolve_plot_eltype()plot_band_elements()see_gbElements_grains()plot_conformal_2d_by_grain()
- upxo.viz.plot_artefacts module
- upxo.viz.vizDistr module
- Module contents
- upxo.xtal package
- upxo.xtalops package
- upxo.xtalphy package