Print

Print


Author: [log in to unmask]
Date: Sun Feb 15 18:51:54 2015
New Revision: 2154

Log:
incremental update on TriggerConfig parser

Modified:
    java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/TriggerConfig.java

Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/TriggerConfig.java
 =============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/TriggerConfig.java	(original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/TriggerConfig.java	Sun Feb 15 18:51:54 2015
@@ -8,76 +8,134 @@
 
 public class TriggerConfig {
 
+    /*
+     * Read/Parse/Save the DAQ trigger configuration settings.
+     * 
+     * This is a work in progress, activate by uncommenting
+     * line 61 in LCSimEngRunEventBuilder.java
+     *
+     * Maybe should store all the parameters in another
+     * map after parsing for direct access to minimize code,
+     * instead of all these variables. 
+     *
+     * TODO: convert SET_IO_SRC to trigger enabled bits
+     * TODO: Test and Debug
+     * TODO: port datacat/python/engrun/engrun_metadata.py in fixConfigMap2014Run
+     * TODO: Parse and save threhsolds.
+     * TODO: Get NSA and NSB to remove hardcoded window in EcalRawConverter.
+     *  
+     *  NAB 2015/02/15
+     */
+   
+    public static final int bankTag = 0xE10E;
+    
+	// Dump everything read from the DAQ Configuration Bank, minimal interpretation:
+	public Map<String,List<String>> configMap=new HashMap<String,List<String>>();
+    
 	private boolean debug=true;
 
-	// These are the configs we need to know for trigger studies:
-	
+	// These are not all the parameters available in the run configuration bank,
+	// just *most* of the ones needed for trigger studies:
+
 	// General Clustering Cut Values:
-	private int clusterMinSeedEnergy=0;
-	private int clusterMinHitTimeDiff=0;
-	private int clusterMaxHitTimeDiff=0;
+	public int clusterMinSeedEnergy=0;
+	public int clusterMinHitTimeDiff=0;
+	public int clusterMaxHitTimeDiff=0;
 	
 	// Triggers Enabled:
-	private boolean[] singlesEn={false,false};
-	private boolean[] pairsEn={false,false};
+	public boolean[] singlesEn={false,false};
+	public boolean[] pairsEn={false,false};
 
 	// Singles Cuts Enabled:
-	private boolean[] singlesNHitsEn={false,false};
-	private boolean[] singlesEnergyEn={false,false};
+	public boolean[] singlesNhitsEn={false,false};
+	public boolean[] singlesEnergyMinEn={false,false};
+	public boolean[] singlesEnergyMaxEn={false,false};
 	
 	// Pairs Cuts Enabled:
-	private boolean[] pairsEnergySumMinEn={false,false};
-	private boolean[] pairsEnergySumMaxEn={false,false};
-	private boolean[] pairsEnergyDiffEn={false,false};
-	private boolean[] pairsCoplanarityEn={false,false};
-	private boolean[] pairsEnergyDistEn={false,false};
-	private boolean[] pairsTimeDiffEn={false,false};
+	public boolean[] pairsEnergySumMinEn={false,false};
+	public boolean[] pairsEnergySumMaxEn={false,false};
+	public boolean[] pairsEnergyDiffEn={false,false};
+	public boolean[] pairsCoplanarityEn={false,false};
+	public boolean[] pairsEnergyDistEn={false,false};
+	public boolean[] pairsTimeDiffEn={false,false};
 	
 	// Singles Cut Values:
-	private int[] singlesNhits={0,0};
-	private int[] singlesEnergyMin={0,0};
-	private int[] singlesEnergyMax={0,0};
+	public int[] singlesNhits={0,0};
+	public int[] singlesEnergyMin={0,0};
+	public int[] singlesEnergyMax={0,0};
 	
 	// Pairs Cut Values:
-	private int[] pairsEnergySumMin={0,0};
-	private int[] pairsEnergySumMax={0,0};
-	private int[] pairsEnergyDiffMax={0,0};
-	private int[] pairsCoplanarityMax={0,0};
-	private int[] pairsTimeDiffMax={0,0};
-	private int[] pairsEnergyDistMin={0,0};
+	public int[] pairsEnergySumMin={0,0};
+	public int[] pairsEnergySumMax={0,0};
+	public int[] pairsEnergyDiffMax={0,0};
+	public int[] pairsCoplanarityMax={0,0};
+	public int[] pairsTimeDiffMax={0,0};
+	public int[] pairsEnergyDistMin={0,0};
 	
 	// Pairs Cut Parameters:
-	private float[] pairsEnergyDistSlope={0,0};
-   
+	public float[] pairsEnergyDistSlope={0,0};
+
+    public TriggerConfig(int runNumber,String[] dump) {
+
+    	loadConfigMap(dump);
+    	
+    	if (debug) printMap();
+        
+        fixConfigMap2014Run(runNumber);
+        
+        parseConfigMap();
+        
+        if (debug) printVars();
+    }
+  
+
+    public void parseConfigMap()
+    {
+        clusterMinSeedEnergy=Integer.valueOf(getConfig("GTP_CLUSTER_THRESH",0));
+        clusterMinHitTimeDiff=Integer.valueOf(getConfig("GTP_TIMEDIFF",0));
+        clusterMaxHitTimeDiff=Integer.valueOf(getConfig("GTP_TIMEDIFF",1));
+        
+        for (int ii=0; ii<2; ii++) {
+            singlesEn[ii]=getBoolConfigSSP(ii,"SINGLES_EN",0);
+            pairsEn[ii]=getBoolConfigSSP(ii,"PAIRS_EN",0);
+            
+            singlesNhitsEn[ii]=getBoolConfigSSP(ii,"SINGLES_NHITS",0);
+            singlesEnergyMinEn[ii]=getBoolConfigSSP(ii,"SINGLES_EMIN",0);
+            singlesEnergyMaxEn[ii]=getBoolConfigSSP(ii,"SINGLES_EMAX",0);
+
+            pairsEnergySumMinEn[ii]=getBoolConfigSSP(ii,"PAIRS_SUMMAX_MIN",0);
+            pairsEnergySumMaxEn[ii]=getBoolConfigSSP(ii,"PAIRS_SUMMAX_MIN",0);
+            pairsEnergyDiffEn[ii]=getBoolConfigSSP(ii,"PAIRS_DIFFMAX",0);
+            pairsCoplanarityEn[ii]=getBoolConfigSSP(ii,"PAIRS_COPLANARITY",0);
+            pairsEnergyDistEn[ii]=getBoolConfigSSP(ii,"PAIRS_ENERGYDIST",0);
+            pairsTimeDiffEn[ii]=getBoolConfigSSP(ii,"PAIRS_TIMEDIFF",0);
+
+            singlesNhits[ii]=getIntConfigSSP(ii,"SINGLES_NHITS",1);
+            singlesEnergyMin[ii]=getIntConfigSSP(ii,"SINGLES_EMIN",1);
+            singlesEnergyMax[ii]=getIntConfigSSP(ii,"SINGLES_EMAX",1);
+
+            pairsEnergySumMin[ii]=getIntConfigSSP(ii,"PAIRS_SUMMAX_MIN",1);
+            pairsEnergySumMax[ii]=getIntConfigSSP(ii,"PAIRS_SUMMAX_MIN",2);
+            pairsEnergyDiffMax[ii]=getIntConfigSSP(ii,"PAIRS_DIFFMAX",1);
+            pairsCoplanarityMax[ii]=getIntConfigSSP(ii,"PAIRS_COPLANARITY",1);
+            pairsTimeDiffMax[ii]=getIntConfigSSP(ii,"PAIRS_TIMEDIFF",1);
+            pairsEnergyDistMin[ii]=getIntConfigSSP(ii,"PAIRS_ENERGYDIST",2);     // <!--- CHECK ME
+            pairsEnergyDistSlope[ii]=getFloatConfigSSP(ii,"PAIRS_ENERGYDIST",1); // <!--- CHECK ME
+        }
+    }
+    
    
       
-	// Dump everything read from the DAQ Configuration Bank, minimal interpretation:
-	public Map<String,List<String>> configMap=new HashMap<String,List<String>>();
-	
-    
-    public TriggerConfig(int runNumber,String[] dump) {
-
-    	loadConfigMap(dump);
-        
-    	if (runNumber < 3200) {
-        	// dne
-        } else if (runNumber < 3470 ) {
-        	parseConfigMap2014Run(runNumber);
-        } else {
-            parseConfigMap();
-        }
-        if (debug) print();
-    }
-  
-    public void parseConfigMap2014Run(int runNumber) {
+    public void fixConfigMap2014Run(int runNumber) {
+        if (runNumber>3470 || runNumber < 3100) return;
      	// TODO: port datacat/python/engrun/engrun_metadata.py
     	for (String key : configMap.keySet()) {
     	}
-    }
-    
-    public void parseConfigMap()
-    {
-    	
+    	List<String> tmp=new ArrayList<String>();
+    	tmp.add("0");
+    	configMap.put("GTP_CLUSTER_THRESH",tmp);
+    	tmp.add("0");
+    	configMap.put("GTP_TIMEDIFF",tmp);
     }
     
     private void loadConfigMap(String[] dump) {
@@ -97,7 +155,10 @@
                 	continue;
                 }
                 
+                // Pickup GTP case:
+                
                 // This should happen, but is only useful for FADC thresholds/pedestals:
+                // NOPE, Trigger studies are going to want to know all these.
                 if (vals.size() > 4) {
                     // TODO: put global threshold trick here
                     continue;
@@ -115,7 +176,7 @@
         }
     }
     
-    public void print() {
+    public void printMap() {
         System.out.print("TriggerConfig:  ");
         for (String key : configMap.keySet()) {
             System.out.printf("%s ",key);
@@ -125,47 +186,71 @@
             System.out.printf("\n");
         }
     }
-    
-    
-/*
-    // Should parse the map first to check for errors.
- 
-    public boolean getPairsEnergyDistEn(int itrig) {
-    	return Boolean.valueOf(configMap.get("SSP_HPS_ENERGYDIST_"+itrig).get(0));
-    }
-    public double getPairsEnergyDistSlope(int itrig) {
-        return Double.valueOf(configMap.get("SSP_HPS_ENERGYDIST_"+itrig).get(1));
-    }
-    public int getPairsEnergyDistCut(int itrig) {
-        return Integer.valueOf(configMap.get("SSP_HPS_ENERGYDIST_"+itrig).get(2));
-    }
-    
-    public boolean getPairsEnergySumMinEn(int itrig) {
-    	return Boolean.valueOf(configMap.get("SSP_HPS_EMIN_"+itrig).get(0));
-    }
-    public int getPairsEnergySumMin(int itrig) {
-    	return Integer.valueOf(configMap.get("SSP_HPS_EMIN_"+itrig).get(1));
-    }
-
-    public boolean getPairsEnergySumMaxEn(int itrig) {
-    	return Boolean.valueOf(configMap.get("SSP_HPS_EMAX_"+itrig).get(0));
-    }
-    public int getPairsEnergySumMax(int itrig) {
-    	return Integer.valueOf(configMap.get("SSP_HPS_EMAX_"+itrig).get(1));
-    }
-    
-    public boolean getPairsEnergyDiffEn(int itrig) {
-    	return Boolean.valueOf(configMap.get("SSP_HPS_DIFFMAX_"+itrig).get(0));
-    }
-    public int getPairsEnergyDiffMax(int itrig) {
-    	return Integer.valueOf(configMap.get("SSP_HPS_DIFFMAX_"+itrig).get(1));
-    }
-
-    public boolean getPairsCoplanarityEn(int itrig) {
-    	return Boolean.valueOf(configMap.get("SSP_HPS_COPLANARITY_"+itrig).get(0));
-    }
-    public int getPairsCoplanarity(int itrig) {
-    	return Integer.valueOf(configMap.get("SSP_HPS_COPLANARITY_"+itrig).get(1));
-    }
-*/
-}
+
+    public void printVars()
+	{
+	    System.out.println(String.format("GTPMINSEED: %d",clusterMinSeedEnergy));
+	    System.out.println(String.format("GTPMINHITDT: %d",clusterMinHitTimeDiff));
+	    System.out.println(String.format("GTPMAXHITDT: %d",clusterMaxHitTimeDiff));
+	    for (int ii=0; ii<2; ii++)
+	    {
+	        System.out.println(String.format("SSPSINGLESEN %d %b: ",ii,singlesEn[ii]));
+	        System.out.println(String.format("SSPSINGLESEN %d %b: ",ii,pairsEn[ii]));
+	        
+	        System.out.println(String.format("SSPSINGLESNHITSEN %d %b:  ",ii,singlesNhitsEn[ii]));
+	        System.out.println(String.format("",ii,singlesEnergyMinEn[ii]));
+	        System.out.println(String.format("",ii,singlesEnergyMaxEn[ii]));
+	        
+	        System.out.println(String.format("",ii,pairsEnergySumMinEn[ii]));
+	        System.out.println(String.format("",ii,pairsEnergySumMaxEn[ii]));
+	        System.out.println(String.format("",ii,pairsEnergyDiffEn[ii]));
+	        System.out.println(String.format("",ii,pairsCoplanarityEn[ii]));
+	        System.out.println(String.format("",ii,pairsEnergyDistEn[ii]));
+	        System.out.println(String.format("",ii,pairsTimeDiffEn[ii]));
+	        
+	        System.out.println(String.format("",ii,singlesNhits[ii]));
+	        System.out.println(String.format("",ii,singlesEnergyMin[ii]));
+	        System.out.println(String.format("",ii,singlesEnergyMax[ii]));
+	        
+	        System.out.println(String.format("",ii,pairsEnergySumMin[ii]));
+	        System.out.println(String.format("",ii,pairsEnergySumMax[ii]));
+	        System.out.println(String.format("",ii,pairsEnergyDiffMax[ii]));
+	        System.out.println(String.format("",ii,pairsCoplanarityMax[ii]));
+	        System.out.println(String.format("",ii,pairsTimeDiffMax[ii]));
+	        System.out.println(String.format("",ii,pairsEnergyDistMin[ii]));
+	        System.out.println(String.format("",ii,pairsEnergyDistSlope[ii]));
+	    }
+	}
+  
+    public float getFloatConfigSSP(int itrig,String stub,int ival) {
+        return Float.valueOf(getConfigSSP(itrig,stub,ival));
+    }
+
+    public int getIntConfigSSP(int itrig,String stub,int ival) {
+        return Integer.valueOf(getConfigSSP(itrig,stub,ival));
+    }
+
+    public boolean getBoolConfigSSP(int itrig,String stub,int ival) {
+        return Boolean.valueOf(getConfigSSP(itrig,stub,ival));
+    }
+
+    public String getConfigSSP(int itrig,String stub,int ival) {
+    	String key="SSP_HPS_"+stub+"_"+itrig;
+    	return getConfig(key,ival);
+    }
+    
+    public String getConfig(String key, int ival) {
+        if (configMap.containsKey(key)) {
+        	List<String> vals=configMap.get(key);
+        	if (ival<vals.size()) {
+            	return configMap.get(key).get(ival);
+        	} else {
+        		System.err.println("configMap too short:  "+ival+configMap.get(key));
+        		return null;
+        	}
+        } else {
+        	System.err.println("configMap missing key:  "+key);
+        	return null;
+        }
+    }
+}