- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Semiconductor WAT contour
How to achieve multi-group X batch drawing when drawing WAT contour:
The contour platform stipulates that X only can be selected two columns, but I have multiple sets of X that need to match one Y
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: Semiconductor WAT contour
Here is an attempt to get the contour maps displayed. The complexity is in finding the matching columns. The column names are inconsistent. The below script illustrates the kind of things that you will need to do, to do a better job of matching the columns. The script has been annotated to allow better understanding of what is being used to attempt the matching
Names Default To Here( 1 );
dt = Data Table( "WAT_Contour" );
// Build list of columns to be graphed
headerTypeList = {};
colNameList = {}; // The full name of the column
deviceTypeList = {}; // The P or N
commonNameList = {}; // The items that are common between P and N columns
// Loop across all columns to find target columns
// The code here is a best guess on determining the items needed to be able
// to match up the columns. There are inconsistancies in the column names,
// between VTSAT and VTHSAT etc. and also within a single type like VTSAT
// This section will need to be worked out to get all of the matches
For( i = 1, i <= N Col( dt ), i++,
colName = Trim( Column( dt, i ) << get name );
If(
Word( 1, colName, "_" ) == "VTSAT",
Insert Into( headerTypeList, "VTSAT" );
Insert Into( colNameList, colName );
If( Word( 2, colName, "_" ) == "N" | Word( 2, colName, "_" ) == "P",
Insert Into( deviceTypeList, Word( 2, colName, "_" ) );
Insert Into(
commonNameList,
Substr(
colName,
Length( Word( 1, colNameList[N Items( colNameList )], "_" ) )
+Length( Word( 2, deviceTypeList[N Items( deviceTypeList )], "_" ) ) + 4
)
);
,
Insert Into( deviceTypeList, Substr( Word( 3, colName, "_" ), 1, 1 ) );
Insert Into(
commonNameList,
Substr(
colName,
Length( Word( 1, colName, "_" ) ) + Length( Word( 2, colName, "_" ) )
+Length( Word( 3, colName, "_" ) ) + 4
)
);
);,
Word( 1, colName, "_" ) == "VTHSAT",
Insert Into( headerTypeList, "VTHSAT" );
Insert Into( colNameList, colName );
Insert Into( deviceTypeList, Substr( Word( 3, colName, "_" ), 1, 1 ) );
Insert Into(
commonNameList,
Substr(
colName,
Length( Word( 1, colName, "_" ) ) + Length( Word( 2, colName, "_" ) )
+Length( Word( 3, colName, "_" ) ) + 4
)
);
);
);
dtNames = New Table( "Names",
New Column( "Header", character, values( headerTypeList ) ),
New Column( "Column Name", character, values( colNameList ) ),
New Column( "Device Type", character, values( deviceTypeList ) ),
New Column( "Common", character, values( commonNameList ) )
);
// Split data table to get columns that match
dtSplit = dtNames << Split(
Split By( :Device Type ),
Split( :Column Name ),
Group( :Header, :Common ),
Sort by Column Property
);
// Delete non matching rows
dtSplit << select where(:P == "" | :N == "" );
dtSplit << delete rows;
// Create the Contour Maps
New Window( "Contour Maps", lub = Lineup Box( N Col( 3 ) ) );
// Loop across matches
For( i = 1, i <= N Rows( dtSplit ), i++,
lub << append(
dt << Contour Plot(
X( Column( dt, dtSplit:N[i] ), Column( dt, dtSplit:P[i] ) ),
Y( :"W/C BSCAN VMIN YIELD"n ),
Show Data Points( 0 ),
Fill Areas( 0 ),
Label Contours( 0 ),
Transform( "Range Normalized" ),
Specify Contours( Min( 0.5 ), Max( 0.9 ), N( 5 ) )
)
)
);
// Clean up the data tables no longer needed.
// Uncomment the below lines when having the interium tables
// no longer need to be displayed
// close( dtNames, nosave );
// close( dtSplit, nosave );
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: Semiconductor WAT contour
Have you considered Stacking your X columns? This should yield a single column for Xs and a single column for Ys.
Let us know if that works for you.
Best,
TS
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: Semiconductor WAT contour
Thank you for your response, I have tried to take this approach,but I have so many X columns,as below table,I can't stack it by N-device match P-device,such as VTHSAT_PCM09A_NULVT_P63_D0715_D011_(V)_MEDIAN to VTHSAT_PCM10D_PULVT_P63_SDB_D0715_D011_(V)_MEDIAN,
because I want to find which device correlation with my yield,I need to draw contour by device,So I want to quickly draw all device contour.Can be achieved by created or edited contour script?
VTHSAT_PCM06F_PULVT_P63_D0715_D242_(V)_MEDIAN |
VTHSAT_PCM06G_PULVT_P63_D607_D242_(V)_MEDIAN |
VTHSAT_PCM06H_PULVT_P63_SDB_D04_D009_(V)_MEDIAN |
VTHSAT_PCM09A_NULVT_P63_D0715_D011_(V)_MEDIAN |
VTHSAT_PCM09B_NLVT_P63_D0715_D011_(V)_MEDIAN |
VTHSAT_PCM09C_NSVT_P63_D0715_D011_(V)_MEDIAN |
VTHSAT_PCM09D_PULVT_P63_D0715_D011_(V)_MEDIAN |
VTHSAT_PCM09E_PLVT_P63_D0715_D011_(V)_MEDIAN |
VTHSAT_PCM09F_PSVT_P63_D0715_D011_(V)_MEDIAN |
VTHSAT_PCM09G_NLVT_P63_SDB_D04_D011_(V)_MEDIAN |
VTHSAT_PCM09H_PLVT_P63_SDB_D04_D011_(V)_MEDIAN |
VTHSAT_PCM10A_NSVT_P63_SDB_D04_D011_(V)_MEDIAN |
VTHSAT_PCM10B_NULVT_P63_SDB_D0715_D011_(V)_MEDIAN |
VTHSAT_PCM10C_PSVT_P63_SDB_D04_D011_(V)_MEDIAN |
VTHSAT_PCM10D_PULVT_P63_SDB_D0715_D011_(V)_MEDIAN |
VTHSAT_PCM10E_NSVT_P63_D04_D011_(V)_MEDIAN |
VTHSAT_PCM10F_NULVT_P63_D04_D011_(V)_MEDIAN |
VTHSAT_PCM10G_PSVT_P63_D04_D011_(V)_MEDIAN |
VTHSAT_PCM10H_PULVT_P63_D04_D011_(V)_MEDIAN |
VTHSAT_PCM15A_NLVT_P79_D04_D009_(V)_MEDIAN |
VTHSAT_PCM15B_NLVT_P79_D0715_D009_(V)_MEDIAN |
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: Semiconductor WAT contour
If the issue is matching the N vs. P columns, a script can produce that. Here are the matches I found.
I have attached the data table with the complete list I came up with.
If I am on the right track, can you provide what the graphic you are looking for would be for one of these pairs?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: Semiconductor WAT contour
Thank you for your reply,The attachment is my raw data, main include yield column,and many X columns,I need to draw contour graphic,that is X axis is N-device,Y axis is P-device,and Yield as Z, for single device I can easy to draw contour map,But I can only draw one map at a time,I want to draw all countor maps at once.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: Semiconductor WAT contour
Here is an attempt to get the contour maps displayed. The complexity is in finding the matching columns. The column names are inconsistent. The below script illustrates the kind of things that you will need to do, to do a better job of matching the columns. The script has been annotated to allow better understanding of what is being used to attempt the matching
Names Default To Here( 1 );
dt = Data Table( "WAT_Contour" );
// Build list of columns to be graphed
headerTypeList = {};
colNameList = {}; // The full name of the column
deviceTypeList = {}; // The P or N
commonNameList = {}; // The items that are common between P and N columns
// Loop across all columns to find target columns
// The code here is a best guess on determining the items needed to be able
// to match up the columns. There are inconsistancies in the column names,
// between VTSAT and VTHSAT etc. and also within a single type like VTSAT
// This section will need to be worked out to get all of the matches
For( i = 1, i <= N Col( dt ), i++,
colName = Trim( Column( dt, i ) << get name );
If(
Word( 1, colName, "_" ) == "VTSAT",
Insert Into( headerTypeList, "VTSAT" );
Insert Into( colNameList, colName );
If( Word( 2, colName, "_" ) == "N" | Word( 2, colName, "_" ) == "P",
Insert Into( deviceTypeList, Word( 2, colName, "_" ) );
Insert Into(
commonNameList,
Substr(
colName,
Length( Word( 1, colNameList[N Items( colNameList )], "_" ) )
+Length( Word( 2, deviceTypeList[N Items( deviceTypeList )], "_" ) ) + 4
)
);
,
Insert Into( deviceTypeList, Substr( Word( 3, colName, "_" ), 1, 1 ) );
Insert Into(
commonNameList,
Substr(
colName,
Length( Word( 1, colName, "_" ) ) + Length( Word( 2, colName, "_" ) )
+Length( Word( 3, colName, "_" ) ) + 4
)
);
);,
Word( 1, colName, "_" ) == "VTHSAT",
Insert Into( headerTypeList, "VTHSAT" );
Insert Into( colNameList, colName );
Insert Into( deviceTypeList, Substr( Word( 3, colName, "_" ), 1, 1 ) );
Insert Into(
commonNameList,
Substr(
colName,
Length( Word( 1, colName, "_" ) ) + Length( Word( 2, colName, "_" ) )
+Length( Word( 3, colName, "_" ) ) + 4
)
);
);
);
dtNames = New Table( "Names",
New Column( "Header", character, values( headerTypeList ) ),
New Column( "Column Name", character, values( colNameList ) ),
New Column( "Device Type", character, values( deviceTypeList ) ),
New Column( "Common", character, values( commonNameList ) )
);
// Split data table to get columns that match
dtSplit = dtNames << Split(
Split By( :Device Type ),
Split( :Column Name ),
Group( :Header, :Common ),
Sort by Column Property
);
// Delete non matching rows
dtSplit << select where(:P == "" | :N == "" );
dtSplit << delete rows;
// Create the Contour Maps
New Window( "Contour Maps", lub = Lineup Box( N Col( 3 ) ) );
// Loop across matches
For( i = 1, i <= N Rows( dtSplit ), i++,
lub << append(
dt << Contour Plot(
X( Column( dt, dtSplit:N[i] ), Column( dt, dtSplit:P[i] ) ),
Y( :"W/C BSCAN VMIN YIELD"n ),
Show Data Points( 0 ),
Fill Areas( 0 ),
Label Contours( 0 ),
Transform( "Range Normalized" ),
Specify Contours( Min( 0.5 ), Max( 0.9 ), N( 5 ) )
)
)
);
// Clean up the data tables no longer needed.
// Uncomment the below lines when having the interium tables
// no longer need to be displayed
// close( dtNames, nosave );
// close( dtSplit, nosave );