diff --git a/ats/analysis/ATS_AIM_customer_data_analysis.js b/ats/analysis/ATS_AIM_customer_data_analysis.js
index 0eb2307c0f67c6d25f1d2d111e1d4a55c4e00998..4b631839884ba37bc35b490ed3b0482585e0a688 100644
--- a/ats/analysis/ATS_AIM_customer_data_analysis.js
+++ b/ats/analysis/ATS_AIM_customer_data_analysis.js
@@ -9,6 +9,12 @@
 			type : 'LineEdit',
 			property : {tool_tip : 'pcs step名,默认是cad'}
         },
+        {
+            name : 'cam_type',
+			title : 'cam_type',
+			type : 'LineEdit',
+			property : {tool_tip : 'cam_type'}
+        },
         {
             name : 'vc_src_01005_pad_result',
 			title : 'vc_src_01005_pad_result',
@@ -114,7 +120,7 @@ try {
         if(v.context == "board" && v.layer_type == "drill"){
             if(v.type == "laser_drill"){
                 GEN.affectedLayer({affected:'no',mode:'all'})
-                GEN.workLayer({name:v.name,display_number:2,clear_before:'yes'})
+                GEN.workLayer({name:v.odb_name,display_number:2,clear_before:'yes'})
                 GEN.selClearFeature()
                 GEN.selAllFeat()
                 if(GEN.getSelectCount()>0){
@@ -125,7 +131,7 @@ try {
                 GEN.selClearFeature()
             } else if(v.type == "main_drill" || v.type == "blind_drill" || v.type == "bury_drill") {
                 GEN.affectedLayer({affected:'no',mode:'all'})
-                GEN.workLayer({name:v.name,display_number:2,clear_before:'yes'})
+                GEN.workLayer({name:v.odb_name,display_number:2,clear_before:'yes'})
                 GEN.selClearFeature()
                 GEN.selRefFeat({layers:v.drl_start,use:'filter',mode:'touch',f_types:"pad"})
                 GEN.selRefFeat({layers:v.drl_end,use:'filter',mode:'touch',f_types:"pad"})
@@ -172,23 +178,23 @@ try {
             if(drl_side == "Top"){
                 if((drl_start_num-1)==0){ drl_filler = "None" }
                 else {
-                    var top_l = "d" + (drl_start_num-1) + "-" + (drl_end_num-1)
+                    var top_l = "ftdrill" + (drl_start_num-1) + "-" + (drl_end_num-1) + "l"
                     if(GEN.isLayerExists({job:job, layer:top_l})){
                         GEN.clearLayers()
                         GEN.selClearFeature()
                         GEN.workLayer({name:top_l,display_number:2,clear_before:'yes'})
-                        GEN.selRefFeat({layers:drill.name,use:'filter',mode:'touch'})
+                        GEN.selRefFeat({layers:drill.odb_name,use:'filter',mode:'touch'})
                         if(GEN.getSelectCount()>0){
                             GEN.selClearFeature()
                             drl_filler="Via Filling"
                         }
                     }
                 }
-                var bot_l = "d" + (drl_start_num+1) + "-" + (drl_end_num+1)
+                var bot_l = "ftdrill" + (drl_start_num+1) + "-" + (drl_end_num+1) + "l"
                 if(GEN.isLayerExists({job:job, layer:bot_l})){
                     GEN.clearLayers()
                     GEN.selClearFeature()
-                    GEN.workLayer({name:drill.name,display_number:2,clear_before:'yes'})
+                    GEN.workLayer({name:drill.odb_name,display_number:2,clear_before:'yes'})
                     GEN.selRefFeat({layers:bot_l,use:'filter',mode:'touch'})
                     if(GEN.getSelectCount()>0){
                         GEN.selClearFeature()
@@ -200,23 +206,23 @@ try {
             }else if (drl_side == "Bot"){
                 if((drl_end_num-layerCount)==0){ drl_filler = "None" }
                 else {
-                    var top_l = "d" + (drl_start_num+1) + "-" + (drl_end_num+1)
+                    var top_l = "ftdrill" + (drl_start_num+1) + "-" + (drl_end_num+1) + "l"
                     if(GEN.isLayerExists({job:job, layer:top_l})){
                         GEN.clearLayers()
                         GEN.selClearFeature()
                         GEN.workLayer({name:top_l,display_number:2,clear_before:'yes'})
-                        GEN.selRefFeat({layers:drill.name,use:'filter',mode:'touch'})
+                        GEN.selRefFeat({layers:drill.odb_name,use:'filter',mode:'touch'})
                         if(GEN.getSelectCount()>0){
                             GEN.selClearFeature()
                             drl_filler="Via Filling"
                         }
                     }
                 }
-                var bot_l = "d" + (drl_start_num-1) + "-" + (drl_end_num-1)
+                var bot_l = "ftdrill" + (drl_start_num-1) + "-" + (drl_end_num-1) + "l"
                 if(GEN.isLayerExists({job:job, layer:bot_l})){
                     GEN.clearLayers()
                     GEN.selClearFeature()
-                    GEN.workLayer({name:drill.name,display_number:2,clear_before:'yes'})
+                    GEN.workLayer({name:drill.odb_name,display_number:2,clear_before:'yes'})
                     GEN.selRefFeat({layers:bot_l,use:'filter',mode:'touch'})
                     if(GEN.getSelectCount()>0){
                         GEN.selClearFeature()
@@ -227,8 +233,9 @@ try {
                 }else{ drill_info.drl_overlap = "No" }
             }
         } else {
-            GEN.workLayer({name:drill.name,display_number:2,clear_before:'yes'})
-            GEN.selectByFilter({attribute:'.drill',option:'plated'})
+            GEN.clearLayers()
+            GEN.workLayer({name:drill.odb_name,display_number:2,clear_before:'yes'})
+            GEN.selectByFilter({attribute:[{attribute:".drill",option:"plated"}],profile:"in"})
             if(GEN.getSelectCount()>0){
                 GEN.selClearFeature()
                 drill_info.drl_type = "PTH"
@@ -336,10 +343,10 @@ try {
     return {name:v, type:type}})
 
     // glod_finger
-    var gold_fingers = Object.keys(tmp_matrix).filter(function(v){return /^top_enig$|^bot_enig$/ig.test(v)})
+    var gold_fingers = Object.keys(tmp_matrix).filter(function(v){return /^enig_top$|^enig_bot$/ig.test(v)})
     if(gold_fingers.length){
         gold_fingers = gold_fingers.map(function(v){
-            var type = (v=="top_enig") ? "top" : "bot"
+            var type = (v=="enig_top") ? "top" : "bot"
             return {name:v, type:type}
         })
     }
@@ -503,11 +510,11 @@ try {
         })
     })
     
-    // console.log("=============================> 6 set smd bga")
+    console.log("=============================> 6 set smd bga genesistype:" + GEN.GEN_TYPE)
     var allStep = GEN.getStepList({job:job})
     allStep.forEach(function(step){
         GEN.openStep({job:job,name:step})
-        if(GEN.GEN_TYPE == "genesis"){
+        if(par.cam_type == "genesis"){
             GEN.COM("chklist_single,action=valor_cleanup_set_smd,show=yes")
             GEN.COM("chklist_cupd,chklist=valor_cleanup_set_smd,nact=1,params=((pp_layer=.type=signal|mixed&side=top|bottom)(pp_drill=No)(pp_rotate=No)(pp_ignore_covered=Yes)(pp_sm=No)(pp_types=Square\;Rect\;Oval)(pp_other=)(pp_delete=No)),mode=regular")
             GEN.COM("chklist_run,chklist=valor_cleanup_set_smd,nact=1,area=profile")
@@ -852,16 +859,16 @@ function ANALYSIS_STACKUP(props){
 		layer.side = layer.enum_tl_side;
 		layer.input_file_name = layer.file_name;
 		layer.odb_row_num = layer.row;
-		if (layer.odb_name == 'drill'){
+		if (layer.odb_name == 'ftdrill'){
 			layer.name = 'drill';
 			layer.drl_start_num = 1;
 			layer.drl_end_num = layer_count;
 			layer.drl_from_num = 1;
 			layer.drl_to_num = layer_count;
 			layer.type = 'main_drill';
-		}
-		else if (/^d(\d+)\-(\d+)$/.test(layer.odb_name)){
-            var tmp = /^d(\d+)\-(\d+)$/.exec(layer.odb_name)
+        }
+		else if (/^ftdrill(\d+)-(\d+)l$/.test(layer.odb_name)){  // /^d(\d+)\-(\d+)$/
+            var tmp = /^ftdrill(\d+)-(\d+)l$/.exec(layer.odb_name)
 			var drl_star = tmp[1];
 			var drl_end = tmp[2];
 			layer.name = 'd' + drl_star + '-' + drl_end;
@@ -1005,10 +1012,15 @@ function save_job_info(props){  //  保存料号信息
 function save_layerinfo(props){   //  保存层信息
     var jobid = props.jobid;
     var layer = props.layer;
+    // if(Omatrix[layer] && Omatrix[layer].tl_name){
+    //     if(!(/^drill/ig.test(Omatrix[layer].tl_name))){
+    //         layer = Omatrix[layer].tl_name
+    //     }
+    // }
     if(Omatrix[layer] && Omatrix[layer].tl_name){
-        if(!(/^drill/ig.test(Omatrix[layer].tl_name))){
+        // if(!(/^drill/ig.test(Omatrix[layer].tl_name))){
             layer = Omatrix[layer].tl_name
-        }
+        // }
     }
     var layerinfohash = props.layerinfohash;
     Object.keys(layerinfohash).forEach(function(key){
@@ -1159,8 +1171,8 @@ function analysis(props){
         laser_layers = laser_layers.sort(function(a,b){return Number(a.row)-Number(b.row)})
         var laser_info = {}
         for(var i = 0; i < laser_layers.length-1; i++){
-            var start_layer = laser_layers[i].name
-            var cover_layer = laser_layers[i+1].name
+            var start_layer = laser_layers[i].odb_name
+            var cover_layer = laser_layers[i+1].odb_name
             GEN.workLayer({name:start_layer,display_number:2,clear_before:'yes'})
             GEN.selClearFeature()
             GEN.selRefFeat({layers:cover_layer,use:'filter',mode:'cover'})
@@ -1177,9 +1189,9 @@ function analysis(props){
         var via_vias_info = []
         function analysis_via_number(layers){
             if(layers.length < 2){return}
-            var startlayer = layers[0].name + "_cover" 
+            var startlayer = layers[0].odb_name + "_cover" 
             GEN.selClearFeature()
-            GEN.workLayer({name:layers[0].name,display_number:2,clear_before:'yes'})
+            GEN.workLayer({name:layers[0].odb_name,display_number:2,clear_before:'yes'})
             GEN.selAllFeat()
             selCopyLayer({job:t.job,layer:startlayer})
             var end_index = start_cover_next(startlayer,layers,0)
@@ -1194,13 +1206,13 @@ function analysis(props){
             layers = layers.slice(1)
             GEN.workLayer({name:start,display_number:2,clear_before:'yes'})
             GEN.selClearFeature()
-            GEN.selRefFeat({layers:layers[0].name,use:'filter',mode:'cover'})
+            GEN.selRefFeat({layers:layers[0].odb_name,use:'filter',mode:'cover'})
             var count = GEN.getSelectCount()
             if (count < 1) {
                 GEN.deleteLayer({job:t.job,layer:start})
                 return ++end_index
             }
-            var nextstartlayer = layers[0].name + "_cover" 
+            var nextstartlayer = layers[0].odb_name + "_cover" 
             selCopyLayer({job:t.job,layer:nextstartlayer})
             GEN.deleteLayer({job:t.job,layer:start})
             return start_cover_next(nextstartlayer,layers,++end_index)
@@ -1631,6 +1643,9 @@ function analysisChkAttr(par) {
                 }
                 return a
             }, "N/A")
+            if(hash[v][key]=="N/A"){
+                hash[v][key] = 999
+            }
         })
     })
     return hash
@@ -2052,3 +2067,5 @@ function has_steps(props){
 	return res.indexOf(pcs_step) >= 0
 }
 
+
+
diff --git a/ats/input/ATS_AIM_data_input.js b/ats/input/ATS_AIM_data_input.js
index 348a63201bdc7866bde5f90664b93c9c04a49edd..84fda8801ec80fdb56d21c08bc04be7a72d1077f 100644
--- a/ats/input/ATS_AIM_data_input.js
+++ b/ats/input/ATS_AIM_data_input.js
@@ -138,9 +138,9 @@ try {
 		})
 	});
 	var job_file_baseName = job
-	if(vc_position && vc_position != "" && !(/null/ig.test(vc_position))){
-		job_file_baseName = job_file_baseName + "_" + vc_position
-	}
+	// if(vc_position && vc_position != "" && !(/null/ig.test(vc_position))){
+	// 	job_file_baseName = job_file_baseName + "_" + vc_position
+	// }
 	var jobFile = pathInfo.filter(function(v){return v.baseName.toLowerCase() == job_file_baseName})
 	if(jobFile.length == 0){throw "job file is not exist"}
 	var jobFiles = []  // 记录要分析的文件
@@ -160,9 +160,10 @@ try {
 		} else {  // 多个tgz文件 说明需要合并
 			console.log("==========合并的情况");
 			var jobs = jobInfo.data.map(function(item, i){
-				var err = importJob({name:job + "_tmp_" + i,db:custCfg.db,path:item.file.path},config.delSameJob)
+				var tmp_job_name = job + "_tmp_" + i
+				var err = importJob({name:tmp_job_name,db:custCfg.db,path:item.file.path},config.delSameJob)
 				if(err){throw err}
-				return job + "_tmp_" + i
+				return tmp_job_name
 			})
 			// 分析arr_job 和 pcs_job
 			jobs = jobs.map(function(jobname){
diff --git a/config_ats.js b/config_ats.js
index e47e574b722feede8ac79b3dd32d2836d4b73e22..e784fa4565e3c9a27f6b7cdd2df98a509670dc97 100644
--- a/config_ats.js
+++ b/config_ats.js
@@ -267,8 +267,8 @@
 				}
 			],
 			"tl_name": [
-				{"orig_name" : ["top_enig"], "tl_name" : "top_enig" }, 
-				{"orig_name" : ["bot_enig"], "tl_name" : "bot_enig" }, 
+				{"orig_name" : ["top_enig","top-enig","enig_top"], "tl_name" : "enig_top" }, 
+				{"orig_name" : ["bot_enig","bot-enig","enig_bot"], "tl_name" : "enig_bot" }, 
 				{"orig_name" : ["^spt$","^past_top$"], "tl_name" : "past_top" }, 
 				{"orig_name" : ["^spb$","^past_botm$"], "tl_name" : "past_botm" },
 				{"orig_name" : ["^sst$","^silk_top$"], "tl_name" : "silk_top" },
@@ -419,8 +419,8 @@
 				{"orig_name" : "fab.art", "tl_name" : "fab.art" },
 				{"orig_name" : ["multipack.art","^array$"], "tl_name" : "array" },
 				{"orig_name" : ["^outline"], "tl_name" : "outline" },
-				{"orig_name" : ["top-enig","top_enig"], "tl_name" : "top_enig" },
-				{"orig_name" : ["bot-enig","bot_enig"], "tl_name" : "bot_enig" },
+				{"orig_name" : ["top-enig","enig_top"], "tl_name" : "enig_top" },
+				{"orig_name" : ["bot-enig","enig_bot"], "tl_name" : "enig_bot" },
 			]
 		},
 		"New_data": {
@@ -548,19 +548,19 @@
 		}
 	},
 	"data_format": [
-		{"tl_name":"top_enig" , "new_name":"top_enig" , "attr":{ "context":"board", "type":"document" }},
+		{"tl_name":"enig_top" , "new_name":"enig_top" , "attr":{ "context":"board", "type":"document" }},
 		{"tl_name":"past_top" , "new_name":"past_top" , "attr":{ "context":"board", "type":"solder_paste" }},
 		{"tl_name":"silk_top" , "new_name":"silk_top" , "attr":{ "context":"board", "type":"silk_screen" }},
 		{"tl_name":"sm_top" , "new_name":"sm_top" , "attr":{ "context":"board", "type":"solder_mask" }},
 		{"tl_name":"^top$" , "new_name":"top" , "attr":{ "context":"board", "type":"signal" }},
-		{"tl_name":"l_(\\d+)","new_name":"layer_($1)" ,"attr":{"context":"board","type":"signal"}},
+		{"tl_name":"l_(\\d+)","new_name":"l($1)" ,"attr":{"context":"board","type":"signal"}},
 		{"tl_name":"^bottom$","new_name":"bottom" ,"attr":{"context":"board","type":"signal"}},
 		{"tl_name":"sm_botm" , "new_name":"sm_botm" , "attr":{ "context":"board", "type":"solder_mask" }},
 		{"tl_name":"silk_bot" , "new_name":"silk_bot" , "attr":{ "context":"board", "type":"silk_screen" }},
 		{"tl_name":"past_botm" , "new_name":"past_botm" , "attr":{ "context":"board", "type":"solder_paste" }},
-		{"tl_name":"bot_enig" , "new_name":"bot_enig" , "attr":{ "context":"board", "type":"document" }},
-		{"tl_name":"d_(\\d+)-(\\d+)","new_name":"d($1)-($2)" ,"attr":{"context":"board","type":"drill"}},
-		{"tl_name":"drill","new_name":"drill" ,"attr":{"context":"board","type":"drill"}},
+		{"tl_name":"enig_bot" , "new_name":"enig_bot" , "attr":{ "context":"board", "type":"document" }},
+		{"tl_name":"d_(\\d+)-(\\d+)","new_name":"ftdrill($1)-($2)l" ,"attr":{"context":"board","type":"drill"}},
+		{"tl_name":"drill","new_name":"ftdrill" ,"attr":{"context":"board","type":"drill"}},
 		{"tl_name":"rout","new_name":"rout" ,"attr":{"context":"board","type":"rout"}},
 		{"tl_name":"outline","new_name":"outline" ,"attr":{"context":"board","type":"rout"}},
 		{"tl_name":"array","new_name":"array" ,"attr":{"context":"misc"}},
diff --git a/test/mytest.js b/test/mytest.js
index 1abd2666b8e4e3f3c77d27f9af118e57fbe56cbd..8898a24562e955e6410444d0395ce11f01f85f1f 100644
--- a/test/mytest.js
+++ b/test/mytest.js
@@ -16,7 +16,7 @@ try {
     var layer = "l3"
     
     GEN.copyLayer({source_job:job, source_step:step,source_layer:"gko",dest_layer:"gko_tmp"})
-
+    GEN.selectByFilter({profile:"in"})
     return "Done"
 } catch (e) {
 	IKM.msg(e)