Print

Print


Commit in lcsim on MAIN
src/org/lcsim/util/event/SubdetectorLocator.java+11.4 -> 1.5
                        /BaseCalorimeterHit.java+4-31.3 -> 1.4
                        /SamplingFractionManager.java+53-361.4 -> 1.5
test/org/lcsim/util/event/SamplingFractionManager_Test.java+3-31.1 -> 1.2
src/org/lcsim/conditions/ConditionsSet.java+51.1 -> 1.2
                        /ConditionsSetImplementation.java+23-61.1 -> 1.2
+89-48
6 modified files
Initial support for digital calorimeters (LCSIM-117)

lcsim/src/org/lcsim/util/event
SubdetectorLocator.java 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- SubdetectorLocator.java	5 Apr 2006 18:39:59 -0000	1.4
+++ SubdetectorLocator.java	23 May 2006 17:30:31 -0000	1.5
@@ -15,6 +15,7 @@
  * Currently it cheats and uses a method which should not exist.
  * 
  * @author tonyj
+ * @version $Id: SubdetectorLocator.java,v 1.5 2006/05/23 17:30:31 tonyj Exp $
  */
 public class SubdetectorLocator
 {

lcsim/src/org/lcsim/util/event
BaseCalorimeterHit.java 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- BaseCalorimeterHit.java	5 Apr 2006 18:46:45 -0000	1.3
+++ BaseCalorimeterHit.java	23 May 2006 17:30:31 -0000	1.4
@@ -38,7 +38,7 @@
       if (position == null)
       {
          IDDecoder iddecoder = data.getIDDecoder();
-	 iddecoder.setID( id );
+         iddecoder.setID( id );
          position = new double[3];
          position[0] = iddecoder.getX();
          position[1] = iddecoder.getY();
@@ -59,8 +59,9 @@
 
    public double getCorrectedEnergy()
    {
-      double sf = SamplingFractionManager.defaultInstance().getSamplingFraction(SubdetectorLocator.locateSubdetector(data,id));
-      return rawEnergy/sf;
+      IDDecoder decoder = getIDDecoder();
+      decoder.setID(id);
+      return SamplingFractionManager.defaultInstance().getCorrectedEnergy(rawEnergy,decoder.getLayer(),getSubdetector());
    }
 
    public long getCellID()

lcsim/src/org/lcsim/util/event
SamplingFractionManager.java 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- SamplingFractionManager.java	5 Apr 2006 18:39:59 -0000	1.4
+++ SamplingFractionManager.java	23 May 2006 17:30:31 -0000	1.5
@@ -1,10 +1,10 @@
 package org.lcsim.util.event;
 
-import java.util.HashMap;
+import java.util.Collections;
 import java.util.Map;
-import org.lcsim.conditions.ConditionsListener;
 import org.lcsim.conditions.ConditionsManager;
 import org.lcsim.conditions.ConditionsSet;
+import org.lcsim.conditions.ConditionsConverter;
 import org.lcsim.geometry.Subdetector;
 
 /**
@@ -12,42 +12,59 @@
  * is obviously not true if the subdetector has more than one layering scheme,
  * or if a single "subdetector" represents more than one physical detector (e.g.
  * barrel and endcap).
- * 
+ *
  * @author tonyj
  */
 public class SamplingFractionManager
 {
-    private Listener listener = new Listener();
-    private Map<String, Double> cache = new HashMap<String, Double>();
-    private static SamplingFractionManager theSamplingFractionManager = new SamplingFractionManager();
+   private static SamplingFractionManager theSamplingFractionManager = new SamplingFractionManager();
+   private ConditionsManager manager;
+   
+   private SamplingFractionManager()
+   {
+      manager = ConditionsManager.defaultInstance();
+      manager.registerConditionsConverter(new SamplingFractionConverter());
+   }
+   
+   public static SamplingFractionManager defaultInstance()
+   {
+      return theSamplingFractionManager;
+   }
+   
+   double getCorrectedEnergy(double rawEnergy, int layer, Subdetector detector)
+   {
+      SamplingFraction sf = manager.getCachedConditions(SamplingFraction.class,"SamplingFractions/" + detector.getName()).getCachedData();
+      return sf.getCorrectedEnergy(rawEnergy,layer);
+   }
+   private static class SamplingFraction
+   {
+      private final double defaultSamplingFraction;
+      private final boolean digital;
+      private final Map<Integer,Double> layerMap = Collections.emptyMap();
+      
+      private SamplingFraction(ConditionsSet set)
+      {
+         defaultSamplingFraction = set.getDouble("samplingFraction");
+         digital = set.getBoolean("digital",false);
+      }
+      double getCorrectedEnergy(double rawEnergy, int layer)
+      {
+         Double layerSF = layerMap.get(layer);
+         double samplingFraction = layerSF == null ? defaultSamplingFraction : layerSF;
+         return (digital ? 1 : rawEnergy)/samplingFraction;
+      }
+   }
+   private static class SamplingFractionConverter implements ConditionsConverter<SamplingFraction>
+   {
+      public Class<SamplingFractionManager.SamplingFraction> getType()
+      {
+         return SamplingFraction.class;
+      }
 
-    private SamplingFractionManager()
-    {
-    }
-
-    public double getSamplingFraction(Subdetector d)
-    {
-        String name = d.getName();
-        Double result = cache.get(name);
-        if (result == null)
-        {
-            ConditionsSet set = ConditionsManager.defaultInstance().getConditions("SamplingFractions/" + name);
-            set.addConditionsListener(listener);
-            result = set.getDouble("samplingFraction");
-            cache.put(name, result);
-        }
-        return result;
-    }
-    private class Listener implements ConditionsListener
-    {
-        public void conditionsChanged(org.lcsim.conditions.ConditionsEvent event)
-        {
-            cache.clear();
-        }
-    }
-
-    public static SamplingFractionManager defaultInstance()
-    {
-        return theSamplingFractionManager;
-    }
-}
+      public SamplingFractionManager.SamplingFraction getData(ConditionsManager manager, String name)
+      {
+         ConditionsSet conditions = manager.getConditions(name);
+         return new SamplingFraction(conditions);
+      }
+   }
+}
\ No newline at end of file

lcsim/test/org/lcsim/util/event
SamplingFractionManager_Test.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- SamplingFractionManager_Test.java	8 Feb 2006 01:46:19 -0000	1.1
+++ SamplingFractionManager_Test.java	23 May 2006 17:30:32 -0000	1.2
@@ -43,15 +43,15 @@
     {
         ConditionsManager mgr = ConditionsManager.defaultInstance();        
         Detector detector = DetectorLocator.findDetector("sidmay05",0,mgr);
-        assert(detector != null);
+        assertNotNull(detector);
         SamplingFractionManager smgr = SamplingFractionManager.defaultInstance();
         
         for (Subdetector subdet : detector.getSubdetectors().values())
         {
             if (subdet.isCalorimeter())
             {
-                double sf = smgr.getSamplingFraction(subdet);
-                assert(fracMap.get(subdet.getName()) == sf);
+                double sf = smgr.getCorrectedEnergy(10,0,subdet);
+                assertEquals(fracMap.get(subdet.getName()),10/sf,1e-10);
             }
         }
     }

lcsim/src/org/lcsim/conditions
ConditionsSet.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- ConditionsSet.java	1 Feb 2005 19:42:40 -0000	1.1
+++ ConditionsSet.java	23 May 2006 17:30:32 -0000	1.2
@@ -16,9 +16,14 @@
    
    String getString(String key) throws IllegalArgumentException;
    String getString(String key, String defValue);   
+   
+   boolean getBoolean(String key) throws IllegalArgumentException;
+   boolean getBoolean(String key, boolean defValue);
       
    int size();
    Set keySet();
    boolean containsKey(String key);
    Class getType(String key);
+
+
 }

lcsim/src/org/lcsim/conditions
ConditionsSetImplementation.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- ConditionsSetImplementation.java	1 Feb 2005 19:42:40 -0000	1.1
+++ ConditionsSetImplementation.java	23 May 2006 17:30:32 -0000	1.2
@@ -2,7 +2,6 @@
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.net.URL;
 import java.util.Properties;
 import java.util.Set;
 
@@ -27,15 +26,12 @@
          in.close();
       }
    }
-   void update(URL base)
-   {
-      
-   }
+
    public int getInt(String name)
    {
       String value = props.getProperty(name);
       if (value == null) throw new IllegalArgumentException("Missing value for "+name);
-      return parseInt(value,name);      
+      return parseInt(value,name);
    }
    public int getInt(String name, int defaultValue)
    {
@@ -88,6 +84,27 @@
       return props.getProperty(name,defValue);
    }
    
+   public boolean getBoolean(String name) throws IllegalArgumentException
+   {
+      String value = props.getProperty(name);
+      if (value == null)  throw new IllegalArgumentException("Missing value for "+name);
+      return parseBoolean(value,name);
+   }
+   
+   public boolean getBoolean(String name, boolean defaultValue)
+   {
+      String value = props.getProperty(name);
+      if (value == null) return defaultValue;
+      return parseBoolean(value,name);
+   }
+   
+   private boolean parseBoolean(String value, String name)
+   {
+      if ("true".equalsIgnoreCase(name) || "yes".equalsIgnoreCase(name)) return true;
+      if ("false".equalsIgnoreCase(name) || "no".equalsIgnoreCase(name)) return false;
+      throw new RuntimeException("Error reading condiditions: Illegal value "+value+" for "+name);
+   }
+   
    public Set keySet()
    {
       return props.keySet();
CVSspam 0.2.8