Print

Print


Commit in GeomConverter/src/org/lcsim/geometry/util on MAIN
SamplingFractionManager.java+116added 1.1
modified copy of this from lcsim for sampling fraction access in GeomConverter (pandora output)

GeomConverter/src/org/lcsim/geometry/util
SamplingFractionManager.java added at 1.1
diff -N SamplingFractionManager.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ SamplingFractionManager.java	3 Feb 2010 21:00:54 -0000	1.1
@@ -0,0 +1,116 @@
+package org.lcsim.geometry.util;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.lcsim.conditions.ConditionsManager;
+import org.lcsim.conditions.ConditionsSet;
+import org.lcsim.conditions.ConditionsConverter;
+import org.lcsim.geometry.Subdetector;
+
+/**
+ *
+ * This is copied from the lcsim class so it is accessible from GeomConverter.
+ *
+ * @author tonyj
+ * @author jeremym
+ */
+public class 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;
+   }
+   
+   public double getCorrectedEnergy(double rawEnergy, int layer, Subdetector detector)
+   {
+      SamplingFraction sf = manager.getCachedConditions(SamplingFraction.class,"SamplingFractions/" + detector.getName()).getCachedData();
+      return sf.getCorrectedEnergy(rawEnergy,layer);
+   }
+
+   public double getSamplingFraction(Subdetector detector, int layern)
+   {
+      SamplingFraction sf = manager.getCachedConditions(SamplingFraction.class,"SamplingFractions/" + detector.getName()).getCachedData();
+      return sf.getLayerSamplingFraction(layern);
+   }
+
+   private static class SamplingFraction
+   {
+      private final double defaultSamplingFraction;
+      private final boolean digital;
+      private final Map<Integer,Double> layerMap = new HashMap<Integer,Double>();
+      
+      private SamplingFraction(ConditionsSet set)
+      {
+         defaultSamplingFraction = set.getDouble("samplingFraction");
+         digital = set.getBoolean("digital",false);
+         Pattern pattern = Pattern.compile("samplingFraction\\[((\\d+(-\\d+)?)(,\\d+(-\\d+)?)*)\\]");
+         Pattern p2 = Pattern.compile(",?(\\d+)(-(\\d+))?");
+         
+         for (Object o : set.keySet())
+         {
+            String key = o.toString();
+
+            // Get rid of embedded whitespace, and match
+            Matcher matcher = pattern.matcher(key.replaceAll("\\s",""));
+            if (matcher.matches())
+            {
+               double s = set.getDouble(key);
+               String layers = matcher.group(1);
+               Matcher m2 = p2.matcher(layers);
+               while (m2.find())
+               {
+                  int start = Integer.parseInt(m2.group(1));
+                  int end = m2.group(3) == null ? -1 : Integer.parseInt(m2.group(3));
+                  if (end > start)
+                  {
+                     for (int i=start; i<=end; i++)
+                     {
+                        layerMap.put(i,s);
+                     }
+                  }
+                  else
+                  {
+                     layerMap.put(start,s);
+                  }
+               }
+            }
+         }
+      }
+      double getCorrectedEnergy(double rawEnergy, int layer)
+      {
+         Double layerSF = layerMap.get(layer);
+         double samplingFraction = layerSF == null ? defaultSamplingFraction : layerSF;
+         return (digital ? 1 : rawEnergy)/samplingFraction;
+      }
+
+      public double getLayerSamplingFraction(int layern)
+      {
+         Double layerSF = layerMap.get(layern);
+         return layerSF == null ? defaultSamplingFraction : layerSF;
+      } 
+   }
+   private static class SamplingFractionConverter implements ConditionsConverter<SamplingFraction>
+   {
+      public Class<SamplingFractionManager.SamplingFraction> getType()
+      {
+         return SamplingFraction.class;
+      }
+
+      public SamplingFractionManager.SamplingFraction getData(ConditionsManager manager, String name)
+      {
+         ConditionsSet conditions = manager.getConditions(name);
+         return new SamplingFraction(conditions);
+      }
+   }
+}
CVSspam 0.2.8