Showing results for 
Show  only  | Search instead for 
Did you mean: 
Semiconductor Toolkit

(18Aug2019) - A note from the author

Hi, All!  It's time to start thinking about a new version of the STK... I've got some things that I'd like to do, but I also want to hear from those using the tool.  If there's something you don't see or think could be improved - drop me a private message.  I do plan to look through the comments section as a sanity check, but I may miss something. So, if it's important, do send me a private message.  



The Semiconductor Toolkit is an attempt to answer the need from the semiconductor industry for specialized visualizations and reframing of existing JMP capabilities.  On its initial release, the toolkit contained tools for generating patterned and unpatterned wafer maps, annotating existing graphics with wafer geometry, and a semiconductor specific frontend to the Hierarchical Clustering with spatial measures option.  It has now been expanded to include analytical methods for exploring die defect data, making comparisons between wafers, and a collection of tools and utilities contributed by the user community. The toolkit is intended to be a collaborative and living effort by interested parties.  Constructive criticism, bug reports, and capability suggestions are welcome and encouraged. 

wafer map.jpg

The add-in is for version 12 and newer of JMP and JMP Pro.  The add-in will check which version of JMP it is being added to and show only the methods available on that installation.



  • (2016-08-22) Version 1 released.
  • (2016-11-03) Corrected bugs found by @ragnarl.
  • (2016-10-14)  Added a note about the next release to correspond with the launch of the new community site
  • (2016-09-26)  Added screenshots and descriptions for each tool.
  • (2017-11-01)  Version 2 released.  WELL, THAT TOOK LONGER THAN EXPECTED... It represents a complete overhaul of the Add-in.  A number of new tools were added, including tools for handling wafer maps for patterned wafers and methods for comparing wafer maps with dissimilar sampling patterns.  Under the hood, the application was completely rewritten in the JMP Application Builder.  I also standardized many of the methods in the original Add-in to ensure consistent performance across the platforms.  A proper help manual is also included and will be expanded as time allows.
  • (2018-02-15)  Fixed a couple of bugs in the initial release. 
  • (2018-02-23)  Bug Fix. 
  • (2019-09-24)  Fixed a couple of bugs (one related to using JMP with non-English Languages and one issue in preparation for JMP 15 release).
  • (2020-01-12)  Fixed the "yval" bug in the quick patterned map feature.


Annotation Tool adds markers for the wafer and exclusion edges to an existing graph or series of graphs in the same window.  If the die geometry is known, markers for the die layout can also be added.


Mapping Tool Set > Patterned Wafer Map uses die indices and a response variable to generate a patterned wafer map.  The platform also provides summary statistic capabilities for the wafer map.


Mapping Tool Set > Bare Wafer Map uses coordinate information and a response variable to create a bare wafer map.  The tool provides information about the quality of the fit for the smoothing algorithm used.  The tool currently supports Neural Network models - one type in JMP and two types in JMP Pro.  


Mapping Tool Set > Use Geometry creates Shape Files for JMP to use in the Graph Builder Platform.  Due to the differences in IT policy, the files are generated on the user's Desktop and it is left to the user to move these files to the correct location in the file system.  These locations can be found on page 308 in the JMP 13 book "Essential Graphing."  This book is included in the JMP install and can be found under Help > Books > Essential Graphing in JMP. 


Mapping Tool Set > Use Stepper Map creates Shape Files for JMP to use in the Graph Builder Platform as with the Wafer Map Generator.  This tool uses a table of coordinates to generate the map.  As with the Geometry Tool, see the JMP documentation for how to use the generated files with Graph Builder


Mapping Tool Set > Use Die Index uses a table of die indices to generating approximate wafer map shapefiles.  As with the Geometry Tool, see the JMP documentation for how to use the generated files with Graph Builder.

Analysis Tool Set > Cluster Defects is a front end for the Hierarchical Clustering Platform with the spatial measures option used.  This front end recasts the general terms used in the Hierarchical Clustering Platform into terms that are more familiar to the semiconductor industry.


Analysis Tool Set > Explore Patterned Data generates a report that supports the exploration of binning and test data.  It provides the same summary statistics as the Patterned Wafer Map tool with additional drill-down capabilities.  


Analysis Tool Set > Compare Wafer Maps compares two wafer maps with dissimilar sampling patterns, i.e., different products on the same tool or process.


Utilities Tool Box > Attach Table Limits is a port of the tool by @txnelson.  Detailed documentation for its use can be found here.  


Thanks Michael for sharing this very promising add-in!

At this point I have only tried the wafer map generator. It works well for the default die dimensions, but it fails when the X and/or Y dimensions are odd or fractions. For example, try with X Dimension = 25.81, Y Dimension = 15.21.

Also, the X and Y axis have wrong increment settings.

The fixes are simple:

To fix the issue with the odd / fraction die dimensions:

In MakeMainWindow, Change the definition xMax and yMax:

//xMaX = (2 * wRad) / xSize;
//yMax = (2 * wRad) / ySize;
xMax = 2 * Ceiling(wRad / xSize);
yMax = 2 * Ceiling(wRad / ySize);

To fix the problem with the axis increments.:

Use ySize for axisbox(1) and xSize for axisbox(2):

toolWin[Axisbox( 1 )] << Show Major Grid( 1 ) << Inc(ySize);

toolWin[Axisbox( 2 )] << Show Major Grid( 1 )<< Inc(xSize);

Lars-Åke Ragnarsson



Suggestions for improvement in this tool:

  • Add notch to wafer
  • Add notch location (e.g. bottom, right, ...)


Thanks for the feedback!  I can't seem to generate a failure with odd sized dimensions like you describe.  I'd like to get some more information about what you're experiencing.  Can you send me an email at mike.anderson[at], please?



Thanks for these improvement suggestions.  I agree with you and I'll get them into the next revision.




fyi, Looks like the images have dissapeared ofter the migration

Yes, I was in a hurry to get the new version up, so I didn't bother with the images.  I'll get them back up soon.  






Does anyone know of a consultant / firm who offers custom development work of JMP solutions for fabless semiconductor companies?  We are interested in using it, but would like someone with more experience to help us develop / deploy the solution.  Thanks!

@mhamblin, check for a list of firms that can help you. Lots of good choices. 


Does this toolkit work on jmp 12.2??

Yes, it should install on v12. Though I can’t guarantee that all the features will be present or function the same. Some of the tools use capabilities that are present in JMP v13 or later and I only tested it back to v13. If you are running v12, you should consider contacting your site admin (or IT team) about upgrading. JMP 13.2 has already been released so you’re a full version behind.



I tried to add this "add in" on JMP 10 version but it did not work. Is there a way to access this add in on JMP 10 version. I know, you have already mentioned, "JMP 12 or newer versions."



Hi, I’m sorry, but I did limit the supported version to 12 and newer. A number of features and methods I used aren’t available until version 12. Depending on which part of the toolkit you are interested in using, you can find some of the components in the community. My Discovery Talk ( ) has info on how I build the un-patterned wafer maps.


Also not able to run on v12.2, launching add-in opens a file browse prompt for, then nothing happens. Is this a file that can be found elsewhere?
I’ll correct that as soon as I can. In the mean time providing any open data table will allow the interface to launch.


Try it now - the file open dialog should be corrected.



Hi M,

I am still prompted to open a file if no table is open. If a data table is selected or already open, nothing else is happening. Any way I can help troubleshoot this? (Is the download link at the top of this thread the best place to get the newest version?)

@Magic_Smoke, please make sure you have downloaded "Semiconductor Toolkit_V2-1.jmpaddin."  The add-in will still ask for you to have an open data table (that's just how it works now).  PM me if you're still running into issues.  The add-in is provided "as is" but I'll do my best to see what the problem is.




Good Morning M_Andreson,


I can't download the add-ins, I got Network error. I think we have problem with the link. 

Will you please fix the link?


Thank you for this wonderful add-ins


Glad you like it! I believe a comma that I used in the file name was causing the issue. Try it now.


Yes it works. Thank you.


Hi  Anderson,


I try it with JMP14, looks like it doesn't work.

Will it be updated for JMP14?



Can you be more specific about how it doesn’t work?


I would like to generate multiple wafer map shape files for different products.  I generate them with "Use Geometry".  The shape files for different wafer maps seem to conflict because they have the same ShapeIDs and share the same column name of "DieIndex".  For my second set of shape files, I changed the ShapeID by adding 5000 for both the "Name" and "XY" files and I renamed "DieIndex" to "DieIndex2".  With both sets of shape files in the SAS/JMP/13/Maps folder, they both can be used by referencing either "DieIndex" or "DieIndex2", but it seems like the presence of the second set of shape files is still influencing the first set (the x-axis scaling on my plots is different whether or not I have the second set in the Maps folders).  Is there anything else I have to do such that multiple wafer maps can work independently?



Hi, @ChrisBrooks!


Welcome to the community!  This is a fiddly problem to be sure.  There may be some other solutions out there, but the one that I would recommend is to use the Map Role Column property (JMP Documentation).  This lets you point your data table directly at the right product map.  


There are a couple of upsides to using this method:  You don't have to go directory diving for the JMP maps folder (i.e you can put it somewhere more convenient). You can also copy/paste the column property to a new dataset so you only need to set it up once.





Thanks for the help, it works!  No need to rename any of the ShapeID's or columns if you have multiple shape files.  For those who use JSL, I created a column for the "DieIndex" in my main data table whose map role property uses the shape file generated by the toolkit:

New Column( "DieIndex",
	Character( 10 ),
	Formula(Char( :DieX ) || "," || Char( :DieY )),
	Set Property("Map Role", Map Role( Shape Name Use( "C:\Users\cbrooks\Documents\Data Analysis\JMP\Semiconductor Toolkit\", "DieIndex")))	

and where I've already had made the :DieX and :DieY columns based on my particular wafer.  I tried creating a variable: wafermap_shapefile = "C:\Users\cbrooks\Documents\Data Analysis\JMP\Semiconductor Toolkit\"; to pass it as an argument in Shape Name Use, but it didn't work (column property had wafermap_shapefile as the file name, instead of the text string).  M, what syntax am I missing to evaluate the variable as a string in Shape Name Use?  By the way, my colleagues are impressed by the wafer maps but I credit you for doing all the hard work.  Thanks again!





The problem with column properties is that you have to build them completely (including the file path) before trying to work on the table itself.  This makes using variables tricky.  


I generally try to use a combination of a column property message (i.e. col1 << set property(<stuff>))  and either a "substitute into with an expression" workflow or use the Eval(Parse()) workflow.  You could also try substituting into the new column argument directly before evaluating it.

// Define the file path
wafer_shapefile = "C:\Users\cbrooks\Documents\Data Analysis\JMP\Semiconductor Toolkit\";
// define the new column expression. newCol = Expr(New Column( "DieIndex", Character( 10 ), Formula(Char( :DieX ) || "," || Char( :DieY )), Set Property("Map Role", Map Role( Shape Name Use( loc, "DieIndex"))) ););
// back substitute the file path into the expression Substitute Into(newCol, Expr(loc), Eval(wafer_shapefile));

// run the expression.


Another thought (sorry for the stream of consciousness style here - caffeine hasn't kicked in yet), you could try :

// Define the file path
wafer_shapefile = "C:\Users\cbrooks\Documents\Data Analysis\JMP\Semiconductor Toolkit\";

// run the column code with an evaluate arguement
New Column( "DieIndex",
	Character( 10 ),
	Formula(Char( :DieX ) || "," || Char( :DieY )),
	Set Property("Map Role", Map Role( Shape Name Use( Eval(wafer_shapefile), "DieIndex")))	

I guess the take-home message here is that columns need some special structures to make them play nice with dynamic coding and you just have to try them to see which one works the best for a given setting.  


Hope that was helpful!






Perfect!  The first option works, second option has "Eval" as the map name data table in the map role column property.




Hi Anderson,

I just installed JMP14 and tried your toolkit, looks like it doesn't work.

When I click the toolkit, one window named "" occurs, and no other window occurs;

Is it due to new version ?

Thanks a lot !




The picture


@iamshan,  Hi!  welcome to the community.  You need to have a data table open to run the toolkit.  Just open up a data table and it should behave fine.




Hi  Anderson,


Thanks a lot!  It works now ; )





I am interested in using this Add-in, but it is not working on my system. I have JMP Pro 12.2.0 (64-bit) running, and has one other Add-in that was developed internally. I see this Semiconductor add-in under "Add-ins" but i click it and it doesn't do anything. If I click on the add-in file in the recent files list, it asks me for the (mentioned above). I choose the jmp table i want to use and i get an error:


However, before you bother yourself with helping me fix this, i would like to know if it can manage multiple wafer maps side by side. I have parameters that I want to display with many wafers side by side (in a grid). Ideally, it'd be able to zoom in and out to get as many as 100 wafers simulataneously displayed for a quick glance, and zoom in to a few to get a more detailed breakdown.




@blueDevil2004, Hi!  If your wafers are from the same product or die layout then you can do using a map shapefile and Graph Builder.  When you start the add-in (with a data table open) you should see the main interface found on page 9 of the documentation. 


I'm not 100% sure on if it will function on JMP12.  I developed the latest version on JMP14 and I haven't tested it that far back.  



Hi Mike


Thank you very much for the toolkit. 

However, it doesn’t produce the wafer map I’m expecting. I have list the die numbers on the wafer, and provide the numerical coordinates in the data file, and these “numerical coordinates” is the numbering of the die on chip, for example, the 31st die was tested is located on the wafer at row 5 and column 7 is marked with DIE number of 31 and the coordinates is X=7 and Y=5, this is not the physical coordinates. However, it seems the semiconductor toolkit asks the coordinates of the dies are based on the physical measures. I have put the die coordinates in the “X, Coordinates” in the “Bare wafer map” under Mapping tool set, and it produces a figure successfully, although not what I expected. However, the die coordinates cannot be added in the “X, Die” in the “Patterned wafer map” generator. This makes me quite confused.

 I wish the wafer map can show the shapes of the wafer edge, dies and channels between each dies, all with actual size, similar to the image attached. wafer map example.png



Can you please provide example datasets which can be used for each functions in the toolkit?


Thank you very much.


Kind Regards



@fabengineer,  I would approach this using Graph Builder and the Annotate Tool.  You can create the graph with the scatter plot and then annotate the wafer map onto it.  The map can show the spaces between the dies, it's called the kerf in the tool.  Your litho or integration team should have the dimensions of the die including the space between the die in the reticle.  They will also know how the die origin is set up which is also needed to get the layout correct.  



@MikeD_Anderson, I've built a scatterplot matrix as shown below. But it doesn't give any responses to the commands from the annotation tool. As you can see from the figure, the X and Y are the numbering of the die on the wafer, not in the actuall dimention, however, the parameters in the Annotate Tool are all measured with mm or um. 

The SemiconductorToolkit.pdf you provided shows the introduction of each sections of the toolkit, but doesn't show the detail instructions for using each fuctions in the toll-kit. I'd like to know is there any chance you could provide a video or an instruction to demostrate the toolkit please? I've watched the tutorial as published here: It shows the final results of the wafer maps but doesn't show the detail settings of the data. 

I think the form of the dataset is quite important here, and the probing results are various from different probers. 

If possible, can you please publish the data set which used to produce the wafer map as shown in your original post? Maybe I can adjust the form of my data to match yours to see if the mapping function works. 


Thank you very much. 




Create a scatter plot using the particle data.  Then you would draw the die onto the map using the annotate feature.



Hi Mike-  Lots of potential here, but I can't use any of it unfortunately until I figure out how to offset the entire die grid to match how the wafer is actually exposed.  I've tried using the stepper coordinate (wafer-level coords) with an offset, however it still wants to place the (0,0) die right in the middle.  Is there a way to offset the center die, and therefore the whole mapping?


Thank you.

The die origin. There are options for body centered, upper left corner, and custom origins


I have been trying to use the Toolkit. Perhaps because we make detector chips with over 55000 die per 100mm wafer (266 rows x 272 columns), any attempts to use annotate or mapping get hung for a long time, requiring a shutdown of JMP. A typical use would be a dataset of 30-50 measurements to be turned into a low-resolution map of gross distributions for feedback to equipment engineers. We already create "standard" maps but I would like to use the extra features of the toolkit.


Hi there,


Great add-in, and I've only scratched the surface.


Couple of requests though:

1) Can the default wafer size etc be save somewhere, as I am constantly having to edit them

2) Can we have the option of a flat instead of just a notch

-all coming from someone who works in compound semi (still on small flatted wafers here :-( )


Great thoughts! I’m currently gathering requirements for the next version. I can’t give you a firm schedule for when I’ll get it out, but if you bookmark the page it will notify you when the next release is up.


Finally upgraded to JMP 14 to use this awesome add-in.. We currently deal with pizza masks where there are rows / columns / subrows and subcolumns. I haven't found any information how to use this with our current layout. Any suggestions?

I haven’t added field support (ie printing multiple die per reticle)… You could hack this by creating stand-in X&Y die ID’s consisting of the major X- minor X and Major Y – minor Y. I’ll also add this into my notes for the next release.
Thank you for the help.


Today I installed JMP(V14) with Semiconductor Toolkit for wafer parametric map.

But I don't know how to start even if I refer to the attached PDF.

Is there anyone who can briefly explain step by step?

I have only 30 days to evaluate the JMP with Semiconductor Toolkit.


Thans in advance.

Best regards,

HK Jung


I am in your situation but even worse I have row colum sub row and sub


Y, Response and Wafer ID area is easily filled by my Dark and Wafer ID column.


I want to set the X, Die area with my X, Y columns data, but I can't set the X, Die area.

My X column data is X-position of die in wafer and Y column data is Y-position of die in wafer.


Please, give me any comment for this.





If it's not letting you put your die columns into the "X, Die" area it might be that they are set as character data, not numeric data.  Right click on the column name (in the data table) and select column properties.  The two pulldowns should be "numeric" and "ordinal."  


If you're doing a 30-day trial, you should really reach out to the Systems Engineer for your region.  The STK isn't official JMP software - just something I started as a passion project.  So they can't provide support with the toolkit, but they can help you with the learning curve of JMP itself.  This will help with learning how to use the toolkit as well.  If you send me a private message with your location and email, I'll get the right people.  To send me a PM, click on my username.  It will open a page with a "send private message" button.  







Thank you very much for reaching out to JMP commumity!  I am Inside sales of JMP Korea and you can contact JMP Korea team directly, if you need immediate assistances. As I wrote to you by email, JMP Korea team provide Open seminars, JMP DII and free meetings and so on. For your refernces, JMP Korea Sr. Systems Engineer :  Thank you!

Recommended Articles