6 modified files
lcsim/src/org/lcsim/util/event
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
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
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
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
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
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