cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
  • JMP 19 is here! See the new features at jmp.com/new.
  • Register to attend Discovery Summit 2025 Online: Early Users Edition, Sept. 24-25.
Choose Language Hide Translation Bar
SpannerHead
Level VI

Wafer Maps

I have been drawing wafer maps in Graph Builder using Customize Graph.  One issue I have is that the custom outline I have remains static in the frame, whereas the die can move depending on where they are populated.

 

SpannerHead_0-1752094691204.png

For example, if I only test a few die, their location appears to relocate to the bottom and left relatively to the drawing.

SpannerHead_1-1752094915016.png

Aside from adding bogus data to occupy the previous extremities, is there a way to have the relationship remain fixed?  The code contained in the Customize Graph Script is as follows.

Transparency( 0.5 );
Fill Color( "Gray" );
Oval( -1, -1, 7, 7, 1 );
Pen Size( 2 );
Line( [-1, -0.855, -1], [2.75 3 3.25] );
Pen Color( "Black" );
Pen Size( 2 );
Oval( -1, -1, 7, 7 );
Pen Color( "Black" );
Pen Size( 1 );
Line Style( "Dotted" );
Oval( -0.9, -0.9, 6.9, 6.9 );
Transparency( 1 );
Fill Color( "White" );
Polygon( [-1, -0.855, -1], [2.75 3 3.25] );
Line Style( "Solid" );
Pen Color( "Black" );
Fill Color( 1 );
Pen Color( "Black" );
Rect( 1.5, -0.5, 4.5, 0.5 );
Rect( 0.5, 0.5, 5.5, 1.5 );
Rect( 0.5, 1.5, 5.5, 2.5 );
Rect( -0.5, 2.5, 6.5, 3.5 );
Rect( 0.5, 3.5, 5.5, 4.5 );
Rect( 0.5, 4.5, 5.5, 5.5 );
Rect( 1.5, 5.5, 4.5, 6.5 );
Rect( -0.5, 2.5, 0.5, 3.5 );
Rect( 0.5, 0.5, 1.5, 5.5 );
Rect( 1.5, -0.5, 2.5, 6.5 );
Rect( 2.5, -0.5, 3.5, 6.5 );
Rect( 3.5, -0.5, 4.5, 6.5 );
Rect( 4.5, 0.5, 5.5, 5.5 );
Rect( 5.5, 2.5, 4.5, 3.5 );

Slán



SpannerHead
1 ACCEPTED SOLUTION

Accepted Solutions
SpannerHead
Level VI

Re: Wafer Maps

I did this and it works.  Probably a lot better ways out there though.  Makes the columns continuous only while the plot window is open.

 


Current Data Table():SiteY << Set Modeling Type( "Continuous" );

Current Data Table():SiteX << Set Modeling Type( "Continuous" );
Map = Graph Builder(
	Size( 1526, 846 ),
	Variables( X( :SiteX ), Y( :SiteY ), Group X( :NOTCH ) ),
	Elements( Heatmap( X, Y, Legend( 2 ) ) ),
	SendToReport(
		Dispatch(
			{},
			"SiteX",
			ScaleBox,
			{Min( -2.60356855144495 ), Max( 4.92191130833973 ), Inc( 1 ),
			Minor Ticks( 0 )}
		),
		Dispatch(
			{},
			"SiteY",
			ScaleBox,
			{Min( -1.80170994183197 ), Max( 5.23594729081798 ), Inc( 1 ),
			Minor Ticks( 0 )}
		),
		Dispatch(
			{},
			"Graph Builder",
			FrameBox,
			{Add Graphics Script(
				2,
				Description( "" ),
				Transparency( 0.5 );
				Fill Color( "Gray" );
				Oval( -0.1, 1.2, 6.3, 7.4, 1 );
				Pen Size( 2 );
				Line( [-0.1, 0.35, -0.1], [4.25 4.5 4.75] );
				Pen Color( "Black" );
				Pen Size( 2 );
				Oval( -0.1, 1.2, 6.3, 7.4, 1  );
				Pen Color( "Black" );
				Pen Size( 1 );
				Line Style( "Dotted" );
				Oval( 0, 1.3, 6.2, 7.3 );
				Transparency( 1 );
				Fill Color( "White" );
				Polygon( [-0.1, 0.35, -0.1], [4.25 4.5 4.75] );
				Line Style( "Solid" );
				Pen Color( "Black" );
				Fill Color( 1 );
				Pen Color( "Black" );
				Rect( 2, 6, 4, 7 );
				Rect( 1, 5, 5, 6 );
				Rect( 1, 4, 5, 5 );
				Rect( 1, 3, 5, 4 );
				Rect( 2, 2, 5, 3 );
				Rect( 1, 3, 2, 6 );
				Rect( 2, 2, 3, 7 );
				Rect( 3, 2, 4, 7 );
				Rect( 4, 2, 5, 6 );
			)}
		),
		Dispatch(
			{},
			"Graph Builder",
			FrameBox( 2 ),
			{Add Graphics Script(
				2,
				Description( "" ),
				Transparency( 0.5 );
				Fill Color( "Gray" );
				Oval( 1.1, 0.9, 7.2, 7.1, 1 );
				Pen Size( 2 );
				Line( [4 4.25 4.5], [7.1, 6.85, 7.1] );
				Pen Color( "Black" );
				Pen Size( 2 );
				Oval( 1.1, 0.9, 7.2, 7.1 );
				Pen Color( "Black" );
				Pen Size( 1 );
				Line Style( "Dotted" );
				Oval( 1.2, 1, 7.1, 7 );
				Transparency( 1 );
				Fill Color( "White" );
				Polygon( [4 4.25 4.5], [7.1, 6.85, 7.1] );
				Line Style( "Solid" );
				Pen Color( "Black" );
				Fill Color( 1 );
				Pen Color( "Black" );
				Rect( 3, 5, 6, 6 );
				Rect( 2, 4, 7, 5 );
				Rect( 2, 3, 7, 4 );
				Rect( 2, 2, 6, 3 );
				Rect( 6, 3, 7, 5 );
				Rect( 5, 2, 6, 6 );
				Rect( 4, 2, 5, 6 );
				Rect( 3, 2, 4, 5 );
				Rect( 2, 2, 3, 5 );
			)}
		)
	)
);

Map << On Close(
Current Data Table():SiteY << Set Modeling Type( "Ordinal" );
Current Data Table():SiteX << Set Modeling Type( "Ordinal" ););

Slán



SpannerHead

View solution in original post

15 REPLIES 15
SpannerHead
Level VI

Re: Wafer Maps

I should probably point out that I treat the x and y coordinates as ordinal variables.  Changing that seems to alter the frame of reference.  I guess my question is, can I keep those as ordinal and still achieve alignment consistency?

 


Slán



SpannerHead
jthi
Super User

Re: Wafer Maps

Have you considered using map files? You can check the values which get assigned to each point from axis settings

jthi_0-1752120269211.png

I think if you are using Ordinal modelling types, you might have to add those "missing" points to your data. Usually this is quite easy to do with a join if you have a mapping table. If I remember correctly there will be a column property in JMP19 which should make this easier.

-Jarmo
SpannerHead
Level VI

Re: Wafer Maps

I did this and it works.  Probably a lot better ways out there though.  Makes the columns continuous only while the plot window is open.

 


Current Data Table():SiteY << Set Modeling Type( "Continuous" );

Current Data Table():SiteX << Set Modeling Type( "Continuous" );
Map = Graph Builder(
	Size( 1526, 846 ),
	Variables( X( :SiteX ), Y( :SiteY ), Group X( :NOTCH ) ),
	Elements( Heatmap( X, Y, Legend( 2 ) ) ),
	SendToReport(
		Dispatch(
			{},
			"SiteX",
			ScaleBox,
			{Min( -2.60356855144495 ), Max( 4.92191130833973 ), Inc( 1 ),
			Minor Ticks( 0 )}
		),
		Dispatch(
			{},
			"SiteY",
			ScaleBox,
			{Min( -1.80170994183197 ), Max( 5.23594729081798 ), Inc( 1 ),
			Minor Ticks( 0 )}
		),
		Dispatch(
			{},
			"Graph Builder",
			FrameBox,
			{Add Graphics Script(
				2,
				Description( "" ),
				Transparency( 0.5 );
				Fill Color( "Gray" );
				Oval( -0.1, 1.2, 6.3, 7.4, 1 );
				Pen Size( 2 );
				Line( [-0.1, 0.35, -0.1], [4.25 4.5 4.75] );
				Pen Color( "Black" );
				Pen Size( 2 );
				Oval( -0.1, 1.2, 6.3, 7.4, 1  );
				Pen Color( "Black" );
				Pen Size( 1 );
				Line Style( "Dotted" );
				Oval( 0, 1.3, 6.2, 7.3 );
				Transparency( 1 );
				Fill Color( "White" );
				Polygon( [-0.1, 0.35, -0.1], [4.25 4.5 4.75] );
				Line Style( "Solid" );
				Pen Color( "Black" );
				Fill Color( 1 );
				Pen Color( "Black" );
				Rect( 2, 6, 4, 7 );
				Rect( 1, 5, 5, 6 );
				Rect( 1, 4, 5, 5 );
				Rect( 1, 3, 5, 4 );
				Rect( 2, 2, 5, 3 );
				Rect( 1, 3, 2, 6 );
				Rect( 2, 2, 3, 7 );
				Rect( 3, 2, 4, 7 );
				Rect( 4, 2, 5, 6 );
			)}
		),
		Dispatch(
			{},
			"Graph Builder",
			FrameBox( 2 ),
			{Add Graphics Script(
				2,
				Description( "" ),
				Transparency( 0.5 );
				Fill Color( "Gray" );
				Oval( 1.1, 0.9, 7.2, 7.1, 1 );
				Pen Size( 2 );
				Line( [4 4.25 4.5], [7.1, 6.85, 7.1] );
				Pen Color( "Black" );
				Pen Size( 2 );
				Oval( 1.1, 0.9, 7.2, 7.1 );
				Pen Color( "Black" );
				Pen Size( 1 );
				Line Style( "Dotted" );
				Oval( 1.2, 1, 7.1, 7 );
				Transparency( 1 );
				Fill Color( "White" );
				Polygon( [4 4.25 4.5], [7.1, 6.85, 7.1] );
				Line Style( "Solid" );
				Pen Color( "Black" );
				Fill Color( 1 );
				Pen Color( "Black" );
				Rect( 3, 5, 6, 6 );
				Rect( 2, 4, 7, 5 );
				Rect( 2, 3, 7, 4 );
				Rect( 2, 2, 6, 3 );
				Rect( 6, 3, 7, 5 );
				Rect( 5, 2, 6, 6 );
				Rect( 4, 2, 5, 6 );
				Rect( 3, 2, 4, 5 );
				Rect( 2, 2, 3, 5 );
			)}
		)
	)
);

Map << On Close(
Current Data Table():SiteY << Set Modeling Type( "Ordinal" );
Current Data Table():SiteX << Set Modeling Type( "Ordinal" ););

Slán



SpannerHead
jthi
Super User

Re: Wafer Maps

I think you could also use Transform Columns to create those continuous columns

 

Names Default To Here(1); 

dt = open("$SAMPLE_DATA/Big Class.jmp");

dt << Select Where(:age == 14) << Hide and Exclude(1) << Clear Select;

gb = dt << Graph Builder(
	Transform Column("Transform[age]", Formula(:age)),
	Size(525, 454),
	Show Control Panel(0),
	Variables(X(:"Transform[age]"n), Y(:height)),
	Elements(Points(X, Y, Legend(13)))
);

Write();
-Jarmo
SpannerHead
Level VI

Re: Wafer Maps

The problem however with continuous data is the way it references the die.  The actual die number on X is to the left of the die rather than the middle.  On Y the number is to the bottom.  Creates a disclaimer requirement for every communication.

 

SpannerHead_0-1752529321255.png

 


Slán



SpannerHead
hogi
Level XII

Re: Wafer Maps

very common problem.

A  setting to shift the axis labels( offset +0.5) could help many users

Re: Wafer Maps

Hi, @SpannerHead 

 

The trick to making this work consistently is to use map shape files. This lets you assign colors based on the XY Die coordinates and makes sure they consistently show up in the same place.   

 

The Semiconductor Toolkit Add-in (formerly here ) will be arriving in the JMP Marketplace in the fall.  It's designed specifically for this kind of data and visualization and will make those shape files for you.  Here's a little preview:

 

MikeD_Anderson_0-1752592541323.png

 

 

 

Best,

 

M

Luis_HC
Level II

Re: Wafer Maps

Will the new STK provide a workaround for the geodesic axes as-default? 

Re: Wafer Maps

@Luis_HC - Yep - though that's nothing special to the STK - just a feature of the shape files.  Unless there is a coordinate system in the shape file that needs geodesic axes, it shouldn't use them.  

Recommended Articles