فهرست منبع

add a recollect logic on the low counts particle

GSP 6 روز پیش
والد
کامیت
216c5264dd

+ 2 - 2
Bin/x64/Debug/Config/SysData/OTSProgMgrParam.pmf

@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <XMLData RunMode="ProfessionalMode" SysType="IncA">
-  <Member RegName="BrightnessContrastRegulateParam" AutoRegulateType="EveryPeriod" BrightPhaseElement="Al" BrightPhaseValue="124" DarkPhaseElement="C" DarkPhaseValue="11" InitialBrightness="45.53382111" InitialContrast="60.21995716" mag="100" Period="5" StdMaterialOTSPos="41475,-4357" ToRun="false" />
+  <Member RegName="BrightnessContrastRegulateParam" AutoRegulateType="EveryPeriod" BrightPhaseElement="Al" BrightPhaseValue="124" DarkPhaseElement="C" DarkPhaseValue="11" InitialBrightness="45.53382111" InitialContrast="60.21995716" mag="100" Period="5" StdMaterialOTSPos="0,0" ToRun="false" WorkingDistance="9.8" />
   <Member RegName="GenParam" DefaultArea="50" DefaultSampleName="Sample" DefaultShape="1" EngineType="0:InclustionEngine" MeasParamFileFolderName=".\Config\ProData\" MeasSwitch="true" PartSTDLibFolderName=".\Config\SysData\" PropertyDisplayMode="0" StdLibFileName="Baohuzha" SteelTechnology="0" />
   <Member RegName="ImageProcParam" AutoBGRemoveType="0:MIDDLE" BGRemoveType="0:AUTO" MatrixStep="0" OverlapParam="0" ParticleSelectionCondition="">
     <Member RegName="BGGray" end="77" start="0" />
-    <Member RegName="IncArea" end="1000" start="60" />
+    <Member RegName="IncArea" end="1000" start="5" />
     <Member RegName="ParticleGray" end="255" start="0" />
   </Member>
   <Member RegName="ImageScanParam" FieldDistributeMode="0:Normal" ImageResolution="3:_1024_768" SatrtImageMode="1:Snake" ScanImageSpeed="0:low" StopMode="0:CoverMode" StopParamArea="10" StopParamFields="2" StopParamMeasTime="360" StopParamParticles="5000" />

+ 1 - 1
OTSIncAMeasureApp/0-OTSModel/OTSDataType/CMsrSampleStatus.cs

@@ -16,7 +16,7 @@ namespace OTSDataType
         PAUSED=2,
         STOPPED = 3,
         FAILED = 4,
-        SUCCESSED = 5,
+        COMPLETED = 5,
         MAX = 5
     }
 

+ 4 - 7
OTSIncAMeasureApp/1-OTSMeasure/Measure/1-OTSInclution/SmplMeasureInclution.cs

@@ -34,22 +34,19 @@ namespace OTSModelSharp
             {
 
                 var anylysisparts = curFldData.GetListAnalysisParticles();
-                var finalParts = new List<COTSParticleClr>();
+              
                 int nSize = anylysisparts.Count();
 
                 // go through all analysis particles
                 for (int i = 0; i < nSize; ++i)
                 {
                     string libname = m_Sample.GetMsrParams().GetSTDName();
-                    if (!IsLowCounts(anylysisparts[i]))
-                    {
+                    
                         ClassifyIncAParticle(anylysisparts[i], libname);
-                        finalParts.Add(anylysisparts[i]);
-                    }
-
+                      
                 }
 
-                curFldData.SetListAnalysisParticles(finalParts);
+                curFldData.SetListAnalysisParticles(anylysisparts);
             }
             catch (Exception e)
             {

+ 1 - 1
OTSIncAMeasureApp/1-OTSMeasure/Measure/3-MeasureFlow/CMeasure.cs

@@ -212,7 +212,7 @@ namespace OTSModelSharp
                     continue;
                 }
                 var sta = pSample.GetMsrStatus().GetStatus();
-                if (sta == OTS_MSR_SAMPLE_STATUS.SUCCESSED || sta == OTS_MSR_SAMPLE_STATUS.STOPPED)
+                if (sta == OTS_MSR_SAMPLE_STATUS.COMPLETED )
                 {
                     continue;
                 

+ 1 - 1
OTSIncAMeasureApp/1-OTSMeasure/Measure/3-MeasureFlow/CMeasureThreadWrapper.cs

@@ -300,7 +300,7 @@ namespace OTSMeasureApp
                         log.Error("(OTSGetMreRetThread) MSTMsg.STMSampleStu.iMeasureSampleStatus = RET_MEASURE_SAMPLE_STATUS.FAILED Failed");
 
                     }
-                    else if (MSTMsg.STMSampleStu.iMsrSampleStatu == OTSDataType.OTS_MSR_SAMPLE_STATUS.SUCCESSED)
+                    else if (MSTMsg.STMSampleStu.iMsrSampleStatu == OTSDataType.OTS_MSR_SAMPLE_STATUS.COMPLETED)
                     {
                         log.Info("Sample measure succeeded");
                     }

+ 28 - 5
OTSIncAMeasureApp/1-OTSMeasure/Measure/3-MeasureFlow/CSmplMeasure.cs

@@ -565,7 +565,7 @@ namespace OTSModelSharp
 
                         if (IsSampleOver(pScanParam))
                         {
-                            pStatus.SetStatus(OTS_MSR_SAMPLE_STATUS.SUCCESSED);
+                            pStatus.SetStatus(OTS_MSR_SAMPLE_STATUS.COMPLETED);
                             pStatus.ComputeTime(OTS_MSR_TIME_TYPE.COMPLT);
                             break;
                         }
@@ -589,8 +589,6 @@ namespace OTSModelSharp
                         int fldNo = curFld.GetId();
                         log.Warn("Current field:" + fldNo.ToString());
 
-
-
                         // move SEM to the field center
                         if (!MoveSEMToPoint(poiFieldCentre))
                         {// failed to move SEM to the position
@@ -660,6 +658,32 @@ namespace OTSModelSharp
                             try
                             {
                                 CollectParticlesXrayData(curFld);
+                                //collect another time by double dwell time if it is lowcounts particle
+                                var xrayparts = curFld.GetListXrayParticles();
+                                var lowcountparts = new List<COTSParticleClr>();    
+                                foreach (var p in xrayparts)
+                                {
+                                    if (IsLowCounts(p))
+                                    {
+                                        lowcountparts.Add(p);
+                                    }
+                                }
+                                var finalAnalysisPartTime = (uint)m_Sample.GetMsrParams().GetXRayParam().GetMidAnalyAQTime() * 2;
+                                if (lowcountparts.Count > 0)
+                                {
+                                    Thread.Sleep(200); // wait EDS ready
+                                    m_EDSController.GetXRayByParts(lowcountparts, finalAnalysisPartTime, true);
+                                    
+                                }
+                                var enoughcountparts = new List<COTSParticleClr>();
+                                foreach (var p in curFld.GetListAnalysisParticles())
+                                {
+                                    if (!IsLowCounts(p))
+                                    {
+                                        enoughcountparts.Add(p);
+                                    }
+                                }
+                                curFld.SetListAnalysisParticles(enoughcountparts);
                             }
                             catch (Exception e)
                             {
@@ -670,7 +694,6 @@ namespace OTSModelSharp
 
                         }
 
-                        m_Sample.GetMsrStatus().SetStatus(OTS_MSR_SAMPLE_STATUS.SUCCESSED);
 
 
                         curFld.SetIsMeasureComplete(true);
@@ -734,7 +757,7 @@ namespace OTSModelSharp
 
             pStatus.ComputeTime(OTS_MSR_TIME_TYPE.COMPLT);
 
-            pStatus.SetStatus(OTS_MSR_SAMPLE_STATUS.SUCCESSED);
+            //pStatus.SetStatus(OTS_MSR_SAMPLE_STATUS.SUCCESSED);
 
             // let main thread to know that this sample measurement completes
             ST_MSTMsg MsgSmplEnd = new ST_MSTMsg(m_Sample);

+ 3 - 3
OTSIncAMeasureApp/1-OTSMeasure/Measure/3-MeasureFlow/ST_MSTMsg.cs

@@ -170,7 +170,7 @@ namespace OTSMeasureApp._1_OTSMeasure.Measure._3_MeasureFlow
         internal void InitThreadSucceedMsg()
         {
             iMsgType = ENUM_MSG_TYPE.MSAMPLESTATUS;
-            STMSampleStu.iMsrSampleStatu = OTS_MSR_SAMPLE_STATUS.SUCCESSED;
+            STMSampleStu.iMsrSampleStatu = OTS_MSR_SAMPLE_STATUS.COMPLETED;
         }
 
        
@@ -193,7 +193,7 @@ namespace OTSMeasureApp._1_OTSMeasure.Measure._3_MeasureFlow
         internal void InitSampleCompleteMsg()
         {
             this.iMsgType = ENUM_MSG_TYPE.MSAMPLESTATUS;
-            this.STMSampleStu.iMsrSampleStatu = OTS_MSR_SAMPLE_STATUS.SUCCESSED;
+            this.STMSampleStu.iMsrSampleStatu = OTS_MSR_SAMPLE_STATUS.COMPLETED;
             this.STMSampleStu.cSampleName = m_sample.GetName(); ;
         }
 
@@ -278,7 +278,7 @@ namespace OTSMeasureApp._1_OTSMeasure.Measure._3_MeasureFlow
         internal void InitHolePreThreadSucceedMsg()
         {
             iMsgType = ENUM_MSG_TYPE.MTHREADSTATUS;
-            STMSampleStu.iMsrSampleStatu = OTS_MSR_SAMPLE_STATUS.SUCCESSED;
+            STMSampleStu.iMsrSampleStatu = OTS_MSR_SAMPLE_STATUS.COMPLETED;
 
         }
         internal void InitHolePreBSEDataMsg(CBSEImgClr pBSEIamge,Point poiFieldCenter)

+ 1 - 1
OTSIncAMeasureApp/2-OTSMeasureParamManage/COTSMeasureParam.cs

@@ -867,7 +867,7 @@ namespace OTSMeasureApp
         {
             // safety check
 
-            if (a_pSample.GetMsrStatus().GetStatus() != OTSDataType.OTS_MSR_SAMPLE_STATUS.SUCCESSED)
+            if (a_pSample.GetMsrStatus().GetStatus() != OTSDataType.OTS_MSR_SAMPLE_STATUS.COMPLETED)
             {
 
                 return false;

+ 1 - 1
OTSIncAMeasureApp/5-OTSMeasureStatuImageFun/OTSMeasureStatusWindow.cs

@@ -321,7 +321,7 @@ namespace OTSMeasureApp
             double wd = 10;
             sem.GetWorkingDistance(ref wd);
             m_MeasureAppForm.m_ProjParam.GetResultData().GetWorkingSample().GetSEMDataMsr().SetWorkingDistance(wd);
-
+            m_MeasureAppForm.UpdatePropertyVal();
 
         }
         /// <summary>