show_metadata/
show_metadata.rs1use read_vk6::read_vk6;
5use std::path::Path;
6
7fn main() -> Result<(), Box<dyn std::error::Error>> {
8 let path = Path::new("tests/data/sample.vk6");
9
10 if !path.exists() {
11 eprintln!("Error: Please place a VK6 file at {:?}", path);
12 eprintln!("You can obtain VK6 files from Keyence VK-X series microscopes");
13 return Ok(());
14 }
15
16 println!("Reading VK6 file...");
18 let surface = read_vk6(path, true)?;
19
20 println!("\n{}", surface.metadata.summary());
22
23 println!("\n=== COMPREHENSIVE METADATA ===\n");
25
26 println!("Basic Information:");
27 println!(" Title: {:?}", surface.metadata.title);
28 println!(" Lens Name: {:?}", surface.metadata.lens_name);
29 println!(" Timestamp: {:?}", surface.metadata.timestamp);
30 println!(" UTC Offset: {:?}", surface.metadata.diff_from_utc);
31
32 println!("\nImage Attributes:");
33 println!(" Image Attributes: {:?}", surface.metadata.img_attributes);
34 println!(" User Interface Mode: {:?}", surface.metadata.user_interface_mode);
35 println!(" Color Composite Mode: {:?}", surface.metadata.color_composite_mode);
36 println!(" Image Layer Number: {:?}", surface.metadata.img_layer_number);
37 println!(" Omit Color Image: {:?}", surface.metadata.omit_color_img);
38
39 println!("\nMeasurement Modes:");
40 println!(" Run Mode: {:?}", surface.metadata.run_mode);
41 println!(" Peak Mode: {:?}", surface.metadata.peak_mode);
42 println!(" Sharpening Level: {:?}", surface.metadata.sharpening_level);
43 println!(" Speed: {:?}", surface.metadata.speed);
44 println!(" Distance: {:?}", surface.metadata.distance);
45 println!(" Pitch: {:?}", surface.metadata.pitch);
46
47 println!("\nOptical Settings:");
48 println!(" Optical Zoom: {:?}", surface.metadata.optical_zoom);
49 println!(" Objective Magnification: {:?}", surface.metadata.objective_magnification);
50 println!(" Lens ID: {:?}", surface.metadata.lens_id);
51 println!(" Numerical Aperture: {:?}", surface.metadata.num_aperture);
52 println!(" Head Type: {:?}", surface.metadata.head_type);
53
54 println!("\nLine Measurement:");
55 println!(" Number of Lines: {:?}", surface.metadata.number_of_lines);
56 println!(" Line 0 Position: {:?}", surface.metadata.line0_position);
57
58 println!("\nPMT Settings:");
59 println!(" PMT Gain Mode: {:?}", surface.metadata.pmt_gain_mode);
60 println!(" PMT Gain: {:?}", surface.metadata.pmt_gain);
61 println!(" PMT Gain 2: {:?}", surface.metadata.pmt_gain_2);
62 println!(" PMT Offset: {:?}", surface.metadata.pmt_offset);
63
64 println!("\nFilter Settings:");
65 println!(" ND Filter: {:?}", surface.metadata.nd_filter);
66 println!(" Light Filter Type: {:?}", surface.metadata.light_filter_type);
67
68 println!("\nShutter & Exposure:");
69 println!(" Persist Count: {:?}", surface.metadata.persist_count);
70 println!(" Shutter Speed Mode: {:?}", surface.metadata.shutter_speed_mode);
71 println!(" Shutter Speed: {:?}", surface.metadata.shutter_speed);
72
73 println!("\nWhite Balance & Color:");
74 println!(" White Balance Mode: {:?}", surface.metadata.white_balance_mode);
75 println!(" White Balance Red: {:?}", surface.metadata.white_balance_red);
76 println!(" White Balance Blue: {:?}", surface.metadata.white_balance_blue);
77 println!(" Camera Gain: {:?}", surface.metadata.camera_gain);
78
79 println!("\nCompensation:");
80 println!(" Plane Compensation: {:?}", surface.metadata.plane_compensation);
81
82 println!("\nUnits & Decimal Places:");
83 println!(" XY Length Unit: {:?}", surface.metadata.xy_length_unit);
84 println!(" Z Length Unit: {:?}", surface.metadata.z_length_unit);
85 println!(" XY Decimal Place: {:?}", surface.metadata.xy_decimal_place);
86 println!(" Z Decimal Place: {:?}", surface.metadata.z_decimal_place);
87
88 println!("\nResolution (raw values in picometers):");
89 println!(" X Length per Pixel: {:?} pm", surface.metadata.x_length_per_pixel);
90 println!(" Y Length per Pixel: {:?} pm", surface.metadata.y_length_per_pixel);
91 println!(" Z Length per Digit: {:?} pm", surface.metadata.z_length_per_digit);
92
93 println!("\nResolution (calculated in micrometers):");
94 println!(" Step X: {:.6} µm/pixel", surface.step_x);
95 println!(" Step Y: {:.6} µm/pixel", surface.step_y);
96 if let Some(z_len) = surface.metadata.z_length_per_digit {
97 println!(" Step Z: {:.6} µm/digit", z_len as f64 * 1e-6);
98 }
99
100 println!("\nGamma Correction:");
101 println!(" Gamma Reverse: {:?}", surface.metadata.gamma_reverse);
102 println!(" Gamma: {:?}", surface.metadata.gamma);
103 println!(" Gamma Correction Offset: {:?}", surface.metadata.gamma_correction_offset);
104
105 println!("\nCCD Settings:");
106 println!(" CCD BW Offset: {:?}", surface.metadata.ccd_bw_offset);
107
108 println!("\nLight LUT (Look-Up Table):");
109 println!(" Light LUT Mode: {:?}", surface.metadata.light_lut_mode);
110 println!(" LUT Point 0: In={:?}, Out={:?}", surface.metadata.light_lut_in0, surface.metadata.light_lut_out0);
111 println!(" LUT Point 1: In={:?}, Out={:?}", surface.metadata.light_lut_in1, surface.metadata.light_lut_out1);
112 println!(" LUT Point 2: In={:?}, Out={:?}", surface.metadata.light_lut_in2, surface.metadata.light_lut_out2);
113 println!(" LUT Point 3: In={:?}, Out={:?}", surface.metadata.light_lut_in3, surface.metadata.light_lut_out3);
114 println!(" LUT Point 4: In={:?}, Out={:?}", surface.metadata.light_lut_in4, surface.metadata.light_lut_out4);
115
116 println!("\nPosition:");
117 println!(" Upper Position: {:?}", surface.metadata.upper_position);
118 println!(" Lower Position: {:?}", surface.metadata.lower_position);
119
120 println!("\nEffective Bit Depth:");
121 println!(" Light Effective Bit Depth: {:?}", surface.metadata.light_effective_bit_depth);
122 println!(" Height Effective Bit Depth: {:?}", surface.metadata.height_effective_bit_depth);
123
124 println!("\n=== DATA SUMMARY ===");
125 println!("Height map shape: {:?}", surface.height.dim());
126 println!("Height map min: {:.6} µm", surface.height.iter().fold(f64::INFINITY, |a, &b| a.min(b)));
127 println!("Height map max: {:.6} µm", surface.height.iter().fold(f64::NEG_INFINITY, |a, &b| a.max(b)));
128 println!("RGB image present: {}", surface.rgb_image.is_some());
129 if let Some(ref rgb) = surface.rgb_image {
130 println!("RGB image shape: {:?}", rgb.dim());
131 }
132
133 Ok(())
134}