Subscribe Bookmark RSS Feed

How to filter out t=0 fail DUTs from the entire population?

monicah22

Community Trekker

Joined:

Dec 2, 2014

my data is arranged in columns as follows:

wafer#, Log #, DUT ID, Hour of Test, parameter 1, parameter 2........

I have a set of specifications that I want to apply to identify all DUTs that fail at Hour of Test =0. Once those DUTs are identified I want to remove all instances of those same DUTs. However, I do not want the same set of specifications to be applied to all other Hour of test data.

I went so far as to generate another table in the same format, with all the t=0 failures identified. Now I want to key on the Log#, DUT ID and remove all instances (all subsequent hour of test) of the failed DUTs from the original table. How do I do it?


2 REPLIES
martindvorak

Community Trekker

Joined:

Nov 4, 2013

[Edit: added "Eval Formula" to avoid real-time calculation issues.]


Here’s a code fragment that I think does what you’re looking for:

dt = Data Table("targetdt");

dt << Select Where(:Hour==0);

sdt = dt << Subset(selected rows); //generate the subset table for the data at hours=0

minspec = 3; //your spec

sdt << New Column ("inspec", Formula(:Param1 >= minspec), Eval Formula); //see if this dut is in spec according to hours=0 data

dt << update(

       With( sdt ),

       Match Columns( :Log# = :Log#, :DUT_ID = :DUT_ID ),

       Add Columns from Update table( :inspec )

);

dt << Select Where(:inspec == 0);

dt << Delete Rows();

The key is to have a column like “inspec” that you add to your original table using “Update”. Then you can filter by that column.

ian_jmp

Staff

Joined:

Jun 23, 2011

(Here's a slight variation on Martin's approach above).

Generally, if you have different limits for values in a single column, its perhaps best to split the data so that you can have the required limits stored as column properties. But if you have reasons not to do this, the approach below is one way to do what I think you want. Cut and paste the code into an editor window, then select 'Edit > Run Script'. (The 'Wait()' commands are so you can see what's happening).

NamesDefaultToHere(1);

// Example table

dt =

New Table( "DUT",

Add Rows( 12 ),

New Column( "DUT ID",

Numeric,

"Nominal",

Format( "Best", 12 ),

Set Values( [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4] )

),

New Column( "Hour of Test",

Numeric,

"Ordinal",

Format( "Best", 12 ),

Set Values( [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2] )

),

New Column( "p1",

Numeric,

"Continuous",

Format( "Fixed Dec", 12, 3 ),

Set Values(

[0.299525242746479, 1.0633718409566, 0.507859846881073,

-1.11573907805173, 0.222826061547355, -0.318546800557343,

-0.0356930503397689, 0.661572077447882, -0.182884744578411,

-0.930044642545168, 0.767786562806245, -0.130135490980355]

)

),

New Column( "p2",

Numeric,

"Continuous",

Format( "Fixed Dec", 12, 3 ),

Set Values(

[0.967955026618985, -1.05625737545624, 0.399938006086842,

-0.0459988344031106, -1.30650202283731, 1.66536579742163,

1.19669670020495, -0.205442597157623, -1.40714522703899,

0.517030195850593, -0.51315580063705, -1.17294833449061]

)

)

);

// Suppose values of 'pi' < 0.5 at 'Hour of Test' = 0 define a failure -

// Then select the corresponding rows in dt:

Wait(1);

dt << clearSelect();

dt << selectWhere(:p1 < 0.5 & :Hour of Test == 0);

// Select the 'DUT ID' column

Wait(1);

Column(dt, "DUT ID") << setSelected(1);

// 'Expand' the selection to encompass all rows associated with a failing DUT

Wait(1);

dt << selectMatchingCells;

// Deselect the column

Wait(1);

Column(dt, "DUT ID") << setSelected(0);

// Delete the rows

Wait(1);

dt << deleteRows;