Print

Print


Commit in java/sandbox/data-cat/src on MAIN
main/java/org/hps/datacat/EvioMetaDataExtractor.java+28added 654
                         /LcioMetaDataExtractor.java+28added 654
                         /MetaDataExtractor.java+20added 654
                         /MetaDataExtractorMain.java+44added 654
                         /MetaDataUtil.java+23added 654
main/java/org/srs/datacat/server/EvioContentChecker.java+25-8653 -> 654
                                /LcioContentChecker.java+44-24653 -> 654
test/java/org/srs/datacat/server/EvioContentCheckerTest.java+2-2653 -> 654
                                /LcioContentCheckerTest.java+1-1653 -> 654
+215-35
5 added + 4 modified, total 9 files
Work in progress on Java helper library for data catalog.

java/sandbox/data-cat/src/main/java/org/hps/datacat
EvioMetaDataExtractor.java added at 654
--- java/sandbox/data-cat/src/main/java/org/hps/datacat/EvioMetaDataExtractor.java	                        (rev 0)
+++ java/sandbox/data-cat/src/main/java/org/hps/datacat/EvioMetaDataExtractor.java	2014-06-03 00:01:16 UTC (rev 654)
@@ -0,0 +1,28 @@
+package org.hps.datacat;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Map;
+
+import org.srs.datacat.server.ContentChecker;
+import org.srs.datacat.server.EvioContentChecker;
+
+public class EvioMetaDataExtractor implements MetaDataExtractor {
+
+    static String extension = "evio";
+    ContentChecker contentChecker = new EvioContentChecker();
+    
+    public Map<String,Object> getMetaData(String location) {        
+        File file = new File(location);
+        try {
+            contentChecker.setLocation(0, file.toURI().toURL());
+            return contentChecker.getMetaData();
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        } 
+    }
+
+    public String handlesExtension() {
+        return extension;
+    }
+}

java/sandbox/data-cat/src/main/java/org/hps/datacat
LcioMetaDataExtractor.java added at 654
--- java/sandbox/data-cat/src/main/java/org/hps/datacat/LcioMetaDataExtractor.java	                        (rev 0)
+++ java/sandbox/data-cat/src/main/java/org/hps/datacat/LcioMetaDataExtractor.java	2014-06-03 00:01:16 UTC (rev 654)
@@ -0,0 +1,28 @@
+package org.hps.datacat;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Map;
+
+import org.srs.datacat.server.ContentChecker;
+import org.srs.datacat.server.LcioContentChecker;
+
+public class LcioMetaDataExtractor implements MetaDataExtractor {
+
+    static String extension = "slcio";
+    ContentChecker contentChecker = new LcioContentChecker();
+    
+    public Map<String,Object> getMetaData(String location) {        
+        File file = new File(location);
+        try {
+            contentChecker.setLocation(0, file.toURI().toURL());
+            return contentChecker.getMetaData();
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        } 
+    }
+
+    public String handlesExtension() {
+        return extension;
+    }        
+}
\ No newline at end of file

java/sandbox/data-cat/src/main/java/org/hps/datacat
MetaDataExtractor.java added at 654
--- java/sandbox/data-cat/src/main/java/org/hps/datacat/MetaDataExtractor.java	                        (rev 0)
+++ java/sandbox/data-cat/src/main/java/org/hps/datacat/MetaDataExtractor.java	2014-06-03 00:01:16 UTC (rev 654)
@@ -0,0 +1,20 @@
+package org.hps.datacat;
+
+import java.util.Map;
+
+
+interface MetaDataExtractor {
+    
+    /**
+     * Extract meta data from a file.
+     * @param location
+     * @return
+     */
+    public Map<String,Object> getMetaData(String location);    
+    
+    /**
+     * Get the extension handled by this class e.g. 'slcio', etc.
+     * @return The extension handled by the class.
+     */
+    String handlesExtension();
+}

java/sandbox/data-cat/src/main/java/org/hps/datacat
MetaDataExtractorMain.java added at 654
--- java/sandbox/data-cat/src/main/java/org/hps/datacat/MetaDataExtractorMain.java	                        (rev 0)
+++ java/sandbox/data-cat/src/main/java/org/hps/datacat/MetaDataExtractorMain.java	2014-06-03 00:01:16 UTC (rev 654)
@@ -0,0 +1,44 @@
+package org.hps.datacat;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * This class has a main method which will print out the meta data 
+ * information for a file given as a command line argument.  The printed
+ * information is suitable for passing directly as an argument to the Python script
+ * that is used to register new data files.
+ * 
+ * @author Jeremy McCormick <[log in to unmask]>
+ */
+public final class MetaDataExtractorMain {
+    
+    static List<MetaDataExtractor> metaDataExtractors = new ArrayList<MetaDataExtractor>();
+    
+    static {
+        metaDataExtractors.add(new LcioMetaDataExtractor());
+        metaDataExtractors.add(new EvioMetaDataExtractor());
+    }
+    
+    static MetaDataExtractor findMetaDataExtractor(String path) {
+        String extension = path.substring(path.lastIndexOf(".") + 1);
+        //System.out.println("extension: " + extension);
+        for (MetaDataExtractor extractor : metaDataExtractors) {
+            if (extractor.handlesExtension().equals(extension))
+                return extractor;
+        }
+        return null;
+    }
+    
+    public static void main(String[] args) {
+        if (args.length == 0)
+            throw new IllegalArgumentException("Path to file is required.");
+        String path = args[0];
+        MetaDataExtractor e = findMetaDataExtractor(path);
+        if (e == null) {
+            System.err.println("Unknown extension on file: " + path);
+            throw new IllegalArgumentException("No handler found for file.");
+        }
+        System.out.println(MetaDataUtil.toString(e.getMetaData(path)));
+    }
+}

java/sandbox/data-cat/src/main/java/org/hps/datacat
MetaDataUtil.java added at 654
--- java/sandbox/data-cat/src/main/java/org/hps/datacat/MetaDataUtil.java	                        (rev 0)
+++ java/sandbox/data-cat/src/main/java/org/hps/datacat/MetaDataUtil.java	2014-06-03 00:01:16 UTC (rev 654)
@@ -0,0 +1,23 @@
+package org.hps.datacat;
+
+import java.util.Date;
+import java.util.Map;
+import java.util.Map.Entry;
+
+
+public class MetaDataUtil {
+
+    static String toString(Map<String,Object> metaData) {        
+        StringBuffer buffer = new StringBuffer();
+        for (Entry<String,Object> entry : metaData.entrySet()) {
+            buffer.append(entry.getKey() + "=");
+            if (entry.getValue() instanceof String || entry.getValue() instanceof Date) {
+                buffer.append("\"" + entry.getValue() + "\" ");                
+            } else {
+                buffer.append(entry.getValue() + " ");
+            }
+        }
+        buffer.setLength(buffer.length() - 1);
+        return buffer.toString();
+    }
+}

java/sandbox/data-cat/src/main/java/org/srs/datacat/server
EvioContentChecker.java 653 -> 654
--- java/sandbox/data-cat/src/main/java/org/srs/datacat/server/EvioContentChecker.java	2014-06-02 23:50:37 UTC (rev 653)
+++ java/sandbox/data-cat/src/main/java/org/srs/datacat/server/EvioContentChecker.java	2014-06-03 00:01:16 UTC (rev 654)
@@ -7,7 +7,6 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.hps.evio.EventConstants;
 import org.jlab.coda.jevio.EvioEvent;
 import org.jlab.coda.jevio.EvioException;
 import org.jlab.coda.jevio.EvioReader;
@@ -17,6 +16,11 @@
  */
 public class EvioContentChecker implements ContentChecker {
 
+    static final int PRESTART_EVENT_TAG = 17;
+    static final int GO_EVENT_TAG = 18;
+    static final int END_EVENT_TAG = 20;
+    static final int PHYSICS_EVENT_TAG = 1;
+    
     long minRunNumber;
     long maxRunNumber;
     long nevents;
@@ -40,7 +44,7 @@
             EvioEvent event = reader.nextEvent();
             while (event != null) {
                 int[] data = event.getIntData();
-                if (EventConstants.isPreStartEvent(event)) {
+                if (isPreStartEvent(event)) {
                     int runNumber = data[1];
                     if (runNumber < minRunNumber) {
                         minRunNumber = runNumber;
@@ -48,7 +52,7 @@
                     if (runNumber > maxRunNumber) {
                         maxRunNumber = runNumber;
                     }
-                } else if (EventConstants.isGoEvent(event)) {
+                } else if (isGoEvent(event)) {
                     int seconds = data[0];
                     long time = ((long) seconds) * 1000000000;
                     if (!metadata.containsKey("tStart")) {
@@ -56,7 +60,7 @@
                     } else {
                         throw new RuntimeException("More than one Go record was found!");
                     }
-                } else if (EventConstants.isEndEvent(event)) {
+                } else if (isEndEvent(event)) {
                     int seconds = data[0];
                     long time = ((long) seconds) * 1000000000;
                     if (!metadata.containsKey("tEnd")) {
@@ -77,10 +81,6 @@
         }       
     }
 
-    private boolean isPhysicsEvent(EvioEvent event) {
-        return (event.getHeader().getTag() == EventConstants.PHYSICS_EVENT_TAG);
-    }
-
     @Override
     public long getEventCount() throws IOException {
         return nevents;
@@ -109,4 +109,21 @@
     @Override
     public void close() throws IOException {
     }
+    
+    static boolean isPreStartEvent(EvioEvent event) {
+        return event.getHeader().getTag() == PRESTART_EVENT_TAG;
+    }
+
+    static boolean isGoEvent(EvioEvent event) {
+        return event.getHeader().getTag() == GO_EVENT_TAG;
+    }
+    
+    static boolean isEndEvent(EvioEvent event) {
+        return event.getHeader().getTag() == END_EVENT_TAG;
+    }
+    
+    static boolean isPhysicsEvent(EvioEvent event) {
+        return event.getHeader().getTag() == PHYSICS_EVENT_TAG;
+    }
+
 }

java/sandbox/data-cat/src/main/java/org/srs/datacat/server
LcioContentChecker.java 653 -> 654
--- java/sandbox/data-cat/src/main/java/org/srs/datacat/server/LcioContentChecker.java	2014-06-02 23:50:37 UTC (rev 653)
+++ java/sandbox/data-cat/src/main/java/org/srs/datacat/server/LcioContentChecker.java	2014-06-03 00:01:16 UTC (rev 654)
@@ -16,24 +16,28 @@
 
 public class LcioContentChecker implements ContentChecker {
     
-    private long minRunNumber;
-    private long maxRunNumber;
+    //private long minRunNumber;
+    //private long maxRunNumber;
+    private long runNumber;
     private long nevents;
     private String status;
     private HashSet<String> uniqueCollections;
-    private HashSet<String> uniqueDetectors;
+    //private HashSet<String> uniqueDetectors;
+    String detectorName;
     Map<String, Object> metaData;
         
     @Override   
     public void setLocation(long datasetVersion, URL url) throws IOException {
                 
         // Initialize variables for this file.
-        minRunNumber = Integer.MAX_VALUE;
-        maxRunNumber = Integer.MIN_VALUE;
+        //minRunNumber = Integer.MAX_VALUE;
+        //maxRunNumber = Integer.MIN_VALUE;
+        runNumber = -1;
         nevents = 0;
         status = "OK";
         uniqueCollections = new HashSet<String>();
-        uniqueDetectors = new HashSet<String>();
+        //uniqueDetectors = new HashSet<String>();
+        detectorName = null;
         metaData = new HashMap<String, Object>();
         
         // Open file from URL.
@@ -43,29 +47,38 @@
         LCReader reader = LCFactory.getInstance().createLCReader();        
         reader.open(url.getPath());
         
-        // Loop over all events.
-        LCEvent event = reader.readNextEvent();        
-        while (event != null) {
+        // Get the first event.
+        LCEvent event = reader.readNextEvent();
         
-            // Run number setting.
-            int thisRunNumber = event.getRunNumber();            
+        if (event == null)
+            throw new IllegalArgumentException("The event file has zero events.");
+        
+        //while (event != null) {
+        
+        // Run number setting.
+        //int thisRunNumber 
+        runNumber = event.getRunNumber();    
+        metaData.put("nRun", runNumber);
+        /*
             if (thisRunNumber < minRunNumber)
                 minRunNumber = thisRunNumber;
             if (thisRunNumber > maxRunNumber)
                 maxRunNumber = thisRunNumber;
+                */
             
-            // Collection names.
-            uniqueCollections.addAll(Arrays.asList(event.getCollectionNames()));
+        // Collection names.
+        uniqueCollections.addAll(Arrays.asList(event.getCollectionNames()));
             
-            // Detectors.
-            uniqueDetectors.add(event.getDetectorName());
+        // Detectors.
+        //uniqueDetectors.add(event.getDetectorName());
+        detectorName = event.getDetectorName();
             
-            // Number of events.
-            nevents++;
+        // Number of events.
+        //nevents++;
             
-            // Get next event.
-            event = reader.readNextEvent();
-        }
+        // Get next event.
+        //event = reader.readNextEvent();
+        //}
         
         // Close the reader.
         reader.close();
@@ -82,6 +95,7 @@
         metaData.put("sCollections", buff.toString());
         
         // Sort detector names and insert into meta data.
+        /*
         List<String> sortedDetectors = new ArrayList<String>(uniqueDetectors);
         Collections.sort(sortedDetectors);
         buff = new StringBuffer();
@@ -90,22 +104,28 @@
             buff.append(',');
         }
         buff.setLength(buff.length() - 1);
-        metaData.put("sDetectors", buff.toString());
+        */
+        metaData.put("sDetectorName", detectorName);
+        
+        
     }
     
     @Override
     public long getEventCount() throws IOException {
-        return nevents;
+        //return nevents;
+        return 0;
     }
     
     @Override
     public long getRunMin() throws IOException {
-        return minRunNumber;
+        //return minRunNumber;
+        return runNumber;
     }
     
     @Override
     public long getRunMax() throws IOException {
-        return maxRunNumber;        
+        //return maxRunNumber;
+        return runNumber;
     }
     
     @Override

java/sandbox/data-cat/src/test/java/org/srs/datacat/server
EvioContentCheckerTest.java 653 -> 654
--- java/sandbox/data-cat/src/test/java/org/srs/datacat/server/EvioContentCheckerTest.java	2014-06-02 23:50:37 UTC (rev 653)
+++ java/sandbox/data-cat/src/test/java/org/srs/datacat/server/EvioContentCheckerTest.java	2014-06-03 00:01:16 UTC (rev 654)
@@ -12,7 +12,7 @@
     
     public void testEvioContentChecker() throws Exception {        
         ContentChecker checker = new EvioContentCheckerCreator().create();
-        checker.setLocation(-1, new File(filePath).toURL());
+        checker.setLocation(-1, new File(filePath).toURI().toURL());
         System.out.println("event count: " + checker.getEventCount());
         System.out.println("run max: " + checker.getRunMax());
         System.out.println("run min: " + checker.getRunMin());
@@ -20,7 +20,7 @@
         System.out.println("meta data ...");
         Map<String, Object> metaData = checker.getMetaData();
         for (String key : metaData.keySet()) {
-            System.out.println("  " + key + "" + metaData.get(key));
+            System.out.println("  " + key + "=" + metaData.get(key));
         }
     }
 }

java/sandbox/data-cat/src/test/java/org/srs/datacat/server
LcioContentCheckerTest.java 653 -> 654
--- java/sandbox/data-cat/src/test/java/org/srs/datacat/server/LcioContentCheckerTest.java	2014-06-02 23:50:37 UTC (rev 653)
+++ java/sandbox/data-cat/src/test/java/org/srs/datacat/server/LcioContentCheckerTest.java	2014-06-03 00:01:16 UTC (rev 654)
@@ -17,7 +17,7 @@
         File file = cache.getCachedFile(new URL(TEST_FILE_URL));
         
         ContentChecker checker = new LcioContentCheckerCreator().create();
-        checker.setLocation(-1, file.toURL());
+        checker.setLocation(-1, file.toURI().toURL());
         System.out.println("event count: " + checker.getEventCount());
         System.out.println("run max: " + checker.getRunMax());
         System.out.println("run min: " + checker.getRunMin());
SVNspam 0.1