Print

Print


Author: [log in to unmask]
Date: Mon Feb 16 16:31:27 2015
New Revision: 2157

Log:
Another update for reading trigger configuration from EVIO (ecal-readout-sim/triggerbank/TriggerConfig).  Full functionality on 2014 data is going to require another JEVIO mod.

Modified:
    java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/TriggerConfig.java
    java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.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	Mon Feb 16 16:31:27 2015
@@ -6,38 +6,56 @@
 import java.util.List;
 import java.util.Map;
 
+import org.hps.conditions.database.TableConstants;
+import org.hps.conditions.ecal.EcalChannel;
+import org.hps.conditions.ecal.EcalConditions;
+import org.lcsim.conditions.ConditionsManager;
+
 public class TriggerConfig {
 
     /*
      * Read/Parse/Save the DAQ trigger configuration settings.
+     *
+     * A hack in progress.
      * 
-     * This is a work in progress, activate by uncommenting
-     * line 61 in LCSimEngRunEventBuilder.java
+     * 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: Error in EVIO format for Crate 39 for 2014 data requires another JEVIO workaround (realized Feb 16).
+     * TODO: Manually put in GTP settings based on run number for 2014 data.
+     * TODO: Manually deal with change in format of SSP_HPS_SINGLES_NMIN (at 3312(?)).
      *
-     * 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.
+     * TODO: This should probably be a Driver.
+     *
+     * TODO: Restructure, clean up..
      *  
-     *  NAB 2015/02/15
+     *  NAB 2015/02/16
      */
    
-    public static final int bankTag = 0xE10E;
-    
+    public static final int BANK_TAG = 0xE10E;
+  
+    // need to know these in order to interpret DAQ strings:
+    private static final int[] singlesIOsrc={20,21};
+    private static final int[] pairsIOsrc={22,23};
+  
 	// 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 not all the parameters available in the run configuration bank,
-	// just *most* of the ones needed for trigger studies:
-
-	// General Clustering Cut Values:
+  
+	// link ECAL FADC channel settings to EcalChannels:
+	public Map<EcalChannel,Float> GAIN=new HashMap<EcalChannel,Float>();
+	public Map<EcalChannel,Float> PEDESTAL=new HashMap<EcalChannel,Float>();
+	public Map<EcalChannel,Integer> THRESHOLD=new HashMap<EcalChannel,Integer>();
+	
+	private boolean debug=false;//true;
+
+	// FADC Config:
+	public int fadcNSA=0;
+	public int fadcNSB=0;
+	public int fadcNPEAK=0;
+	public int fadcMODE=0;
+	public int fadcWIDTH=0;
+	public int fadcOFFSET=0;
+
+	// GTP Clustering Cut Values:
 	public int clusterMinSeedEnergy=0;
 	public int clusterMinHitTimeDiff=0;
 	public int clusterMaxHitTimeDiff=0;
@@ -65,6 +83,8 @@
 	public int[] singlesEnergyMax={0,0};
 	
 	// Pairs Cut Values:
+	public int[] pairsEnergyMin={0,0};
+	public int[] pairsEnergyMax={0,0};
 	public int[] pairsEnergySumMin={0,0};
 	public int[] pairsEnergySumMax={0,0};
 	public int[] pairsEnergyDiffMax={0,0};
@@ -75,71 +95,131 @@
 	// Pairs Cut Parameters:
 	public float[] pairsEnergyDistSlope={0,0};
 
-    public TriggerConfig(int runNumber,String[] dump) {
-
-    	loadConfigMap(dump);
-    	
+	// Have to remember the previous slot line in order to interpret the data:
+	private int thisFadcSlot=0;
+
+	// Cache local set of EcalChannels:
+    private EcalConditions ecalConditions = null;
+    private List<EcalChannel> channels=new ArrayList<EcalChannel>();
+    
+    public TriggerConfig() {
+        ecalConditions = ConditionsManager
+                .defaultInstance()
+                .getCachedConditions(EcalConditions.class,
+                        TableConstants.ECAL_CONDITIONS).getCachedData();
+        for (int ii = 0; ii < 442; ii++) {
+            channels.add(findChannel(ii+1));
+        } 
+	}
+    
+    public void parse(int crate,int runNumber,String[] dump) {
+        loadConfigMap(crate,dump); 
     	if (debug) printMap();
+        fixConfigMap2014Run(runNumber);
+        parseConfigMap();
+        // don't do this here, need to wait on more banks:
+        //if (debug) printVars();
+    }
+
+    public void parseConfigMap()
+    {
+//        System.err.println("PARSECONFIGMAP ..................");
+       
+        fadcNSA=Integer.valueOf(getConfig("FADC250_NSA",0));
+        fadcNSB=Integer.valueOf(getConfig("FADC250_NSB",0));
+        fadcNPEAK=Integer.valueOf(getConfig("FADC250_NPEAK",0));
+        fadcMODE=Integer.valueOf(getConfig("FADC250_MODE",0));
+        fadcWIDTH=Integer.valueOf(getConfig("FADC250_W_WIDTH",0));
+        fadcOFFSET=Integer.valueOf(getConfig("FADC250_W_OFFSET",0));
         
-        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);
+            //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);
-
+            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);
+            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);
+
+            pairsEnergyMin[ii]=getIntConfigSSP(ii,"PAIRS_EMIN",0);
+            pairsEnergyMax[ii]=getIntConfigSSP(ii,"PAIRS_EMAX",0);
             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
-        }
+            pairsEnergySumMax[ii]=getIntConfigSSP(ii,"PAIRS_SUMMAX_MIN",0);
+            pairsEnergyDiffMax[ii]=getIntConfigSSP(ii,"PAIRS_DIFFMAX",0);
+            pairsCoplanarityMax[ii]=getIntConfigSSP(ii,"PAIRS_COPLANARITY",0);
+            pairsTimeDiffMax[ii]=getIntConfigSSP(ii,"PAIRS_TIMECOINCIDENCE",0);
+            pairsEnergyDistSlope[ii]=getFloatConfigSSP(ii,"PAIRS_ENERGYDIST",0);
+            pairsEnergyDistMin[ii]=getIntConfigSSP(ii,"PAIRS_ENERGYDIST",1);
+        }
+//        System.err.println("DONE PARSECONFIGMAP.");
     }
     
    
       
-    public void fixConfigMap2014Run(int runNumber) {
+    private void fixConfigMap2014Run(int runNumber) {
         if (runNumber>3470 || runNumber < 3100) return;
      	// TODO: port datacat/python/engrun/engrun_metadata.py
+        // 1. SET GTP SETTINGS MANUALLY BASED ON RUN NUMBER
+        // 2. FIX SINGLES_NMIN prior to 3312
     	for (String key : configMap.keySet()) {
     	}
     	List<String> tmp=new ArrayList<String>();
     	tmp.add("0");
+    	tmp.add("0");
+    	tmp.add("0");
+    	tmp.add("0");
     	configMap.put("GTP_CLUSTER_THRESH",tmp);
-    	tmp.add("0");
     	configMap.put("GTP_TIMEDIFF",tmp);
     }
     
-    private void loadConfigMap(String[] dump) {
-    
+    private void parseFADC(int crate,String key,List<String> vals)
+    {
+//        System.err.println(crate);
+        if (key.equals("FADC250_SLOT")) {
+            thisFadcSlot=Integer.valueOf(vals.get(0));
+        }
+        else if (key.equals("FADC250_ALLCH_TET")) {
+            setChannelParsInt(crate,thisFadcSlot,THRESHOLD,vals);
+        }
+        else if (key.equals("FADC250_ALLCH_PED")) {
+            setChannelParsFloat(crate,thisFadcSlot,PEDESTAL,vals);    
+        }
+        else if (key.equals("FADC250_ALLCH_GAIN")) {
+            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++) {
+            map.put(findChannel(crate,slot,ii),Float.valueOf(vals.get(ii)));
+        }
+    }
+    private void setChannelParsInt(int crate,int slot,Map<EcalChannel,Integer>map, List<String> vals)
+    {
+        for (int ii=0; ii<16; ii++) {
+            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")) {
 
@@ -150,22 +230,28 @@
                 List<String> vals=new ArrayList<String>
                     (Arrays.asList(cols[1].trim().split(" +")));
 
-                // This should never happen:
                 if (vals.size() < 1) {
                 	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;
+                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)
+                if (vals.size() > 1 && key.startsWith("SSP"))
                 {
                     key += "_"+vals.remove(0);
                 }
@@ -177,49 +263,75 @@
     }
     
     public void printMap() {
-        System.out.print("TriggerConfig:  ");
+        System.err.print("\nTriggerConfigMap::::::::::::::::::::::::::::\n");
         for (String key : configMap.keySet()) {
-            System.out.printf("%s ",key);
+            System.err.printf("%s: ",key);
             for (String val : configMap.get(key)) {
-                System.out.printf("%s ",val);
-            }
-            System.out.printf("\n");
-        }
+                System.err.printf("%s ",val);
+            }
+            System.err.printf("\n");
+        }
+        System.err.println("::::::::::::::::::::::::::::::::::::::::::::");
     }
 
     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));
+        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));
+        for (EcalChannel cc : ecalConditions.getChannelCollection()) {
+            System.err.print(String.format("SLOT%d CHAN%d --",cc.getSlot(),cc.getChannel()));
+            if (!PEDESTAL.containsKey(cc)) {
+                System.err.println("\nP !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+            }
+            if (!THRESHOLD.containsKey(cc)) {
+                System.err.println("\nT !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+            }
+            if (!GAIN.containsKey(cc)) {
+                System.err.println("\nG !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+            }
+            System.err.println(String.format(" %f %d %f",
+                    PEDESTAL.get(cc),THRESHOLD.get(cc),GAIN.get(cc)));
+        }
+	    System.err.println();
 	    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.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("SSPSINGLESNHITSEN %d %b:  ",ii,singlesNhitsEn[ii]));
-	        System.out.println(String.format("",ii,singlesEnergyMinEn[ii]));
-	        System.out.println(String.format("",ii,singlesEnergyMaxEn[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("",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.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("",ii,singlesNhits[ii]));
-	        System.out.println(String.format("",ii,singlesEnergyMin[ii]));
-	        System.out.println(String.format("",ii,singlesEnergyMax[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("",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]));
+	        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.err.println("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%");
 	}
   
     public float getFloatConfigSSP(int itrig,String stub,int ival) {
@@ -231,7 +343,7 @@
     }
 
     public boolean getBoolConfigSSP(int itrig,String stub,int ival) {
-        return Boolean.valueOf(getConfigSSP(itrig,stub,ival));
+        return "1".equals(getConfigSSP(itrig,stub,ival));
     }
 
     public String getConfigSSP(int itrig,String stub,int ival) {
@@ -246,11 +358,29 @@
             	return configMap.get(key).get(ival);
         	} else {
         		System.err.println("configMap too short:  "+ival+configMap.get(key));
-        		return null;
+        		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);
-        	return null;
-        }
-    }
-}
+        	return "0";
+        }
+    }
+
+    public EcalChannel findChannel(int crate,int fadcSlot,int fadcChan)
+    {
+        for (EcalChannel cc : channels) {
+            // EcalChannel follows different convention on crate numbering:
+            if ((cc.getCrate()-1)*2 == crate-37 && 
+                cc.getSlot() == fadcSlot && cc.getChannel() == fadcChan)
+            {
+                return cc;
+            }
+        }
+        return null;
+    }
+    public EcalChannel findChannel(int channel_id) {
+        return ecalConditions.getChannelCollection().findChannel(channel_id);
+    }
+} 

Modified: java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java
 =============================================================================
--- java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java	(original)
+++ java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java	Mon Feb 16 16:31:27 2015
@@ -56,7 +56,7 @@
 
         // Create a new LCSimEvent.
         EventHeader lcsimEvent = getEventData(evioEvent);
-      
+     
         // Put DAQ Configuration info into lcsimEvent (NAB Feb 5, 2015):
         //getDAQConfig(evioEvent,lcsimEvent);
         
@@ -78,19 +78,27 @@
         return lcsimEvent;
     }
 
-    // NAB Feb 5, 2015: 
+    // NAB Feb 16, 2015:
     public void getDAQConfig(EvioEvent evioEvent, EventHeader lcsimEvent) {
         List <TriggerConfig> trigconf=new ArrayList<TriggerConfig>();
         for (BaseStructure bank : evioEvent.getChildrenList()) {
             if (bank.getChildCount()<=0) continue;
+            int crate=bank.getHeader().getTag();
             for (BaseStructure subBank : bank.getChildrenList()) {
-                if (subBank.getHeader().getTag() == 0xE10E) {
-                    if (subBank.getStringData() == null) continue; // unfortunately necessary
-                    trigconf.add(new TriggerConfig(lcsimEvent.getRunNumber(),subBank.getStringData()));
+                if (subBank.getHeader().getTag() == TriggerConfig.BANK_TAG) {
+                    //System.err.println("000000000000000000000000  "+crate);
+                    if (subBank.getStringData() == null) continue; // FIXME: Due to Crate 39 EVIO Format Error
+                    //System.err.println("111111111111111111111111  "+crate);
+                    if (trigconf.size()==0) trigconf.add(new TriggerConfig());
+                    trigconf.get(0).parse(crate,lcsimEvent.getRunNumber(),subBank.getStringData());
+//                    trigconf.add(new TriggerConfig(lcsimEvent.getRunNumber(),subBank.getStringData()));
                 }
             }
         }
-        lcsimEvent.put("TriggerConfig",trigconf,TriggerConfig.class,0);
+        if (trigconf.size()>0) {
+            //trigconf.get(0).printVars();
+            lcsimEvent.put("TriggerConfig",trigconf,TriggerConfig.class,0);
+        };
     }        
         
 }