Print

Print


Author: [log in to unmask]
Date: Thu Mar  5 06:37:24 2015
New Revision: 2253

Log:
TriggerConfig update/bugfix.

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

Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/TriggerConfig.java
 =============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/TriggerConfig.java	(original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/daqconfig/TriggerConfig.java	Thu Mar  5 06:37:24 2015
@@ -5,6 +5,8 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 import org.hps.conditions.database.DatabaseConditionsManager;
 import org.hps.conditions.ecal.EcalChannel;
@@ -74,12 +76,10 @@
 	public boolean[] singlesEnergyMaxEn={false,false};
 	
 	// Pairs Cuts Enabled:
-	public boolean[] pairsEnergySumMinEn={false,false};
-	public boolean[] pairsEnergySumMaxEn={false,false};
+	public boolean[] pairsEnergySumMaxMinEn={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:
 	public int[] singlesNhits={0,0};
@@ -87,6 +87,7 @@
 	public int[] singlesEnergyMax={0,0};
 	
 	// Pairs Cut Values:
+	public int[] pairsNhitsMin={0,0};
 	public int[] pairsEnergyMin={0,0};
 	public int[] pairsEnergyMax={0,0};
 	public int[] pairsEnergySumMin={0,0};
@@ -122,12 +123,71 @@
         fixConfigMap2014Run(runNumber);
         parseConfigMap();
         
-        if (nBanks==3) printVars();
-    }
-
+        if (nBanks>2 && debug) printVars();
+    }
+
+    /*
+     * The first parsing routine.  Just dumps the config strings
+     * into a map whose keys are the first column in the config file.
+     * Also treats some special cases.
+     */
+    private void loadConfigMap(int crate,String[] dump) {
+  
+        for (String dump1 : dump) {
+            for (String line : dump1.trim().split("\n")) {
+
+                String[] cols=line.trim().split(" +",2);
+                if (cols.length < 2) continue;
+
+                String key=cols[0];
+                List<String> vals=new ArrayList<String>
+                    (Arrays.asList(cols[1].trim().split(" +")));
+
+                if (vals.size() < 1) {
+                	continue;
+                }
+               
+                // SPECIAL CASE:
+                // parse the 16+1 column slot configurations. 
+                if (key.startsWith("FADC250")) {
+                    parseFADC(crate,key.trim(),vals);
+                }
+                
+                // SPECIAL CASE:
+                // figure out which triggers are enabled:
+                else if (key.startsWith("SSP_HPS_SET_IO_SRC")) {
+                    int trig = Integer.valueOf(vals.get(1));
+                    for (int ii=0; ii<pairsIOsrc.length; ii++)
+                    {
+                        if (trig == singlesIOsrc[ii]) {
+                            singlesEn[ii]=true;
+                        }
+                        else if (trig == pairsIOsrc[ii]) {
+                            pairsEn[ii]=true;
+                        }
+                    }
+                }
+               
+                // GENERAL CASE:
+                // Append trigger# onto key:
+                if (vals.size() > 1 && key.startsWith("SSP"))
+                {
+                    key += "_"+vals.remove(0);
+                }
+                // dump it into the map:
+                configMap.put(key,vals);
+            }
+        }
+    }
+    /*
+     * This function parses the config map for the cases where the
+     * config string has a simple format:
+     * TAG VALUE
+     * TAG TRIGGER VALUES
+     */
     public void parseConfigMap()
     {
-//        System.err.println("PARSECONFIGMAP ..................");
+//        System.out.println("PARSECONFIGMAP ..................");
        
         fadcNSA=Integer.valueOf(getConfig("FADC250_NSA",0));
         fadcNSB=Integer.valueOf(getConfig("FADC250_NSB",0));
@@ -141,26 +201,21 @@
         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_NMIN",1);
             singlesEnergyMinEn[ii]=getBoolConfigSSP(ii,"SINGLES_EMIN",1);
             singlesEnergyMaxEn[ii]=getBoolConfigSSP(ii,"SINGLES_EMAX",1);
 
-            pairsEnergySumMinEn[ii]=getBoolConfigSSP(ii,"PAIRS_SUMMAX_MIN",2);
-            pairsEnergySumMaxEn[ii]=getBoolConfigSSP(ii,"PAIRS_SUMMAX_MIN",2);
+            pairsEnergySumMaxMinEn[ii]=getBoolConfigSSP(ii,"PAIRS_SUMMAX_MIN",2);
             pairsEnergyDiffEn[ii]=getBoolConfigSSP(ii,"PAIRS_DIFFMAX",1);
             pairsCoplanarityEn[ii]=getBoolConfigSSP(ii,"PAIRS_COPLANARITY",1);
             pairsEnergyDistEn[ii]=getBoolConfigSSP(ii,"PAIRS_ENERGYDIST",1);
-            //pairsTimeDiffEn[ii]=getBoolConfigSSP(ii,"PAIRS_TIMECOINCIDENCE",0);
-            //pairsEnergyMin[ii]=getIntConfigSSP(ii,"PAIRS_EMIN",0);
-            //pairsEnergyMax[ii]=getIntConfigSSP(ii,"PAIRS_EMAX",0);
 
             singlesNhits[ii]=getIntConfigSSP(ii,"SINGLES_NMIN",0);
             singlesEnergyMin[ii]=getIntConfigSSP(ii,"SINGLES_EMIN",0);
             singlesEnergyMax[ii]=getIntConfigSSP(ii,"SINGLES_EMAX",0);
 
+            pairsNhitsMin[ii]=getIntConfigSSP(ii,"PAIRS_NMIN",0);
             pairsEnergyMin[ii]=getIntConfigSSP(ii,"PAIRS_EMIN",0);
             pairsEnergyMax[ii]=getIntConfigSSP(ii,"PAIRS_EMAX",0);
             pairsEnergySumMin[ii]=getIntConfigSSP(ii,"PAIRS_SUMMAX_MIN",1);
@@ -171,11 +226,16 @@
             pairsEnergyDistSlope[ii]=getFloatConfigSSP(ii,"PAIRS_ENERGYDIST",0);
             pairsEnergyDistMin[ii]=getIntConfigSSP(ii,"PAIRS_ENERGYDIST",1);
         }
-//        System.err.println("DONE PARSECONFIGMAP.");
+//        System.out.println("DONE PARSECONFIGMAP.");
     }
     
    
-      
+     
+    /*
+     * UNFINISHED.
+     * This is a fixer-upper for before we had the full config in EVIO
+     * or when there was a bug in it.
+     */
     private void fixConfigMap2014Run(int runNumber) {
         if (runNumber>3470 || runNumber < 3100) return;
      	// TODO: port datacat/python/engrun/engrun_metadata.py
@@ -192,9 +252,16 @@
     	configMap.put("GTP_TIMEDIFF",tmp);
     }
     
+    
+    
+    /*
+     * These treat the FADC config lines with 16+1 columns.
+     * Must keep track of most recent FADC250_SLOT tag, since it's
+     * not on the line with the data. 
+     */
     private void parseFADC(int crate,String key,List<String> vals)
     {
-//        System.err.println(crate);
+//        System.out.println(crate);
         if (key.equals("FADC250_SLOT")) {
             thisFadcSlot=Integer.valueOf(vals.get(0));
         }
@@ -208,7 +275,6 @@
             setChannelParsFloat(crate,thisFadcSlot,GAIN,vals);
         }
     }
-   
     private void setChannelParsFloat(int crate,int slot,Map<EcalChannel,Float>map, List<String> vals)
     {
         for (int ii=0; ii<16; ii++) {
@@ -221,157 +287,120 @@
             map.put(findChannel(crate,slot,ii),Integer.valueOf(vals.get(ii)));
         }
     }
-    
-    private void loadConfigMap(int crate,String[] dump) {
-  
-        for (String dump1 : dump) {
-            for (String line : dump1.trim().split("\n")) {
-
-                String[] cols=line.trim().split(" +",2);
-                if (cols.length < 2) continue;
-
-                String key=cols[0];
-                List<String> vals=new ArrayList<String>
-                    (Arrays.asList(cols[1].trim().split(" +")));
-
-                if (vals.size() < 1) {
-                	continue;
-                }
-                
-                if (key.startsWith("FADC250")) {
-                    parseFADC(crate,key.trim(),vals);
-                }
-                else if (key.startsWith("SSP_HPS_SET_IO_SRC")) {
-                    for (int ii=0; ii<pairsIOsrc.length; ii++)
-                    {
-                        int trig = Integer.valueOf(vals.get(1));
-                        if (trig == singlesIOsrc[ii]) {
-                            singlesEn[ii]=true;
-                        }
-                        else if (trig == pairsIOsrc[ii]) {
-                            pairsEn[ii]=true;
-                        }
-                    }
-                }
-                
-                // Append trigger# onto key:
-                if (vals.size() > 1 && key.startsWith("SSP"))
-                {
-                    key += "_"+vals.remove(0);
-                }
-               
-                // dump it into the map:
-                configMap.put(key,vals);
-            }
-        }
-    }
+   
+    
+    
     
     public void printMap() {
-        System.err.print("\nTriggerConfigMap::::::::::::::::::::::::::::\n");
+        System.out.print("\nTriggerConfigMap::::::::::::::::::::::::::::\n");
         for (String key : configMap.keySet()) {
-            System.err.printf("%s: ",key);
+            System.out.printf("%s: ",key);
             for (String val : configMap.get(key)) {
-                System.err.printf("%s ",val);
-            }
-            System.err.printf("\n");
-        }
-        System.err.println("::::::::::::::::::::::::::::::::::::::::::::");
+                System.out.printf("%s ",val);
+            }
+            System.out.printf("\n");
+        }
+        System.out.println("::::::::::::::::::::::::::::::::::::::::::::");
     }
 
     public void printVars()
 	{
-        System.err.println("\nTriggerConfigVars%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%");
-        System.err.println();
-	    System.err.println(String.format("GTPMINSEED: %d",clusterMinSeedEnergy));
-	    System.err.println(String.format("GTPMINHITDT: %d",clusterMinHitTimeDiff));
-	    System.err.println(String.format("GTPMAXHITDT: %d",clusterMaxHitTimeDiff));
-	    System.err.println();
-	    System.err.println(String.format("FADC250_NSA: %d",fadcNSA));
-	    System.err.println(String.format("FADC250_NSB: %d",fadcNSB));
-	    System.err.println(String.format("FADC250_NPEAK: %d",fadcNPEAK));
-	    System.err.println(String.format("FADC250_MODE: %d",fadcMODE));
-	    System.err.println(String.format("FADC250_WIDTH: %d",fadcWIDTH));
-	    System.err.println(String.format("FADC250_OFFSET: %d",fadcOFFSET));
+        System.out.println("\nTriggerConfigVars%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%");
+        System.out.println();
+	    System.out.println(String.format("GTPMINSEED: %d",clusterMinSeedEnergy));
+	    System.out.println(String.format("GTPMINHITDT: %d",clusterMinHitTimeDiff));
+	    System.out.println(String.format("GTPMAXHITDT: %d",clusterMaxHitTimeDiff));
+	    System.out.println();
+	    System.out.println(String.format("FADC250_NSA: %d",fadcNSA));
+	    System.out.println(String.format("FADC250_NSB: %d",fadcNSB));
+	    System.out.println(String.format("FADC250_NPEAK: %d",fadcNPEAK));
+	    System.out.println(String.format("FADC250_MODE: %d",fadcMODE));
+	    System.out.println(String.format("FADC250_WIDTH: %d",fadcWIDTH));
+	    System.out.println(String.format("FADC250_OFFSET: %d",fadcOFFSET));
         for (EcalChannel cc : ecalConditions.getChannelCollection()) {
-            //System.err.print(String.format("SLOT%d CHAN%d --",cc.getSlot(),cc.getChannel()));
+            //System.out.print(String.format("SLOT%d CHAN%d --",cc.getSlot(),cc.getChannel()));
             if (!PEDESTAL.containsKey(cc)) {
-                System.err.println("\nP !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+                System.out.println("\nP !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
             }
             if (!THRESHOLD.containsKey(cc)) {
-                System.err.println("\nT !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+                System.out.println("\nT !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
             }
             if (!GAIN.containsKey(cc)) {
-                System.err.println("\nG !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
-            }
-            //System.err.println(String.format(" %f %d %f",
+                System.out.println("\nG !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+            }
+            //System.out.println(String.format(" %f %d %f",
             //        PEDESTAL.get(cc),THRESHOLD.get(cc),GAIN.get(cc)));
         }
-	    System.err.println();
+	    System.out.println();
 	    for (int ii=0; ii<2; ii++)
 	    {
-	        System.err.println(String.format("SINGLESEN-%d: %b ",ii,singlesEn[ii]));
-	        System.err.println(String.format("PAIRSEN-%d: %b: ",ii,pairsEn[ii]));
+	        System.out.println(String.format("SINGLES_EN %d %b ",ii,singlesEn[ii]));
+	        System.out.println(String.format("PAIRS_EN %d %b ",ii,pairsEn[ii]));
 	        
-	        System.err.println(String.format("SINGLESNHITSEN %d %b:  ",ii,singlesNhitsEn[ii]));
-	        System.err.println(String.format("SINGLESEMINEN %d %b",ii,singlesEnergyMinEn[ii]));
-	        System.err.println(String.format("SINGLESEMAXEN %d %b",ii,singlesEnergyMaxEn[ii]));
+	        System.out.println(String.format("SINGLES_NHITS_EN %d %b:  ",ii,singlesNhitsEn[ii]));
+	        System.out.println(String.format("SINGLES_EMIN_EN %d %b",ii,singlesEnergyMinEn[ii]));
+	        System.out.println(String.format("SINGLES_EMAX_EN %d %b",ii,singlesEnergyMaxEn[ii]));
 	        
-	        System.err.println(String.format("PAIRSSUMMINEN %d %b",ii,pairsEnergySumMinEn[ii]));
-	        System.err.println(String.format("PAIRSSUMMAXEN %d %b",ii,pairsEnergySumMaxEn[ii]));
-	        System.err.println(String.format("PAIRSENERGYDIFFEN %d %b",ii,pairsEnergyDiffEn[ii]));
-	        System.err.println(String.format("PAIRSCOPEN %d %b",ii,pairsCoplanarityEn[ii]));
-	        System.err.println(String.format("PAIRSEDISTEN %d %b",ii,pairsEnergyDistEn[ii]));
-	        System.err.println(String.format("PAIRSTIMEDIFFEN %d %b",ii,pairsTimeDiffEn[ii]));
+	        System.out.println(String.format("PAIRS_SUMMAXMIN_EN %d %b",ii,pairsEnergySumMaxMinEn[ii]));
+	        System.out.println(String.format("PAIRS_ENERGYDIFF_EN %d %b",ii,pairsEnergyDiffEn[ii]));
+	        System.out.println(String.format("PAIRS_COP_EN %d %b",ii,pairsCoplanarityEn[ii]));
+	        System.out.println(String.format("PAIRS_EDIST_EN %d %b",ii,pairsEnergyDistEn[ii]));
 	        
-	        System.err.println(String.format("SINGLESNHTIS %d %d",ii,singlesNhits[ii]));
-	        System.err.println(String.format("SINGLESEMIN %d %d",ii,singlesEnergyMin[ii]));
-	        System.err.println(String.format("SINGLESEMAX %d %d",ii,singlesEnergyMax[ii]));
+	        System.out.println(String.format("SINGLES_NHTIS %d %d",ii,singlesNhits[ii]));
+	        System.out.println(String.format("SINGLES_EMIN %d %d",ii,singlesEnergyMin[ii]));
+	        System.out.println(String.format("SINGLES_EMAX %d %d",ii,singlesEnergyMax[ii]));
 	        
-	        System.err.println(String.format("PAIRSSUMMIN %d %d",ii,pairsEnergySumMin[ii]));
-	        System.err.println(String.format("PRISSUMMAX %d %d",ii,pairsEnergySumMax[ii]));
-	        System.err.println(String.format("PAIRSENERGYDIFF %d %d",ii,pairsEnergyDiffMax[ii]));
-	        System.err.println(String.format("PAIRSCOPMAX %d %d",ii,pairsCoplanarityMax[ii]));
-	        System.err.println(String.format("PAIRSTDIFFMAAX %d %d",ii,pairsTimeDiffMax[ii]));
-	        System.err.println(String.format("PAIRSEDISTMIN %d %d",ii,pairsEnergyDistMin[ii]));
-	        System.err.println(String.format("PAIRSEDISTSLOP %d %f",ii,pairsEnergyDistSlope[ii]));
+	        System.out.println(String.format("PAIRS_NHITS %d %d",ii,pairsNhitsMin[ii]));
+	        System.out.println(String.format("PAIRS_SUMMIN %d %d",ii,pairsEnergySumMin[ii]));
+	        System.out.println(String.format("PAIRS_SUMMAX %d %d",ii,pairsEnergySumMax[ii]));
+	        System.out.println(String.format("PAIRS_ENERGYDIFF %d %d",ii,pairsEnergyDiffMax[ii]));
+	        System.out.println(String.format("PAIRS_COPMAX %d %d",ii,pairsCoplanarityMax[ii]));
+	        System.out.println(String.format("PAIRS_TDIFFMAAX %d %d",ii,pairsTimeDiffMax[ii]));
+	        System.out.println(String.format("PAIRS_EDISTMIN %d %d",ii,pairsEnergyDistMin[ii]));
+	        System.out.println(String.format("PAIRS_EDISTSLOP %d %f",ii,pairsEnergyDistSlope[ii]));
 	    }
-	    System.err.println("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%");
+	    System.out.println("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%");
 	}
   
+    
+    
+    /*
+     * Parsing wrappers to make rest of code easier.
+     */
     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 "1".equals(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));
+        	    Logger.getLogger(this.getClass().getName()).log(Level.SEVERE,
+        	            "ConfigMap TOO SHORT:   "+ival+" "+configMap.get(key));
         		return "0";
         	}
         } else {
-            // this is not an error, we have to wait on 3 banks.
-            // leave here for now.
-        	System.err.println("configMap missing key:  "+key);
+            // this is only necessarily an error if we've read 3 banks:
+            if (nBanks>2) {
+            	Logger.getLogger(this.getClass().getName()).log(Level.SEVERE,
+        	         "ConfigMap MISSING KEY:   "+key);
+            }
         	return "0";
         }
     }
 
+    
     public EcalChannel findChannel(int crate,int fadcSlot,int fadcChan)
     {
         for (EcalChannel cc : channels) {