LISTSERV mailing list manager LISTSERV 16.5

Help for HPS-SVN Archives


HPS-SVN Archives

HPS-SVN Archives


HPS-SVN@LISTSERV.SLAC.STANFORD.EDU


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

HPS-SVN Home

HPS-SVN Home

HPS-SVN  November 2015

HPS-SVN November 2015

Subject:

r3947 - in /java/branches/jeremy-dev: crawler/src/main/java/org/hps/crawler/ record-util/src/main/java/org/hps/record/epics/ record-util/src/main/java/org/hps/record/evio/ record-util/src/main/java/org/hps/record/triggerbank/

From:

[log in to unmask]

Reply-To:

Notification of commits to the hps svn repository <[log in to unmask]>

Date:

Tue, 10 Nov 2015 23:21:09 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (965 lines)

Author: [log in to unmask]
Date: Tue Nov 10 15:21:05 2015
New Revision: 3947

Log:
Updates and improvements to EVIO metadata reader; changes and cleanup to record-util module.

Added:
    java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/evio/EventTagMask.java
    java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/triggerbank/TriggerType.java
      - copied, changed from r3945, java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/evio/EventTagBitMask.java
Removed:
    java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/RunSummaryMap.java
    java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/evio/EventCountProcessor.java
    java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/evio/EventTagBitMask.java
Modified:
    java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/AidaMetadataReader.java
    java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/CrawlerFileUtilities.java
    java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/DatacatCrawler.java
    java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/DatacatUtilities.java
    java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/EvioMetadataReader.java
    java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/FileMetadataReader.java
    java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/FileSet.java
    java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/LcioMetadataReader.java
    java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/epics/EpicsData.java
    java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/epics/EpicsEvioProcessor.java
    java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/evio/EventTagConstant.java
    java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/evio/EvioBankTag.java

Modified: java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/AidaMetadataReader.java
 =============================================================================
--- java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/AidaMetadataReader.java	(original)
+++ java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/AidaMetadataReader.java	Tue Nov 10 15:21:05 2015
@@ -12,7 +12,7 @@
  *
  * @author Jeremy McCormick, SLAC
  */
-public class AidaMetadataReader implements FileMetadataReader {
+final class AidaMetadataReader implements FileMetadataReader {
 
     /**
      * Get the metadata for a ROOT DQM file.

Modified: java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/CrawlerFileUtilities.java
 =============================================================================
--- java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/CrawlerFileUtilities.java	(original)
+++ java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/CrawlerFileUtilities.java	Tue Nov 10 15:21:05 2015
@@ -7,7 +7,7 @@
  *
  * @author Jeremy McCormick, SLAC
  */
-public class CrawlerFileUtilities {
+final class CrawlerFileUtilities {
 
     /**
      * Get run number from file name assuming it looks like "hps_001234".

Modified: java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/DatacatCrawler.java
 =============================================================================
--- java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/DatacatCrawler.java	(original)
+++ java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/DatacatCrawler.java	Tue Nov 10 15:21:05 2015
@@ -35,7 +35,7 @@
  *
  * @author Jeremy McCormick, SLAC
  */
-public class DatacatCrawler {
+public final class DatacatCrawler {
 
     /**
      * Visitor which creates a {@link FileSet} from walking a directory tree.
@@ -175,7 +175,7 @@
      * @param folder the folder in the datacat
      * @throws RuntimeException if the given path does not exist or it is not a folder
      */
-    void checkFolder(final String folder) {
+    private void checkFolder(final String folder) {
         final DatacatClient datacatClient = new DatacatClientFactory().createClient();
         if (!datacatClient.exists(folder)) {
             throw new RuntimeException("The folder " + folder + " does not exist in the data catalog.");
@@ -191,7 +191,7 @@
      * @param args the command line arguments
      * @return this object (for method chaining)
      */
-    public DatacatCrawler parse(final String[] args) {
+    private DatacatCrawler parse(final String[] args) {
         config = new CrawlerConfig();
 
         LOGGER.config("parsing command line options");
@@ -323,6 +323,11 @@
             }
             LOGGER.config("dataset site " + site);
             config.setDatasetSite(site);
+            
+            // Dry run.
+            if (cl.hasOption("D")) {
+                config.setDryRun(true);
+            }
 
         } catch (final ParseException e) {
             throw new RuntimeException("Error parsing options.", e);
@@ -353,7 +358,7 @@
     /**
      * Run the crawler job.
      */
-    void run() {
+    private void run() {
 
         // Create the file visitor for crawling the root directory with the given date filter.
         final DatacatFileVisitor visitor = new DatacatFileVisitor();
@@ -411,7 +416,7 @@
                         throw new RuntimeException("HTTP error code " + response + " received from server.");
                     }
                 } else {
-                    LOGGER.info("update on " + file.getPath() + " skipped from dry run");
+                    LOGGER.info("skipped updated on " + file.getPath() + " from dry run");
                 }
             }
             LOGGER.info("successfully added " + formatFiles.size() + " " + fileFormat + " files");

Modified: java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/DatacatUtilities.java
 =============================================================================
--- java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/DatacatUtilities.java	(original)
+++ java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/DatacatUtilities.java	Tue Nov 10 15:21:05 2015
@@ -21,7 +21,7 @@
     /**
      * Static map of strings to dataset file formats.
      */
-    static Map<String, DatasetFileFormat> formatMap = new HashMap<String, DatasetFileFormat>();
+    private static Map<String, DatasetFileFormat> formatMap = new HashMap<String, DatasetFileFormat>();
     static {
         for (final DatasetFileFormat format : DatasetFileFormat.values()) {
             formatMap.put(format.extension(), format);

Modified: java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/EvioMetadataReader.java
 =============================================================================
--- java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/EvioMetadataReader.java	(original)
+++ java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/EvioMetadataReader.java	Tue Nov 10 15:21:05 2015
@@ -2,38 +2,49 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.math.RoundingMode;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import org.hps.record.evio.EventTagBitMask;
+import org.hps.record.epics.EpicsData;
+import org.hps.record.epics.EpicsEvioProcessor;
 import org.hps.record.evio.EventTagConstant;
+import org.hps.record.evio.EventTagMask;
 import org.hps.record.evio.EvioEventUtilities;
 import org.hps.record.evio.EvioFileUtilities;
+import org.hps.record.scalers.ScalerData;
 import org.hps.record.scalers.ScalersEvioProcessor;
+import org.hps.record.triggerbank.TriggerType;
 import org.jlab.coda.jevio.EvioEvent;
 import org.jlab.coda.jevio.EvioException;
 import org.jlab.coda.jevio.EvioReader;
 
 /**
- * Reads metadata from EVIO files.
- *
+ * Reads metadata from EVIO files, including the event count, run min and run max expected by the datacat,
+ * as well as many custom field values applicable to HPS EVIO raw data.
+ * <p>
+ * The size of the data file is set externally to this reader using the datacat client.
+ * 
  * @author Jeremy McCormick, SLAC
  */
-public class EvioMetadataReader implements FileMetadataReader {
+final class EvioMetadataReader implements FileMetadataReader {
 
     /**
      * Initialize the logger.
      */
     private static Logger LOGGER = Logger.getLogger(EvioMetadataReader.class.getPackage().getName());
-
+    
     /**
      * Get the EVIO file metadata.
-     *
+     *      
      * @param file the EVIO file
      * @return the metadata map of key and value pairs
      */
@@ -42,26 +53,37 @@
 
         Integer firstTimestamp = null;
         Integer lastTimestamp = null;
+        Integer firstPhysicsTimestamp = null;
+        Integer lastPhysicsTimestamp = null;
+        int totalEvents = 0;
         int badEvents = 0;
-        int eventCount = 0;
         int epicsEvents = 0;
-        int scalerBanks = 0;
-        boolean prestart = false;
-        boolean end = false;
-        boolean go = false;
+        int scalerEvents = 0;
+        int physicsEvents = 0;
+        int syncEvents = 0;
+        int pauseEvents = 0;
+        int prestartEvents = 0;
+        int endEvents = 0;
+        int goEvents = 0;        
         boolean blinded = true;
         Integer run = null;
         Integer lastPhysicsEvent = null;
         Integer firstPhysicsEvent = null;
+        double triggerRate = 0;
+        List<ScalerData> scalerData = new ArrayList<ScalerData>();
+        List<EpicsData> epicsData = new ArrayList<EpicsData>();
+                               
+        // Create map for counting event masks.        
+        Map<TriggerType, Integer> eventCounts = new HashMap<TriggerType, Integer>();
+        for (TriggerType mask : TriggerType.values()) {
+            eventCounts.put(mask, 0);
+        }
                 
-        // Create map for counting event masks.        
-        Map<EventTagBitMask, Integer> triggerCounts = new HashMap<EventTagBitMask, Integer>();
-        for (EventTagBitMask mask : EventTagBitMask.values()) {
-            triggerCounts.put(mask, 0);
-        }
-        
         // Scaler processor to check for scaler bank.
         ScalersEvioProcessor scalersProcessor = new ScalersEvioProcessor();
+        
+        // EPICS data processor.
+        EpicsEvioProcessor epicsProcessor = new EpicsEvioProcessor(); 
 
         // Get the file number from the name.
         final int fileNumber = EvioFileUtilities.getSequenceFromName(file);
@@ -72,10 +94,9 @@
         }
         
         EvioReader evioReader = null;
-        try {
-                                   
-            evioReader = EvioFileUtilities.open(file, true);
-            
+        try {                        
+            // Open file in sequential mode.
+            evioReader = EvioFileUtilities.open(file, true);            
             EvioEvent evioEvent = null;
 
             // Event read loop.
@@ -84,122 +105,173 @@
                 // Read in an EVIO event, trapping exceptions in case a parse error occurs.
                 boolean badEvent = false;
                 try {
-                    evioEvent = evioReader.parseNextEvent();
+                    // Parse next event.
+                    evioEvent = evioReader.parseNextEvent();                    
                 } catch (IOException | EvioException e) {
+                    // Trap event parsing errors from bad EVIO data.
                     badEvent = true;
+                    badEvents++;
                     LOGGER.warning("bad EVIO event " + evioEvent.getEventNumber() + " could not be parsed");
+                } finally {
+                    // End of file.
+                    if (!badEvent && evioEvent == null) {
+                        LOGGER.info("EOF after " + totalEvents + " events");
+                        break;
+                    }
+                    
+                    // Increment event count.
+                    totalEvents++;
                 }
                                 
-                // Increment bad event count and continue.
+                // Continue to next event if a parse error occurred.
                 if (badEvent) {
-                    badEvents++;
                     continue;
-                }
-                
-                // End of file.
-                if (evioEvent == null) {
-                    LOGGER.info("end of file reached after " + eventCount + " events");
-                    break;
-                }
-                
+                }                
+                                
+                // Debug print event number and tag.
+                LOGGER.finest("parsed event " + evioEvent.getEventNumber() + " with tag 0x" + String.format("%08x", evioEvent.getHeader().getTag()));
+                                
                 // Process different event types.
-                if (EventTagConstant.PRESTART.equals(evioEvent)) {
+                if (EventTagConstant.PRESTART.matches(evioEvent)) {
                                                             
                     // File has PRESTART event.
-                    LOGGER.info("found PRESTART event " + evioEvent.getEventNumber());
-                    prestart = true;
+                    LOGGER.fine("found PRESTART event " + evioEvent.getEventNumber());
+                    ++prestartEvents;
                     
                     // Set the run number from the PRESTART event.
                     final int[] controlEventData = EvioEventUtilities.getControlEventData(evioEvent);
                     if (run == null) {
                         run = controlEventData[1];
-                        LOGGER.info("set run to " + run + " from PRESTART");
-                    }
-                    
-                } else if (EventTagConstant.GO.equals(evioEvent)) {
+                        LOGGER.fine("set run to " + run + " from PRESTART");
+                    }
+                    
+                    // Set the first timestamp from the PRESTART event.
+                    if (firstTimestamp == null) {
+                        firstTimestamp = controlEventData[0];
+                        LOGGER.fine("set first timestamp to " + firstTimestamp + " from PRESTART event " + evioEvent.getEventNumber());
+                    }
+                    
+                } else if (EventTagConstant.GO.matches(evioEvent)) {
                     
                     // File has GO event.
-                    go = true;
-                    
-                    // Set the first timestamp from the GO event.
-                    final int[] controlEventData = EvioEventUtilities.getControlEventData(evioEvent);
-                    firstTimestamp = controlEventData[0];
-                    LOGGER.info("set first timestamp to " + firstTimestamp + " from GO event " + evioEvent.getEventNumber());
-                    
-                } else if (EventTagConstant.END.equals(evioEvent)) {
+                    goEvents++;
+                    
+                    // Set first timestamp from the GO event (will not override PRESTART time).
+                    if (firstTimestamp == null) {
+                        final int[] controlEventData = EvioEventUtilities.getControlEventData(evioEvent);
+                        firstTimestamp = controlEventData[0];
+                        LOGGER.fine("set first timestamp to " + firstTimestamp + " from GO event " + evioEvent.getEventNumber());
+                    }
+                                                           
+                } else if (EventTagConstant.END.matches(evioEvent)) {
                     
                     // File has END event.
-                    LOGGER.info("got END event");
-                    end = true;
+                    LOGGER.fine("got END event");
+                    endEvents++;
                     
                     // Set the last timestamp from the END event.
                     final int[] controlEventData = EvioEventUtilities.getControlEventData(evioEvent);
                     lastTimestamp = controlEventData[0];
-                    LOGGER.info("set last timestamp " + lastTimestamp + " from END event " + evioEvent.getEventNumber());
+                    LOGGER.fine("set last timestamp " + lastTimestamp + " from END event " + evioEvent.getEventNumber());
                     if (run == null) {
                         run = controlEventData[1];
-                        LOGGER.info("set run to " + run);
-                    }
+                        LOGGER.fine("set run to " + run);
+                    }
+                    
+                } else if (EventTagConstant.PAUSE.matches(evioEvent)) {
+                    
+                    // Count pause events.
+                    pauseEvents++;
                     
                 } else if (EvioEventUtilities.isPhysicsEvent(evioEvent)) {
                     
-                    // Event count on the file only includes physics events.
-                    eventCount++;
+                    // Count physics events.
+                    physicsEvents++;
                     
                     // Get head bank.
                     final int[] headBankData = EvioEventUtilities.getHeadBankData(evioEvent);
                     
-                    // Set first timestamp from head bank.
-                    if (firstTimestamp == null) {
+                    // Is head bank present?
+                    if (headBankData != null) {
+                        
+                        // Is timestamp set?
                         if (headBankData[3] != 0) {
-                            firstTimestamp = headBankData[3];
-                            LOGGER.info("set first timestamp to " + firstTimestamp + " from physics event " + evioEvent.getEventNumber());
+                            
+                            // Set first timestamp.
+                            if (firstTimestamp == null) {
+                                firstTimestamp = headBankData[3];
+                                LOGGER.fine("set first timestamp to " + firstTimestamp + " from physics event " + evioEvent.getEventNumber());                                
+                            }
+                            
+                            // Set first physics timestamp.
+                            if (firstPhysicsTimestamp == null) {                     
+                                firstPhysicsTimestamp = headBankData[3];
+                                LOGGER.fine("set first physics timestamp to " + firstTimestamp + " from event " + evioEvent.getEventNumber());                                
+                            }
+                            
+                            // Set last physics timestamp.
+                            lastPhysicsTimestamp = headBankData[3];
+                            LOGGER.finest("set last physics timestamp to " + firstTimestamp + " from event " + evioEvent.getEventNumber());
+                            
+                            // Set last timestamp.
+                            lastTimestamp = headBankData[3];
                         }
-                    }
-                    
-                    // Set run number from head bank if not set already.
-                    if (run == null) {
-                        run = headBankData[1];
-                        LOGGER.info("set run to " + run + " from physics event " + evioEvent.getEventNumber());
-                    }
-                    
+                        
+                        // Set run number.
+                        if (run == null) {
+                            run = headBankData[1];
+                            LOGGER.info("set run to " + run + " from physics event " + evioEvent.getEventNumber());
+                        }
+                    }                                                                
+                                                                                
                     // Get the event ID data.
                     final int[] eventIdData = EvioEventUtilities.getEventIdData(evioEvent);
-                    if (eventIdData == null) {
-                        throw new RuntimeException("The event ID data bank for event " + evioEvent.getEventNumber() + " is null.");
-                    }                    
-                    
-                    // Set the first physics event from event ID data.
-                    if (firstPhysicsEvent == null) {
-                        firstPhysicsEvent = eventIdData[0];
-                        LOGGER.info("set start event " + firstPhysicsEvent + " from physics event " + evioEvent.getEventNumber());
-                    }
-                    
-                    // Set the last physics event from the event ID data.
-                    lastPhysicsEvent = eventIdData[0];
-                   
-                    // Set the last timestamp from head bank.
-                    if (headBankData[3] != 0) {
-                        lastTimestamp = headBankData[3];
-                    }
-                    
-                    // Increment scaler bank count if exists in event.
+                    if (eventIdData != null) {
+                        
+                        // Set the last physics event.
+                        lastPhysicsEvent = eventIdData[0];
+
+                        // Set the first physics event.
+                        if (firstPhysicsEvent == null) {
+                            firstPhysicsEvent = eventIdData[0];
+                            LOGGER.fine("set start event " + firstPhysicsEvent + " from physics event " + evioEvent.getEventNumber());
+                        }                        
+                    }
+                                                                         
+                    // Count scaler events.
                     scalersProcessor.process(evioEvent);
                     if (scalersProcessor.getCurrentScalerData() != null) {
-                        scalerBanks++;
-                    }
-                    
-                    // Increment event mask counts for each type.
-                    Set<EventTagBitMask> masks = EventTagBitMask.getEventTagBitMasks(evioEvent);
-                    for (EventTagBitMask mask : masks) {
-                        int count = triggerCounts.get(mask) + 1;
-                        triggerCounts.put(mask, count);
-                    }                                    
-                    
-                } else if (EventTagConstant.EPICS.equals(evioEvent)) {
+                        scalerData.add(scalersProcessor.getCurrentScalerData());
+                        scalerEvents++;
+                    }
+                    
+                    // Count trigger types for this event.
+                    Set<TriggerType> triggerTypes = TriggerType.getTriggerTypes(evioEvent);
+                    for (TriggerType mask : triggerTypes) {
+                        int count = eventCounts.get(mask) + 1;
+                        eventCounts.put(mask, count);
+                        LOGGER.finer("incremented " + mask.name() + " to " + count);
+                    }
+                    
+                    // Count sync events.
+                    if (EventTagMask.SYNC.matches(evioEvent.getHeader().getTag())) {
+                        // Count sync events.
+                        ++syncEvents;
+                        LOGGER.finer("got sync event from tag " + String.format("%08x", evioEvent.getHeader().getTag()));
+                    }
+                                          
+                } else if (EventTagConstant.EPICS.matches(evioEvent)) {
+                                        
                     // Count EPICS events.
                     ++epicsEvents;
-                }
+                    
+                    // Get EPICS data for charge calculation.
+                    epicsProcessor.process(evioEvent);
+                    EpicsData epicsEvent = epicsProcessor.getEpicsData();
+                    if (epicsEvent.hasKey("scaler_calc1")) {
+                        epicsData.add(epicsEvent);    
+                    }                    
+                } 
             }
             
         } catch (final EvioException e) {
@@ -215,34 +287,89 @@
                 }
             }
         }
-     
+        
+        LOGGER.info("done reading "  + totalEvents + " events");
+        
+        // Rough trigger rate calculation.
+        triggerRate = calculateTriggerRate(firstPhysicsTimestamp, lastPhysicsTimestamp, physicsEvents);
+
+        // Calculate ungated charge.
+        //double ungatedCharge = calculateCharge(epicsData, firstPhysicsTimestamp, lastPhysicsTimestamp);
+        
+        // Calculated gated charge.
+        //double gatedCharge = calculateGatedCharge(ungatedCharge, scalerData, ScalerDataIndex.FCUP_TRG_GATED, ScalerDataIndex.FCUP_TRG_UNGATED);
+        
         // Create and fill the metadata map.
-        final Map<String, Object> metaDataMap = new LinkedHashMap<String, Object>();
-        metaDataMap.put("runMin", run);
-        metaDataMap.put("runMax", run);
-        metaDataMap.put("eventCount", eventCount);
-        metaDataMap.put("FILE", fileNumber);
-        metaDataMap.put("FIRST_TIMESTAMP", firstTimestamp);
-        metaDataMap.put("LAST_TIMESTAMP", lastTimestamp);
-        metaDataMap.put("FIRST_PHYSICS_EVENT", firstPhysicsEvent);
-        metaDataMap.put("LAST_PHYSICS_EVENT", lastPhysicsEvent);        
-        metaDataMap.put("BAD_EVENTS", badEvents);
-        metaDataMap.put("EPICS_EVENTS", epicsEvents);        
-        metaDataMap.put("SCALER_BANKS", scalerBanks);
-        metaDataMap.put("END", end);
-        metaDataMap.put("PRESTART", prestart);
-        metaDataMap.put("GO", go);        
-        metaDataMap.put("BLINDED", blinded);
-                      
-        // Add the event mask counts.
-        for (Entry<EventTagBitMask, Integer> entry : triggerCounts.entrySet()) {
-            // These two keys aren't working right so don't include them.
-            if (EventTagBitMask.PHYSICS != entry.getKey() && EventTagBitMask.SYNC != entry.getKey()) {
-                metaDataMap.put(entry.getKey().name(), entry.getValue());
-            }
-        }
-
+        final Map<String, Object> metadataMap = new LinkedHashMap<String, Object>();
+        
+        // Built-in fields of datacat.
+        metadataMap.put("runMin", run);
+        metadataMap.put("runMax", run);
+        metadataMap.put("eventCount", totalEvents);
+        
+        // Run number.
+        metadataMap.put("RUN", run);
+        
+        // File sequence number.
+        metadataMap.put("FILE_NUMBER", fileNumber);
+        
+        // Blinded flag.
+        metadataMap.put("BLINDED", blinded);
+        
+        // First and last timestamps which may come from control or physics events.
+        metadataMap.put("FIRST_TIMESTAMP", firstTimestamp);
+        metadataMap.put("LAST_TIMESTAMP", lastTimestamp);
+        
+        // First and last physics events.
+        metadataMap.put("FIRST_PHYSICS_EVENT", firstPhysicsEvent);
+        metadataMap.put("LAST_PHYSICS_EVENT", lastPhysicsEvent);
+        
+        // First and last physics event timestamps.
+        metadataMap.put("FIRST_PHYSICS_TIMESTAMP", firstPhysicsTimestamp);
+        metadataMap.put("LAST_PHYSICS_TIMESTAMP", lastPhysicsTimestamp);
+        
+        // Event counts.
+        metadataMap.put("PHYSICS_EVENTS", physicsEvents);
+        metadataMap.put("BAD_EVENTS", badEvents);
+        metadataMap.put("EPICS_EVENTS", epicsEvents);        
+        metadataMap.put("SCALER_EVENTS", scalerEvents);
+        metadataMap.put("END_EVENTS", endEvents);
+        metadataMap.put("PRESTART_EVENTS", prestartEvents);
+        metadataMap.put("GO_EVENTS", goEvents);
+        metadataMap.put("PAUSE_EVENTS", pauseEvents);
+        metadataMap.put("SYNC_EVENTS", syncEvents);
+        
+        // Trigger rate.
+        DecimalFormat df = new DecimalFormat("#.####");
+        df.setRoundingMode(RoundingMode.CEILING);
+        metadataMap.put("TRIGGER_RATE_KHZ", Double.parseDouble(df.format(triggerRate)));
+                                            
+        // Add the trigger counts.
+        for (Entry<TriggerType, Integer> entry : eventCounts.entrySet()) {
+            metadataMap.put(entry.getKey().name(), entry.getValue());
+        }
+        
+        // Print the file metadata to log.
+        StringBuffer sb = new StringBuffer();
+        sb.append('\n');
+        for (Entry<String, Object> entry : metadataMap.entrySet()) {
+            sb.append("  " + entry.getKey() + " = " + entry.getValue() + '\n');
+        }
+        LOGGER.info("file metadata ..." + '\n' + sb.toString());
+        
         // Return the completed metadata map.
-        return metaDataMap;
+        return metadataMap;
     }
+
+    /**
+     * Calculate the trigger rate in KHz.
+     * 
+     * @param firstTimestamp the first physics timestamp
+     * @param lastTimestamp the last physics timestamp
+     * @param physicsEvents the number of physics events
+     * @return the trigger rate calculation in KHz
+     */
+    private double calculateTriggerRate(Integer firstTimestamp, Integer lastTimestamp, int physicsEvents) {
+        return ((double) physicsEvents / ((double) lastTimestamp - (double) firstTimestamp)) / 1000.;
+    }    
 }

Modified: java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/FileMetadataReader.java
 =============================================================================
--- java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/FileMetadataReader.java	(original)
+++ java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/FileMetadataReader.java	Tue Nov 10 15:21:05 2015
@@ -18,5 +18,5 @@
      * @return the metadata map
      * @throws IOException if there is an error reading the file
      */
-    public Map<String, Object> getMetadata(File file) throws IOException;
+    Map<String, Object> getMetadata(File file) throws IOException;
 }

Modified: java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/FileSet.java
 =============================================================================
--- java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/FileSet.java	(original)
+++ java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/FileSet.java	Tue Nov 10 15:21:05 2015
@@ -14,14 +14,14 @@
  */
 public class FileSet extends HashMap<DatasetFileFormat, List<File>> {
     
-    public List<File> get(DatasetFileFormat format) {
+    List<File> get(DatasetFileFormat format) {
         if (super.get(format) == null) {
             this.put(format, new ArrayList<File>());
         }
         return super.get(format);
     }
     
-    public void addFile(DatasetFileFormat format, File file) {
+    void addFile(DatasetFileFormat format, File file) {
         this.get(format).add(file);
     }
 }

Modified: java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/LcioMetadataReader.java
 =============================================================================
--- java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/LcioMetadataReader.java	(original)
+++ java/branches/jeremy-dev/crawler/src/main/java/org/hps/crawler/LcioMetadataReader.java	Tue Nov 10 15:21:05 2015
@@ -21,7 +21,7 @@
  */
 public class LcioMetadataReader implements FileMetadataReader {
 
-    /*
+    /**
      * Setup the conditions system in dummy mode.
      */
     static {

Modified: java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/epics/EpicsData.java
 =============================================================================
--- java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/epics/EpicsData.java	(original)
+++ java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/epics/EpicsData.java	Tue Nov 10 15:21:05 2015
@@ -281,7 +281,7 @@
         EpicsData epicsData = null;
         
         // Is this an EPICS event?
-        if (EventTagConstant.EPICS.equals(evioEvent)) {
+        if (EventTagConstant.EPICS.matches(evioEvent)) {
 
             // Find the bank with the EPICS data string.
             final BaseStructure epicsBank = EvioBankTag.EPICS_STRING.findBank(evioEvent);

Modified: java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/epics/EpicsEvioProcessor.java
 =============================================================================
--- java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/epics/EpicsEvioProcessor.java	(original)
+++ java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/epics/EpicsEvioProcessor.java	Tue Nov 10 15:21:05 2015
@@ -45,7 +45,7 @@
     public void process(final EvioEvent evioEvent) {
 
         // Is this an EPICS event?
-        if (EventTagConstant.EPICS.equals(evioEvent)) {
+        if (EventTagConstant.EPICS.matches(evioEvent)) {
 
             LOGGER.fine("processing EPICS event " + evioEvent.getEventNumber());
 

Modified: java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/evio/EventTagConstant.java
 =============================================================================
--- java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/evio/EventTagConstant.java	(original)
+++ java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/evio/EventTagConstant.java	Tue Nov 10 15:21:05 2015
@@ -63,7 +63,7 @@
         return tag == this.tag;
     }
     
-    public boolean equals(final EvioEvent evioEvent) {
+    public boolean matches(final EvioEvent evioEvent) {
         return evioEvent.getHeader().getTag() == this.tag;
     }
     

Added: java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/evio/EventTagMask.java
 =============================================================================
--- java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/evio/EventTagMask.java	(added)
+++ java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/evio/EventTagMask.java	Tue Nov 10 15:21:05 2015
@@ -0,0 +1,40 @@
+package org.hps.record.evio;
+
+/**
+ * Event tag mask for physics and sync events.
+ * @author Jeremy McCormick, SLAC
+ */
+public enum EventTagMask {
+    
+    /** Sync event with scalers and/or trigger config. */
+    SYNC(0x40),
+    /** Physics events. */
+    PHYSICS(0x80);
+
+    /**
+     * Define an event tag with a mask.
+     * @param mask the bit mask value
+     */
+    EventTagMask(int mask) {
+        this.mask = mask;
+    }
+    
+    private int mask;
+    
+    /**
+     * Get the tag's mask value.
+     * @return the tag's mask value
+     */
+    public int getMask() {
+        return mask;
+    }
+    
+    /**
+     * Return <code>true</code> if the <code>eventTag</code> matches this mask.
+     * @param eventTag the event tag value from the EVIO header
+     * @return <code>true</code> if <code>eventTag</code> matches this mask
+     */
+    public boolean matches(int eventTag) {
+        return (eventTag & mask) > 0;
+    }   
+}

Modified: java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/evio/EvioBankTag.java
 =============================================================================
--- java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/evio/EvioBankTag.java	(original)
+++ java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/evio/EvioBankTag.java	Tue Nov 10 15:21:05 2015
@@ -25,8 +25,10 @@
     /** Scaler data bank. */
     SCALERS(57621),
     /** Trigger configuration bank. */
-    TRIGGER_CONFIG(0xE10E);
-
+    TRIGGER_CONFIG(0xE10E),
+    /** TI trigger bank. */
+    TI_TRIGGER(0xe10a);
+    
     /**
      * The bank's tag value.
      */
@@ -46,7 +48,7 @@
      *
      * @param startBank the starting bank
      * @return the first bank matching the tag or <code>null<code> if not found
-     */
+     */    
     public BaseStructure findBank(final BaseStructure startBank) {
         BaseStructure foundBank = null;
         if (this.equals(startBank)) {
@@ -60,8 +62,8 @@
             }
         }
         return foundBank;
-    }
-
+    }    
+    
     /**
      * Get the bank tag value.
      *

Copied: java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/triggerbank/TriggerType.java (from r3945, java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/evio/EventTagBitMask.java)
 =============================================================================
--- java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/evio/EventTagBitMask.java	(original)
+++ java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/triggerbank/TriggerType.java	Tue Nov 10 15:21:05 2015
@@ -1,112 +1,86 @@
-package org.hps.record.evio;
+package org.hps.record.triggerbank;
 
 import java.util.HashSet;
 import java.util.Set;
 
+import org.hps.record.triggerbank.AbstractIntData.IntBankDefinition;
+import org.jlab.coda.jevio.BaseStructure;
 import org.jlab.coda.jevio.EvioEvent;
 
 /**
- * Encapsulates bit mask values for different types of physics events as described at 
+ * Provides bit mask checks for the trigger types defined in
  * <a href="https://confluence.slac.stanford.edu/display/hpsg/EVIO+Data+Format#EVIODataFormat-EVIOEventtypes-2015DataSet">EVIO Event types</a>.
  *
- * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
+ * @author Jeremy McCormick, SLAC
  */
-public enum EventTagBitMask {
-
-    /** LED or Cosmic trigger. */
-    LED_COSMIC(4),
+public enum TriggerType {
+    
+    /** LED or Cosmic trigger (sometimes called calibration also). */
+    LED_COSMIC(28),
     /** Pair 0 trigger. */
-    PAIRS0(2),
+    PAIRS0(26),
     /** Pair 1 trigger. */
-    PAIRS1(3),
-    /** Physics event. */
-    PHYSICS(7), // FIXME: Doesn't work!
+    PAIRS1(27),
     /** Pulser triggered event. */
-    PULSER(5),
+    PULSER(29),
     /** Single 0 trigger. */
-    SINGLE0(0),
+    SINGLES0(24),
     /** Single 1 trigger. */
-    SINGLE1(1),
-    /** Physics sync event. */
-    SYNC(6);
-
+    SINGLES1(25);
+    
     /**
      * The bit number.
      */
     private int bit;
 
     /**
-     * The bit mask.
+     * Constructor with bit number which is used to shift the input TI bits.    
+     * @param bit the bit number for shifting the TI bits
      */
-    private int bitMask;
-
-    /**
-     * Constructor with bit number.
-     *
-     * @param bit the bit number
-     */
-    private EventTagBitMask(final int bit) {
+    private TriggerType(final int bit) {
         this.bit = bit;
-        this.bitMask = 1 >> this.bit;
     }
 
     /**
-     * Get the bit number.
-     *
+     * Get the bit number.    
      * @return the bit number
      */
     public int getBit() {
         return this.bit;
     }
-
+    
     /**
-     * Get the bit mask.
-     *
-     * @return the bit mask
+     * Return <code>true</code> if the bits match this mask.    
+     * @param triggerBits the trigger bits from the TI bank
+     * @return <code>true</code> if the bits match this mask
      */
-    public int getBitMask() {
-        return this.bitMask;
-    }
-
-    /**
-     * Return <code>true</code> if the event's tag matches this mask.
-     *
-     * @param event an <code>EvioEvent</code> with tag to check against this mask
-     * @return <code>true</code> if the event's tag matches this mask
-     */
-    public boolean equals(final EvioEvent event) {
-        return equals(event.getHeader().getTag());
-    }
-
-    /**
-     * Return <code>true</code> if the tag matches this mask.
-     *
-     * @param eventTag the event's tag from the header bank
-     * @return <code>true</code> if the tag matches this mask
-     */
-    public boolean equals(final int eventTag) {
-        return (eventTag & this.bitMask) == 1;
+    public boolean matches(final int triggerBits) {
+        return ((triggerBits >> this.bit) & 1) == 1;
     }
     
-    public static Set<EventTagBitMask> getEventTagBitMasks(EvioEvent evioEvent) {
-        Set<EventTagBitMask> bitMasks = new HashSet<EventTagBitMask>();
-        if (LED_COSMIC.equals(evioEvent)) {
-            bitMasks.add(LED_COSMIC);
-        } if (PAIRS0.equals(evioEvent)) {
-            bitMasks.add(PAIRS0);
-        } if (PAIRS1.equals(evioEvent)) {
-            bitMasks.add(PAIRS1);
-        } if (PHYSICS.equals(evioEvent)) {
-            bitMasks.add(PHYSICS);
-        } if (PULSER.equals(evioEvent)) {
-            bitMasks.add(PULSER);
-        } if (SINGLE0.equals(evioEvent)) {
-            bitMasks.add(SINGLE0);
-        } if (SINGLE1.equals(evioEvent)) {
-            bitMasks.add(SINGLE1);
-        } if (SYNC.equals(evioEvent)) {
-            bitMasks.add(SYNC);
+    /**
+     * Definition of the TI bank in the EVIO event.
+     */
+    private static IntBankDefinition TI_BANK = new IntBankDefinition(TIData.class, new int[] {0x2e, 0xe10a});
+    
+    /**
+     * Get the applicable trigger types from the TI data in an EVIO event.
+     * @param evioEvent the input EVIO event with the TI data
+     * @return the set of matching trigger types for the event
+     */
+    public static Set<TriggerType> getTriggerTypes(EvioEvent evioEvent) {
+        Set<TriggerType> matches = new HashSet<TriggerType>();
+        BaseStructure tiBank = TI_BANK.findBank(evioEvent);
+        if (tiBank != null) {
+            int[] triggerData = tiBank.getIntData();
+            if (triggerData != null) {
+                for (TriggerType triggerType : TriggerType.values()) {
+                    if (triggerType.matches(triggerData[0])) {
+                        matches.add(triggerType);
+                    }
+                }
+            }
         }
-        return bitMasks;
-    }
+        return matches;
+    }      
 }

Top of Message | Previous Page | Permalink

Advanced Options


Options

Log In

Log In

Get Password

Get Password


Search Archives

Search Archives


Subscribe or Unsubscribe

Subscribe or Unsubscribe


Archives

November 2017
August 2017
July 2017
January 2017
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
December 2013
November 2013

ATOM RSS1 RSS2



LISTSERV.SLAC.STANFORD.EDU

Secured by F-Secure Anti-Virus CataList Email List Search Powered by the LISTSERV Email List Manager

Privacy Notice, Security Notice and Terms of Use