Skip to content

v2.0.0

Choose a tag to compare

@github-actions github-actions released this 11 Nov 16:04
e0bac82

2.0.0 (2026-11-11)

⚠ BREAKING CHANGES

  • macTEM is now macEM. The download is macEM.dmg and the app is macEM.app, which does not replace macTEM.app. To update: quit macTEM, open the DMG and drag macEM to Applications, then move macTEM to the Trash and replace its Dock icon. Recent files, Reopen Last Session, the folders you allowed, window positions and every .mactem.h5 session file carry over. Exports now name macEM: CSV first lines read "# macEM ...", the line profile's header key "shown in macTEM as" is now "shown in macEM as", and PNG Software, ANG OPERATOR, CTF Author, the MSA comment and the method JSON's "software" say macEM. Session files keep the .mactem.h5 name.
  • every EBSD reader hands its orientation map over as CrystalMap (#182)

Features

  • a second opened file comes up as a tab of its own, like Finder and Safari (#435) (025c0cc)
  • agent door: Claude and other agents on this Mac look at macTEM's windows over MCP (#497) (7489799)
  • an SEM spectrum goes through the shared EDS room's own Quantify, with the file's elements picked on open (#401) (e38f563)
  • complete the Maps room with grains, KAM, GOS, GND, slip and texture (#238) (fb04c32)
  • crystal map model and the neighbour misorientation histogram (figure F7) against orix (#167) (5904d76)
  • denoise EBSD patterns with NLPAR as pyebsdindex does (#156) (157047d)
  • denoise the scan with NLPAR as the last Process stage in the Patterns room (#194) (1d90c28)
  • each room lists what its verb waits for in a Requirements section, as mac4DSTEM does (#397) (b7be9f2)
  • each window has its own files, and macOS's window tabs work (New Window ⌘N) (#413) (9bb692b)
  • EBSD and TKD detector geometry and the moving-screen projection centre against kikuchipy (figure F5) (#152) (94db1d5)
  • every EBSD reader hands its orientation map over as CrystalMap (#182) (7bbbea0)
  • File > Open Recent, Reopen Last Session and Workspace > Run (⌘R), and Close, Stop and Show Output act on what the room shows (#403) (e076b72)
  • filter EBSD patterns in the Patterns room: Equalise, FFT filter and Average neighbours (#206) (0d1d06a)
  • filter EBSD patterns: FFT filters, CLAHE and neighbour averaging as kikuchipy does (#158) (8acb82e)
  • geometrical Kikuchi overlay and kinematic master pattern as kikuchipy does (figure F14) (#203) (343c9e6)
  • grain statistics and texture as Results rows and session report parts (#248) (c7bf884)
  • grains, boundaries, neighbour network, KAM, GROD and GOS of EBSD maps against DefDAP 1.3.1 (figures F11, F12) (#187) (5f320aa)
  • hand the Hough-indexed scan over as a CrystalMap as kikuchipy does (#207) (20897ee)
  • Hough indexing (Radon band detection, triplet voting, QUEST) against pyEBSDindex (figure F8) (#178) (d37ae00)
  • image quality and average dot product maps in the Patterns room's Map picker (figure F3) (#191) (41dcc4e)
  • image quality and average neighbour dot product maps of EBSD scans (figure F3) (#150) (895f943)
  • index EBSD scans against a master-pattern dictionary as kikuchipy does (figure F9) (#181) (6e4a185)
  • Indexing room (⌘7): Hough-index the scan, watch the IPF map grow, read each point's solution and bands (#209) (c88200b)
  • Indexing room compares two results (Hough, Dictionary, the file's indexing) as linked maps and a disorientation histogram (#245) (8941a3e)
  • Indexing room indexes several phases by dictionary, merged as kikuchipy's merge_crystal_maps (#247) (90b5197)
  • Indexing room: index with a dictionary against a master pattern, with Score and OSM layers and each point's best match, as kikuchipy does (figure F9) (#227) (1ef16a9)
  • Indexing room: scalar layers through the Map Display, an Euler layer, and ⌘C copies the Results table as TSV (#240) (ce01882)
  • indexing: Refine stage after Dictionary (orientation, PC or both) (#437) (ffddb6b)
  • Kikuchi overlay band edges at the Bragg angle, and overlay CSV and PNG export (#228) (07d2c06)
  • Kikuchi overlay of the run's solution in the Indexing room's pattern pane (#243) (db594eb)
  • Kinematical Kikuchi overlay with Blend and the kinematical master pattern (#236) (d145c77)
  • macTEM is now macEM: the app, its DMG, its window and menus, its exports and the store texts carry the new name (#505) (fd1206a)
  • Maps room histograms, several selected grains and their poles on the pole figures (#246) (8729c67)
  • Maps room with IPF and phase maps, colour keys and hover readout of .ang and .ctf maps (F6 on screen) (#199) (cb0e226)
  • open Bruker .bcf/.spx, EDAX .spd/.lsd/.spc and JEOL .pts/.eds/.img/.asw SEM-EDS files (#164) (5b050d4)
  • Open in Maps shows the Indexing room's run in the Maps room, with a Source pop-up and a stale mark (#244) (dffe6cd)
  • open NORDIF Pattern.dat in the Patterns room (#175) (5bb3dac)
  • open Oxford .ebsp/.ctf and EDAX .up1/.up2/.ang scans in the Patterns room as one EBSDDataset (#161) (6fd2189)
  • orientation core (rotations, 32 point groups, fundamental zones, orientations and misorientations) against orix 0.15.0 (#162) (2a46109)
  • orientation similarity map and merge of dictionary-indexed maps as kikuchipy does (#221) (985e3d4)
  • Patterns and Indexing have one Display section with a Map · Pattern switch (#402) (fe87c40)
  • Patterns room ⌘6 browses EBSD pattern datasets (scan map, live pattern pane, calibration) (#144) (0860add)
  • pole figures, inverse pole figure densities and ODF sections against orix (figure F13) (#196) (24bb4b3)
  • process EBSD patterns in the Patterns room (static and dynamic background, rescale or normalise, binning) as kikuchipy does (#190) (13e7ccc)
  • read EDAX .up1/.up2 pattern files and .ang orientation maps in TEMCore (#138) (d515bc4)
  • read EMsoft master patterns and project them onto the EBSD detector as kikuchipy does (figure F15) (#160) (d18a5e7)
  • read h5ebsd EBSD pattern files (kikuchipy, Bruker, EDAX, Oxford H5OINA) in TEMCore (#125) (d7117b9)
  • read NORDIF EBSD acquisitions (Pattern.dat, Setting.txt, calibration patterns) as kikuchipy does (#129) (7d0f896)
  • read Oxford .ebsp patterns and .ctf orientation maps against kikuchipy and orix (#135) (adeebf2)
  • refine EBSD orientations and projection centres against the master pattern as kikuchipy does (figure F10) (#214) (3c5930e)
  • sample orientations on the cubochoric grid in a fundamental zone or around an orientation, against orix 0.15.0 (#168) (18302ef)
  • Schmid factors, slip traces and GND density of EBSD maps against DefDAP 1.3.1 (#170) (e67cb6d)
  • SEM parity harness, north-star data and reference bundles for milestone 1 (#130) (d2afafe)
  • SEM session report and the SEM rows in the Results room (P8-02) (#241) (6262cea)
  • SEM TIFF metadata (Thermo, Zeiss, Tescan) in the Image room, databar cropped (#136) (a3436f0)
  • SEM-EDS line intensities with background windows and Cliff-Lorimer quantification against exspy (figures F16, F17) (#155) (73e2124)
  • ship the SEM demo data (Ni EBSD patterns, BAM TM002 spectrum) and open the spectrum from Try Demo Data (#127) (f95b7d9)
  • show the SEM databar as a strip under the picture (#229) (4e40618)
  • static and dynamic background removal of EBSD patterns in TEMCore (figure F2) (#133) (eeb7660)
  • the EDS room's region tools and Pin Region in the Workspace menu on ⌃⌘0…4 (#446) (63ea5bf)
  • the EELS results table selects its edges and ⌘C copies them as tab-separated text (#353) (8a97f0f)
  • the SEM maps open on their 1st to 99th percentile, so a few outliers no longer wash a map out (#416) (224945b)
  • the sidebar is the workspaces alone; the window's tabs are the open files (#449) (d0bfb53)
  • the sidebar lists five workspaces with their parts underneath, as mac4DSTEM's does (#399) (7ab4579)
  • the workspaces read Imaging, Diffraction, EBSD, Spectroscopy, Results (⌘1…⌘5 follow) (#474) (d2243da)
  • vectors, Miller indices, stereographic projection and IPF colour keys against orix 0.15.0 (figure F6) (#172) (71a6f40)
  • virtual BSE images in the Patterns room (detector grid, tiles, colour mix) reproduce north-star figure F1 (#174) (d6d497b)
  • write EBSD crystal maps as .ang and .ctf that orix reads back (figure F18) (#185) (33ea462)

Bug Fixes

  • a file macTEM may not read says so instead of blaming its format, and a refused file leaves no empty tab (#486) (a29c9e1)
  • a pattern file read through its handle lets each row go as the pass moves on (#471) (5fbf725)
  • a quit question asked from the background bounces the Dock icon, and File > Close Map closes only the map shown (#503) (6b530ff)
  • an ended Indexing run lets go of the processed scan it read (#504) (1a09757)
  • an infinite NORDIF scaling factor scales every value to 0 again, as kikuchipy (#450) (471c3be)
  • an SEM TIFF's Info shows each acquisition field once, without the TEM-only "Not recorded" rows (#418) (a28a9b0)
  • closing an image or quitting asks before discarding unsaved marks or a running analysis (#372) (4927b8c)
  • damaged SEM files are refused in words instead of quitting the app, Open Recent lists only files that opened, and a test that starts to skip fails CI (#441) (8e2f0ee)
  • ebsd: a NORDIF Pattern.dat whose Setting.txt cannot be read says so (#360) (66a0f3b)
  • ebsd: bad h5ebsd header numbers are refused, and pattern files on network volumes no longer crash when the volume goes away (#366) (91cfd0c)
  • ebsd: damaged .ang, .ctf and crystal-map coordinates are refused instead of crashing the Maps room (#364) (6b05064)
  • ebsd: damaged .up1/.up2, NORDIF and .ebsp headers are refused instead of crashing the app (#362) (a561750)
  • eds: damaged Bruker, JEOL, EDAX and EMsoft files are refused instead of crashing or filling memory (#370) (341f7a0)
  • exported CSVs quote names, JEOL maps can be cancelled, the Patterns cache is bounded, and CI compiles the UI journeys (#438) (20a8fec)
  • exports write numbers the same in every locale, screen numbers round like the files, and long runs keep the Mac awake (#419) (63bc587)
  • Help > Open Demo Data works with no window open (#443) (a25ad20)
  • huge or non-finite numbers in a SEM TIFF header or a typed processing field no longer crash the app (#368) (83f274d)
  • Maps reads an h5ebsd crystal map's length unit, so the Ni scale bar and grain sizes are in µm (#390) (ab0f15d)
  • NORDIF settings lines end and [Area] values read as kikuchipy reads them (#456) (028ae5a), closes #448 #452
  • on a render, macTEM's scale bar starts hidden so it does not cover the render's own (#483) (ff5046a)
  • Open Recent, drops, stack frames and Cancel answer what happened, Stop ends Segment and KAM, and Process uses every core (#417) (7dbb25e)
  • parity: pin numpy to its AVX2 kernels in the SEM emit so the texture bundles reproduce on every runner (a8ddd37)
  • parity: pin numpy's AVX2 kernels in the SEM emit so the texture bundles reproduce on every runner (#223) (a8ddd37)
  • Particles, EELS and EDS no longer stay stale after a preview, a Stop or a same-named file (#374) (ac6f75a)
  • patterns: a new Grid or a Stop during a pass no longer blocks Process or drops the new run (#389) (a953970)
  • patterns: NLPAR and averaging no longer copy the whole scan, and Process refuses a scan that would not fit in memory (#400) (ac028f0)
  • read real Tescan TIFF headers as NexusLIMS does (#220) (b4fea49)
  • stopping the texture leaves the Pole figures and ODF panes saying what happened, with a way to compute it (#499) (09b4085)
  • TEMCore builds with Xcode 27.1 again (#444) (a611894)
  • the diffraction readout keeps a crystal name holding a line break on its header line (#462) (44d2fd1)
  • the EDS room shows the SEM line table and window quantification for an SEM spectrum (#249) (f24204b)
  • the EELS Regions table writes a region's total counts without grouping (#485) (96e7ec5), closes #481
  • the EELS results pane shows every fitted edge before the regions, and Exact NNLS's Fit to reads in full (#455) (8a97f0f)
  • the EELS spectrum follows a drawn, picked or cleared region at once and names it, not the drag's last live shape (#494) (8a97f0f)
  • the File menu lists every room's exports, EELS windows can be set without dragging, and zoom and copy work in the FFT and Diffraction rooms (#439) (6f6d1ec)
  • the Indexing room writes its numbers one way and says Detector tilt (#476) (a67cd2b)
  • the Indexing room's detected bands draw on a solid dark track, as in mac4DSTEM (#482) (c21525f)
  • the Indexing room's disorientation histogram draws only occupied bins, not a row of dots along zero (#394) (11e7389)
  • the Maps and Patterns rooms write their numbers one way, grain lengths read alike, and the quality maps come before the tiles (#451) (01714c8)
  • the Maps room's bottom tabs stay at the top of their pane, and the colour key and ODF sections read in full (#393) (e8ff992)
  • the planted comparison's inputs are normalised without BLAS, the same bits on every CPU (#447) (4eddab5)
  • the SEM maps pick on click or drag, and hover only reads, as in mac4DSTEM (#490) (e9b66fc)
  • the SEM reference check no longer goes red when the Hough map comes back as another cubic twin (#454) (62a1cac)
  • the SEM rooms speak their bars, readout and headers, and the Grains table copies with ⌘C (#477) (67776be)
  • the SEM rooms speak their opening bars, pattern readout and column headers, and the Grains table copies with ⌘C (67776be)
  • the SEM rooms write their remaining numbers through Num and UnitDisplay, never grouped (#501) (87489ea)
  • the SEM rooms' status lines write their numbers in the reader's locale (#484) (ede69df)
  • the SEM tables take the keyboard when clicked, so ⌘C copies their rows, and their headers are spoken in words (#502) (2145ec5)
  • the SEM-EDS rows drop the window composition and write their numbers in the locale they are given (#414) (d2e2065)
  • the session record's refusals write their byte and entry counts ungrouped (#300) (8a97f0f)
  • the session report and the dictionary method JSON write the Refine and energy words with a decimal point (#458) (f47813f)
  • vendor EBSD pairs and EDAX EDS maps open with their companion files in the sandboxed app (#395) (418f2db)
  • VoiceOver names the image-opening spinner and the FFT spectrum pane's spinners (#467) (5a9ab7b)
  • VoiceOver reads the pixel under the pointer in the Image and Diffraction panes (#457) (515f6c6)
  • whole numbers on screen carry no grouping separator in the EELS room and the Image, FFT and Particles controls (#488) (8a97f0f)