From 44f8f230ef443fbce9e4ab7961326433b1613169 Mon Sep 17 00:00:00 2001 From: Diablo Date: Sun, 25 Jan 2026 12:23:58 +0100 Subject: [PATCH 1/5] Change from exit to return in merge lines draw, and make dummyint reallocate in case of mesh --- mcstas-comps/share/union-lib.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/mcstas-comps/share/union-lib.c b/mcstas-comps/share/union-lib.c index 82732c2f1..eac2f889a 100755 --- a/mcstas-comps/share/union-lib.c +++ b/mcstas-comps/share/union-lib.c @@ -2146,8 +2146,7 @@ void merge_lines_to_draw(struct lines_to_draw *lines_master,struct lines_to_draw if (lines_master->number_of_lines == 0) { lines_master->number_of_lines = lines_new->number_of_lines; if (!lines_master->number_of_lines) { - fprintf(stderr,"Failure allocating list in Union function merge_lines_to_draw 1 - Exit!\n"); - exit(EXIT_FAILURE); + return; } lines_master->lines = malloc(lines_master->number_of_lines*sizeof(struct line_segment)); if (!lines_master->lines) { @@ -2308,23 +2307,27 @@ struct lines_to_draw draw_line_with_highest_priority(Coords position1,Coords pos int geometry_output; // Todo: switch to nicer intersect function call - double *double_dummy = malloc(2*sizeof(double)); - int int_dummy[2]; + double *double_dummy = malloc(max_number_of_solutions*sizeof(double)); + int *int_dummy = malloc(max_number_of_solutions*sizeof(int)); // We need a storing pointer for the reallocs, to ensure that on realloc fail // All is handled correctly double *tmp; + int *tmpint; // Find intersections for (volume_index = 1;volume_index < number_of_volumes; volume_index++) { if (volume_index != N) { if (Geometries[volume_index]->eShape==mesh){ tmp = realloc(double_dummy, sizeof(double)*1000); - if ( tmp==NULL ) { + tmpint = realloc(int_dummy, sizeof(double)*1000); + if ( tmp==NULL || tmpint==NULL ) { free(tmp); + free(tmpint); printf("\nERROR: Realloc failed on double dummy"); exit(1); } else { double_dummy = tmp; + int_dummy = tmpint; tmp = realloc(temp_intersection, sizeof(double)*1000); if ( tmp == NULL){ free(tmp); From 5e97d6db648c2aa3ccdf6c2c89717295eac7bb87 Mon Sep 17 00:00:00 2001 From: Diablo Date: Sun, 25 Jan 2026 12:24:58 +0100 Subject: [PATCH 2/5] Format mcdisplay section to make for loops more readable, and add print statement to indicate how many face and verts are read --- mcstas-comps/union/Union_mesh.comp | 64 +++++++++++++++--------------- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/mcstas-comps/union/Union_mesh.comp b/mcstas-comps/union/Union_mesh.comp index 9e04de93d..47eb8b280 100644 --- a/mcstas-comps/union/Union_mesh.comp +++ b/mcstas-comps/union/Union_mesh.comp @@ -509,48 +509,48 @@ void mcdisplay_mesh_function(struct lines_to_draw *lines_to_draw_output,int inde // Make sure it does not print a line if it is already printed.... (might take a while?) for (i = 0 ; i < counter ; i++){ if (print1 == 1 && coord_comp(point1 , list_startpoints[i])){ - for (j = 0 ; j < counter ; j++){ - if (coord_comp(point2 , list_startpoints[i])){ - print1 = 0; - } - } + for (j = 0 ; j < counter ; j++){ + if (coord_comp(point2 , list_startpoints[i])){ + print1 = 0; + } + } } if (print2 == 1 && coord_comp(point2 , list_startpoints[i])){ - for (j = 0 ; j < counter ; j++){ - if (coord_comp(point1 , list_startpoints[i])){ - print1 = 0; - } - } + for (j = 0 ; j < counter ; j++){ + if (coord_comp(point1 , list_startpoints[i])){ + print1 = 0; + } + } } if (print2 == 1 && coord_comp(point2 , list_startpoints[i]) ){ - for (j = 0 ; j < counter ; j++){ - if (coord_comp(point3 , list_startpoints[i])){ - print2 = 0; - } - } + for (j = 0 ; j < counter ; j++){ + if (coord_comp(point3 , list_startpoints[i])){ + print2 = 0; + } + } } if (print3 == 1 && coord_comp(point3 , list_startpoints[i]) ){ - for (j = 0 ; j < counter ; j++){ - if (coord_comp(point2 , list_startpoints[i])){ - print2 = 0; - } - } + for (j = 0 ; j < counter ; j++){ + if (coord_comp(point2 , list_startpoints[i])){ + print2 = 0; + } + } } if (print1 == 1 && coord_comp(point1 , list_startpoints[i]) ){ - for (j = 0 ; j < counter ; j++){ - if (coord_comp(point1 , list_startpoints[i])){ - print3 = 0; - } - } + for (j = 0 ; j < counter ; j++){ + if (coord_comp(point1 , list_startpoints[i])){ + print3 = 0; + } + } } if (print3 == 1 && coord_comp(point3 , list_startpoints[i])){ - for (j = 0 ; j < counter ; j++){ - if (coord_comp(point1 , list_startpoints[i])){ - print3 = 0; - } - } + for (j = 0 ; j < counter ; j++){ + if (coord_comp(point1 , list_startpoints[i])){ + print3 = 0; + } + } } - + } @@ -968,6 +968,8 @@ if(strcmp(dot, ".stl") == 0 || strcmp(dot, ".STL") == 0){ NAME_CURRENT_COMP, filename); exit(1); } +printf("\nCOMPONENT %s: Number of faces read: %d\t Number of vertices read: %d\n", + NAME_CURRENT_COMP, n_verts, n_faces); // Loop over all vertices and multiply their positions with coordinate_scale for (int i = 0; i Date: Mon, 26 Jan 2026 10:25:12 +0100 Subject: [PATCH 3/5] Add Hidden cylinder test instrument --- .../Hidden_Cylinder/Hidden_Cylinder.instr | 164 ++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 mcstas-comps/examples/Tests_union/Hidden_Cylinder/Hidden_Cylinder.instr diff --git a/mcstas-comps/examples/Tests_union/Hidden_Cylinder/Hidden_Cylinder.instr b/mcstas-comps/examples/Tests_union/Hidden_Cylinder/Hidden_Cylinder.instr new file mode 100644 index 000000000..cae946029 --- /dev/null +++ b/mcstas-comps/examples/Tests_union/Hidden_Cylinder/Hidden_Cylinder.instr @@ -0,0 +1,164 @@ +/******************************************************************************** +* +* McStas, neutron ray-tracing package +* Copyright (C) 1997-2008, All rights reserved +* Risoe National Laboratory, Roskilde, Denmark +* Institut Laue Langevin, Grenoble, France +* +* This file was written by McStasScript, which is a +* python based McStas instrument generator written by +* Mads Bertelsen in 2019 while employed at the +* European Spallation Source Data Management and +* Software Centre +* +* Instrument: Hidden_Cylinder +* +* %Identification +* Written by: Daniel Lomholt Christensen +* Date: 15:54:48 on January 20, 2026 +* Origin: UCPH@NBI, Funded by ACTNXT +* %INSTRUMENT_SITE: Tests_union +* +* +* %Description +* A small test instrument testing the placement of one cylinder with a low priority +* fully inside another cylinder with a higher priority. This was added to test +* for an mcdisplay error that used to occur, when a cylinder is completely +* enclosed in another cylinder. +* To test this simply do +* a "mcdisplay Hidden_Cylinder.instr -c -y" +* +* %Example: pin_rad=0.0025 Detector: det_I=3.42884e-06 +* +* %Parameters +* pin_rad: [m] Radius of source +* d: [m] Distance between source and sample center +* detector_x: [m] Detector Width +* detector_y: [m] Detector Height +* det_dist: [m] Distance between detector and sample center +* +* %Link +* +* %End +********************************************************************************/ + +DEFINE INSTRUMENT imaging ( +double pin_rad = 0.0025, // Radius of source +double d = 10, // Distance between source and sample center +double detector_x = 0.01, // Detector Width +double detector_y = 0.04, // Detector Height +double det_dist = 0.005 // Distance between detector and sample center +) + +DECLARE +%{ +%} + +INITIALIZE +%{ +%} + +TRACE +COMPONENT Origin = Progress_bar() +AT (0, 0, 0) ABSOLUTE + +COMPONENT source = Source_simple( + radius = pin_rad, yheight = 0, + xwidth = 0, dist = d, + focus_xw = detector_x, focus_yh = detector_y, + lambda0 = 4, dlambda = 3) +AT (0, 0, 0) RELATIVE Origin +ROTATED (0.0, 0.0, 0.0) RELATIVE Origin + +COMPONENT entry_mon = PSD_monitor( + nx = 200, ny = 200, + xwidth = detector_x, yheight = detector_x, + restore_neutron = 1) +AT (0, 0, 0.0001) RELATIVE source +ROTATED (0.0, 0.0, 0.0) RELATIVE source + +COMPONENT arm_sample_position = Arm() +AT (0, 0, d) RELATIVE source +ROTATED (0, 0, 0) RELATIVE Origin + +COMPONENT init = Union_init() +AT (0, 0, 0) RELATIVE arm_sample_position +ROTATED (0.0, 0.0, 0.0) RELATIVE arm_sample_position + +COMPONENT Sample_inc = Incoherent_process( + sigma = 0.4 * 2, unit_cell_volume = 24.04) +AT (0, 0, 0) RELATIVE arm_sample_position +ROTATED (0.0, 0.0, 0.0) RELATIVE arm_sample_position + +COMPONENT Sample_pow = Powder_process( + reflections = "Fe.laz") +AT (0, 0, 0) RELATIVE arm_sample_position +ROTATED (0.0, 0.0, 0.0) RELATIVE arm_sample_position + +COMPONENT Sample = Union_make_material( + process_string = "Sample_inc,Sample_pow", my_absorption = 10*2.56 * 2 / 24.04 * 100) +AT (0, 0, 0) RELATIVE arm_sample_position +ROTATED (0.0, 0.0, 0.0) RELATIVE arm_sample_position + +COMPONENT gas_process = Incoherent_process( + sigma = 0.4 * 2, unit_cell_volume = 240000.04) +AT (0, 0, 0) RELATIVE arm_sample_position +ROTATED (0.0, 0.0, 0.0) RELATIVE arm_sample_position + +COMPONENT sample_gas = Union_make_material( + process_string = "gas_process", my_absorption = 21.29783693843594) +AT (0, 0, 0) RELATIVE Sample +ROTATED (0.0, 0.0, 0.0) RELATIVE Sample + +COMPONENT sample_cyl_metal = Union_cylinder( + material_string = "Sample", priority = 50, + radius = 0.005 / 2, yheight = 0.034) +AT (0, 0, 0) RELATIVE arm_sample_position +ROTATED (0.0, 0.0, 0.0) RELATIVE arm_sample_position + +COMPONENT sample_cyl_gas = Union_cylinder( + material_string = "sample_gas", priority = 51, + radius = 0.009 / 2, yheight = 0.053, + visualize = 1) +AT (0, 0, 0) RELATIVE arm_sample_position +ROTATED (0.0, 0.0, 0.0) RELATIVE arm_sample_position + + COMPONENT logger_space_zx = Union_logger_2D_space( + D_direction_1 = "z", D1_min = -0.05, + D1_max = 0.05, n1 = 300, + D_direction_2 = "x", D2_min = -0.05, + D2_max = 0.05, n2 = 300, + filename = "logger_zx.dat") +AT (0, 0, 0) RELATIVE arm_sample_position +ROTATED (0.0, 0.0, 0.0) RELATIVE arm_sample_position + +COMPONENT logger_space_zy = Union_logger_2D_space( + D_direction_1 = "z", D1_min = -0.05, + D1_max = 0.05, n1 = 300, + D_direction_2 = "y", D2_min = -0.05, + D2_max = 0.05, n2 = 300, + filename = "logger_zy.dat") +AT (0, 0, 0) RELATIVE arm_sample_position +ROTATED (0.0, 0.0, 0.0) RELATIVE arm_sample_position + +COMPONENT Sample_environment = Union_master( + verbal = 1) +AT (0, 0, 0) RELATIVE arm_sample_position +ROTATED (0.0, 0.0, 0.0) RELATIVE arm_sample_position + +COMPONENT stop = Union_stop() +AT (0, 0, 0) RELATIVE arm_sample_position +ROTATED (0.0, 0.0, 0.0) RELATIVE arm_sample_position + +COMPONENT det = PSD_monitor( + nx = 1000, ny = 1000, + filename = "det", xwidth = detector_x, + yheight = detector_y) +AT (0, 0, 0.034 / 2 + det_dist) RELATIVE arm_sample_position +ROTATED (0.0, 0.0, 0.0) RELATIVE arm_sample_position + +FINALLY +%{ +%} + +END From b647047e1768e1d4f718670b99e9637fe4522337 Mon Sep 17 00:00:00 2001 From: Diablo Date: Mon, 26 Jan 2026 10:38:51 +0100 Subject: [PATCH 4/5] Add many meshes instrument that fails without extra allocation in dummyint --- .../Tests_union/Many_meshes/Many_meshes.instr | 171 ++++++++++++++++++ .../examples/Tests_union/Many_meshes/test.stl | Bin 0 -> 37184 bytes 2 files changed, 171 insertions(+) create mode 100644 mcstas-comps/examples/Tests_union/Many_meshes/Many_meshes.instr create mode 100644 mcstas-comps/examples/Tests_union/Many_meshes/test.stl diff --git a/mcstas-comps/examples/Tests_union/Many_meshes/Many_meshes.instr b/mcstas-comps/examples/Tests_union/Many_meshes/Many_meshes.instr new file mode 100644 index 000000000..d3c9e9960 --- /dev/null +++ b/mcstas-comps/examples/Tests_union/Many_meshes/Many_meshes.instr @@ -0,0 +1,171 @@ +/******************************************************************************** +* +* McStas, neutron ray-tracing package +* Copyright (C) 1997-2008, All rights reserved +* Risoe National Laboratory, Roskilde, Denmark +* Institut Laue Langevin, Grenoble, France +* +* This file was written by McStasScript, which is a +* python based McStas instrument generator written by +* Mads Bertelsen in 2019 while employed at the +* European Spallation Source Data Management and +* Software Centre +* +* Instrument: Testing placing many meshes in the same instrument file +* +* %Identification +* Written by: Daniel Lomholt Christensen +* Date: 15:54:48 on January 20, 2026 +* Origin: UCPH@NBI, Funded by ACTNXT +* %INSTRUMENT_SITE: Tests_union +* +* +* %Description +* A small test instrument testing the placement of many overlapping +* mesh components. +* Test with: +* mcdisplay -y -c +* +* %Example: pin_rad=0.0025 Detector:det_I=4.63384e-06 +* +* %Parameters +* pin_rad: [m] Radius of source +* d: [m] Distance between source and sample center +* detector_x: [m] Detector Width +* detector_y: [m] Detector Height +* det_dist: [m] Distance between detector and sample center +* crack_width: [m] Height masking crack should be raised from the original crack +* +* %Link +* +* %End +********************************************************************************/ + +DEFINE INSTRUMENT imaging ( +double pin_rad = 0.0025, // Radius of source +double d = 10, // Distance between source and sample center +double detector_x = 0.01, // Detector Width +double detector_y = 0.04, // Detector Height +double det_dist = 0.005, // Distance between detector and sample center +double crack_width = 0.003 // Height masking crack should be raised from the original crack +) +DEPENDENCY " @NCRYSTALFLAGS@ -DFUNNEL " + +DECLARE +%{ +%} + +INITIALIZE +%{ +// Start of initialize for generated imaging +%} + +TRACE +COMPONENT Origin = Progress_bar() +AT (0, 0, 0) ABSOLUTE + +COMPONENT source = Source_simple( + radius = pin_rad, yheight = 0, + xwidth = 0, dist = d, + focus_xw = detector_x, focus_yh = detector_y, + lambda0 = 4, dlambda = 3) +AT (0, 0, 0) RELATIVE Origin +ROTATED (0.0, 0.0, 0.0) RELATIVE Origin + +COMPONENT entry_mon = PSD_monitor( + nx = 200, ny = 200, + xwidth = detector_x, yheight = detector_x, + restore_neutron = 1) +AT (0, 0, 0.0001) RELATIVE source +ROTATED (0.0, 0.0, 0.0) RELATIVE source + +COMPONENT arm_sample_position = Arm() +AT (0, 0, d) RELATIVE source +ROTATED (0, 0, 0) RELATIVE Origin + +COMPONENT init = Union_init() +AT (0, 0, 0) RELATIVE arm_sample_position +ROTATED (0.0, 0.0, 0.0) RELATIVE arm_sample_position + +COMPONENT Sample_inc = Incoherent_process( + sigma = 0.4 * 2, unit_cell_volume = 24.04) +AT (0, 0, 0) RELATIVE arm_sample_position +ROTATED (0.0, 0.0, 0.0) RELATIVE arm_sample_position + +COMPONENT Sample_pow = Powder_process( + reflections = "Fe.laz") +AT (0, 0, 0) RELATIVE arm_sample_position +ROTATED (0.0, 0.0, 0.0) RELATIVE arm_sample_position + +COMPONENT Sample = Union_make_material( + process_string = "Sample_inc,Sample_pow", my_absorption = 10*2.56 * 2 / 24.04 * 100) +AT (0, 0, 0) RELATIVE arm_sample_position +ROTATED (0.0, 0.0, 0.0) RELATIVE arm_sample_position + +COMPONENT gas_process = NCrystal_process( + cfg = "gasmix::H2/10bar") +AT (0, 0, 0) RELATIVE Sample +ROTATED (0.0, 0.0, 0.0) RELATIVE Sample + +COMPONENT sample_gas = Union_make_material( + process_string = "gas_process", my_absorption = 21.29783693843594) +AT (0, 0, 0) RELATIVE gas_process +ROTATED (0.0, 0.0, 0.0) RELATIVE gas_process + +COMPONENT arm_crack = Arm() +AT (0, 0, 0) RELATIVE arm_sample_position +ROTATED (90, 0, 0) RELATIVE arm_sample_position + +COMPONENT masking_crack = Union_mesh( + filename = "test.stl", material_string = "Sample", + priority = 140, skip_convex_check = 1) +AT (0, 0, 0.0005) RELATIVE arm_crack +ROTATED (0, 0, 0) RELATIVE arm_crack + +COMPONENT crack = Union_mesh( + filename = "test.stl", material_string = "sample_gas", + priority = 139, skip_convex_check = 1, + coordinate_scale = 0.0009811453007353597) +AT (0, 0, 0) RELATIVE arm_crack +ROTATED (0, 0, 0) RELATIVE arm_crack + +COMPONENT logger_space_zx = Union_logger_2D_space( + D_direction_1 = "z", D1_min = -0.05, + D1_max = 0.05, n1 = 300, + D_direction_2 = "x", D2_min = -0.05, + D2_max = 0.05, n2 = 300, + filename = "logger_zx.dat") +AT (0, 0, 0) RELATIVE arm_sample_position +ROTATED (0.0, 0.0, 0.0) RELATIVE arm_sample_position + +COMPONENT logger_space_zy = Union_logger_2D_space( + D_direction_1 = "z", D1_min = -0.05, + D1_max = 0.05, n1 = 300, + D_direction_2 = "y", D2_min = -0.05, + D2_max = 0.05, n2 = 300, + filename = "logger_zy.dat") +AT (0, 0, 0) RELATIVE arm_sample_position +ROTATED (0.0, 0.0, 0.0) RELATIVE arm_sample_position + +COMPONENT Sample_environment = Union_master( + verbal = 1) +AT (0, 0, 0) RELATIVE arm_sample_position +ROTATED (0.0, 0.0, 0.0) RELATIVE arm_sample_position + +COMPONENT stop = Union_stop() +AT (0, 0, 0) RELATIVE arm_sample_position +ROTATED (0.0, 0.0, 0.0) RELATIVE arm_sample_position + +COMPONENT det = PSD_monitor( + nx = 1000, ny = 1000, + filename = "det", xwidth = detector_x, + yheight = detector_y) +AT (0, 0, 0.034 / 2 + det_dist) RELATIVE arm_sample_position +ROTATED (0.0, 0.0, 0.0) RELATIVE arm_sample_position + +FINALLY +%{ +// Start of finally for generated imaging +%} + +END diff --git a/mcstas-comps/examples/Tests_union/Many_meshes/test.stl b/mcstas-comps/examples/Tests_union/Many_meshes/test.stl new file mode 100644 index 0000000000000000000000000000000000000000..a305b45a9fdb766b71e4ceaa27f355c0a33239fa GIT binary patch literal 37184 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 H)yDq;=hlDF literal 0 HcmV?d00001 From de927764f4ce5146d809022373ba9448e8deb9c4 Mon Sep 17 00:00:00 2001 From: Peter Willendrup Date: Mon, 26 Jan 2026 12:35:05 +0100 Subject: [PATCH 5/5] Doc header rectifications --- .../Tests_union/Hidden_Cylinder/Hidden_Cylinder.instr | 3 ++- .../examples/Tests_union/Many_meshes/Many_meshes.instr | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/mcstas-comps/examples/Tests_union/Hidden_Cylinder/Hidden_Cylinder.instr b/mcstas-comps/examples/Tests_union/Hidden_Cylinder/Hidden_Cylinder.instr index cae946029..165aee6dd 100644 --- a/mcstas-comps/examples/Tests_union/Hidden_Cylinder/Hidden_Cylinder.instr +++ b/mcstas-comps/examples/Tests_union/Hidden_Cylinder/Hidden_Cylinder.instr @@ -19,6 +19,7 @@ * Origin: UCPH@NBI, Funded by ACTNXT * %INSTRUMENT_SITE: Tests_union * +* Small test instrument testing placement of low-priority Union cylinder within higher-priority Union cylinder. * * %Description * A small test instrument testing the placement of one cylinder with a low priority @@ -42,7 +43,7 @@ * %End ********************************************************************************/ -DEFINE INSTRUMENT imaging ( +DEFINE INSTRUMENT Hidden_Cylinder ( double pin_rad = 0.0025, // Radius of source double d = 10, // Distance between source and sample center double detector_x = 0.01, // Detector Width diff --git a/mcstas-comps/examples/Tests_union/Many_meshes/Many_meshes.instr b/mcstas-comps/examples/Tests_union/Many_meshes/Many_meshes.instr index d3c9e9960..e36ba0924 100644 --- a/mcstas-comps/examples/Tests_union/Many_meshes/Many_meshes.instr +++ b/mcstas-comps/examples/Tests_union/Many_meshes/Many_meshes.instr @@ -11,7 +11,7 @@ * European Spallation Source Data Management and * Software Centre * -* Instrument: Testing placing many meshes in the same instrument file +* Instrument: Many_meshes * * %Identification * Written by: Daniel Lomholt Christensen @@ -19,6 +19,7 @@ * Origin: UCPH@NBI, Funded by ACTNXT * %INSTRUMENT_SITE: Tests_union * +* Instrument testing placement of overlapping mesh components. * * %Description * A small test instrument testing the placement of many overlapping @@ -41,7 +42,7 @@ * %End ********************************************************************************/ -DEFINE INSTRUMENT imaging ( +DEFINE INSTRUMENT Many_meshes ( double pin_rad = 0.0025, // Radius of source double d = 10, // Distance between source and sample center double detector_x = 0.01, // Detector Width