using System; using System.IO; namespace Adaptation.Shared.Metrology { public class ScopeInfo : IScopeInfo { public Test Test { get; private set; } public Enum Enum { get; private set; } public string HTML { get; private set; } public string Title { get; private set; } public string FileName { get; private set; } public int TestValue { get; private set; } public string Header { get; private set; } public string QueryFilter { get; private set; } public string FileNameWithoutExtension { get; private set; } public EquipmentType EquipmentType { get; private set; } public ScopeInfo(ILogic logic, ConfigDataBase configDataBase, Test test) { Enum = test; Test = test; TestValue = (int)test; if (configDataBase.EquipmentConnection is null) EquipmentType = configDataBase.EquipmentType; else EquipmentType = configDataBase.EquipmentConnection.Value; string eventName = GetEventNameAndSetRemaining(); if (eventName != configDataBase.GetEventName()) { File.Move(logic.Logistics.ReportFullPath, Path.ChangeExtension(logic.Logistics.ReportFullPath, eventName)); throw new Exception(); } else if (EquipmentType != configDataBase.EquipmentType && EquipmentType != configDataBase.EquipmentConnection) { File.Move(logic.Logistics.ReportFullPath, Path.ChangeExtension(logic.Logistics.ReportFullPath, EquipmentType.ToString())); throw new Exception(); } } public ScopeInfo(ILogic logic, ConfigDataBase configDataBase, Test test, string fileName, string queryFilter, string title = "", string html = "") { Enum = test; Test = test; TestValue = (int)test; if (configDataBase.EquipmentConnection is null) EquipmentType = configDataBase.EquipmentType; else EquipmentType = configDataBase.EquipmentConnection.Value; FileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName); Header = string.Empty; QueryFilter = queryFilter; Title = title; HTML = html; FileName = fileName; } public ScopeInfo ShallowCopy() { return (ScopeInfo)MemberwiseClone(); } private string GetEventNameAndSetRemaining() { EventName eventName; switch (Test) { case Test.AFMRoughness: EquipmentType = EquipmentType.MET08AFMD3100; eventName = EventName.FileRead; FileNameWithoutExtension = "afm_iqs_01"; Header = string.Empty; QueryFilter = "AFM Roughness"; Title = "AFM"; HTML = @"GaN Epi Data\10 - afm.html"; break; case Test.BreakdownVoltageCenter: EquipmentType = EquipmentType.MET08BVHGPROBE; eventName = EventName.FileRead; FileNameWithoutExtension = "bv_iqs_01"; Header = "Reactor;fDate;fRecipeName;Lot;fPocketNumber;g4Scribe;BV Position;BV Value;Tool"; QueryFilter = "Breakdown Voltage"; Title = "Breakdown Voltage-Center"; HTML = @"GaN Epi Data\03 - bv-production.html"; break; case Test.BreakdownVoltageEdge: EquipmentType = EquipmentType.MET08BVHGPROBE; eventName = EventName.FileRead; FileNameWithoutExtension = "bv_iqs_01_Edge"; Header = "Reactor;fDate;fRecipeName;Lot;fPocketNumber;g4Scribe;BV Position;BV Value;Tool"; QueryFilter = "Breakdown Voltage - Edge"; Title = "Breakdown Voltage-Edge"; HTML = @"GaN Epi Data\03 - bv-production.html"; break; case Test.BreakdownVoltageMiddle8in: EquipmentType = EquipmentType.MET08BVHGPROBE; eventName = EventName.FileRead; FileNameWithoutExtension = "bv_iqs_01_Middle"; Header = "Reactor;fDate;fRecipeName;Lot;fPocketNumber;g4Scribe;BV Position;BV Value;Tool"; QueryFilter = "Breakdown Voltage - Middle"; Title = "Breakdown Voltage-Middle (8 in)"; HTML = @"GaN Epi Data\03 - bv-production.html"; break; case Test.CV: EquipmentType = EquipmentType.MET08CVHGPROBE802B150; eventName = EventName.FileRead; FileNameWithoutExtension = "cv_iqs_01"; Header = "Reactor;fDate;fPart;Lot;pocketNumber;g4Scribe;Position;Vp;NdMin;Tool ID;CV Ns;CV Cap"; QueryFilter = "CV_Ns"; Title = "CV"; HTML = @"GaN Epi Data\05 - cv.html"; break; case Test.MonthlyCV: EquipmentType = EquipmentType.MET08CVHGPROBE802B150_Monthly; eventName = EventName.FileReadMonthly; FileNameWithoutExtension = "cv_iqs_01"; Header = "Reactor;fDate;fPart;Lot;pocketNumber;g4Scribe;Position;Vp;NdMin;Tool ID;CV Ns;CV Cap"; QueryFilter = "CV_Ns"; Title = "CV Monthly Verification"; HTML = @"Metrology\07 - cv_verif_monthly.html"; break; case Test.WeeklyCV: EquipmentType = EquipmentType.MET08CVHGPROBE802B150_Weekly; eventName = EventName.FileReadWeekly; FileNameWithoutExtension = "cv_iqs_01"; Header = "Reactor;fDate;fPart;Lot;pocketNumber;g4Scribe;Position;Vp;NdMin;Tool ID;CV Ns;CV Cap"; QueryFilter = "CV_Ns"; Title = "CV Weekly Verification"; HTML = @"Metrology\16 - cv_verif_weekly.html"; break; case Test.CandelaKlarfDC: EquipmentType = EquipmentType.MET08DDINCAN8620; eventName = EventName.FileRead; FileNameWithoutExtension = "candela_iqs_01"; Header = "LotID;OperatorID;RecipeName;CandelaRecipe;WaferID;PocketNumber;RunDate;Epi;SlipLines;Cracks;EpiDef;HazeSpot;SmallLpd;MediumLpd;LargeLpd;Cracks_A;Spirals;Craters;8620 Small;Pits;Tool ID;Defect Count"; QueryFilter = "Candela Cracking"; Title = "Candela"; HTML = @"GaN Epi Data\12 - candela.html"; break; case Test.CandelaLaser: EquipmentType = EquipmentType.MET08DDINCAN8620; eventName = EventName.FileRead; FileNameWithoutExtension = "candela_iqs_01"; Header = "LotID;OperatorID;RecipeName;CandelaRecipe;WaferID;PocketNumber;RunDate;Epi;SlipLines;Cracks;EpiDef;HazeSpot;SmallLpd;MediumLpd;LargeLpd;Cracks_A;Spirals;Craters;Pits;Tool ID;Defect Count"; QueryFilter = "Candela Cracking"; Title = "Candela"; HTML = @"GaN Epi Data\12 - candela.html"; break; case Test.CandelaVerify: EquipmentType = EquipmentType.MET08DDINCAN8620; eventName = EventName.FileRead; FileNameWithoutExtension = "candela_iqs_01"; Header = string.Concat("LotID;OperatorID;RecipeName;CandelaRecipe;WaferID;PocketNumber;RunDate;RunID;Reactor;", "Slip Lines;Cracks;Epi Def;Haze Spot;Small LPD;Medium LPD;Large LPD;Cracks_A;Spirals;Craters;8620 Small;Pits;Tool ID;Defect Count"); QueryFilter = "Candela Cracking"; Title = "Candela"; HTML = @"GaN Epi Data\12 - candela.html"; break; case Test.CandelaPSL: EquipmentType = EquipmentType.MET08DDINCAN8620_Daily; eventName = EventName.FileReadDaily; FileNameWithoutExtension = "candela_iqs_01"; Header = string.Empty; QueryFilter = "102-83nm"; Title = "Candela"; HTML = @"GaN Epi Data\12 - candela.html"; break; case Test.CandelaProdU: EquipmentType = EquipmentType.MET08DDINCAN8620_Daily; eventName = EventName.FileReadDaily; FileNameWithoutExtension = "candela_iqs_01"; Header = string.Empty; QueryFilter = "SPE verification"; Title = "Candela"; HTML = @"GaN Epi Data\12 - candela.html"; break; case Test.Denton: EquipmentType = EquipmentType.MET08EBEAMINTEGRITY26; eventName = EventName.FileRead; FileNameWithoutExtension = "denton_iqs_01"; Header = "Tool;fDate;Run;Recipe;Operator;Name;Value"; QueryFilter = "Denton_Voltage_AVG"; Title = "Denton Data"; HTML = @"Support Process\03 - ebeam02_denton_v1.html"; break; case Test.Hall: EquipmentType = EquipmentType.MET08HALLHL5580; eventName = EventName.FileRead; FileNameWithoutExtension = "hall_iqs_01"; Header = "Lot;Tool;TimeDate;RunDate;RunID;Part;Reactor;Scribe;PocketNumber;Tool ID;Name;Value"; QueryFilter = "Hall Rs"; Title = "Hall Data"; HTML = @"GaN Epi Data\04 - hall.html"; break; case Test.MonthlyHall: EquipmentType = EquipmentType.MET08HALLHL5580_Monthly; eventName = EventName.FileReadMonthly; FileNameWithoutExtension = "hall_iqs_01"; Header = "Lot;Tool;TimeDate;RunDate;RunID;Part;Reactor;Scribe;PocketNumber;Tool ID;Name;Value"; QueryFilter = "Hall Rs"; Title = "Hall Monthly Verification"; HTML = @"Metrology\06 - hall_verif_monthly.html"; break; case Test.WeeklyHall: EquipmentType = EquipmentType.MET08HALLHL5580_Weekly; eventName = EventName.FileReadWeekly; FileNameWithoutExtension = "hall_iqs_01"; Header = "Lot;Tool;TimeDate;RunDate;RunID;Part;Reactor;Scribe;PocketNumber;Tool ID;Name;Value"; QueryFilter = "Hall Rs"; Title = "Hall Weekly Verification"; HTML = @"Metrology\15 - hall_verif_weekly.html"; break; case Test.Lehighton: EquipmentType = EquipmentType.MET08NDFRESIMAP151C; eventName = EventName.FileRead; FileNameWithoutExtension = "lei_iqs_01"; Header = "Reactor;Date;Recipe;Lot;Pocket;Scribe;Tool;Name;Value"; QueryFilter = "LEI RS Average value"; Title = "Lehighton"; HTML = @"GaN Epi Data\13 - lehighton.html"; break; case Test.VerificationLehighton: EquipmentType = EquipmentType.MET08NDFRESIMAP151C_Verification; eventName = EventName.FileRead; FileNameWithoutExtension = "___"; Header = "Reactor;Date;Recipe;Lot;Pocket;Scribe;Tool;Name;Value"; QueryFilter = "___"; Title = "LEI Weekly Verification 2 Ohm cm"; HTML = @"Metrology\14 - lei_verif_weekly.html.html"; break; case Test.Microscope: EquipmentType = EquipmentType.MET08MESMICROSCOPE; eventName = EventName.FileRead; FileNameWithoutExtension = string.Empty; Header = string.Empty; QueryFilter = "Microscope Center 5x"; Title = "Total Microscope Defects"; HTML = string.Empty; break; case Test.RPMXY: EquipmentType = EquipmentType.MET08PLMAPRPM; eventName = EventName.FileRead; FileNameWithoutExtension = "RPM_Data"; Header = "Lot;Date;Recipe;Reactor;Scribe;Pocket;Tool;Name;Value"; QueryFilter = "Barrier_Composition_RPM_XY"; Title = "RPM XY Data ***&*** View Data"; HTML = @"GaN Epi Data\09 - rpm --- 08 - photoluminescence.html"; break; case Test.RPMAverage: EquipmentType = EquipmentType.MET08PLMAPRPM; eventName = EventName.FileRead; FileNameWithoutExtension = "RPMdata-short"; Header = "fProductId;fDate;average;stdDev;fRecipeName;Reactor;g4Scribe;Pocket Number;Tool ID;Recipe From Rpm File"; QueryFilter = "Epi Thickness Mean"; Title = "RPM Average Data"; HTML = @"GaN Epi Data\09 - rpm.html"; break; case Test.RPMPLRatio: EquipmentType = EquipmentType.MET08PLMAPRPM; eventName = EventName.FileRead; FileNameWithoutExtension = "PHOTOLUMINESCENCE_data-short"; Header = "fProductId;fDate;g4Scribe;fRecipeName;bandEdge_nm;bandEdge_V;yellowBand_Pmw;yellowBand_nm;yellowBand_V;Reactor;Pocket Number;Tool ID"; QueryFilter = "PL Ratio"; Title = "Photoluminescence: PL Ratio"; HTML = @"GaN Epi Data\08 - photoluminescence.html"; break; case Test.DailyRPMXY: EquipmentType = EquipmentType.MET08PLMAPRPM_Daily; eventName = EventName.FileReadDaily; FileNameWithoutExtension = "RPM_Data"; Header = "Lot;Date;Recipe;Reactor;Scribe;Pocket;Tool;Name;Value"; QueryFilter = "Barrier_Composition_RPM_XY"; Title = ""; HTML = @"Metrology\?"; break; case Test.DailyRPMAverage: EquipmentType = EquipmentType.MET08PLMAPRPM_Daily; eventName = EventName.FileReadDaily; FileNameWithoutExtension = "RPMdata-short"; Header = "fProductId;fDate;average;stdDev;fRecipeName;Reactor;g4Scribe;Pocket Number;Tool ID;Recipe From Rpm File"; QueryFilter = "Epi Thickness Mean"; Title = ""; HTML = @"Metrology\?"; break; case Test.DailyRPMPLRatio: EquipmentType = EquipmentType.MET08PLMAPRPM_Daily; eventName = EventName.FileReadDaily; FileNameWithoutExtension = "PHOTOLUMINESCENCE_data-short"; Header = "fProductId;fDate;g4Scribe;fRecipeName;bandEdge_nm;bandEdge_V;yellowBand_Pmw;yellowBand_nm;yellowBand_V;Reactor;Pocket Number;Tool ID"; QueryFilter = "PL Ratio"; Title = "RPM Daily Verification"; HTML = @"Metrology\17 - rpm_verif_daily.html"; break; case Test.VerificationRPM: EquipmentType = EquipmentType.MET08PLMAPRPM_Verification; eventName = EventName.FileReadVerification; FileNameWithoutExtension = "PhotoLuminescence_Ver"; Header = "Part;Process;Date;Test;Value"; QueryFilter = "PL Edge Wavelength"; Title = "PL Daily Verification - [PL Edge Wavelength]"; HTML = @"Metrology\18 - photoluminescence_verif_daily.html"; break; case Test.Photoreflectance: EquipmentType = EquipmentType.MET08PRFUSB4000; eventName = EventName.FileRead; FileNameWithoutExtension = "photoreflect_iqs_01"; Header = "Lot;Date;Part;Reactor;Scribe;Pocket;Tool;Point;WaferPosition_PR;PR_Peak"; QueryFilter = "PR Barrier Composition"; Title = "Photoreflectance 6 in, Photoreflectance 8 in"; HTML = @"GaN Epi Data\07 - photoreflectance.html"; break; case Test.UV: EquipmentType = EquipmentType.MET08UVH44GS100M; eventName = EventName.FileRead; FileNameWithoutExtension = "uv_iqs_01"; Header = string.Empty; QueryFilter = "UV Broken"; Title = "UV"; HTML = @"GaN Epi Data\15 - uv 2.1.html"; break; case Test.VpdIcpmsAnalyte: EquipmentType = EquipmentType.MET08VPDSUBCON; eventName = EventName.FileRead; FileNameWithoutExtension = "VPD_iqs_01"; Header = "Reactor;RunID;RunDate;PartNumber;PocketNumber;WaferScribe;Analyte;Value"; QueryFilter = "Mg"; Title = "VpdIcpmsAnalyteData"; HTML = @""; break; case Test.WarpAndBow: EquipmentType = EquipmentType.MET08WGEOMX203641Q; eventName = EventName.FileRead; FileNameWithoutExtension = "warp_iqs_01"; Header = "fDate;fRecipeName;fProductId;g4Scribe;warp;bow;tool;Reactor;Pocket ID;bow_range;BowX;BowY;CenterBow"; QueryFilter = "BowCenter"; Title = "Warp and Bow"; HTML = @"GaN Epi Data\14 - warp.html"; break; case Test.VerificationWarpAndBow: EquipmentType = EquipmentType.MET08WGEOMX203641Q_Verification; eventName = EventName.FileReadVerification; FileNameWithoutExtension = "warp_ver_iqs_01"; Header = "Part;Process;Date;WaferScribe;totWarp;bow"; QueryFilter = "Bow Calibration"; Title = "6 Inch Warp/Bow Daily Verification, 8 Inch Warp/Bow Daily Verification"; HTML = @"Metrology\19 - warp_cal_daily.html"; break; case Test.XRDXY: EquipmentType = EquipmentType.MET08XRDXPERTPROMRDXL; eventName = EventName.FileRead; FileNameWithoutExtension = "xrd_iqs_NEW_01"; Header = "Reactor;fDate;fRecipeName;Lot;pocketNumber;g4Scribe;ToolID;Name;Value;Group"; QueryFilter = "SL Period"; Title = "XRD XY Raw Data Viewer"; HTML = @"GaN Epi Data\11 - xrd.html"; break; case Test.XRDWeightedAverage: EquipmentType = EquipmentType.MET08XRDXPERTPROMRDXL; eventName = EventName.FileRead; FileNameWithoutExtension = "xrd_iqs_NEW_01_WtAVG"; Header = "Reactor;fDate;fRecipeName;Lot;pocketNumber;g4Scribe;Name;Value;Group"; //QueryFilter = "Al% Barrier WTAVG"; QueryFilter = "SL Period WTAVG"; Title = "XRD Weighted Average Data"; HTML = @"GaN Epi Data\11 - xrd.html"; break; case Test.MonthlyXRD: EquipmentType = EquipmentType.MET08XRDXPERTPROMRDXL_Monthly; eventName = EventName.FileReadMonthly; FileNameWithoutExtension = "xrd_monthly_ver_iqs_01"; Header = "Part;Process;Date;TestName;Value"; QueryFilter = "XRD 2-Theta Position"; Title = "XRD Monthly Verification"; HTML = @"Metrology\03 - xrd_verif_monthly.html"; break; case Test.WeeklyXRD: EquipmentType = EquipmentType.MET08XRDXPERTPROMRDXL_Weekly; eventName = EventName.FileReadWeekly; FileNameWithoutExtension = "xrd_weekly_ver_iqs_01"; Header = "Part;Process;Lot;Date;TestName;Value"; QueryFilter = "XRD Weekly AL% Center"; Title = "XRD Weekly Verification"; HTML = @"Metrology\12 - xrd_verif_weekly.html"; break; case Test.JVXRD: EquipmentType = EquipmentType.METBRXRAYJV7300L; eventName = EventName.FileRead; FileNameWithoutExtension = "xrd_iqs_NEW_01"; Header = "Reactor;fDate;fRecipeName;Lot;pocketNumber;g4Scribe;ToolID;Name;Value;Group"; QueryFilter = "SL Period"; Title = "XRD XY Raw Data Viewer"; HTML = @"GaN Epi Data\11 - xrd.html"; break; default: throw new Exception(); } FileName = string.Concat(FileNameWithoutExtension, ".txt"); return eventName.ToString(); } public override string ToString() { return string.Concat(EquipmentType, " - (", Enum, ""); } } }