From aa6461c62d02909cdc09c0fcedb0d8eb2883626c Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Fri, 11 Apr 2025 20:31:29 -0700 Subject: [PATCH] Scripts --- .vscode/download-work-items.http | 8 ++ Scripts/bio-rad.js | 66 ++++++++++++- Scripts/cde.js | 161 ++++++++++++++++++++++++++++++- 3 files changed, 231 insertions(+), 4 deletions(-) diff --git a/.vscode/download-work-items.http b/.vscode/download-work-items.http index a38368c..65b90e2 100644 --- a/.vscode/download-work-items.http +++ b/.vscode/download-work-items.http @@ -11,3 +11,11 @@ Authorization: Basic {{pat}} GET {{host}}/tfs/FactoryIntegration/_apis/wit/workitems/{{ids}}/updates Accept: application/json Authorization: Basic {{pat}} + +### Iterations + +GET {{host}}/tfs/FactoryIntegration/ART%20SPS/cea9f426-6fb1-4d65-93d5-dbf471056212/_apis/work/teamsettings/iterations? +Accept: application/json +Authorization: Basic {{pat}} + +### \ No newline at end of file diff --git a/Scripts/bio-rad.js b/Scripts/bio-rad.js index 7ca7c7b..3d68fe5 100644 --- a/Scripts/bio-rad.js +++ b/Scripts/bio-rad.js @@ -1,6 +1,6 @@ "use strict"; -getValue($('gv.thicknessPoints', ''), $('dcp.BIORAD2/csv/Index', '0')); +// getValue($('gv.thicknessPoints', ''), $('dcp.BIORAD2/csv/Index', '0')); function getCollectionParseFloat(collection) { let result = []; @@ -36,7 +36,7 @@ function getAverage(collection) { return result; } -function getValue(thicknessPoints, index) { +function getValueB(thicknessPoints, index) { let result = null; if (index === 13) { if (thicknessPoints != undefined && thicknessPoints.length > 1) { @@ -85,4 +85,64 @@ const thicknessFourteen5mmEdgeMean = getAverage([thicknessPoints[0], thicknessPo const thicknessFourteen3mmEdgeMean = getAverage([thicknessPoints[10], thicknessPoints[11], thicknessPoints[12], thicknessPoints[13]]); // 20 // *3.89625 const thicknessFourteen5mmEdgePercent = (thicknessFourteen5mmEdgeMean - thicknessFourteenMeanFrom) / thicknessFourteenMeanFrom * 100; // 21 // *1.848440576764267 const thicknessFourteen3mmEdgePercent = (thicknessFourteen3mmEdgeMean - thicknessFourteenMeanFrom) / thicknessFourteenMeanFrom * 100; // 22 // *-1.0036206567998442 -console.log(thicknessFourteenCriticalPointsAverage); \ No newline at end of file +console.log(thicknessFourteenCriticalPointsAverage); + +// getValue($('dcp.BIORAD2/csv/Batch', ''), $('dcp.BIORAD2/csv/Wafer', '')); + +function getSlot(wafer) { + let result = null; + if (wafer.length !== 1 && wafer.length !== 2) + result = null; + else { + let slot = parseInt(wafer); + if (slot < 1 || slot > 27) + result = null; + else + result = slot < 10 ? '0' + slot : slot; + } + return result; +} + +function getBatch(batch, jobId, wafer) { + let result = null; + const slot = getSlot(wafer); + result = slot == null ? jobId : batch; + return result; +} + +function getWafer(wafer) { + let result = null; + const slot = getSlot(wafer); + result = slot == null ? wafer : slot; + return result; +} + +function getValue(batch, wafer) { + let result = null; + const slot = getSlot(wafer); + const value = slot == null ? wafer : batch; + result = value.replace(/[\{\}\\\/\:\*\?\"\<\>\|]/g, '_'); + return result; +} + +const values = [ + { wafer: '11', jobId: 'BIORAD2', batch: 'O172068.1.60', waferCheck: '11', batchCheck: 'O172068.1.60', mid: 'O172068.1.60' }, + { wafer: '27-588493-5008', jobId: 'BIORAD2', batch: 'BIORAD#2', waferCheck: '27-588493-5008', batchCheck: 'BIORAD2', mid: '27-588493-5008' }, + { wafer: '27-588493-5"008', jobId: 'BIORAD2', batch: 'BIORAD#2', waferCheck: '27-588493-5008', batchCheck: 'BIORAD2', mid: '27-588493-5_008' }, +]; + +const wafer = "11"; +const jobId = "BIORAD2"; +const batch = "O172068.1.60"; +const waferCheck = getWafer(wafer); +const batchCheck = getBatch(batch, jobId, wafer); +const mid = getValue(batch, wafer); +console.log(mid); + +values.forEach(element => { + let mid = getValue(element.batch, element.wafer); + if (mid != element.mid) + console.error("MID doesn't match!"); + else + console.info('Match'); +}); diff --git a/Scripts/cde.js b/Scripts/cde.js index da091c4..9db9660 100644 --- a/Scripts/cde.js +++ b/Scripts/cde.js @@ -25,4 +25,163 @@ function getValue(avgRaw, devZeroDefault, avgZeroDefault) { const dev = 0.383; const avg = 33.5810; const value = getValue(avg, dev); -console.log("value: " + value); \ No newline at end of file +console.log("value: " + value); + +// getValue(self, self.length, $('dcp.CDE4/csv/MesEntity', ''), $('dcp.CDE4/csv/Title', ''), $('dcp.CDE4/csv/Recipe', ''), getContextData('2', 'cds.PROCESS_JOBID', '')); + +function tryParseInt(str, defaultValue) { + const parsedValue = parseInt(str); + return isNaN(parsedValue) ? defaultValue : parsedValue; +} + +function getReactorAndRDS(defaultReactor, defaultRDS, text, formattedText, segments) { + let result = {}; + let rds; + let reactor; + let rdsValue; + if (text == null || text.length === 0 || segments.length === 0 || formattedText == null || formattedText.length === 0) + reactor = defaultReactor; + else + reactor = segments[0]; + if (segments.length <= 1 || !tryParseInt(segments[1], false) || rdsValue < 99) + rds = defaultRDS; + else + rds = segments[1]; + if (reactor.length > 3) { + rds = reactor; + reactor = defaultReactor; + } + result = { reactor: reactor, rds: rds }; + return result; +} + +function getLayerAndPSN(defaultLayer, defaultPSN, segments) { + let result = {}; + let psn; + let layer; + if (segments.length <= 2) { + psn = defaultPSN; + layer = defaultLayer; + } + else { + let segmentsB = segments[2].split('.'); + psn = segmentsB[0]; + if (segmentsB.length <= 1) + layer = defaultLayer; + else { + layer = segmentsB[1]; + if (layer.length > 1 && layer[0] === '0') + layer = layer.substring(1); + } + } + result = { layer: layer, psn: psn }; + return result; +} + +function getZone(segments) { + let result = ''; + if (segments.length <= 3) + result = ''; + else { + result = segments[3]; + if (result.length > 1 && result[0] === '0') + result = result.substring(1); + } + return result; +} + +function getArray(text) { + let result = {}; + let lot = ''; + let psn = ''; + let rds = ''; + let zone = ''; + let layer = ''; + let reactor = ''; + let employee = ''; + let defaultPSN = ''; + let defaultRDS = ''; + let defaultZone = ''; + let defaultLayer = ''; + let defaultReactor = ''; + let defaultEmployee = ''; + const processOnly = /^[a-zA-z]{2,3}/; + const processOnlyB = /^[a-zA-z][0-9]{2,4}$/; + const normal = /^[0-9]{2}[.][0-9]{1}[.]?[0-9]{0,1}/; + const fileSystemSafe = /[\\,\/,\:,\*,\?,\"",\<,\>,\|]/; + if (text.match(processOnlyB)) { + lot = text.toUpperCase(); + psn = defaultPSN; + rds = defaultRDS; + zone = defaultZone; + layer = defaultLayer; + reactor = defaultReactor; + employee = defaultEmployee; + } + else if (text == null || text.length === 0 || (text.length == 2 && text.match(processOnly))) { + lot = text; + employee = lot; + psn = defaultPSN; + rds = defaultRDS; + zone = defaultZone; + layer = defaultLayer; + reactor = defaultReactor; + } + else if (text.match(normal)) { + let segments = text.split('.'); + lot = text; + psn = defaultPSN; + rds = defaultRDS; + layer = segments[1]; + reactor = segments[0]; + employee = defaultEmployee; + if (segments.length <= 2) + zone = defaultZone; + else + zone = segments[2]; + } + else { + lot = text.replace(fileSystemSafe, "_").split('\r')[0].split('\n')[0]; + if (lot.length > 2 && lot[0] == '1' && (lot[1] == 'T' || lot[1] == 't')) + lot = lot.substring(2); + let segments = lot.split('-'); + let reactorAndRDS = getReactorAndRDS(defaultReactor, defaultRDS, text, lot, segments); + reactor = reactorAndRDS.reactor; + rds = reactorAndRDS.rds; + let layerAndPSN = getLayerAndPSN(defaultLayer, defaultPSN, segments); + layer = layerAndPSN.layer; + psn = layerAndPSN.psn; + zone = getZone(segments); + if (segments.length <= 4) + employee = defaultEmployee; + else + employee = segments[4]; + } + result = { rds: rds, psn: psn, reactor: reactor, layer: layer, zone: zone, employee: employee, lot: lot }; + return result; +}; + +function getValueReactor(value, length, mesEntity, title, recipe, processJobId) { + if (recipe.toUpperCase() === 'RLOW_STD') + return mesEntity; + else if (recipe.toUpperCase() === 'RMID_STD') + return mesEntity; + else if (recipe.toUpperCase() === 'RHI_STD') + return mesEntity; + else if (recipe.toUpperCase() === 'THINSPC') + return mesEntity; + else if (length === 0 && processJobId == 0) + return getArray(title).reactor; + else if (length === 0) + return processJobId; + else + return value; +} + +const self = ''; +const mesEntity = 'CDE4'; +const title = '75-663192-5281.1'; +const recipe = '8IN_INF'; +const processJobId = '0'; +const valueReactor = getValueReactor(self, self.length, mesEntity, title, recipe, processJobId); +console.log("value: " + valueReactor); \ No newline at end of file