open-insight/LSL2/STPROC/GETNEWSCANDATAAVG.txt
Infineon\StieberD 7762b129af pre cutover push
2024-09-04 20:33:41 -07:00

92 lines
2.8 KiB
Plaintext

function GetNewScanDataAvg(CINo, CurrentMax, NCRNo, CurrentAvg)
/*
This function will return the defect data while excluding data for wafers that were NCR'ed out.
*/
#pragma precomp SRP_PreCompiler
$INSERT REACT_RUN_EQUATES
Declare function DCount
Declare function SRP_Math
*Some wafers must get a reclean and thus they're read twice. We'll take the last number and assign it as the max.
CurrentMax = CurrentMax<1,1>
CurrentAvg = CurrentAvg<1,1>
OldMax = CurrentMax
*Pulls in the values of all slots read
Reads = XLATE('CLEAN_INSP',CINo,86,'X')
slots = 25
*Pulls up the NCR Records and looks for what failed wafers exist in each NCR
FailedSlots = ''
failedCount = 0
FailedSlots = FailedSlots:XLATE('NCR', NCRNo, 57, 'X')
failedCount = Count(FailedSlots, @VM)
swap @SVM with @VM in Reads
ReadsCount = DCOUNT(Reads,@VM)
NewMax = 0
DefSpecs = XLATE('CLEAN_INSP',CINo, 15, 'X')
DefSpec = DefSpecs<1,1>
NewReads = 0
TotalWafers = 0
if FailedCount GT 0 Then
For slot = 1 to slots
IF Reads<1,slot> NE '' then
If Reads<1,slot> LE DefSpec then
NewReads += Reads<1,slot>
TotalWafers += 1
If Reads<1,slot> GE NewMax then
NewMax = Reads<1,slot>
end
end
/*
failed = 0
Loop
For failedWafers = 1 to failedCount
if FailedSlots<1, failedWafers> EQ slot then
failed = 1
end else
failed = failed + 0
end
Next failedWafers
Until failed = 1 OR failedWafers GE failedCount
Repeat
if failed = 0 AND Reads<1,slot> LE DefSpec then
IF Reads<1,slot> GE NewMax AND Reads<1,slot> NE OldMax then
NewMax = Reads<1,slot>
end
NewReads += Reads<1,slot>
TotalWafers = TotalWafers + 1
end
*/
end
Next slot
RecalcCount = ReadsCount - FailedCount
//Catches a possible division by zero JRO 5/28/2020
if (NewReads EQ 0) OR (TotalWafers EQ 0) then
Ans = 0
end else
Ans = SRP_Math("ROUND", NewReads / TotalWafers, 3)
end
end else
Ans = OCONV(CurrentAvg,'MD3')
end
Return Ans